<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>ittop</title>
    <link>https://ittop.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Thu, 14 May 2026 13:57:00 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>ittop</managingEditor>
    <item>
      <title>각도 ui 부트스트랩 모달에서 클릭했을 때 배경 클릭 이벤트를 잡는 방법?</title>
      <link>https://ittop.tistory.com/1302</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;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 어플리케이션에서, 그것은 다음을 사용하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$modal.open()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 페이지를 템플릿으로 사용하는 modal 팝업을 여는 함수입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;버튼을 클릭하는 동안 modal 팝업이 정상적으로 표시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Cancel 버튼을 클릭하면 이 기능이 호출되고 정상적으로 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    $scope.cancel=function(){
    });
&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;    $scope.dismiss=function(){
    });
&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;AngularJS의 기사를 많이 보았지만 이에 대한 해결책을 찾지 못했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;$modal.open()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;약속과 함께 개체를 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래도 약속을 이용해서 사슬로 묶어서 잡을 수 있어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;밖에 있는 배경을 클릭하면 다음과 같이 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dismiss&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;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ex:-&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var instance = $modal.open(...);

 instance.result.then(function(){
  //Get triggers when modal is closed
 }, function(){
  //gets triggers when modal is dismissed.
 });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 아이에게 이것은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$modalInstance&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주사를 맞았으니 거기서도 그렇게 할 수 있을 겁니다&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 기본적으로 그들을 상대하기 보다는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;event&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;pre&gt;&lt;code&gt;backdrop: 'static'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 선택할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var modalInstance = $modal.open({
    templateUrl: 'myModalContent.html',
    controller: 'ModalInstanceCtrl',
    backdrop: 'static',
    ...
});
&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;a href=&quot;https://getbootstrap.com/docs/3.3/javascript/#modals-options&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;7-1&quot;&gt;부트스트랩 3.0 설명서&lt;/a&gt;는 다음을 설명합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;backdrop: 'static'&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;html 문서를 클릭한 후 modal을 닫습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모드 내부의 클릭을 잡고 전파를 중지합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;html&quot;).on(&quot;click&quot;,closemodal());

$(&quot;.modal&quot;).on(&quot;click&quot;,function(event){
   event.stopPropagation();
}
&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;Angular Mobile UI Demo(1.2)에서도 이와 같은 문제가 있었지만 데모 파일에서는 modal이 main JS에 선언되어 있지 않습니다.&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;대신 modal1.html에 변수를 두 개 더 추가하는 것이 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;modal-dialog&quot; ui-outer-click=&quot;Ui.turnOff('modal1')&quot; ui-outer-click-if=&quot;Ui.active('modal1')&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://mobileangularui.com/docs/ # outer클릭에 &lt;a href=&quot;http://mobileangularui.com/docs/#outer-click&quot; rel=&quot;nofollow&quot; papago-id=&quot;21-1&quot;&gt;대한&lt;/a&gt; 설명입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작동하려면 두 속성이 모두 필요합니다.&lt;/font&gt;&lt;/p&gt;&lt;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/25432149/how-to-catch-backdrop-click-event-when-clicked-out-of-angular-ui-bootstrap-modal&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>angularJS</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1302</guid>
      <comments>https://ittop.tistory.com/1302#entry1302comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:00:30 +0900</pubDate>
    </item>
    <item>
      <title>기본 MySQL 날짜 시간을 포맷할 수 없습니다.</title>
      <link>https://ittop.tistory.com/1301</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 MySQL 날짜 시간을 포맷할 수 없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 날짜는 데이터베이스에서 다음과 같이 나옵니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;2013-11-21 17:43:20&lt;/code&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;{{Objected.created | date:'shortDate'}}
&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;{{Objected.created | date:'YYYY'}}
&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;2013-11-21 17:43:20&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;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; MySQL의 기본 날짜 시간이 Angular의 데이터 필터에서 예상하는 것과 호환되지 않음을 알 수 있습니다.&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;li ng-repeat=&quot;result in data&quot;&amp;gt;{{ new Date(result.Job.created).toISOString() | date:'shortDate'}}&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 시도하는 방식으로는 Date 클래스를 인스턴스화할 수 없을 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류는 $parse: 구문 오류입니다.&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;@m59의 도움 덕분에 몇 가지 사소한 조정을 통해 해결할 수 있었습니다.&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;HTML:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;html ng-app=&quot;myApp&quot;&amp;gt;
...
{{Object.created | dateToISO | date:'shortDate'}}
&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;JS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var myApp = angular.module('myApp',[]);

myApp.filter('dateToISO', function() {
  return function(input) {
    input = new Date(input).toISOString();
    return input;
  };
});
&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;이 사용자 지정 필터는 기본 MySQL 날짜 시간을 날짜 필터가 예상하는 형식으로 변환하므로 하나씩 던지고 &quot;voila&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;날짜 문자열을 ISO 8601 형식과 같이 Angular에서 지원하는 것으로 변환해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 변환할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.Object.created = new Date($scope.Object.created).toISOString();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://jsbin.com/IfABOqoz/1/edit&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;/strong&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;strong papago-id=&quot;15-1&quot;&gt;&lt;a href=&quot;http://jsbin.com/IfABOqoz/2/edit&quot; papago-id=&quot;15-1-0&quot;&gt;라이브 데모는 여기서(클릭)&lt;/a&gt;&lt;/strong&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;pre&gt;&lt;code&gt;&amp;lt;div&amp;gt;{{Object.created | dateToISO | date:'shortDate'}}&amp;lt;/div&amp;gt;
&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;app.filter('dateToISO', function() {
  return function(input) {
    return new Date(input).toISOString();
  };
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;18&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;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;app.filter('badDateToISO', function() {
  return function(badTime) {
    var goodTime = badTime.replace(/(.+) (.+)/, &quot;$1T$2Z&quot;);
    return goodTime;
  };
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지정한 날짜 형식이 잘못되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;YYYY&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;yyyy&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 다른 예를 위해 &lt;a href=&quot;http://docs.angularjs.org/api/ng.filter%3adate&quot; rel=&quot;nofollow&quot; papago-id=&quot;5-1&quot;&gt;설명서&lt;/a&gt;를 봅니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 포맷하려는 날짜 문자열이 Angular가 가지고 있는 사양과 일치하지 않습니다.&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;날짜 개체, 밀리초(문자열 또는 숫자) 또는 다양한 ISO 8601 날짜 시간 문자열 형식(예: yyy-MM-ddTHH:mm:ss.SSZ 및 yyy-MM-ddTHH:mmZ, yyy-MM-dd 또는 yyyy와 같은 짧은 버전)으로 포맷할 날짜&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MMDDTHHmssZ).&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;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원본 문자열을 검색하는 곳에 상관없이 이 형식 중 하나로 저장/검색할 것을 권장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;올바른 형식을 사용하는 &lt;a href=&quot;http://jsfiddle.net/N33KG/&quot; rel=&quot;nofollow&quot; papago-id=&quot;26-1&quot;&gt;&lt;strong papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JSFiddle&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; 예제.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이것을 위해 다음과 같이 파이프를 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import { Pipe } from &quot;@angular/core&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;@Pipe({이름: 'DateToIso'}) 클래스 DateToIso { 내보내기&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;transform(value, args) {

var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9]) (?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/;

var parts=value.replace(regex,&quot;$1 $2 $3 $4 $5 $6&quot;).split(' ');

var converted = new Date(parts[0],parts[1]-1,parts[2],parts[3],parts[4],parts[5]);

let newValue = converted.toISOString();

return newValue;

}
&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;import { Pipe } from &quot;@angular/core&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@파이프({ 이름:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DateToIso' }) 클래스 DateToIso { 내보내기&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;transform(value, args) {

var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9]) (?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/;

var parts=value.replace(regex,&quot;$1 $2 $3 $4 $5 $6&quot;).split(' ');

var converted = new Date(parts[0],parts[1]-1,parts[2],parts[3],parts[4],parts[5]);

let newValue = converted.toISOString();

return newValue;

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;}&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿에 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{{ p.sessionTimeFinish | DateToIso  |  date: &quot;HH:mm&quot; }}
&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;각2 파이프&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'toIso'
})
export class ToIsoPipe implements PipeTransform {
  transform(value: string): unknown {
    return value.replace(' ', 'T');
  }
}

// INPUT : &quot;2020-08-20 09:00:20&quot;
// OUTPUT : &quot;2020-08-20T09:00:20&quot;
&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;pre&gt;&lt;code&gt;{{response.created | toIso | date:'MMM d, h:mm a'}}
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/20709910/unable-to-format-default-mysql-datetime&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>angularJS</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1301</guid>
      <comments>https://ittop.tistory.com/1301#entry1301comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:00:23 +0900</pubDate>
    </item>
    <item>
      <title>Oracle 사이클을 사용하여 각 ID에 대해 전체 경로 탐색</title>
      <link>https://ittop.tistory.com/1300</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle 사이클을 사용하여 각 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;ID, prev, current 및 next node(정렬되지 않음)로 구성된 입력 데이터가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 각 ID의 첫 페이지와 마지막 페이지 사이의 경로를 찾아야 하며, 이 경로는 모든 노드를 포함합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예: 내 입력 데이터가 다음과 같은 경우: 첫 번째 열은 ID, 두 번째 열은 prev_node, 세 번째 열은 현재 노드, 네 번째 열은 다음 노드입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Prev_node는 시작 값이 비어 있고 다음 노드는 마지막 값이 비어 있습니다.&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 papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;id prevcurrent next&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;abc 1&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 afef&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;abg&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;보트 1대&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 bcd&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 bg&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 bop&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1cda&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1cbg&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1일&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1페&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 eff&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;수수료 1개&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 f f f f f f f f f f ff&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 f f fa&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 fab&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1g hi&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;히지 1개&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1hji&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 i ji&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 아이크&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이킬&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 ji&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1킬로&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1l men&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1l na&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 mna&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ab 1개&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 op q&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1pqr&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1qrs&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫번째&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1stu&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1tv&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1uvw&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 v w x&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1wx&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 ab&lt;/font&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 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;1 a&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 b&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1c&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1d&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 a&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1e&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1층&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1e&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1층&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1층&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1층&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 a&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 b&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 b&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1g&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1시간&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1i&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1j&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1j&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1i&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1i&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1k&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1l&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1m&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1n&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1n&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 a&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 b&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1o&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1p&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1q&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1r&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1초&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1t&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1u&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1v&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1w&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1x&lt;/font&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;여기에 비슷한 데이터를 가진 ID가 많이 있을 것입니다. 하나의 ID(1)만 보여주었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 저는 실제로 200-500자 길이의 문자열이 될 알파벳을 사용했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 접근법을 거의 수정하지 않고 시도했는데 ID가 100개 이하의 행을 가지면 잘 작동하지만 더 많은 행(긴 문자열을 숫자로 변환한 후에도)에 대한 문자열 연결 오류가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;누구든지 그에 대한 강력한 절차 기반 접근 방식을 제안해 줄 수 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 번 시도해봤는데 아이디가 300줄 이상 안 되네요.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 코드에서 가끔 발생하는 오류는 &quot; 문자열 연결 결과가 너무 깁니다.&quot;입니다.&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;create or replace procedure pathing 
as 
  type varr is table of varchar(4000);
  visit varr;

  t number;
  --v varchar2(40);
  fp varchar2(1000);
  np varchar2(1000);

  type stype is  record(fp varchar2(1000),np varchar2(1000),t number);
  type sinput is table of stype;
  iarray sinput;

begin

  select id  
  bulk collect into visit 
  from table_source 
  group by id 
  order by count(1) desc;

  delete from table_final;
  commit;

  for k in visit.first .. visit.last loop

    delete from table_temp;
    commit;

    insert into table_temp
    select distinct prev_pg, page_id, next_pg, visit(k)  
    from table_source  
    where visit_id = visit(k) 
    order by prev_pg desc;

    commit;

    insert into table_final 
    WITH t_n AS ( 
      SELECT prev_pg, page_id, next_pg, rownum n FROM table_temp
    ),
    t_br AS (
      SELECT 
        prev_pg,
        page_id,
        '&amp;lt;' || listagg(n, '|&amp;lt;') within GROUP(ORDER BY n) || '|' br,
        COUNT(0) cnt
    FROM 
      t_n
    GROUP BY 
      prev_pg, page_id
    ),
    t_mp AS (
      SELECT 
        '|' || listagg(list) within GROUP(ORDER BY NULL) list
      FROM ( 
        SELECT REPLACE(br, '&amp;lt;') list FROM t_br WHERE cnt &amp;gt; 1
      )
    ),
    t_path(step, page_id, next_pg, used) AS ( 
        SELECT 1, page_id, next_pg, '' 
        FROM t_n 
        WHERE prev_pg is null
      UNION ALL
        SELECT 
         step + 1,
         t_br.page_id,
         t_n.next_pg,
         CASE
           WHEN instr(list, '|' || n || '|') = 0
            THEN used
            ELSE used || n || '|'
          END
       FROM 
         t_mp,
         t_path
         JOIN t_br
           ON next_pg = t_br.page_id AND t_path.page_id = prev_pg
         JOIN t_n
           ON n = regexp_substr(br, '^(&amp;lt;(' || used || '0)\|)*(&amp;lt;(\d+))?', 1, 1, '', 4)
    ) cycle step
    SET is_cycle TO 'Y' DEFAULT 'N'
    SELECT 
      page_id,
      next_pg,
      step,
      visit(k)  
    FROM t_path 
    ORDER BY 1;

    commit;

  end loop;
end;
&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;제 예에 대해 자세히 설명합니다. - ID 1을 예로 든 경우와 같이 각 ID의 전체 경로를 이동하고자 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ID 1의 경우 현재, 이전, 다음 값 세트가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 우리는 이 값들을 이용하여 경로를 찾아야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 ID 1의 경우 prev 열이 비어 있으므로 경로가 'a'로 시작합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 a의 다음 값이 bi인 것을 볼 수 있습니다. 즉 전류는 a이고 다음 값은 b이므로 id 1의 모든 행에서 a의 이전 값과 b의 전류 값을 검색합니다. 같은 점에서 행의 다음 값을 취하고 이 과정을 반복합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 여기서 prev a, current band next는 c이므로 다음 null과 마주칠 때까지 전체 경로를 다시 검색합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;계층적 쿼리 절을 통한 솔루션은 까다로워 보이지만, 대안으로 기존 PL/SQL 코드를 사용하되 &quot; 문자열 연결 결과가 너무 깁니다&quot;를 방지하기 위해 VARCHAR 필드를 CLOB로 변경해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 당신의 목표를 달성하기위해 당신의 절차에서 다음의 쿼리를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select id,current into v_your_output_collection   from nodes 
where id = :vId
start with prev_node is null 
connect by 
NOCYCLE
prior next_node= current and  prior current = prev_node
&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;Oracle 10g 이상에서 작동하는&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/19535554/full-path-traversed-for-each-id-with-cycle-oracle&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Oracle</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1300</guid>
      <comments>https://ittop.tistory.com/1300#entry1300comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:00:15 +0900</pubDate>
    </item>
    <item>
      <title>CMake에서 C99 강제 적용('for' loop 초기 선언 사용</title>
      <link>https://ittop.tistory.com/1299</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CMake에서 C99 강제 적용('for' loop 초기 선언 사용&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;저는 다음을 피하기 위해 Cmake가 컴파일러의 C99 기능을 사용하도록 강제하는 휴대용 방법을 검색해 왔습니다.&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;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;error: ‘for’ loop initial declarations are only allowed in C99 mode
for (int s = 1; s &amp;lt;= in_para-&amp;gt;StepNumber; s++){
^
&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;set(CMAKE_C_FLAGS &quot;-std=c99&quot;) # that would be bad
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 이 게시물을 찾았습니다. &lt;a href=&quot;http://cmake.3232098.n2.nabble.com/Enabling-C99-in-CMake-td6505762.html&quot; papago-id=&quot;4-1&quot; rel=&quot;noreferrer&quot;&gt;CMake에서 C99&lt;/a&gt; 활성화 및 &lt;a href=&quot;http://cmake.3232098.n2.nabble.com/Enabling-C99-in-CMake-td6505762.html&quot; papago-id=&quot;4-1&quot; rel=&quot;noreferrer&quot;&gt;관련&lt;/a&gt; 기능 요청: &lt;a href=&quot;http://www.cmake.org/Bug/view.php?id=12300&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-3&quot;&gt;0012300: CMake는 C99를 요청할 크로스 플랫폼 방법이 없습니다&lt;/a&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 Mantis 버그에 대해 알게 되었고 그 후 SOF에 대한 답을 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/20165519/1254880&quot; papago-id=&quot;4-7&quot;&gt;CMake에서 C++11을 활성화하는 방법?&lt;/a&gt; 그리고 &lt;a href=&quot;https://stackoverflow.com/a/20165220/1254880&quot; papago-id=&quot;4-9&quot;&gt;CMake로 컴파일러의 C++11 지원을 탐지하는 방법&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저의 질문은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;target_compiler_features&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;C++ 기능뿐만 아니라 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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금까지 이를 달성할 수 있는 가장 휴대하기 쉬운 방법은 무엇입니까? - 저는 현재 CMake 2.8.12.2를 사용하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;target_compiler_features&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;CMake의 최신 릴리스 버전(3.0.0)에는 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;라이브러리 또는 실행 파일과 같은 대상을 만든 후 CMakeLists에 이와 같은 줄을 놓습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;txt 파일:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;set_property(TARGET tgt PROPERTY C_STANDARD 99)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어디에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tgt&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;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 C Make 3.1에 추가된 것으로 생각되며, 설명서는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.cmake.org/cmake/help/latest/prop_tgt/C_STANDARD.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.cmake.org/cmake/help/latest/prop_tgt/C_STANDARD.html&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;3.1 이전 버전의 CMake를 지원해야 하는 경우 다음 매크로를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;macro(use_c99)
  if (CMAKE_VERSION VERSION_LESS &quot;3.1&quot;)
    if (CMAKE_C_COMPILER_ID STREQUAL &quot;GNU&quot;)
      set (CMAKE_C_FLAGS &quot;-std=gnu99 ${CMAKE_C_FLAGS}&quot;)
    endif ()
  else ()
    set (CMAKE_C_STANDARD 99)
  endif ()
endmacro(use_c99)
&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;use_c99()&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;C99 코드가 포함된 대상을 정의하는 CMakeLists 파일의 맨 위에 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C make issue #15943 macOS 대상 clang 사용자 대상&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 CMake와 Clang을 사용하여 MacOS를 목표로 한다면, 그것을 야기할 수 있는 &lt;a href=&quot;https://gitlab.kitware.com/cmake/cmake/issues/15943&quot; papago-id=&quot;17-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;버그&lt;/a&gt;가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CMAKE_C_STANDARD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단순히 작동하지 않는 기능(컴파일러 플래그를 추가하지 않음).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 중 하나를 수행해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Cmake 3.0 이상이 필요한 경우 &lt;a href=&quot;https://cmake.org/cmake/help/latest/command/cmake_minimum_required.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;19-1&quot;&gt;Cmake_minimum_required&lt;/a&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;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;정책 CMP0025를 NEW로 설정하고 다음 코드를 CMakeList 상단에 표시합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;txt 파일 앞에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;project&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;  # Fix behavior of CMAKE_C_STANDARD when targeting macOS.
  if (POLICY CMP0025)
    cmake_policy(SET CMP0025 NEW)
  endif ()
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문이 계속해서 관심을 받고 있기 때문에 오늘 제가 생각하는 최선의 선택은 무엇인지 정리해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;다음 명령은 C99를 다음에 대한 최소 요구 사항으로 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;target&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;pre&gt;&lt;code&gt;target_compile_features(target PUBLIC c_std_99)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 방법이 바람직한 방법이라고 생각합니다. 이 방법은 목표마다 적용되며, 목표를 통해 가시성을 제어할 수 있는 방법이기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PUBLIC&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;INTERFACE&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;PRIVATE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;keywords - &lt;a href=&quot;https://cmake.org/cmake/help/latest/command/target_compile_features.html&quot; papago-id=&quot;28-1&quot; rel=&quot;noreferrer&quot;&gt;참조&lt;/a&gt; 참조.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;비록&lt;/font&gt;&lt;/font&gt;&lt;code&gt;target_compile_features&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령어는 3.1 버전에 도입되었고,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;c_std_99&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최소한 &lt;a href=&quot;https://cmake.org/cmake/help/v3.8/prop_gbl/CMAKE_C_KNOWN_FEATURES.html&quot; papago-id=&quot;30-1&quot; rel=&quot;noreferrer&quot;&gt;CMake 3.8&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;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위와 유사하게, C99를 표준으로 설정하는 또 다른 방법.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;target&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;set_property(TARGET target PROPERTY C_STANDARD 99)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 C make 3.1부터 사용 가능합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;표준을 적용하지 않는다는 단점이 있을 수 있습니다(&lt;a href=&quot;https://cmake.org/cmake/help/latest/prop_tgt/C_STANDARD.html&quot; papago-id=&quot;33-1&quot; rel=&quot;noreferrer&quot;&gt;참조&lt;/a&gt; 참조).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 이유로 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C_STANDARD_REQUIRED&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;set_property(TARGET target PROPERTY C_STANDARD_REQUIRED ON)
&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;따라서 모든 대상에 대해 C99를 기본값으로 설정할 수 있는 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED TRUE)
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고 사항으로, 확장은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;target_compile_features&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;접근법, 만약 당신이 관심을 가지는 것이 특정한 특징이라면 어떤 특정한 언어 표준을 요구할 필요가 없을지도 모릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같이 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;target_compile_features(target PUBLIC c_variadic_macros)
&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;CMake는 다양한 매크로의 사용 가능성을 강제하는 적절한 플래그를 선택하는 데 주의를 기울일 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 현재 C 언어에 사용할 수 있는 이러한 기능은 몇 가지뿐입니다. 전체 목록은 &lt;a href=&quot;https://cmake.org/cmake/help/latest/prop_gbl/CMAKE_C_KNOWN_FEATURES.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;39-1&quot;&gt;CMAKE_C_KNOWN_FEATURES&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;liveevent에서 CMakeLists.txt에서 다음을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;set (CMAKE_C_FLAGS &quot;-std=gnu99 ${CMAKE_C_FLAGS}&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CMakeList 편집&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;온라인에서 추가하기 &amp;gt; 2&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;set (CMAKE_C_STANDARD 99)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고나서&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cmake 3 ..
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://cmake.org/cmake/help/latest/prop_tgt/C_STANDARD.html&quot; papago-id=&quot;44-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;C_STANDARD 속성&lt;/a&gt;을 사용하면 전역이 아닌 특정 대상에 C 표준을 적용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 C99를 적용할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mytarget&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;set_property(TARGET mytarget PROPERTY C_STANDARD 99)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C make 3.0.2부터는 add_compile_options(https://cmake.org/cmake/help/latest/command/add_compile_options.html#command:add_compile_options), 에서 C standart를 설정할 수 있는 가장 휴대성이 좋은 방법 중 하나입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대상을 선언하기 전에 이 명령을 사용해야 합니다(add_library 또는 add_executable 포함).&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;아래는 C standart를 C99로 설정한 CMake 스크립트 예제입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_compile_options(-std=c99)
add_executable(my_exe ${SOURCES})
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 CMakeLists에 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;txt파일과 runcmake를 다시 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;set(CMAKE_C_FLAGS &quot;std=c99&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/24840030/forcing-c99-in-cmake-to-use-for-loop-initial-declaration&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1299</guid>
      <comments>https://ittop.tistory.com/1299#entry1299comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:00:07 +0900</pubDate>
    </item>
    <item>
      <title>크롬과 파이어폭스의 클립보드 자바스크립트 기능에 비밀복사?</title>
      <link>https://ittop.tistory.com/1298</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;크롬과 파이어폭스의 클립보드 자바스크립트 기능에 비밀복사?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong papago-id=&quot;1&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;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developers.google.com/web/updates/2015/04/cut-and-copy-commands?hl=en&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-1&quot;&gt;브라우저가 JS에서 기본적으로 복사를 지원하기 시작&lt;/a&gt;한 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mac 상의 Chrome과 Firefox의 콘솔 창에서 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;copy(&quot;party in your clipboard!&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트가 클립보드에 복사됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SO와 Google을 검색해 보았는데 아무것도 찾을 수 없는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것들이 각각의 브라우저에 특화되어 있습니까?&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 자바스크립트 기능에 대한 자세한 정보는 어디서 찾을 수 있습니까?&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저 버전:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/KIiX5.png&quot; alt=&quot;alt text&quot;&gt; &lt;img src=&quot;https://i.stack.imgur.com/dAsN7.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'copy'를 실행할 때 Chrome 콘솔에서 JavaScript가 반환됨&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function (object)
    {
        if (injectedScript._type(object) === &quot;node&quot;) {
            var nodeId = InjectedScriptHost.pushNodePathToFrontend(object, false, false);
            InjectedScriptHost.copyNode(nodeId);
        } else
            InjectedScriptHost.copyText(object);
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&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;/ul&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 크롬 콘솔에서 모든 크롬 확장 기능이 비활성화된 상태에서 복사 기능을 실행하는 스크린샷 2개입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/U3TBe.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/7ccYY.png&quot; alt=&quot;alt text&quot;&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;window.copy&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;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;clear()&lt;/code&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;profile()&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Chrome 콘솔에서 이 기능들을 실행하면 웹킷 콘솔에서 이 기능들의 출처가 드러납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; profile
function ()
{
return console.profile.apply(console, arguments)
}

&amp;gt; clear
function ()
{
InjectedScriptHost.clearConsoleMessages();
}

&amp;gt; copy
function (object)
{
if (injectedScript._type(object) === &quot;node&quot;)
object = object.outerHTML;
InjectedScriptHost.copyText(object);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://code.google.com/p/fbug/source/browse/branches/firebug1.7/content/firebug/commandLine.js?r=8810#1169&quot; rel=&quot;noreferrer&quot; papago-id=&quot;14-1&quot;&gt;파이어버그 소스&lt;/a&gt;는 기능 목록도 정의합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;this.clear = function()  // no web page interaction
{
    Firebug.Console.clear(context);
};

this.inspect = function(obj, panelName)  // no web page interaction
{
    Firebug.chrome.select(obj, panelName);
};

this.keys = function(o)
{
    return FBL.keys(o);  // the object is from the page, unwrapped
};

this.values = function(o)
{
    return FBL.values(o); // the object is from the page, unwrapped
};

// etc...
&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;여기서 Chrome Dev 도구의 참조 복사 명령을 확인할 수 있습니다. https://developers.google.com/web/tools/chrome-devtools/console/utilities#copy&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;실제 JS 크로스 브라우저에서는 이 명령을 사용해서는 안 됩니다(콘솔 So-to-Speak에서의 디버깅에만 해당).&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/4559180/secret-copy-to-clipboard-javascript-function-in-chrome-and-firefox&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>javascript</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1298</guid>
      <comments>https://ittop.tistory.com/1298#entry1298comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:00:00 +0900</pubDate>
    </item>
    <item>
      <title>&amp;lt;=&amp;gt;이 V8에서 이 코드 조각을 사용하는 것보다 느린 이유는 무엇입니까?</title>
      <link>https://ittop.tistory.com/1297</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&amp;lt;=&amp;gt;이 V8에서 이 코드 조각을 사용하는 것보다 느린 이유는 무엇입니까?&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://v8-io12.appspot.com/#16&quot; papago-id=&quot;1-1&quot; rel=&quot;noreferrer&quot;&gt;V8로 자바스크립트 속도 제한 깨기&lt;/a&gt; 슬라이드를 읽고 있는데 아래 코드와 같은 예시가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 그런지 알 수가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;=&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;&amp;lt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우, 누가 설명해 줄 수 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 의견이든 감사히 받겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;느림:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;this.isPrimeDivisible = function(candidate) {
    for (var i = 1; i &amp;lt;= this.prime_count; ++i) {
        if (candidate % this.primes[i] == 0) return true;
    }
    return false;
} 
&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;(힌트: primes는 길이 prime_count의 배열입니다)&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;this.isPrimeDivisible = function(candidate) {
    for (var i = 1; i &amp;lt; this.prime_count; ++i) {
        if (candidate % this.primes[i] == 0) return true;
    }
    return 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;strong papago-id=&quot;7-0&quot;&gt;[자세한&lt;/strong&gt; 내용&lt;strong papago-id=&quot;7-0&quot;&gt;]&lt;/strong&gt; 속도 향상 유의, 현지 환경 테스트에서 결과는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;V8 version 7.3.0 (candidate) 
&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; time d8 prime.js
 287107
 12.71 user 
 0.05 system 
 0:12.84 elapsed 
&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;time d8 prime.js
287107
1.82 user 
0.01 system 
0:01.84 elapsed
&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;이는 사실이지만, 25,000개의 요소로 확장되는 배열에서는 한 번의 반복이 약간의 차이만 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;야구장 추측대로, 우리가 성장하면서 평균 길이를 12,500이라고 가정한다면, 우리가 예상할 수 있는 차이는 약 1/12,500, 혹은 단지 0.008%일 것입니다.&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;this.primes&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 연속 배열이고(모든 원소는 값을 갖습니다) 원소는 모두 숫자입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트 엔진은 이러한 배열을 실수로 숫자를 포함하지만 다른 값을 포함하거나 값을 포함하지 않을 수 있는 객체의 배열 대신 실제 숫자의 단순한 배열로 최적화할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 형식은 접근 속도가 훨씬 빠릅니다. 코드가 덜 들고, 배열도 훨씬 작아서 캐시에 더 잘 들어맞습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 이렇게 최적화된 포맷이 사용되지 않을 수 있는 몇 가지 조건이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 가지 조건은 배열 요소 중 일부가 누락된 경우입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let array = [];
a[0] = 10;
a[2] = 20;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 그 가치는 무엇입니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a[1]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;? &lt;em papago-id=&quot;16-1&quot;&gt;가치가 없습니다&lt;/em&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(가치가 있다고 말하는 것도 옳지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&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;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값이 완전히 누락된 배열 요소와 다릅니다.)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 숫자로만 표현할 수 있는 방법이 없기 때문에 자바스크립트 엔진은 덜 최적화된 포맷을 사용할 수 밖에 없습니다. 만약&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a[1]&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;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어레이가 최적화되지 않은 형식으로 강제로 전환되는 또 다른 이유는 프레젠테이션에서 설명한 것처럼 어레이의 경계를 벗어난 요소에 액세스하려고 하는 경우일 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫번째 루프는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;=&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열의 끝을 지나는 요소를 읽으려고 시도합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막 추가 반복에서는 다음과 같이 알고리즘이 여전히 올바르게 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;this.primes[i]&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;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜냐면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i&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;/li&gt; 
 &lt;li&gt;&lt;code&gt;candidate % undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(어떠한 가치라도)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;candidate&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;NaN&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;/li&gt; 
 &lt;li&gt;&lt;code&gt;NaN == 0&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;false&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;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;return true&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;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 추가적인 반복이 전혀 일어나지 않은 것과 같습니다. 나머지 논리에는 아무런 영향을 미치지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드는 추가적인 반복을 하지 않는 것과 같은 결과를 가져옵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 거기에 도달하기 위해 배열의 끝을 지나 존재하지 않는 요소를 읽으려고 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이로 인해 배열이 최적화되지 않았거나 최소한 이 대화가 진행될 당시에는 그렇게 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두번째 루프는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;&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;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 문제는 강연의 &lt;a href=&quot;https://v8-io12.appspot.com/#90&quot; rel=&quot;noreferrer&quot; papago-id=&quot;38-1&quot;&gt;90-91쪽&lt;/a&gt;에 설명되어 있고, 그 전과 후의 페이지에 관련된 논의가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우연히 이 Google I/O 프레젠테이션에 참석하여 연사(V8 저자 중 한 명)와 대화를 나누었습니다.&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;39-1&quot;&gt;지나서도&lt;/em&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;V8 작성자가 말한 내용이 여전히 사실일 경우 어레이의 끝을 기준으로 판독하면 최적화되지 않고 더 느린 형식으로 되돌아가야 합니다.&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;이제 V8이 이 경우를 효율적으로 처리할 수 있도록 개선되었거나 다른 자바스크립트 엔진이 이 경우를 다르게 처리할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그것에 대해 이러쿵저러쿵 알 수는 없지만, 이 최적화 해제가 바로 그 발표에 대해 말하고 있었던 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 구글에서 V8을 작업하고 있으며, 기존의 답변과 코멘트 외에 추가적인 통찰력을 제공하고 싶었습니다.&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;a href=&quot;https://v8-io12.appspot.com/#16&quot; rel=&quot;noreferrer&quot; papago-id=&quot;43-1&quot;&gt;슬라이드&lt;/a&gt;의 전체 코드 예시는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var iterations = 25000;

function Primes() {
  this.prime_count = 0;
  this.primes = new Array(iterations);
  this.getPrimeCount = function() { return this.prime_count; }
  this.getPrime = function(i) { return this.primes[i]; }
  this.addPrime = function(i) {
    this.primes[this.prime_count++] = i;
  }
  this.isPrimeDivisible = function(candidate) {
    for (var i = 1; i &amp;lt;= this.prime_count; ++i) {
      if ((candidate % this.primes[i]) == 0) return true;
    }
    return false;
  }
};

function main() {
  var p = new Primes();
  var c = 1;
  while (p.getPrimeCount() &amp;lt; iterations) {
    if (!p.isPrimeDivisible(c)) {
      p.addPrime(c);
    }
    c++;
  }
  console.log(p.getPrime(p.getPrimeCount() - 1));
}

main();
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우선, 성능 차이는 회사와 관계가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;&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;&amp;lt;=&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;직접적인 연산자.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러니 제발 피하려고 후프를 통과하지 말아주세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;=&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 스택 오버플로에서 속도가 느리다고 읽었기 때문에 당신의 코드에서 --- 그렇지 않습니다!&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&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;둘째, 사람들은 배열이 &quot;신성한 것&quot;이라고 지적했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OP의 게시물의 코드 조각에서는 명확하지 않았지만, 초기화하는 코드를 보면 명확합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this.primes&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;this.primes = new Array(iterations);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 배열이 완전히 채워지거나 포장되거나 연속적으로 끝나더라도 V8에서 &lt;a href=&quot;https://v8.dev/blog/elements-kinds&quot; rel=&quot;noreferrer&quot; papago-id=&quot;30-1&quot;&gt;요소 종류&lt;/a&gt;가 있는 배열이 생성됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 홀리 어레이의 작업은 패킹된 어레이의 작업보다 느리지만, 이 경우 차이는 무시할 수 있습니다. 이는 히트할 때마다 1개의 Smi(&lt;em papago-id=&quot;30-3&quot;&gt;작은 정수&lt;/em&gt;) 검사(구멍으로부터 보호)에 해당합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this.primes[i]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안의 고리에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;isPrimeDivisible&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 일 아닙니다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;걱정 말아요!&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TL;DR &lt;strong papago-id=&quot;53-1&quot;&gt;어레이는 여기서 문제가 아닙니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사람들은 코드가 범위를 벗어난다고 지적했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 &lt;a href=&quot;https://v8.dev/blog/elements-kinds#avoid-reading-beyond-the-length-of-the-array&quot; rel=&quot;noreferrer&quot; papago-id=&quot;54-1&quot;&gt;어레이 길이 이상의 판독은 피하는&lt;/a&gt; 것이 좋으며, 이 경우 성능 저하를 크게 피할 수 있었을 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;근데 왜요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://twitter.com/bmeurer/status/926357262318305280&quot; rel=&quot;noreferrer&quot; papago-id=&quot;54-3&quot;&gt;V8은 이러한 아웃오브바운드 시나리오 중 일부를 약간의 성능 영향만으로 처리할 수 있습니다.&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 이 특별한 사건은 뭐가 특별한 겁니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;this.primes[i]&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;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 라인에서:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if ((candidate % this.primes[i]) == 0) return true;
&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;em papago-id=&quot;36-1&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;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;연산자를 integer가 아닌 피연산자와 함께 사용하고 있습니다!&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;code&gt;integer % someOtherInteger&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매우 효율적으로 계산할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;code&gt;integer % undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반면에 효율성이 떨어지는 것에 해당합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Float64Mod&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;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더블로 표현됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드 스니펫은 실제로 다음을 변경함으로써 개선될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;=&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;&amp;lt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 라인에서:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for (var i = 1; i &amp;lt;= this.prime_count; ++i) {
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;...왜냐하면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;=&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;&amp;lt;&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;, 하지만 이것이 이 특별한 경우에 bounds 밖의 판독을 피할 수 있다는 이유만으로 말입니다.&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;strong papago-id=&quot;70-0&quot;&gt;TL;DR&lt;/strong&gt; 느린 루프는 배열 'out-of-bounds'에 액세스하기 때문이며, 이는 엔진이 더 적은 또는 더 적은 최적화로 함수를 다시 컴파일하거나 이러한 최적화 중 어떤 것으로도 함수를 컴파일하지 않도록 강제합니다((JIT-Compiler가 첫 번째 컴파일 'version' 이전에 이 상태를 감지/의심한 경우).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 이유를 아래에서 읽습니다.&lt;/font&gt;&lt;/p&gt;
&lt;hr&gt; Someone just 
&lt;em papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가지다&lt;/font&gt;&lt;/em&gt; to say this (utterly amazed nobody already did):
&lt;br&gt; There used to be a time when the OP's snippet would be a de-facto example in a beginners programming book intended to outline/emphasize that 'arrays' in javascript are indexed starting at 0, not 1, and as such be used as an example of a common 'beginners mistake' (don't you love how I avoided the phrase 'programing error' 
&lt;code&gt;;)&lt;/code&gt;): 
&lt;strong papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Out-of-Bounds Array 액세스&lt;/font&gt;&lt;/strong&gt;. 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;  1:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splited&quot;&gt; a &lt;/font&gt;&lt;code&gt;Dense Array&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(인덱스 간 간격이 없음을 의미하며 각 인덱스에서 실제로 요소가 있음) 0 기반 인덱싱을 사용하는 5개 요소(항상 ES262에 있음).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var arr_five_char=['a', 'b', 'c', 'd', 'e']; // arr_five_char.length === 5
//  indexes are:    0 ,  1 ,  2 ,  3 ,  4    // there is NO index number 5
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 우리는 실제로 두 제품 간의 성능 차이에 대해 이야기하고 있지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;=&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(또는 '하나의 추가 반복'), 하지만 우리는 다음과 같이 말하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong&gt;&lt;em papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 )'보다는 무엇입니까&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;올바른 스니펫(b)이 잘못된 스니펫(a)보다 빨리 실행되는 이유'&lt;/font&gt;&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;79-0&quot;&gt;정답은 2가지&lt;/strong&gt;입니다(ES262 언어 구현자의 관점에서는 둘 다 최적화의 형태입니다만).&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Data-Representation: Array를 메모리에 내부적으로 표현/저장하는 방법 (객체, 해시맵, '실제' 숫자 배열 등)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;81&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;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;항목 1은 &lt;a href=&quot;https://stackoverflow.com/a/53644250/588079&quot; papago-id=&quot;82-1&quot;&gt;승인된 답변&lt;/a&gt;에 의해 충분히(그리고 정확하게 IMHO) 설명되지만, &lt;strong papago-id=&quot;82-3&quot;&gt;항목&lt;/strong&gt; 2:&lt;strong papago-id=&quot;82-3&quot;&gt; 컴파일&lt;/strong&gt;에 2개의 단어('코드')만 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 정확하게: JIT-Compilation 그리고 더 중요하게 JIT-RE-Compilation&lt;strong papago-id=&quot;83-1&quot;&gt;&lt;em papago-id=&quot;83-1-0&quot;&gt;&lt;/em&gt;&lt;/strong&gt;!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언어 사양은 기본적으로 일련의 알고리즘('정의된 최종 결과를 달성하기 위해 수행하는 단계')에 대한 설명일 뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;언어를 묘사하는 아주 아름다운 방법인 것으로 드러났습니다.&lt;/font&gt;&lt;font 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;85&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 자바스크립트 코드/라이브러리/사용량이 증가하고, '실제' 컴파일러가 얼마나 많은 리소스(시간/메모리/등)를 사용하는지 기억하면 웹 페이지를 방문하는 사용자들을 그렇게 오래 기다리게 할 수 없으며, 사용 가능한 리소스를 확보하도록 요구할 수도 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 간단한 기능을 상상해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function sum(arr){
  var r=0, i=0;
  for(;i&amp;lt;arr.length;) r+=arr[i++];
  return r;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;완벽하게 확실하죠?&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가적인 해명은 필요 없겠죠?&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반품유형은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Number&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,그렇죠?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;...음..&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 아니, 아니, 아니...&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;named function 매개변수에 전달하는 인수에 따라 달라집니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;arr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;...&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sum('abcde');   // String('0abcde')
sum([1,2,3]);   // Number(6)
sum([1,,3]);    // Number(NaN)
sum(['1',,3]);  // String('01undefined3')
sum([1,,'3']);  // String('NaN3')
sum([1,2,{valueOf:function(){return this.val}, val:6}]);  // Number(9)
var val=5; sum([1,2,{valueOf:function(){return val}}]);   // Number(8)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;91&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제가 보이나요?&lt;/font&gt;&lt;font 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;92&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 이와 같은 함수 코드가 실제로 다양한 유형의 입력 또는 심지어 변형된 입력에 실제로 사용되고 있다고 상상해 보십시오. 완전히 문자 그대로(소스 코드로) 기술되어 있고 동적으로 프로그램 내에서 생성된 '어레이'도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 만약 함수를 컴파일한다면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sum&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 번만, 모든 유형의 입력에 대해 항상 사양 정의 결과를 반환하는 유일한 방법은 분명히 모든 사양 규정 주 및 하위 단계를 수행해야만 사양 준수 결과(이름 없는 사전 y2k 브라우저와 같이)를 보장할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;95&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JIT-Compilation(JIT-Compilation, Just In Time과 같은 JIT)이 현재 인기 있는 솔루션입니다.&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 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;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수가 예기치 않은 입력을 받기 때문에 비규격 적합 결과를 반환하기 시작할 수 있는지 여부를 탐지하기 위해 가능한 한 간단한 검사를 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음, 이전에 컴파일된 결과를 버리고 좀 더 정교한 것으로 다시 컴파일하고, 이미 가지고 있는 부분적인 결과를 어떻게 할지 결정하고(신뢰할 수 있는지, 아니면 다시 계산해도 되는지), 함수를 다시 프로그램에 연결한 후 다시 시도합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;궁극적으로 사양에서와 같이 단계적 스크립트 해석으로 되돌아갑니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 모든 것은 시간이 걸립니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;99&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 브라우저는 엔진에서 작동하며, 각 하위 버전에 대해 상황이 개선되고 퇴보하는 것을 볼 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열은 역사의 어느 시점에서 정말 불변의 문자열이었습니다(따라서 배열).&lt;/font&gt;&lt;font 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;100&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단히 말해서, 자바스크립트의 언어 의미론이 종종 우리를 되찾았다고 해서(OP의 예에서 이 무음 버그처럼) 컴파일러가 빠른 기계 코드를 뱉어낼 가능성이 높아지는 것은 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리가 '보통' 올바른 명령어를 썼다고 가정합니다. 컴파일러를 돕고, 우리가 원하는 것을 설명하고, 일반적인 관용구를 선호합니다(브라우저가 최적화하려고 시도할 수 있는 것과 그 이유를 기본적으로 이해하기 위해 asm.js에서 힌트를 얻음).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 때문에 성능에 대해 이야기하는 것은 중요하면서도 &lt;em papago-id=&quot;101-1&quot;&gt;지뢰밭&lt;/em&gt;이기도 합니다.(이 때문에) 관련 자료를 지적(인용)하는 것으로 끝맺고 싶습니다.&lt;/font&gt;&lt;/p&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;존재하지 않는 개체 속성 및 Out of Bounds 배열 요소에 액세스하면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예외를 제기하는 대신 값을 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 동적 기능은 자바스크립트의 프로그래밍을 편리하게 해주지만, 자바스크립트를 효율적인 기계 코드로 컴파일하는 것을 어렵게 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;104&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;...&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;105&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;효과적인 JIT 최적화를 위한 중요한 전제는 프로그래머들이 체계적인 방식으로 자바스크립트의 동적 기능을 사용한다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, JIT 컴파일러는 객체 속성이 특정한 순서로 지정된 유형의 객체에 추가되는 경우가 많거나 Out of Bounds 배열 액세스가 거의 발생하지 않는다는 점을 악용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JIT 컴파일러는 이러한 규칙성 가정을 활용하여 런타임에 효율적인 기계 코드를 생성합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드 블록이 가정을 만족하는 경우, 자바스크립트 엔진은 효율적으로 생성된 기계 코드를 실행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 엔진이 더 느린 코드로 돌아가거나 프로그램을 해석해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;64&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; :&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&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; JIT에 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IT Prof: J&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IT에 비우호적인 자바스크립트 코드를 정확히 집어내는 것&quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;버클리 출판, 2014, 량공, 마이클 프라델, 쿠식 센.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;a href=&quot;http://software-lab.org/publications/jitprof_tr_aug3_2014.pdf&quot; rel=&quot;noreferrer&quot; papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;/font&gt; &lt;/p&gt; 
&lt;p papago-id=&quot;110&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASM.JS(Outbound Array 액세스도 좋아하지 않음):&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;111&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선행 컴파일&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;112&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;asm.js는 자바스크립트의 엄격한 부분집합이기 때문에 이 규격에서는 검증 로직만 정의하고 실행 시맨틱스는 단순히 자바스크립트의 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 검증된 asm.js는 AOT(Ahead-of-Time) 컴파일에 적용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;게다가, AOT 컴파일러에 의해 생성된 코드는 다음과 같은 특징을 가지고 꽤 효율적일 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li papago-id=&quot;113&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;114&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;115&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;116&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;117&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유효성 검사에 실패한 코드는 해석 및/또는 JIT(Just-in-time) 컴파일과 같은 전통적인 방법으로 실행해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;a href=&quot;http://asmjs.org/spec/latest/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;118&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://asmjs.org/spec/latest/&lt;/font&gt;&lt;/a&gt;&lt;/p&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;그리고 마지막으로 https://blogs.windows.com/msedgedev/2015/05/07/bringing-asm-js-to-chakra-microsoft-edge/ .&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;69&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경계 검사를 제거할 때 엔진의 내부 성능 개선에 대한 작은 하위 섹션이 있는 경우(루프 밖에서 경계 검사를 해제하는 것만으로도 이미 40%의 개선 효과가 있음).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; :&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 출처에서 다양한 수준의 JIT-Recompilation에 대해 해석까지 언급하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;123&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OP의 스니펫에 관한 위의 정보를 바탕으로 한 &lt;em papago-id=&quot;123-0&quot;&gt;이론적 예&lt;/em&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;124&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;통화 대상은 프라임 구분 가능&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;125&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일은 일반적인 가정을 사용하여 PrimeDivisable(PrimeDivisable)입니다(Out of Bounds 액세스 없음).&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;126&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;127&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;BAM, 갑자기 배열이 경계를 벗어납니다(오른쪽 끝).&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;128&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'크랩' 엔진은 'PrimeDivisible'을 다른(덜) 가정을 사용하여 재컴파일해 봅시다'라고 말합니다. 이 예제 엔진은 현재의 부분 결과를 재사용할 수 있는지 파악하지 못합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;129&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;130&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반품결과&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&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;73-1&quot;&gt;이 이론적 예&lt;/em&gt;에서 2배 이상의 시간이 소요됩니다!&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt; 
&lt;p&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;74&quot; papago-translate=&quot;translated&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;/strong&gt;&lt;em papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(disclaim: 아래의 사실에 근거한 추측)&lt;/font&gt;&lt;/font&gt;&lt;/em&gt;&lt;/font&gt;&lt;br&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;생각할수록, 이 답변이 실제로 잘못된 스니펫 a(또는 스니펫 b의 성과 보너스)에 대한 더 지배적인 이유를 설명해 줄 수도 있다고 생각합니다.&lt;/font&gt;&lt;/font&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;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;77&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게 생각하는 것은 꽤 유혹적입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this.primes&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;는 'dense 배열'의 순수한 수치이며, 둘 중 하나입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;138&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;source-code에서 하드 코딩된 리터럴(컴파일-time &lt;em papago-id=&quot;138-1&quot;&gt;전&lt;/em&gt;에 컴파일러에게 모든 것이 이미 알려져 있으므로 '실제' 배열이 될 우수한 후보로 알려져 있음) 또는&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;79&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사전 크기를 채우는 수치 함수를 사용하여 생성될 가능성이 높습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;new Array(/*size value*/)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;80&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 오름차순('진짜' 배열이 될 것으로 오랫동안 알려진 다른 후보).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;81&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 또한 알고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;primes&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;em papago-id=&quot;82-1&quot;&gt;캐시됩니다&lt;/em&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;prime_count&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;83&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)!&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; (의도와 고정된 크기를 indic합니다.)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;144&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 대부분의 엔진은 처음에는 필요할 때 복사-온-수정(copy-on-modify) 방식으로 어레이를 통과하므로 변경하지 않을 경우 훨씬 더 빠르게 처리할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;84&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 배열은 다음과 같이 가정하는 것이 타당합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;primes&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;85&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 내부적으로 최적화된 배열일 가능성이 크며, 생성 후에 배열을 수정하는 코드가 없으면 컴파일러가 알 수 있습니다. 따라서 이미(엔진에 적용 가능한 경우) 최적화된 방식으로 저장되어 있습니다. &lt;em papago-id=&quot;85-1&quot;&gt;마치&lt;/em&gt; 다음과 같이 말입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Typed Array&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;86&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;87&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 내게 분명히 말하려 했던 것처럼.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sum&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;88&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 예를 들어, 전달되는 인수는 실제로 발생해야 하는 것과 특정 코드가 기계 코드로 컴파일되는 방법에 큰 영향을 미칩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;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;89&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sum&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;90&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수는 문자열을 변경하는 것이 아니라 함수가 JIT-Compiled 되는 방식을 변경해야 합니다!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열 전달 대상&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sum&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;91&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기계 코드의 다른 버전을 컴파일해야 합니다. (아마도 이 유형에 대해 추가적인 경우도 있을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;92&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Type_Array를 변환하는 것은 약간 우둔한 것처럼 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;primes&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;93&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러가 이 함수가 수정되지 않을 것이라는 것을 알고 있는 동안 다른 것으로 즉시 배열합니다!&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;155&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 가정 하에서 두 가지 옵션을 남깁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;156&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경계를 벗어남이 없다고 가정하고 번호 크런치로 컴파일하고, 마지막에 경계를 벗어남 문제에 부딪혀 다시 컴파일하고 다시 작업합니다(위의 편집 1의 이론적 예에서 설명한 바와 같이).&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;157&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러가 이미 탐지(또는 의심?)했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Out of Bound 액세스를 맨 앞에 두고 함수는 JIT-Compiled(JIT-Compiled) 방식으로 전달된 인수가 희박한 개체로 인해 기능 머신 코드가 느려지는 것처럼 처리되었습니다(더 많은 검사/변환/강요 등).&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;158&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 이 둘 중에 어떤 것인지 정말 궁금해요!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;159&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 과학성을 더하기 위해 jsperf가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://jsperf.com/ints-values-in-out-of-array-bounds&quot; rel=&quot;noreferrer&quot; papago-id=&quot;160&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://jsperf.com/ints-values-in-out-of-array-bounds&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;161&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;int와 looping으로 채워진 배열의 제어 케이스를 한계 내에서 유지하면서 모듈러 산술을 수행하여 테스트합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 케이스는 5가지입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;162&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1. 루프 아웃오브바운즈&lt;/font&gt;&lt;/li&gt;
 &lt;li papago-id=&quot;163&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2. 홀리 배열&lt;/font&gt;&lt;/li&gt;
 &lt;li papago-id=&quot;164&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3. NaN에 대한 모듈러 산술&lt;/font&gt;&lt;/li&gt;
 &lt;li papago-id=&quot;165&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;4. 완전히 정의되지 않은 값&lt;/font&gt;&lt;/li&gt;
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;94&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;font 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;new Array()&lt;/code&gt; &lt;/li&gt;
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;95&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앞의 4가지 경우는 &lt;strong papago-id=&quot;95-1&quot;&gt;정말&lt;/strong&gt; 성능이 나쁘다는 것을 보여줍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;경계를 벗어나는 루프는 다른 3개보다 약간 낫지만, 4개 모두 최적의 경우보다 약 98% 느립니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;96&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;e&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;new Array()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;97&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;케이스는 원시 배열과 거의 비슷하지만 몇 퍼센트 정도 느려집니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;170&quot; papago-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/53643962/why-is-slower-than-using-this-code-snippet-in-v8&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>javascript</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1297</guid>
      <comments>https://ittop.tistory.com/1297#entry1297comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:59:51 +0900</pubDate>
    </item>
    <item>
      <title>오류 코드: 1822.외부 키 제약 조건을 추가하지 못했습니다.제약 조건에 대한 인덱스 누락</title>
      <link>https://ittop.tistory.com/1296</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 코드: 1822.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 키 제약 조건을 추가하지 못했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제약 조건에 대한 인덱스 누락&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류에 대한 스레드를 몇 개 찾았습니다.&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;저는 사용자 테이블 2개와 기사용 테이블 1개를 만들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 기사를 작성한 사용자와 마지막 수식어를 저장하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE TABLE IF NOT EXISTS `testDb`.`users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `nickname` VARCHAR(255) NULL,
  `first_name` VARCHAR(255) NULL,
  `last_name` VARCHAR(255) NULL,
  `e_mail` VARCHAR(255) NOT NULL,
  `activated` TINYINT(1) NOT NULL DEFAULT 0,
  `birth_date` DATE NULL,
  `locked` TINYINT(1) NOT NULL DEFAULT 0,
  `locked_date_time` DATETIME NULL,
  `street` VARCHAR(255) NULL,
  `street_number` VARCHAR(255) NULL,
  `city` VARCHAR(255) NULL,
  `postal_code` VARCHAR(255) NULL,
  `country` VARCHAR(255) NULL,
  `phone` VARCHAR(255) NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `user_id_UNIQUE` (`id` ASC)
)
ENGINE = InnoDB
AUTO_INCREMENT = 1;


CREATE TABLE IF NOT EXISTS `testDb`.`articles` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NULL,
  `description` VARCHAR(255) NULL,
  `create_user` INT ZEROFILL NOT NULL,
  `create_date_time` DATETIME NULL,
  `last_modifie_user` INT ZEROFILL NOT NULL,
  `last_modifie_date_time` DATETIME NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `article_id_UNIQUE` (`id` ASC),
  INDEX `fk_articles_users1_idx` (`create_user` ASC),
  INDEX `fk_articles_users2_idx` (`last_modifie_user` ASC)
)
ENGINE = InnoDB
AUTO_INCREMENT = 1;


ALTER TABLE `testDb`.`articles`
  ADD CONSTRAINT `fk_articles_users1`
    FOREIGN KEY (`create_user`)
    REFERENCES `testDb`.`users` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  ADD CONSTRAINT `fk_articles_users2`
    FOREIGN KEY (`last_modifie_user`)
    REFERENCES `testDb`.`users` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;
&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;오류 코드: 1822.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 키 제약 조건을 추가하지 못했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조된 테이블 'users'에 제약 조건 'fk_article_users1'에 대한 인덱스가 없습니다.&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;SHOW ENGINE innodb STATUS;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 이건 오류를 보여주지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;create_user INT UNSIGNED ZEROFILL&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조할 수 없음&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;id INT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 이들은 외국 키 참조의 목적을 위해 서로 다른 데이터 유형으로 간주되기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 데이터 유형으로 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/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;예를 들어, VARCHAR(10)은 VARCHAR(20)을 참조하거나 그 반대의 경우도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 유형, 크기 또는 문자 집합의 다른 차이는 참조 무결성과 호환되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 있음에도&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ZEROFILL&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 열에는 있지만 다른 열에는 데이터 유형이 호환되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 발견했고 데이터 유형이 정확해서 조금 당황했지만 모든 것을 똑같이 만들었을 뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 키를 작성할 때 사용 중인 열이 동일한지 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;15&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;16&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;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;Null 아님&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;미서명&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이진법&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 키를 사용하여 한 테이블의 한 열을 다른 테이블에 참조할 때 참조하는 열이 기본 키여야 하거나 고유해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 쓰시오&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALTER TABLE table_name1
ADD CONSTRAINT constraint_name
FOREIGN KEY(column_name_in_table_name1) 
REFERENCES table_name2(column_name_in_table_name2);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 정도면 충분합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표와 같이 &lt;strong papago-id=&quot;23-3&quot;&gt;열&lt;/strong&gt;을 반환하는 열을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;accounts&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;name&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; SHOW FULL COLUMNS FROM accounts;
+----------+--------------+-------------------+------+-----+---------+----------+
| Field    | Type         | Collation         | Null | Key | Default | Extra    |
+----------+--------------+-------------------+------+-----+---------+----------|
| id       | int(11)      | NULL              | NO   | PRI | NULL    | auto_inc |
| name     | varchar(255) | utf8_bin          | YES  |     | NULL    |          |
| email    | varchar(255) | latin1_swedish_ci | YES  |     | NULL    |          |
...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 열 모두 동일한 대조군을 가져야 합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/show-columns.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;26-1&quot;&gt;열 집합을 변경&lt;/a&gt;하는 방법&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALTER TABLE t1 MODIFY
    col1 VARCHAR(5)
      CHARACTER SET latin1
      COLLATE latin1_swedish_ci;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저한테 일어난 일입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL로 이 스택 오버플로 질문에 참여하는 사람이 있는 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;error code 1822&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 부모 테이블과 자식 테이블에 동일한 데이터 유형을 유지한 후에도 여전히 동일한 오류가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;그럼 source table로 확인 부탁드립니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;table1's&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조되고 있는 열&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;table2&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;primary key&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;unique&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뭔가 미묘한 문제가 있을 겁니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;alter table&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;진술.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;정의 변경&lt;/font&gt;&lt;/font&gt;&lt;code&gt;articles&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제를 해결합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE TABLE IF NOT EXISTS `articles` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NULL,
  `description` VARCHAR(255) NULL,
  `create_user` INT ZEROFILL NOT NULL REFERENCES users(id),
  `create_date_time` DATETIME NULL,
  `last_modifie_user` INT ZEROFILL NOT NULL REFERENCES users(id),
  `last_modifie_date_time` DATETIME NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_articles_users1_idx` (`create_user` ASC),
  INDEX `fk_articles_users2_idx` (`last_modifie_user` ASC)
)
ENGINE = InnoDB
AUTO_INCREMENT = 1;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.sqlfiddle.com/#!2/21e408&quot; rel=&quot;nofollow&quot; papago-id=&quot;38-0&quot;&gt;SQL&lt;/a&gt; Fiddle입니다.&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;저의 경우 FK의 이름이 전체 데이터베이스에 걸쳐 고유해야 한다는 것을 몰랐다는 오류가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;FK의 이름을 변경하면 문제가 해결되었습니다.&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;저도 SQL을 배우면서 똑같은 오류가 발생하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가능한 모든 방법을 시도한 후, 저는 외부 키를 활성화하는 것보다 참조된 테이블의 기본 키를 활성화해야 한다는 것을 알았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되기를 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-- 외래키추가및제거&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SHOW DATABASES;
USE test;
DESCRIBE addresses;
DESCRIBE people;

ALTER TABLE people
ADD CONSTRAINT FK_PeopleAddress
FOREIGN KEY (address_id) REFERENCES addresses(id);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 기본 데이터 베이스에 기본 데이터 집합이 다르다는 것이 문제는 저의 기본 데이터 베이스가 다르다는 것이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스에 대한 기본 모음과 FK가 참조하려는 필드 모음이 일치하는지 확인합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상위 테이블이 다른 테이블의 자식이 아닌지 확인합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&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;gt;unsignedBigInteger()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저한테는 안 통했어요&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 이 부분에서 약간 바꿨습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$table-&amp;gt;unsignedBigInteger('owner_id');&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대상:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$table-&amp;gt;bigInteger('owner_id')-&amp;gt;unsigned();&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 효과가 있네요!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포워드 엔지니어 중에 mysql workbench에서 이 오류를 받았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인덱스와 fk가 정확한지(Unique 또는 PK vals)를 두 번 확인한 결과, 'FOREN KEYS 생성 건너뛰기'와 'FK 인덱스 생성도 건너뛰기'를 선택하여 이를 해결할 수 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고는 위의 옵션을 선택한 성공적인 포워드 엔지니어를 얻고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;전달 엔지니어가 성공한 후에는 해당 옵션을 선택 취소(기본값)한 상태에서 두 번째 실행을 시도합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 저에게 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 프라이머리 키가 없고 외국 키 제한()을 적용하고 있으니 프라이머리가 존재하는지 확인하세요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;53-0&quot;&gt;같은 문제지만 해결됐습니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 외국 키를 작성하면서 같은 표를 참조하고 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;foreign key(id)references same_table(id),
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 오류의 원인이었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 키가 여러 열로 구성된 경우 하위 테이블의 외부 키 선언에 있는 열의 &lt;strong papago-id=&quot;55-1&quot;&gt;순서&lt;/strong&gt;가 상위 테이블의 인덱스에 있는 열의 순서와 일치하지 않으면 이 문제가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-sql prettyprint-override&quot;&gt;&lt;code&gt;CREATE TABLE parent_table(
  foo INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  bar INT NOT NULL,
  -- Order must match this unique constraint.
  CONSTRAINT ux_parent_table UNIQUE(foo, bar)
);

CREATE TABLE child_table(
  bar INT NOT NULL,
  foo INT NOT NULL,
  -- Error, order does not match parent.
  CONSTRAINT fk_error FOREIGN KEY(bar, foo) REFERENCES parent_table(bar, foo),
  -- Correct, order matches parent.
  CONSTRAINT fk_correct FOREIGN KEY(bar, foo) REFERENCES parent_table(bar, foo)
);
&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;strong papago-id=&quot;56-1&quot;&gt;인덱스&lt;/strong&gt;에 있는 열의 순서입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;상위 테이블의 열 순서 자체는 중요하지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/26329775/error-code-1822-failed-to-add-the-foreign-key-constaint-missing-index-for-con&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>mysql</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1296</guid>
      <comments>https://ittop.tistory.com/1296#entry1296comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:59:41 +0900</pubDate>
    </item>
    <item>
      <title>워드프레스 게시물의 자바스크립트</title>
      <link>https://ittop.tistory.com/1295</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 class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;a href=&quot;javascript:function foo(){alert('hi');}&quot; title=&quot;alert&quot;&amp;gt;
    Drag to your bookmarks bar
&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 워드프레스 게시물에?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;북마크렛을 만들었고 블로그를 통해 전달하고 싶은데 워드프레스에서 저장할 때 자바스크립트를 게시물에서 제거하고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;h2 papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스 싱글페이지 및 게시글의 자바스크립트&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
&amp;lt;!--
// your code
//--&amp;gt;&amp;lt;/script&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;출처 : https://codex.wordpress.org/Using_Javascript&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;저는 그 코드를 제 워드프레스 사이트의 HTML 편집기에 내장하는 데 아무런 문제가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수를 정의하는 javascript 코드에 문제가 있습니다. 그러나 함수를 호출하지는 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;있습니다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a href=&quot;javascript:alert('hi');&quot; title=&quot;alert&quot;&amp;gt;Drag to your bookmarks bar&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;북마크를 클릭하면 알림과 함께 북마크를 받을 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&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;저는 크롬의 XSS가 문제였고 라인을 추가해서 해결했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;header (&quot;X-XSS-Protection: 0&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;wp-blog-header로.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 설치의 루트 폴더에 php.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 전체 사이트에 적용되기 때문에 이상적이지 않을 수 있습니다.&lt;/font&gt;&lt;font 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;이것은 오래되었지만 워드프레스의 버전 4.9.5와 여전히 관련이 있으므로 이에 대한 솔루션으로 답합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스는 당신이 게시물이나 페이지에서 사용하는 자바스크립트를 걸러내는데, 이것이 당신의 코드가 손실되는 이유입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;javscript:&quot; 링크를 추가하기 위해 다음 단계를 수행했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;게시물에 원하는 링크를 추가하고 &quot;#&quot;을 href로 사용하며 태그에 asside를 추가합니다(편집기의 Text-Mode에서).&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;a href=&quot;#&quot; id=&quot;idOfYourLink&quot;&amp;gt;This is my JS Link&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 지정 자바스크립트 플러그인을 설치합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;13-1&quot;&gt;심플 커스텀 CSS와 JS&lt;/em&gt;를 사용했습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플러그인의 도움을 받아 원하는 자바스크립트를 추가합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;jQuery(document).ready(function( $ ){
  function yourFunction() {
      alert(&quot;It works&quot;);
  }

  jQuery('#idOfYourLink').on(&quot;click&quot;, yourFunction);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중요한 부분은 사용하고자 하는 링크에 온핸들러를 추가하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 페이지가 로드된 후 바로 자바스크립트가 로드됩니다.&lt;/font&gt;&lt;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;따라서 js를 추가하기 위해 커스텀 js를 추가하기 위한 플러그인을 찾을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;게시물에 Custom 필드를 추가할 수도 있습니다.&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;js 코드를 포함하는 필드의 이름인 &quot;custom_js&quot;라고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 테마 포스트 템플릿을 편집하여 custom_js의 &quot;echo&quot;를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//single.php
echo get_post_meta( get_the_ID(), 'custom_js');
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/7278035/javascript-in-a-wordpress-post&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>wordpress</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1295</guid>
      <comments>https://ittop.tistory.com/1295#entry1295comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:59:32 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트로 배경색을 변경하려면 어떻게 해야 합니까?</title>
      <link>https://ittop.tistory.com/1294</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;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;document.body.style.background&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;function changeBackground(color) {
   document.body.style.background = color;
}

window.addEventListener(&quot;load&quot;,function() { changeBackground('red') });
&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;참고: 페이지 구성 방식에 따라 약간의 차이가 있습니다. 예를 들어 배경색이 다른 DIV 컨테이너를 사용하는 경우 문서 본문 대신 배경색을 수정해야 합니다.&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;이를 위해 AJAX는 필요하지 않습니다. 다만 본문 요소의 배경색 속성을 설정하는 일반 자바 스크립트는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.body.style.backgroundColor = &quot;#AA0000&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버가 시작한 것처럼 하려면 서버를 폴링한 다음 색상을 변경해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&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;className&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;code&gt;className&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;배경이 이것 또는 저 색상이 되기를 원하는 이유&quot;에 대한 정의로 간주될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 빨간색으로 만드는 것은 빨간색을 원하기 때문이 아니라 사용자에게 오류를 알리고 싶기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 같이 className을 설정&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AnErrorHasOccured&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 선호하는 구현 방법은 신체입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS에서&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;body.AnErrorHasOccured
{
  background: #f00;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트의 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.body.className = &quot;AnErrorHasOccured&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이에 따라 더 많은 요소를 스타일링 할 수 있는 옵션이 남습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;className&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그리고 그와 같이, a를 설정함으로써.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;className&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;AJAX는 서버에서 자바스크립트와 XML을 비동기 방식으로 사용하여 데이터를 얻고 있습니다.&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;그러나 그렇지 않으면 자바스크립트로 CSS 배경을 설정할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery와 같은 프레임워크를 사용하는 경우 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('body').css('background', '#ccc');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 다음과 같이 작동해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.body.style.background = &quot;#ccc&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;strong papago-id=&quot;21-1&quot;&gt;STEP 1&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   var imageUrl= &quot;URL OF THE IMAGE HERE&quot;;
   var BackgroundColor=&quot;RED&quot;; // what ever color you want
&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-1&quot;&gt;BODY&lt;/strong&gt; 배경 변경용&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.body.style.backgroundImage=imageUrl  //changing bg image
document.body.style.backgroundColor=BackgroundColor //changing bg color
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ID로 요소를 변경하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.getElementById(&quot;ElementId&quot;).style.backgroundImage=imageUrl
document.getElementById(&quot;ElementId&quot;).style.backgroundColor=BackgroundColor 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;24&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;   var elements = document.getElementsByClassName(&quot;ClassName&quot;)
        for (var i = 0; i &amp;lt; elements.length; i++) {
            elements[i].style.background=imageUrl;
        }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이것을 &quot;AJAX&quot;로 분류하지 않을 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든, 다음과 같은 것이 효과가 있을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.body.style.backgroundColor = 'pink';
&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;CSS 접근 방식:&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;body{
    background-color:black;
    animation: image 10s infinite alternate;
    animation:image 10s infinite alternate;
    animation:image 10s infinite alternate;
}

@keyframes image{
    0%{
background-color:blue;
}
25%/{
    background-color:red;
}
50%{
    background-color:green;
}
75%{

    background-color:pink;
}
100%{
    background-color:yellow;
    }
  }  
&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;더 빠르거나 더 천천히 보고 싶다면 10초를 5초 등으로 바꾸세요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용하여 페이지의 배경을 변경할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.body.style.background = #000000; //I used black as color code
&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;그러나 아래 스크립트는 setTimeout() 기능을 사용하여 페이지의 배경을 3초마다 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(function() {
            var colors = [&quot;#0099cc&quot;,&quot;#c0c0c0&quot;,&quot;#587b2e&quot;,&quot;#990000&quot;,&quot;#000000&quot;,&quot;#1C8200&quot;,&quot;#987baa&quot;,&quot;#981890&quot;,&quot;#AA8971&quot;,&quot;#1987FC&quot;,&quot;#99081E&quot;];

            setInterval(function() { 
                var bodybgarrayno = Math.floor(Math.random() * colors.length);
                var selectedcolor = colors[bodybgarrayno];
                $(&quot;body&quot;).css(&quot;background&quot;,selectedcolor);
            }, 3000);
        })
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://codeforbrowser.com/blog/changing-background-color-using-javascript-and-jquery/&quot; rel=&quot;nofollow&quot;&gt;&lt;strong papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 읽기&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://jsfiddle.net/refhat/gJWFR/1/&quot; rel=&quot;nofollow&quot;&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;/a&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;저는 여기서 CSS 클래스를 사용하는 것을 보고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트에서 색상/16진수 코드를 읽기 어려운 것을 방지합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.body.className = className;
&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;document.querySelector(&quot;button&quot;).addEventListener(&quot;click&quot;, function() {
document.body.style.backgroundColor = &quot;red&quot;;
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 드롭다운 메뉴에서 선택한 사용자의 선택에 따라 배경색이 변경됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/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 changeBG() {
  var selectedBGColor = document.getElementById(&quot;bgchoice&quot;).value;
  document.body.style.backgroundColor = selectedBGColor;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;select id=&quot;bgchoice&quot; onchange=&quot;changeBG()&quot;&amp;gt;
    &amp;lt;option&amp;gt;&amp;lt;/option&amp;gt;
    &amp;lt;option value=&quot;red&quot;&amp;gt;Red&amp;lt;/option&amp;gt;
    &amp;lt;option value=&quot;ivory&quot;&amp;gt;Ivory&amp;lt;/option&amp;gt;
    &amp;lt;option value=&quot;pink&quot;&amp;gt;Pink&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;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;/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;body&amp;gt;
  &amp;lt;p&amp;gt;Hello, World!&amp;lt;/p&amp;gt;
  &amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
     document.body.style.backgroundColor = &quot;#ff0000&quot;;  // red
  &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;select name=&quot;&quot; id=&quot;select&quot; onClick=&quot;hello();&quot;&amp;gt;
    &amp;lt;option&amp;gt;Select&amp;lt;/option&amp;gt;
    &amp;lt;option style=&quot;background-color: #CD5C5C;&quot;&amp;gt;#CD5C5C&amp;lt;/option&amp;gt;
    &amp;lt;option style=&quot;background-color: #F08080;&quot;&amp;gt;#F08080&amp;lt;/option&amp;gt;
    &amp;lt;option style=&quot;background-color: #FA8072;&quot;&amp;gt;#FA8072&amp;lt;/option&amp;gt;
    &amp;lt;option style=&quot;background-color: #E9967A;&quot;&amp;gt;#E9967A&amp;lt;/option&amp;gt;
    &amp;lt;option style=&quot;background-color: #FFA07A;&quot;&amp;gt;#FFA07A&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;
&amp;lt;script&amp;gt;
function hello(){
let d = document.getElementById(&quot;select&quot;);
let text = d.options[d.selectedIndex].value;
document.body.style.backgroundColor=text;
}
&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 배경색 값을 rgb 표기법으로 지정하려면 다음을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.getElementById(&quot;yourid&quot;).style.backgroundColor = `rgb(${a}, ${b}, ${c})`;
&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;여기서 a,b,c는 색상 값입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.getElementById(&quot;yourid&quot;).style.backgroundColor = 'rgb(224,224,224)';
&lt;/code&gt;&lt;/pre&gt;&lt;h1 papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트를 이용하여 배경색을 변경하는 2가지 방법은 다음과 같습니다.&lt;/font&gt;&lt;/h1&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트로 배경색을 변경하시려면 배경을 변경하실 요소에 적용하시면 됩니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 예제는 다음을 사용하여 요소를 클릭하면 본문의 배경색이 변경됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;style.background&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소유물.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&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 pink(){ document.body.style.background = &quot;pink&quot;; }
function sky(){ document.body.style.background = &quot;skyblue&quot;; }&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;p onclick=&quot;pink()&quot; style=&quot;padding:10px;background:pink&quot;&amp;gt;Pink&amp;lt;/p&amp;gt;
&amp;lt;p onclick=&quot;sky()&quot; style=&quot;padding:10px;background:skyblue&quot;&amp;gt;Sky&amp;lt;/p&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 접근 방법은 첨부된 요소에 배경을 제공하는 자바스크립트를 사용하여 CSS 클래스를 추가하는 것입니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;javascript를 사용하여 클래스를 추가하는 방법을 더 많이 볼 수 있지만 여기서는 간단히 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;classList.add()&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&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 addClass(yourClass){
        document.body.classList.remove(&quot;sky&quot;, &quot;pink&quot;);
        document.body.classList.add(yourClass);
    }&lt;/code&gt;&lt;/pre&gt; 
    &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;    .pink {
        background: pink;
    }

    .sky {
        background: skyblue;
    }&lt;/code&gt;&lt;/pre&gt; 
    &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;    &amp;lt;p onclick=&quot;addClass('pink')&quot; style=&quot;padding:10px;background:pink&quot;&amp;gt;Pink&amp;lt;/p&amp;gt;
    &amp;lt;p onclick=&quot;addClass('sky')&quot; style=&quot;padding:10px;background:skyblue&quot;&amp;gt;Sky&amp;lt;/p&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 당신은 다음과 같은 기능을 호출하는 것만으로 매우 쉽게 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; function changeBg()
    {
      document.body.style.color.backgroundColor=&quot;#ffffff&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 class=&quot;papago-parent&quot;&gt;하지만 당신은 그 전에 바디 컬러를 구성하고 싶을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소가 존재합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게 하면 처음부터 제대로 된 색깔을 가질 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
    var myColor = &quot;#AAAAAA&quot;;
    document.write('\
        &amp;lt;style&amp;gt;\
            body{\
                background-color: '+myColor+';\
            }\
        &amp;lt;/style&amp;gt;\
    ');
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 당신이 넣을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;head&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;문서 또는 js 파일에 있습니다.&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;var myColor = '#'+(Math.random()*0xFFFFFF&amp;lt;&amp;lt;0).toString(16);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드를 제안합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div id=&quot;example&quot; onClick=&quot;colorize()&quot;&amp;gt;Click on this text to change the
background color&amp;lt;/div&amp;gt;
&amp;lt;script type='text/javascript'&amp;gt;
function colorize() {
var element = document.getElementById(&quot;example&quot;);
element.style.backgroundColor='#800';
element.style.color='white';
element.style.textAlign='center';
}
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용하여 페이지의 배경을 변경할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function changeBodyBg(color){
    document.body.style.background = color;
}
&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;a href=&quot;http://www.jquerypot.com/how-to-change-the-background-color-of-a-web-page-dynamically-in-javascript/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;55-1&quot;&gt;배경색 변경&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용하여 달성할 수 있습니다.&lt;/font&gt;&lt;/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;document.body.style.color.backgroundColor = &quot;#000000&quot;;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt; &amp;lt;p id=&quot;p1&quot;&amp;gt;Hello, Moazzam!&amp;lt;/p&amp;gt;
 &amp;lt;p &amp;gt;Hello, Moazzam!&amp;lt;/p&amp;gt;
 &amp;lt;p &amp;gt;Hello, Moazzam!&amp;lt;/p&amp;gt;
 &amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
 document.getElementById(&quot;p1&quot;).style.color= &quot;#ff0000&quot;;  // red
 &amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/197748/how-do-i-change-the-background-color-with-javascript&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>CSS</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1294</guid>
      <comments>https://ittop.tistory.com/1294#entry1294comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:59:25 +0900</pubDate>
    </item>
    <item>
      <title>대용량 데이터 삽입을 위한 최적의 선택</title>
      <link>https://ittop.tistory.com/1293</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;strong papago-id=&quot;1-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;1-3&quot;&gt;sqlite&lt;/strong&gt;를 데이터베이스로 사용하는 &lt;strong papago-id=&quot;1-1&quot;&gt;이&lt;/strong&gt; 프로젝트의 목적은 방대한 양의 데이터를 데이터베이스로 내보내는 것이므로 읽기 &lt;strong papago-id=&quot;1-5&quot;&gt;또는 업데이트&lt;/strong&gt;를 하지 않고 쓰기(삽입)만 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 삽입(내 데이터 내보내기) 성능을 향상시키려고 노력하고 있습니다. sqlite를 전환하는 것이 제 아이디어 중 하나이지만 다른 것을 선택할 수 있는 최종 증거를 찾을 수 없습니다.&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;(패러독스)를 생각하고 있지만 선택할 수 없는 DB 중 일부는 여전히 안내가 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;미리 감사드리며 도움을 주시면 감사하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집 : 아마도 &lt;strong papago-id=&quot;5-1&quot;&gt;Mysql, Postgresql 또는 MariaDb&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;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SqlBulkCopy를 SqlServer와 함께 사용합니다.&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;편집: 트랜잭션 및 롤백과 함께 SqlBulkCopy를 사용하는 방법을 시연할 수 있는 링크입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.aspsnippets.com/Articles/SqlBulkCopy-example-with-Transaction-Commit-and-Rollback-in-ASPNet-using-C-and-VBNet.aspx&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://www.aspsnippets.com/Articles/SqlBulkCopy-example-with-Transaction-Commit-and-Rollback-in-ASPNet-using-C-and-VBNet.aspx&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/47237243/best-choice-for-inserting-large-volume-of-data&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MariaDB</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1293</guid>
      <comments>https://ittop.tistory.com/1293#entry1293comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:59:15 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 커널 Makefile에서 obj-y += something/의 의미는?</title>
      <link>https://ittop.tistory.com/1292</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리눅스 커널 Makefile에서 obj-y += something/의 의미는?&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;obj-$(CONFIG_USB)       += usb.o
&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;CONFIG_USB가 y이면 usb.o가 컴파일됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 이제 이걸 어떻게 이해해야 할까요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;obj-y               += something/
&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;Kernel Make files는 의 일부입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;kbuild&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://lwn.net/Articles/21835/ 와 같이 웹상의 다양한 장소에서 문서화된 시스템.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;관련 발췌문은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;pre&gt;&lt;code&gt;--- 3.1 Goal definitions
&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;목표 정의는 kbuild Make 파일의 주요 부분(하트)입니다.&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;가장 간단한 kbuild makefile은 한 줄로 구성되어 있습니다.&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;예: obj-y += foo.o&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;이 kbuild는 foo.o.o.o.o라는 이름의 디렉터리에 하나의 개체가 있다는 것을 알려줍니다. foo.o.o는 foo.c 또는 foo.o에서 빌드됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;s.&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;foo.o를 모듈로 구축해야 하는 경우 obj-m 변수를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 종종 다음 패턴이 사용됩니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예: obj-$(CONFIG_FOO) += foo.o&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;$(CONFIG_FOO)는 (내장된 경우) y 또는 m(모듈) 중 하나로 평가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;CONFIG_FOO가 y 또는 y가 아니면 파일을 컴파일하거나 링크하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게&lt;/font&gt;&lt;/font&gt;&lt;code&gt;m&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;y&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 내장(커널 구성 프로세스에서 yes를 나타냄)을 의미하며, $(CONFIG_FOO)는 일반 구성 프로세스에서 정답을 가져옵니다.&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;obj-y += 뭔가/&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;이것은 kbuild가 &quot;something&quot; 디렉토리에 들어가야 한다는 것을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 디렉터리로 이동하면 &quot;something&quot;에서 Makefile을 보고 빌드할 개체를 결정합니다.&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;디렉토리 &quot;something&quot;으로 이동하여 &quot;make&quot;를 실행하는 것과 유사합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전체 디렉토리를 목표로 추가하는 이유가 궁금하신 것 같습니다. KConfig 설명서의 관련 부분은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;--- 3.6 Descending down in directories

    A Makefile is only responsible for building objects in its own
    directory. Files in subdirectories should be taken care of by
    Makefiles in these subdirs. The build system will automatically
    invoke make recursively in subdirectories, provided you let it know of
    them.

    To do so obj-y and obj-m are used.
    ext2 lives in a separate directory, and the Makefile present in fs/
    tells kbuild to descend down using the following assignment.

    Example:
        #fs/Makefile
        obj-$(CONfIG_EXT2_FS) += ext2/

    If CONFIG_EXT2_FS is set to either 'y' (built-in) or 'm' (modular)
    the corresponding obj- variable will be set, and kbuild will descend
    down in the ext2 directory.
    Kbuild only uses this information to decide that it needs to visit
    the directory, it is the Makefile in the subdirectory that
    specifies what is modules and what is built-in.

    It is good practice to use a CONFIG_ variable when assigning directory
    names. This allows kbuild to totally skip the directory if the
    corresponding CONFIG_ option is neither 'y' nor 'm'.
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/10949986/whats-meaning-of-obj-y-something-in-linux-kernel-makefile&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1292</guid>
      <comments>https://ittop.tistory.com/1292#entry1292comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:59:09 +0900</pubDate>
    </item>
    <item>
      <title>Spring WebFlux - Server Response Jackson Serializer 문제</title>
      <link>https://ittop.tistory.com/1291</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring WebFlux - Server Response Jackson Serializer 문제&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTTP GET 요청을 웹 서버로 전송하는 동안 문제가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 이 리소스를 담당하는 코드 조각입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@GetMapping(&quot;/events&quot;)
public Mono&amp;lt;ServerResponse&amp;gt; getEvents() {
    return ServerResponse.ok()
              .contentType(APPLICATION_JSON)
              .build();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요청을 보낼 때 예외가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;org.springframework.core.codec.CodecException: Type definition error: [simple type, class org.springframework.web.reactive.function.server.DefaultServerResponseBuilder$WriterFunctionServerResponse]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.springframework.web.reactive.function.server.DefaultServerResponseBuilder$WriterFunctionServerResponse and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
at org.springframework.http.codec.json.AbstractJackson2Encoder.encodeValue(AbstractJackson2Encoder.java:162) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.http.codec.json.AbstractJackson2Encoder.lambda$encode$0(AbstractJackson2Encoder.java:119) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:107) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxJust$WeakScalarSubscription.request(FluxJust.java:91) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:156) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:1444) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:1318) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:90) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxJust.subscribe(FluxJust.java:68) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxMapFuseable.subscribe(FluxMapFuseable.java:63) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Flux.subscribe(Flux.java:6873) ~[reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:200) ~[reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:80) ~[reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Flux.subscribe(Flux.java:6873) ~[reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:200) ~[reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:80) ~[reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxMap.subscribe(FluxMap.java:59) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxContextStart.subscribe(FluxContextStart.java:49) ~[reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Flux.subscribe(Flux.java:6873) ~[reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.ipc.netty.channel.ChannelOperationsHandler.drain(ChannelOperationsHandler.java:461) ~[reactor-netty-0.7.6.RELEASE.jar:0.7.6.RELEASE]
at reactor.ipc.netty.channel.ChannelOperationsHandler.flush(ChannelOperationsHandler.java:191) ~[reactor-netty-0.7.6.RELEASE.jar:0.7.6.RELEASE]
at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:776) ~[netty-transport-4.1.23.Final.jar:4.1.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:802) ~[netty-transport-4.1.23.Final.jar:4.1.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:814) ~[netty-transport-4.1.23.Final.jar:4.1.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:794) ~[netty-transport-4.1.23.Final.jar:4.1.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:831) ~[netty-transport-4.1.23.Final.jar:4.1.23.Final]
at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:1071) ~[netty-transport-4.1.23.Final.jar:4.1.23.Final]
at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:300) ~[netty-transport-4.1.23.Final.jar:4.1.23.Final]
at reactor.ipc.netty.NettyOutbound.lambda$sendObject$6(NettyOutbound.java:298) ~[reactor-netty-0.7.6.RELEASE.jar:0.7.6.RELEASE]
at reactor.ipc.netty.FutureMono$DeferredFutureMono.subscribe(FutureMono.java:134) ~[reactor-netty-0.7.6.RELEASE.jar:0.7.6.RELEASE]
at reactor.core.publisher.Mono.subscribe(Mono.java:3080) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.ipc.netty.NettyOutbound.subscribe(NettyOutbound.java:356) ~[reactor-netty-0.7.6.RELEASE.jar:0.7.6.RELEASE]
at reactor.core.publisher.FluxConcatMap$ConcatMapDelayed.drain(FluxConcatMap.java:749) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxConcatMap$ConcatMapDelayed.onNext(FluxConcatMap.java:581) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:108) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at org.springframework.http.server.reactive.ChannelSendOperator$WriteBarrier.emitCachedSignals(ChannelSendOperator.java:282) [spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.http.server.reactive.ChannelSendOperator$WriteBarrier.request(ChannelSendOperator.java:264) [spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at reactor.core.publisher.FluxMap$MapSubscriber.request(FluxMap.java:149) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxConcatMap$ConcatMapDelayed.onSubscribe(FluxConcatMap.java:567) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxMap$MapSubscriber.onSubscribe(FluxMap.java:86) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at org.springframework.http.server.reactive.ChannelSendOperator$WriteBarrier.subscribe(ChannelSendOperator.java:317) [spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at reactor.core.publisher.FluxSource.subscribe(FluxSource.java:52) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxMap.subscribe(FluxMap.java:62) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoIgnoreElements.subscribe(MonoIgnoreElements.java:37) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:148) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Mono.subscribe(Mono.java:3080) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxConcatIterable$ConcatIterableSubscriber.onComplete(FluxConcatIterable.java:141) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxConcatIterable.subscribe(FluxConcatIterable.java:60) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoIgnoreElements.subscribe(MonoIgnoreElements.java:37) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Mono.subscribe(Mono.java:3080) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at org.springframework.http.server.reactive.ChannelSendOperator$WriteBarrier.onNext(ChannelSendOperator.java:181) [spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:115) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxJust$WeakScalarSubscription.request(FluxJust.java:91) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:156) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at org.springframework.http.server.reactive.ChannelSendOperator$WriteBarrier.onSubscribe(ChannelSendOperator.java:163) [spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:90) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxJust.subscribe(FluxJust.java:68) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxMapFuseable.subscribe(FluxMapFuseable.java:63) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at org.springframework.http.server.reactive.ChannelSendOperator.subscribe(ChannelSendOperator.java:74) [spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1073) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:241) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:73) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:198) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:198) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1073) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoIgnoreThen$ThenAcceptInner.onNext(MonoIgnoreThen.java:290) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1073) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:144) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1073) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoZip$ZipCoordinator.signal(MonoZip.java:241) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoZip$ZipInner.onNext(MonoZip.java:323) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:185) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onNext(FluxDefaultIfEmpty.java:92) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:115) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:1630) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:156) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:1444) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:1318) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:90) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoDefaultIfEmpty.subscribe(MonoDefaultIfEmpty.java:37) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoPeek.subscribe(MonoPeek.java:71) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Mono.subscribe(Mono.java:3080) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoZip.subscribe(MonoZip.java:128) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:148) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:74) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:74) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:271) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:803) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:115) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:1630) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:156) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:1444) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:1318) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:90) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Mono.subscribe(Mono.java:3080) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:418) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:210) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:128) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:61) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.Mono.subscribe(Mono.java:3080) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:167) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:70) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61) [reactor-core-3.1.6.RELEASE.jar:3.1.6.RELEASE]
at reactor.ipc.netty.channel.ChannelOperations.applyHandler(ChannelOperations.java:381) [reactor-netty-0.7.6.RELEASE.jar:0.7.6.RELEASE]
at reactor.ipc.netty.http.server.HttpServerOperations.onHandlerStart(HttpServerOperations.java:397) [reactor-netty-0.7.6.RELEASE.jar:0.7.6.RELEASE]
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:163) ~[netty-common-4.1.23.Final.jar:4.1.23.Final]
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java) ~[netty-common-4.1.23.Final.jar:4.1.23.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404) ~[netty-common-4.1.23.Final.jar:4.1.23.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463) ~[netty-transport-4.1.23.Final.jar:4.1.23.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886) ~[netty-common-4.1.23.Final.jar:4.1.23.Final]
at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_141]
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.springframework.web.reactive.function.server.DefaultServerResponseBuilder$WriterFunctionServerResponse and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.9.5.jar:2.9.5]
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1191) ~[jackson-databind-2.9.5.jar:2.9.5]
at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:312) ~[jackson-databind-2.9.5.jar:2.9.5]
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:71) ~[jackson-databind-2.9.5.jar:2.9.5]
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:33) ~[jackson-databind-2.9.5.jar:2.9.5]
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480) ~[jackson-databind-2.9.5.jar:2.9.5]
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319) ~[jackson-databind-2.9.5.jar:2.9.5]
at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1396) ~[jackson-databind-2.9.5.jar:2.9.5]
at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:913) ~[jackson-databind-2.9.5.jar:2.9.5]
at org.springframework.http.codec.json.AbstractJackson2Encoder.encodeValue(AbstractJackson2Encoder.java:159) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
... 136 common frames omitted
&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;저는 스프링부트 2.0.1을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;풀어주다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 이 문제를 해결할 수 있도록 도와주시겠습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사하겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;ServerResponse&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 반응형 웹 프레임워크의 기능적 변형인 Spring WebFlux.fn에서 사용되는 HTTP 응답 유형입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;주석이 달린 컨트롤러 안에서 사용하면 안 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우, 당신은 A를 반환해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ResponseEntity&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신(또는 기타 지원되는 반환 유형, &lt;a href=&quot;https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/web-reactive.html#webflux-ann-return-types&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-1&quot;&gt;참조 문서 참조&lt;/a&gt;).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;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/50024730/spring-webflux-serverresponse-jackson-serializer-problems&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Spring-boot</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1291</guid>
      <comments>https://ittop.tistory.com/1291#entry1291comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:59:02 +0900</pubDate>
    </item>
    <item>
      <title>j쿼리 텍스트() 및 줄 바꿈</title>
      <link>https://ittop.tistory.com/1290</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;j쿼리 텍스트() 및 줄 바꿈&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;$(someElem).text('this\n has\n newlines);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저의 새 줄로 렌더링합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 찾은 유일한 해결책은 일부 Elem에서 cs 속성 'white-space'를 'pre'로 설정하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 거의 작동하지만, 패딩을 0으로 설정해도 텍스트와 일부 Elem 상단 사이에 성가시게 큰 패딩이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 없앨 방법이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2015년입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문에 대한 정답은 CSS를 사용하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;white-space: pre-line&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;white-space: pre-wrap&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;쌍을 지원하는 IE의 최저 버전은 8입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://css-tricks.com/almanac/properties/w/whitespace/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://css-tricks.com/almanac/properties/w/whitespace/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추신. &lt;s papago-id=&quot;7-1&quot;&gt;CSS3가 일반화되기 전&lt;/s&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;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var obj = $(&quot;#example&quot;).text('this\n has\n newlines');
obj.html(obj.html().replace(/\n/g,'&amp;lt;br/&amp;gt;'));&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;p id=&quot;example&quot;&amp;gt;&amp;lt;/p&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;원하는 경우 jQuery.text()가 다음과 같이 간단한 호출로 이 작업을 수행할 수 있는 함수를 만들 수도 있습니다.&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;&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;$.fn.multiline = function(text){
    this.text(text);
    this.html(this.html().replace(/\n/g,'&amp;lt;br/&amp;gt;'));
    return this;
}

// Now you can do this:
$(&quot;#example&quot;).multiline('this\n has\n newlines');&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;p id=&quot;example&quot;&amp;gt;&amp;lt;/p&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;pre&gt;&lt;code&gt;function htmlForTextWithEmbeddedNewlines(text) {
    var htmls = [];
    var lines = text.split(/\n/);
    // The temporary &amp;lt;div/&amp;gt; is to perform HTML entity encoding reliably.
    //
    // document.createElement() is *much* faster than jQuery('&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;')
    // http://stackoverflow.com/questions/268490/
    //
    // You don't need jQuery but then you need to struggle with browser
    // differences in innerText/textContent yourself
    var tmpDiv = jQuery(document.createElement('div'));
    for (var i = 0 ; i &amp;lt; lines.length ; i++) {
        htmls.push(tmpDiv.text(lines[i]).html());
    }
    return htmls.join(&quot;&amp;lt;br&amp;gt;&quot;);
}
jQuery('#div').html(htmlForTextWithEmbeddedNewlines(&quot;hello\nworld&quot;));
&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;.html&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;그다음&lt;/em&gt;에 포장을.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;pre&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;pre&gt;&lt;code&gt;$(someElem).html('this\n has\n newlines').wrap('&amp;lt;pre /&amp;gt;');
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;text&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;\n&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;br&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;pre&gt;&lt;code&gt;x = x.replace(/&amp;amp;/g, '&amp;amp;amp;')
     .replace(/&amp;gt;/g, '&amp;amp;gt;')
     .replace(/&amp;lt;/g, '&amp;amp;lt;')
     .replace(/\n/g, '&amp;lt;br&amp;gt;');
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도해 보기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(someElem).html('this&amp;lt;br&amp;gt; has&amp;lt;br&amp;gt; newlines);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그와 함께 일하자고 제안하고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;someElem&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소를 대체할 때 직접적으로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.html()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열 내의 다른 HTML 태그도 대체할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/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;function nl2br(el) {
  var lines = $(el).text().split(/\n/);
  $(el).empty();
  for (var i = 0 ; i &amp;lt; lines.length ; i++) {
    if (i &amp;gt; 0) $(el).append('&amp;lt;br&amp;gt;');
    $(el).append(document.createTextNode(lines[i]));
  }
  return el;
}
&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;someElem = nl2br(someElem);
&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;CSS 화이트스페이스 속성을 사용하는 것이 아마도 가장 좋은 해결책일 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Firebug 또는 Chrome Developer Tools를 사용하여 추가 패딩의 출처를 확인합니다.&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;저는 .text() 함수 대신 jquery.html() 함수를 사용할 때 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 줄 바꿈에 대해 &lt;em papago-id=&quot;25-1&quot;&gt;&amp;lt;br/&amp;gt;&lt;/em&gt;을 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var msg = someString + &quot;&amp;lt;br/&amp;gt;&quot; + anotherString;
$(elem).html(msg);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/4535888/jquery-text-and-newlines&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>jQuery</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1290</guid>
      <comments>https://ittop.tistory.com/1290#entry1290comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:58:53 +0900</pubDate>
    </item>
    <item>
      <title>같은 값을 가진 연속 행의 최대 카운트(Max Count) maria(마리아)를 선택합니다.DB mysql</title>
      <link>https://ittop.tistory.com/1289</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 값을 가진 연속 행의 최대 카운트(Max Count) maria(마리아)를 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DB mysql&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wapHu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wapHu.png&quot; alt=&quot;example table&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이런 테이블을 받았는데, puuid마다 win=1이고 game_creation DESC로 순서를 매기는 행의 연속수를 가장 많이 받고 싶습니다.&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;URL : https://stackoverflow.com/questions/75477171/select-max-count-of-consecutive-rows-with-same-value-mariadb-mysql&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MariaDB</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1289</guid>
      <comments>https://ittop.tistory.com/1289#entry1289comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:58:46 +0900</pubDate>
    </item>
    <item>
      <title>XMLHttpRequest를 중단하는 내부(클라이언트 및 서버)</title>
      <link>https://ittop.tistory.com/1288</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XMLHttpRequest를 중단하는 내부(클라이언트 및 서버)&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;a href=&quot;https://stackoverflow.com/questions/22273158/abort-http-request-server-process&quot; papago-id=&quot;1-1&quot;&gt;이 질문&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;제 가정은 항상 요청을 중단하면 브라우저가 연결을 닫고 처리를 완전히 중지하므로, 서버가 그렇게 설정되어 있으면 서버가 동일하게 처리하게 된다는 것입니다.&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 papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XHR 요청 클라이언트 측을 중단하면 브라우저가 내부적으로 소켓을 닫고 처리를 중지합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 단순히 들어오는 데이터를 무시하고 메모리를 낭비하는 것보다는 이러한 행동을 기대합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 저는 IE에 돈을 걸지 않을 겁니다.&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;&lt;/font&gt;&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;ul&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;PHP의 기본 동작은 클라이언트 소켓이 닫혔을 때 처리를 중지하는 것으로 알고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ignore_user_abort()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;호출되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 XHR 연결을 닫으면 서버 전력도 절약됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
   &lt;li papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;node.js에서 이것이 어떻게 처리될 수 있는지 정말 궁금합니다. 거기서 약간의 수동 작업이 필요할 것 같습니다.&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;/ul&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고객 입장에서는 가장 보기 좋은 곳이 소스에 있으니 이렇게 해요! :)&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;  XMLHtpRequest 의 구현에 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;abort&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메서드(&lt;a href=&quot;https://chromium.googlesource.com/chromium/blink.git/+/refs/heads/master/Source/core/xmlhttprequest/XMLHttpRequest.cpp&quot; papago-id=&quot;12-1&quot;&gt;XMLHtpRequest.cpp&lt;/a&gt;의 줄 1083-1119):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void XMLHttpRequest::abort()
{
    WTF_LOG(Network, &quot;XMLHttpRequest %p abort()&quot;, this);
    // internalAbort() clears |m_loader|. Compute |sendFlag| now.
    //
    // |sendFlag| corresponds to &quot;the send() flag&quot; defined in the XHR spec.
    //
    // |sendFlag| is only set when we have an active, asynchronous loader.
    // Don't use it as &quot;the send() flag&quot; when the XHR is in sync mode.
    bool sendFlag = m_loader;
    // internalAbort() clears the response. Save the data needed for
    // dispatching ProgressEvents.
    long long expectedLength = m_response.expectedContentLength();
    long long receivedLength = m_receivedLength;
    if (!internalAbort())
        return;
    // The script never gets any chance to call abort() on a sync XHR between
    // send() call and transition to the DONE state. It's because a sync XHR
    // doesn't dispatch any event between them. So, if |m_async| is false, we
    // can skip the &quot;request error steps&quot; (defined in the XHR spec) without any
    // state check.
    //
    // FIXME: It's possible open() is invoked in internalAbort() and |m_async|
    // becomes true by that. We should implement more reliable treatment for
    // nested method invocations at some point.
    if (m_async) {
        if ((m_state == OPENED &amp;amp;&amp;amp; sendFlag) || m_state == HEADERS_RECEIVED || m_state == LOADING) {
            ASSERT(!m_loader);
            handleRequestError(0, EventTypeNames::abort, receivedLength, expectedLength);
        }
    }
    m_state = UNSENT;
} 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 이것으로 볼 때, 대부분의 그룬트 작업은 그 안에서 이루어 진 것으로 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;internalAbort&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 다음과 같이 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bool XMLHttpRequest::internalAbort()
{
    m_error = true;
    if (m_responseDocumentParser &amp;amp;&amp;amp; !m_responseDocumentParser-&amp;gt;isStopped())
        m_responseDocumentParser-&amp;gt;stopParsing();
    clearVariablesForLoading();
    InspectorInstrumentation::didFailXHRLoading(executionContext(), this, this);
    if (m_responseLegacyStream &amp;amp;&amp;amp; m_state != DONE)
        m_responseLegacyStream-&amp;gt;abort();
    if (m_responseStream) {
        // When the stream is already closed (including canceled from the
        // user), |error| does nothing.
        // FIXME: Create a more specific error.
        m_responseStream-&amp;gt;error(DOMException::create(!m_async &amp;amp;&amp;amp; m_exceptionCode ? m_exceptionCode : AbortError, &quot;XMLHttpRequest::abort&quot;));
    }
    clearResponse();
    clearRequest();
    if (!m_loader)
        return true;
    // Cancelling the ThreadableLoader m_loader may result in calling
    // window.onload synchronously. If such an onload handler contains open()
    // call on the same XMLHttpRequest object, reentry happens.
    //
    // If, window.onload contains open() and send(), m_loader will be set to
    // non 0 value. So, we cannot continue the outer open(). In such case,
    // just abort the outer open() by returning false.
    RefPtr&amp;lt;ThreadableLoader&amp;gt; loader = m_loader.release();
    loader-&amp;gt;cancel();
    // If abort() called internalAbort() and a nested open() ended up
    // clearing the error flag, but didn't send(), make sure the error
    // flag is still set.
    bool newLoadStarted = m_loader;
    if (!newLoadStarted)
        m_error = true;
    return !newLoadStarted;
}
&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;저는 C++ 전문가는 아니지만 보기엔&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;internalAbort&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;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;요청/응답과 관련된 모든 내부 XHR 상태를 지웁니다.&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;검사관에게 XHR이 실패했음을 보고하라고 말합니다. (정말 흥미롭군요!&lt;/font&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;응답 스트림의 &quot;레거시&quot; 버전 또는 응답 스트림의 최신 버전을 닫습니다(이 부분이 질문과 관련된 가장 흥미로운 부분일 수 있습니다).&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 제대로 전파되는지 확인하기 위해 몇 가지 스레딩 문제를 다룹니다(댓글 감사합니다).&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&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://chromium.googlesource.com/chromium/src/+/master/net/http/http_response_body_drainer.cc&quot; papago-id=&quot;22-1&quot;&gt;HttpResponseBodyDrainer&lt;/a&gt;(110-124번 행)에서 재미있는 기능을 발견했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Finish&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;void HttpResponseBodyDrainer::Finish(int result) {
  DCHECK_NE(ERR_IO_PENDING, result);
  if (session_)
    session_-&amp;gt;RemoveResponseDrainer(this);
  if (result &amp;lt; 0) {
    stream_-&amp;gt;Close(true /* no keep-alive */);
  } else {
    DCHECK_EQ(OK, result);
    stream_-&amp;gt;Close(false /* keep-alive */);
  }
  delete this;
}
&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;stream_-&amp;gt;Close&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, BasicHttpStream에서는 &lt;a href=&quot;https://chromium.googlesource.com/chromium/src/+/master/net/http/http_stream_parser.cc&quot; papago-id=&quot;25-1&quot;&gt;HttpStreamParser&lt;/a&gt;로 위임합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;::Close&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, A가 주어졌을 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;non-reusable&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;flag(에 표시된 것처럼 요청이 중단될 때 발생하는 것으로 보임)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HttpResponseDrainer&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;), 소켓을 닫습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void HttpStreamParser::Close(bool not_reusable) {
  if (not_reusable &amp;amp;&amp;amp; connection_-&amp;gt;socket())
    connection_-&amp;gt;socket()-&amp;gt;Disconnect();
  connection_-&amp;gt;Reset();
}
&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;em papago-id=&quot;29-0&quot;&gt;따라서&lt;/em&gt; 클라이언트에서 발생하는 일에 관해서는, 적어도 Chrome의 경우에는 초기 직관이 정확했던 것 같습니다. :) 대부분의 별난 점과 엣지 케이스는 브라우저별 처리뿐만 아니라 스케줄링/이벤트 알림/스레딩 문제와 관련이 있는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;중단된 XHR을 devtools 콘솔에 보고합니다.&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;JS http response 개체에서 &lt;a href=&quot;https://nodejs.org/api/http.html#http_event_close_1&quot; papago-id=&quot;30-1&quot;&gt;'close' 이벤트&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;'use strict';

var http = require('http');

var server = http.createServer(function(req, res) {
  res.on('close', console.error.bind(console, 'Connection terminated before response could be sent!'));
  setTimeout(res.end.bind(res, 'yo'), 2000);
});

server.listen(8080);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;완료하기 전에 이를 실행하고 요청을 취소해 보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;콘솔에 오류가 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 유용한 것을 발견하셨길 바랍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;크롬/블링크 소스를 파헤치는 것은 정말 재미있었습니다 :)&lt;/font&gt;&lt;/p&gt;&lt;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/24258279/internals-client-and-server-of-aborting-an-xmlhttprequest&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Ajax</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1288</guid>
      <comments>https://ittop.tistory.com/1288#entry1288comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:58:39 +0900</pubDate>
    </item>
    <item>
      <title>Is sending data via UDP sockets on the same machine reliable?</title>
      <link>https://ittop.tistory.com/1287</link>
      <description>&lt;h2 papago-id=&quot;0&quot;&gt;Is sending data via UDP sockets on the same machine reliable?&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot;&gt;If i use UDP sockets for interprocess communication, can i expect that all send data is received by the other process in the same order? &lt;/p&gt; 
&lt;p papago-id=&quot;2&quot;&gt;I know this is not true for UDP in general.&lt;/p&gt;&lt;p papago-id=&quot;3&quot;&gt;No. I have been bitten by this before. You may wonder how it can possibly fail, but you'll run into issues of buffers of pending packets filling up, and consequently packets will be dropped. How the network subsystem drops packets is implementation-dependent and not specified anywhere.&lt;/p&gt;&lt;p papago-id=&quot;4&quot;&gt;In short, no. You shouldn't be making any assumptions about the order of data received on a UDP socket, even over localhost. It might work, it might not, and it's not guaranteed to.&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;순서대로 전송을 보장하는 IPC 메커니즘을 원하는 경우 다음과 같은 전이중 파이프를 사용하여 살펴볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;popen()&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;주문 내 배송을 보장하며 동기식 또는 비동기식 I/O와 함께 사용할 수 있습니다 (&lt;/font&gt;&lt;/font&gt;&lt;code&gt;select()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;poll()&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;9&quot;&gt;On unix there are other options such as unix domain sockets or System V message queues (some of which may be faster) but reading/writing from a pipe is dead simple and works. As a bonus it's easy to test your server process because it is just reading and writing from Stdio.&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot;&gt;On windows you could look into Named Pipes, which work somewhat differently from their unix namesake but are used for precisely this sort of interprocess communication.&lt;/p&gt;&lt;p papago-id=&quot;11&quot;&gt;Loopback UDP is incredibly unreliable on many platforms, you can easily see 50%+ data loss. Various excuses have been given to the effect that there are far better transport mechanisms to use.&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot;&gt;There are many middleware stacks available these days to make IPC easier to use and cross platform. Have a look at something like &lt;a href=&quot;http://www.zeromq.org/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;12-1&quot;&gt;ZeroMQ&lt;/a&gt; or &lt;a href=&quot;http://www.29west.com/products/lbm/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;12-3&quot;&gt;29 West's LBM&lt;/a&gt; which use the same API for intra-process, inter-process (IPC), and network communications.&lt;/p&gt;&lt;p papago-id=&quot;13&quot;&gt;The socket interface will probably not flow control the originator of the data, so you will probably see reliable transmission if you have higher level flow control but there is always the possibility that a memory crunch could still cause a dropped datagram.&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터그램에 대한 커널 메모리 할당을 제한하는 흐름 제어 없이는 네트워크 UDP만큼 신뢰할 수 없을 것이라고 생각합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2128701/is-sending-data-via-udp-sockets-on-the-same-machine-reliable&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1287</guid>
      <comments>https://ittop.tistory.com/1287#entry1287comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:58:31 +0900</pubDate>
    </item>
    <item>
      <title>리눅스에서 C/C++로 웹 서버를 쓰는 방법</title>
      <link>https://ittop.tistory.com/1286</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;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;문&lt;/b&gt; 닫았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문은 더 많아야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;/help/closed-questions&quot; papago-id=&quot;1-3&quot;&gt;집중력&lt;/a&gt;이 있는&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 답변을 받지 않고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;hr class=&quot;my12 outline-none baw0 bb bc-powder-400&quot;&gt; 
  &lt;div class=&quot;fw-nowrap fc-black-600&quot;&gt; 
   &lt;div class=&quot;d-flex fd-column lh-md&quot;&gt; 
    &lt;div class=&quot;mb0 d-flex&quot;&gt; 
     &lt;div class=&quot;flex--item mr8&quot;&gt; 
      &lt;svg aria-hidden=&quot;true&quot; class=&quot;svg-icon iconLightbulb&quot; width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 18 18&quot;&gt;
       &lt;path d=&quot;M15 6.38A6.48 6.48 0 0 0 7.78.04h-.02A6.49 6.49 0 0 0 2.05 5.6a6.31 6.31 0 0 0 2.39 5.75c.49.39.76.93.76 1.5v.24c0 1.07.89 1.9 1.92 1.9h2.75c1.04 0 1.92-.83 1.92-1.9v-.2c0-.6.26-1.15.7-1.48A6.32 6.32 0 0 0 15 6.37ZM4.03 5.85A4.49 4.49 0 0 1 8 2.02a4.48 4.48 0 0 1 5 4.36 4.3 4.3 0 0 1-1.72 3.44c-.98.74-1.5 1.9-1.5 3.08v.1H7.2v-.14c0-1.23-.6-2.34-1.53-3.07a4.32 4.32 0 0 1-1.64-3.94ZM10 18a1 1 0 0 0 0-2H7a1 1 0 1 0 0 2h3Z&quot;&gt;&lt;/path&gt;
      &lt;/svg&gt; 
     &lt;/div&gt; 
     &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;2-0&quot;&gt;이 질문을 개선하고 싶으십니까?&lt;/b&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;/posts/2338775/edit&quot; papago-id=&quot;2-2&quot;&gt;이 게시물을 편집&lt;/a&gt;하여 한 가지 문제에만 초점을 맞추도록 질문을 업데이트합니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;mb0 mt6 d-flex&quot;&gt; 
     &lt;p class=&quot;ml24 pl2&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;3-1&quot; title=&quot;2014-06-240 03:01:39Z&quot; papago-attr-id=&quot;1&quot;&gt;9년전&lt;/span&gt;에 문을 닫았습니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;ml24 pl2&quot;&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;mt24 d-flex gsx gs8&quot;&gt; 
   &lt;a class=&quot;s-btn s-btn__outlined flex--item js-post-notice-edit-post&quot; href=&quot;/posts/2338775/edit&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문을 개선합니다.&lt;/font&gt;&lt;/a&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p 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;ul&gt; 
 &lt;li papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 포트에서 수신&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTTP 포스트를 작성하고 요청 받기&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;적절하게 대응하기&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;세션 관리 필요 없음&lt;/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;C 또는 C++에 있어야 함&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부팅 시 서비스로 실행해야 함&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 HTTP 헤더를 잘 알고 있고 경험이 풍부한 PHP 및 .&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;넷 웹 개발자이지만 이 작업을 어디서부터 시작해야 할지 잘 모르겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;학습 곡선을 메울 수 있는 몇 가지 자료를 알려주시겠습니까?&lt;/font&gt;&lt;/p&gt;&lt;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;ul&gt; 
 &lt;li papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTTP 프로토콜&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TCP 서버 - BSD 소켓 프로그래밍&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;공정관리(fork)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구문 분석 텍스트(구성 텍스트 파일 읽기)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 처리(I/O)&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;디버깅 C / C++ 프로그래밍 :)&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;그래서 기본적인 유닉스 응용 프로그램 작성, TCP/IP 네트워크 프로그래밍을 위한 BSD 소켓 프로그래밍, HTTP 프로토콜에 대해 배워야 할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 사용되는 텍스트는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유닉스 응용 프로그램 개발:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Unix 환경에서의 고급 프로그래밍, Stevens &amp;amp; Rago&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고급 유닉스 프로그래밍&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TCP/IP(소켓) 프로그래밍:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Unix 네트워크 프로그래밍, Volume 1 Stevens et al.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TCP/IP 그림, Stevens&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TCP/IP, Volume 3, Comer와의 인터넷 네트워킹&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTTP 프로토콜&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 포함한 RFC&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTTP v1.1에 대한 &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc2616&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;34-0&quot;&gt;RFC 2616&lt;/a&gt;,&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;v1.1 이전 버전의 &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc2068&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;35-0&quot;&gt;RFC 2068&lt;/a&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지원 여부(압축, URI/URL) 및 완성도에 따라 기타 정보를 추가할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SIMPLETE/BASIC/Ultra-LIGHT HTTP 서버의 경우 프로그램 흐름은 다음과 같아야 합니다(사이비 코드).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;----Main thread----
Load settings
while true do
    Wait for connection
    Connection received, create a new thread and transfer this connection to this thread.
end

----Connection thread----
Analyze request
if dynamic content do
    Dump the HTTP request and send it to the interpreter
    Wait for response from the interpreter
    Read response header from the interpreter
    Stream response
else if static content do
    Load requested file
    Stream file content
end
(Optional) Cache the response if size &amp;lt; X
Send the response
Close the socket
&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;따라서 스레드화, 프로세스간 통신(인터프리터와 상호 작용을 원할 경우), 소켓 프로그래밍 및 HTTP 프로토콜을 학습해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서는 모든 세부사항을 설명할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C를 이용한 기본 서버 생성을 위해서 http://www.linuxhowtos.org/C_C++/socket.htm 을 방문하세요.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IBM의 또 다른 제품: http://www.ibm.com/developerworks/systems/library/es-nweb/index.html&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;항상 기존 코드 베이스로 시작할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.boa.org&quot; rel=&quot;noreferrer&quot; papago-id=&quot;42-1&quot;&gt;보아&lt;/a&gt;는 크기가 작고 C로 구현되어 있으며 '부팅 시 시동' 요구 사항에 적합하기 때문에 시작이 될 수 있습니다. 자세한 내용은 Debian/Ubuntu 패키지에 나와 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Comparison_of_lightweight_web_servers&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://en.wikipedia.org/wiki/Comparison_of_lightweight_web_servers&lt;/font&gt;&lt;/a&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;그건 그렇고 - 당신은 &quot;내장된 웹 서버 오픈 소스&quot;를 구글에 검색하고 싶을 수도 있습니다.&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;(www).ibm.com/developerworks/web/library/wa-ltwebserv/&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;liveevent library를 사용하면 c코드 40줄로 웹서버를 작성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.ruilog.com/article/view/5249.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.ruilog.com/article/view/5249.html&lt;/font&gt;&lt;/a&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;처음부터 만들려는 경우 lighttpd, apache, nginx와 같이 c로 작성된 오픈 소스 웹 서버를 참조할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2338775/how-do-i-write-a-web-server-in-c-c-on-linux&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1286</guid>
      <comments>https://ittop.tistory.com/1286#entry1286comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:58:24 +0900</pubDate>
    </item>
    <item>
      <title>Oracle - 독립 실행형 프로시저 또는 기능 대신 패키지를 사용해야 하는 이유</title>
      <link>https://ittop.tistory.com/1285</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;구글을 검색해보았지만 왜 패키지를 사용해야 하는지에 대한 만족스러운 답변을 찾지 못했습니다.&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;OOP의 객체에 해당하는 것으로 알고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 패키지의 인스턴스를 인스턴스화하여 각 인스턴스가 서로 다른 속성 값을 가지고 다르게 동작하도록 하는 것만큼 좋은 방법은 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 독립 실행형 프로시저를 생성하고 독립적으로 호출할 수 있는데 패키지를 사용하면 어떤 장점이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지는 다음과 같은 이점을 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응집력: 특정 하위 시스템과 관련된 모든 절차와 기능이 하나의 프로그램 단위에 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 우수한 설계 사례일 뿐만 아니라 소스 제어와 같은 관리도 더욱 용이합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상수, 하위 유형 및 기타 유용한 것: 저장 프로시저보다 PL/SQL에 더 많은 것이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지 사양에서 정의할 수 있는 모든 것은 다른 프로그램과 공유할 수 있습니다(예: 사용자 정의 예외).&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오버로딩(overloading): 이름은 같지만 서명이 다른 프로시저나 함수를 정의하는 기능.&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;li papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 여러 절차보다는 패키지 상에서만 EXECURE를 승인하면 됩니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/packages.htm#i2408&quot; papago-id=&quot;11-1&quot;&gt;Oracle 문서&lt;/a&gt;에 설명되어 있듯이 패키지는 다음과 같은 이유로 유용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모듈화&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 쉬운 애플리케이션 설계&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정보 숨김&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부가 기능&lt;/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;더 나은 성능&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 이유에 대한 자세한 설명은 문서로 설명합니다.&lt;/font&gt;&lt;/p&gt;&lt;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/12934984/oracle-why-should-i-use-packages-instead-of-standalone-procedures-or-functions&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Oracle</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1285</guid>
      <comments>https://ittop.tistory.com/1285#entry1285comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:58:17 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트에서 정의되지 않은 대신 null을 사용하는 이유는 무엇입니까?</title>
      <link>https://ittop.tistory.com/1284</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;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 항상 선호되며 프로그래밍 방식으로 동일한 용도로 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;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;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;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;답은 없지만 니콜라스 자카스(&lt;em papago-id=&quot;6-1&quot;&gt;Nicholas&lt;/em&gt; C.&lt;em papago-id=&quot;6-1&quot;&gt; Zakas&lt;/em&gt;)는 그의 저서 &quot;웹&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/1118026691&quot; papago-id=&quot;6-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em papago-id=&quot;6-3-1&quot;&gt; 개발자를 위한 전문 자바스크립트&lt;/em&gt;&lt;/a&gt;&quot;의 30페이지에 다음과 같이 썼습니다&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/1118026691&quot; papago-id=&quot;6-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&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;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수가 나중에 개체 참조로 채워졌는지 확인&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;strong&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;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&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;Boolean(undefined) === false &amp;amp;&amp;amp; Boolean(null) === false&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기술적으로 둘 중 하나를 사용하여 작업을 완료할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 올바른 방법이 있습니다, IMO.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&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;undefined&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&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조를 가리키지 않는 변수를 설명하는 데 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 JS 컴파일러가 당신을 돌봐줄 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일 타임에 JS 엔진은 모든 호이스트 변수의 값을 다음과 같이 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 수 있게 을 각 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 엔진이 코드를 통과하고 값을 사용할 수 있게 되면 엔진은 각각의 값을 각 변수에 할당합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값을 찾지 못한 변수의 경우 변수는 원시 변수에 대한 참조를 계속 유지합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&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 papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수의 값을 &quot;no value&quot;로 명시적으로 표시하려는 경우에만 null을 사용합니다.&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;@com2gz는 다음과 같이 말합니다.&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;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그래밍 방식으로 비어 있는 것을 정의하는 데 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&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 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;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;value에 &quot;nothing&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;undefined&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;null&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;/li&gt; 
&lt;/ol&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;strong papago-id=&quot;26-0&quot;&gt;TLDR;&lt;/strong&gt; 사용하지 않음&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt; 없이 변수를 선언하거나 참조가 없는&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;의 속성에 접근하려고 할 때 JS 컴파일러가 자동으로 설정해 주는 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할당 없이 변수를 선언하거나 참조가 없는 개체의 속성에 접근하려고 할 때 JS 컴파일러가 자동으로 설정해 주는 값입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;e을 사용합니다.&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;변수가 의도적으로 &quot;값이 없음&quot;이 되도록 하는 경우에만 해당됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;29-0&quot;&gt;사이드바&lt;/em&gt;: 개인적으로 다음과 같이 명시적으로 설정하는 것을 피합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&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;(그리고 저는 제가 교류해 본 많은 코드베이스/제3자의 립에서 그런 패턴을 발견한 적이 없습니다.)&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 거의 사용하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 내가 사용하는 유일한 시간들&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 함수에 대한 인수의 값을 &lt;em papago-id=&quot;32-1&quot;&gt;값&lt;/em&gt;이 없는 것으로 표시하고자 할 때, 즉:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function printArguments(a,b) {
  console.log(a,b);
}

printArguments(null, &quot; hello&quot;) // logs: null hello
&lt;/code&gt;&lt;/pre&gt;&lt;p&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;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 개의 다른 값은 기본적으로 같은 것을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유일한 차이점은 &lt;em papago-id=&quot;34-3&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;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정의되지 않은 상태에서 때때로 개체를 얻을 수 있는 &quot;무 개체&quot;를 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 개체가 예상되지 않았거나 오류가 발생했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것에 대한 나의 문제는 그것이 완전히 자의적이고 전혀 불필요하다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 한 가지 중요한 차이점이 있습니다. 초기화되지 않은 변수(인수가 전달되지 않은 함수 매개 변수 등)는 &lt;em papago-id=&quot;36-1&quot;&gt;항상&lt;/em&gt; 정의되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 내 코드에서 내가 제어하지 않는 무언가가 null을 반환하지 않는 한 null을 &lt;em papago-id=&quot;37-1&quot;&gt;사용&lt;/em&gt;하지 않는 이유입니다(예: 정규장 매칭).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것의 장점은 일을 단순화 시키는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 확인할 필요가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x === undefined || x === null&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;x === undefined&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;==&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 그냥 이런 것들.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if(x) ... &lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;!x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;빈 문자열에 대해 true로 평가할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&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;NaN&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;- 당신이 원하지 않을 것 같은 것들 말입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 쓰려면 equals 자바스크립트합니다 triple equals상을 &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;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;null&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;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신&lt;/font&gt;에&lt;font class=&quot;papago-parent&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;49&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;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 사람들은 자신만의 코딩 방식과 내부 의미론을 가지고 있지만, 수년간 저는 이것이 이 질문을 하는 사람들에게 가장 직관적인 조언이라는 것을 알게 되었습니다. &lt;strong papago-id=&quot;50-1&quot;&gt;의심&lt;/strong&gt;스러울 때 &lt;strong papago-id=&quot;50-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;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery 플러그인에 대한 옵션과 같은 개체 속성으로 작업하고 있다고 가정해 보겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트가 아직 정의되지 않은 속성을 제공하는 값이 무엇인지 자문해 보십시오. -- 답은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&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;var myVar;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;var myVar = undefined;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 DOM 조작을 하고 있다고 가정해 보겠습니다.&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;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 유사한 에 대한  표시자 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 나중에 DOM과 관련된 요소, 문서 조각 또는 이와 유사한 요소에 대한 참조를 보유할 자리 표시자 변수를 만들 경우 초기화할 값입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JSON을 사용하는 경우에는 특수한 경우를 만들어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;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;&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;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&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;적절한 JSON 형식으로 간주되지 않습니다.&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;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 말과 함께, 이전 포스터가 표현한 것처럼, 만약 당신이 그것을 초기화하는 것을 발견한다면,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;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;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아주 드물게 한 번 이상, 그렇다면 당신은 당신의 앱을 코딩하는 방법을 다시 생각해 보아야 할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 여기서 제안된 협약을 채택할 수도 있지만, 그럴만한 이유가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;의미 있을 정도로 지속적으로 사용되지 않습니다.&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;그런 다음 반환된 값을 명시적으로 테스트하고 수행할 작업을 결정해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;65-1&quot;&gt;정의&lt;/em&gt;되지 않은 경우 &lt;em papago-id=&quot;65-3&quot;&gt;호출된 함수가 알고&lt;/em&gt; 있던 일종의 오류가 발생했다고 가정할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 오류가 발생하고 함수가 이를 알고 더 넓은 환경으로 전송하는 것이 유용하다면 오류 개체를 사용하는 것이 어떨까요? 즉 오류를 던지는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 결국 이 컨벤션은 단순한 환경에서 매우 작은 프로그램을 제외하고는 사실상 쓸모가 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇몇은 객체를 다음과 같이 초기화해도 괜찮다고 말했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 파괴적인 논법의 기본값은 작동하지 않는다는 것을 지적하고 싶었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 들어&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 예를 들어,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const test = ({ name } = {}) =&amp;gt; {
  console.log(name)
}

test() // logs undefined
test(null) // throws error
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위해서는 수행이 필요합니다.&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;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자주 발생할 수 있는 함수를 호출하기 &lt;em papago-id=&quot;62-1&quot;&gt;전&lt;/em&gt;에 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;null에서 &lt;em papago-id=&quot;72-1&quot;&gt;정의&lt;/em&gt;되지 &lt;em papago-id=&quot;72-3&quot;&gt;않은&lt;/em&gt; 유용한 속성은 다음을 충족하지 못합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; null + 3
3
&amp;gt; undefined + 3
NaN
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;64&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;숫자 값을 '끄기'로 하거나 일부를 초기화하려는 경우.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 마지막으로 사용한 것은 CSS 변환을 조작하는 것이었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const transforms = { perspective : null, rotateX : null };
// if already set, increase, if not, set to x
runTimeFunction((x) =&amp;gt; { trasforms.perspective += x; });
// still useful, as setting perspective to 0 is different than turning it off
runTimeFunction2((x) =&amp;gt; { transforms.perspective = null; });

// toCss will check for 'null' values and not set then at all
runTimeFunction3(() =&amp;gt; { el.style.transform = toCss(transforms); });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 부동산을 사용해야 &lt;em papago-id=&quot;75-1&quot;&gt;할지&lt;/em&gt;...&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;65&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;알 수 없는 변수:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;알려진 변수가 있지만 값이 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;68&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;69&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버에서 오브젝트를 수신하면,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;server_object&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;70&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고하세요&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;server_object.errj&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;72&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그것은 당신에게 그것이.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 말은 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그 말은 그게 뭔지 모른다는 뜻이죠.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;74&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 참고하세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;server_object.err&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;75&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그것은 당신에게 그것이.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;76&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 비어&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 즉, 올바른 변수를 참조하고 있지만 비어 있으므로 오류가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;77&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 값이 없는 변수 이름을 선언하는 경우입니다 (&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;var hello&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;) js는 다음과 같이 선언합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&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;: 이 변수는 존재하지 않지만 프로그래머들은 대부분 &quot;나는 아직 값을 주지 않았다&quot;라는 의미를 갖습니다.&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;80&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;81&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 값이 없는 변수를 아무것도 아닌 것으로 선언하는 프로그래머의 기본 동작은 js와 상충됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!undefined&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&gt;&lt;code&gt;!null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;83&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ㅇ&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;84&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;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;var hello = null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;86&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 대부분의 사람들은 그들과 그들이 그럴 때 의도적으로 느슨하게 typed인 언어로 활자 제정신을 보장하기 위해 그들의 코드를 낭비하지 않을 것입니다.&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;87&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;연산자 둘 다 취급&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;88&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&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;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DOM 노드 및 요소가 정의되지 않았지만 Null일 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소의 마지막 자식의 다음 형제가 null입니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;103&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 자식의 이전 형제가 null입니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;104&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서에 요소가 없는 경우 document.getElementById 참조가 null입니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;105&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이러한 경우에는 값이 정의되지 &lt;strong papago-id=&quot;105-1&quot;&gt;않고&lt;/strong&gt; 노드가 없을 뿐입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;90&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트에서 값은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;91&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개체 값의 의도적인 부재를 나타냅니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;92&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 식별력이 부족하다는 것을 나타내며, 변수가 개체를 가리키지 않음을 나타냅니다.&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;93&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;글로벌&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;94&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성은 원시 값을 나타냅니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;95&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;96&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 변수에 자동으로 할당되는 프리미티브 값입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;97&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조가 존재하지 않음을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;114&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 null 또는 undefined 사용이 불필요하다는 것에 전적으로 동의하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;정의되지 않은 것은 원형 연쇄 과정 전체를 유지하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 null이 있는 컴파일러만 이 속성이 null과 동일한지 또는 엔드포인트 프로토타입에 정의되지 않았는지 확인할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 동적 유형 언어(예: Python)에서는 정의되지 않은 속성에 액세스하려면 예외를 발생시키지만 프로토타입 기반 언어의 경우 컴파일러가 상위 프로토타입도 확인해야 하며 정의되지 않은 필요성이 가장 높은 곳입니다.&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;null을 사용하는 전체적인 의미는 변수 또는 속성을 단 하나로 묶어 비움의 의미를 가질 뿐이며, null 사용은 성능적인 목적을 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 2개의 코드는 실행시간이 다릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var p1 = function(){this.value = 1};
var big_array = new Array(100000000).fill(1).map((x, index)=&amp;gt;{
    p = new p1();
    if(index &amp;gt; 50000000){
       p.x = &quot;some_string&quot;;
    }

    return p;
});
big_array.reduce((sum, p)=&amp;gt; sum + p.value, 0)

var p2 = function(){this.value = 1, p.x = null};
var big_array = new Array(100000000).fill(1).map((x, index)=&amp;gt;{
    p = new p2();
    if(index &amp;gt; 50000000){
       p.x = &quot;some_string&quot;;
    }

    return p; 
});
big_array.reduce((sum, p)=&amp;gt; sum + p.value, 0)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;116&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 지금 이 정확한 질문을 연구하고 있고, 다음과 같은 철학을 보고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;117&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과를 반환하려는 함수는 결과를 찾지 못할 경우 null을 반환해야 합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;118&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;119&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;120&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;121&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;null 대 정의되지 않은 속성 값&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;122&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 내 변수가 null 대 정의되지 않음&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;123&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각에는 변수는 API의 일부가 아닌 자신의 비즈니스이며, OOO 시스템의 속성은 정의되므로 정의되지 않은 경우와 다른 값으로 정의되어야 합니다(정의되지 않은 경우 null, undefined는 개체에 없는 것에 액세스할 때 얻는 것입니다).&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;98&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이유는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;var undefined = 1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;99&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;합법적인 자바스크립트이지만,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;var null = 1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;100&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 구문 오류입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;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;101&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 언어 키워드입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;102&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;103&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 코드가 다음과 비교에 의존하는 것에 의존한다면.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;104&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;키워드인 것처럼 (&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if (foo == undefined)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;105&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-- 누구도 해당 이름을 가진 변수를 정의하지 않았기 때문에 작동하는 매우 쉬운 실수입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 모든 코드는 실수로 또는 악의적으로 해당 이름으로 전역 변수를 정의하는 사용자에게 취약합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;132&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 자바스크립트 라이브러리를 사용할 때 null과 undefined가 의도하지 않은 결과를 초래할 수 있다는 점을 추가하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;106&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들면, 로다쉬는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;get&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;107&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;function: 기본값을 세 번째 인수로 받아들입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const user = {
  address: {
    block: null,
    unit: undefined,
  }
}
console.log(_.get(user, 'address.block', 'Default Value')) // prints null
console.log(_.get(user, 'address.unit', 'Default Value')) // prints 'Default Value'
console.log(_.get(user, 'address.postalCode', 'Default Value')) // prints 'Default Value'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;108&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 예:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;React에서 defaultProps를 사용하는 경우 속성이 전달된 경우&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;109&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, &lt;strong papago-id=&quot;109-1&quot;&gt;null이 정의된 값으로 해석&lt;/strong&gt;되므로 기본 속성이 사용되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class MyComponent extends React.Component {
   static defaultProps = {
      callback: () =&amp;gt; {console.log('COMPONENT MOUNTED')},
   }
   componentDidMount() {
      this.props.callback();
   }
}
//in some other component
&amp;lt;MyComponent /&amp;gt;   // Console WILL print &quot;COMPONENT MOUNTED&quot;
&amp;lt;MyComponent callback={null}/&amp;gt;   // Console will NOT print &quot;COMPONENT MOUNTED&quot;
&amp;lt;MyComponent callback={undefined}/&amp;gt;   // Console WILL print &quot;COMPONENT MOUNTED&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;110&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 이미 좋은 답이 몇 개 있지만 제가 찾던 답은 아닙니다.&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;111&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;112&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot; 둘 다 &quot;이 가 표시되면 어떤  예상합니다  &quot;undefined&quot;가 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기술적으로&quot; 둘 다 거짓이라는 점에서 동일한 작업을 수행하지만, 코드를 통해 읽었을 때 &quot;null&quot;이 표시되면 사용자가 정의한 null일 것으로 예상됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 코드를 통해 읽었을 때 &quot;undefined&quot;가 표시되면 어떤 것이 값을 포함하지 않도록 명시적으로 설정되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 코드를 통해 읽었을 때 어떤 것에 의해서도 초기화되거나 할당되지 않은 코드일 것으로 추정됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 식으로 코드는 초기화되지 않은 것 또는 null 값으로 인해 발생한 것인지 여부를 사용자에게 전달할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇기 때문에 &quot;정의되지 않은&quot; 것을 수동으로 무언가에 할당해서는 안 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그렇지 않으면 코드를 읽을 수 있는 방법을 망칩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 개발자가 &quot;정의되지 않은&quot; 것을 보게 되면 직관적으로 정의되지 않은 상태를 만든 사람이 사용자라고 가정하지는 않을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 실제로는 초기화되지 않은 상태라고 가정할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저에게 있어 이것은 가장 큰 문제입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 코드를 읽을 때 코드가 무엇을 알려주는지 확인하고 싶고, &quot;실제로&quot; 초기화되었는지 추측하고 싶지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;140&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타이프스크립트에서 그것들을 사용하는 것은 두 가지 다른 것을 의미하는 것은 말할 것도 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;interface Example {
    name?: string
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;141&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름은 정의되지 않거나 문자열일 수 있지만 null일 수는 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;null을 원하는 경우 명시적으로 다음을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;interface Example {
  name: string | null
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;142&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 나서도 적어도 &quot;null&quot;로 초기화할 수 밖에 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;113&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 당신이 사용할 경우에만 해당됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;strictNullChecks&quot;: true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;114&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tsconfig.json&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;115&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&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;116&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최근에 발생한 고장을 바탕으로 아래의 예는 제가 사용을 선호하는 이유를 보여줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;117&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;118&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 특별한 사유가 없는 한.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;function myfunc (myArg) {
    if (typeof myArg === 'string') {
        console.log('a', myArg);
    } else if (typeof abc === 'object') {
        console.log('b', myArg);
        if (myArg.id) {
           console.log('myArg has an id');
        } else {
           console.log('myArg has an id');
        }
    } else {
        console.log('no value');
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;149&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 값이 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;'abc'
{}
undefined
{ id: 'xyz' }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;119&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 한편으로는 다음과 같은 가정이 있습니다.&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;120&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;121&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 동등하다는 것은 비밀을 깨뜨리는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;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;122&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 유형입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;object&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;123&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,반면에.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;124&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유형의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;125&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그래서 여기서 코드가 깨지는 이유는 멤버 테스트를 할 수 없기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;126&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;127&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 유사한 외관의 코드를 가진 많은 사건들을 봐왔습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;128&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단지 문제를 요구하는 것일 뿐입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (typeof myvar === 'string') {
  console.log(myvar);
} else if (typeof myvar === 'object') {
  console.log(myvar.id);  
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;160&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 해결 방법은 null을 명시적으로 테스트하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (typeof myvar === 'string') {
  console.log(myvar);
} else if (myvar !== null &amp;amp;&amp;amp; typeof myvar === 'object') {
  console.log(myvar.id);  
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;161&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 태도는 한 언어의 약점과 그 언어의 프로그래머들의 전형적인 행동을 코드화하는 것입니다. 따라서 기본값을 넘어 '정의되지 않은' 것을 추구하는 철학입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;162&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 코드를 쓰려면 복잡성과 변화를 줄여야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;개체의 변수 또는 속성에 값이 없으면 정의되지 않으며 값이 null일 경우 null 값을 할당해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;h2 papago-id=&quot;163&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;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;129&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 &lt;strong papago-id=&quot;129-1&quot;&gt;Object&lt;/strong&gt; &quot;type&quot; 과 다음과 같은 7개의 &lt;em papago-id=&quot;129-3&quot;&gt;고유한 프리미티브&lt;/em&gt; 값 &lt;em papago-id=&quot;129-3&quot;&gt;유형&lt;/em&gt; 중 하나입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;130&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 &lt;strong papago-id=&quot;130-1&quot;&gt;글로벌&lt;/strong&gt; 스코프 속성이자 undefined 라고 불리는 유형이며, 7개의 고유한 &lt;em papago-id=&quot;130-3&quot;&gt;프리미티브&lt;/em&gt; 값 &lt;em papago-id=&quot;130-3&quot;&gt;유형&lt;/em&gt; 중 하나입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;131&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.정의되지 않음 .w.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;167&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 우리가 관심을 가지는 가치로 &lt;em papago-id=&quot;167-1&quot;&gt;사용하는 원시적&lt;/em&gt;인 유형입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;132&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;133&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, value type이란 빈 값이 변수에 할당되었음을 의미하지만 변수 유형(Number, String 등)은 여전히 정의되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가치가 없을 뿐입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;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;134&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;134-1&quot;&gt;재초기화&lt;/em&gt;하지만 그렇지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;135&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;활자로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;136&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특별한 경우입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수를 선언할 때(또는 아직 선언되지 않은 결측값을 사용할 때) &lt;strong papago-id=&quot;136-1&quot;&gt;다음&lt;/strong&gt;과 같은 유형입니다.&lt;/font&gt;&lt;/font&gt; &lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;137&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 브라우저는 아직 어떤 유형의 데이터가 할당되었는지 알 수 없기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수가 선언되었지만 값이 할당되지 않은 경우 원시 값이 할당됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;138&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;139&quot;&gt;&lt;font class=&quot;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;140&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;141&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;141-1&quot;&gt;또한&lt;/em&gt; 원시 값 &lt;em papago-id=&quot;141-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;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;142&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수가 존재하지 않음을 의미하며, 여기서 null은 값이 존재하지 않음을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 값이 다음과 같은지 확인하기 전에 변수가 존재하고 정의되지 않은 것을 사용하여 변수가 할당되었는지 확인하는 것이 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;143&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비어있거나.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;144&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;144-1&quot;&gt;선언&lt;/em&gt;되지 않았거나 결측값으로 선언되어 &lt;em papago-id=&quot;144-3&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;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;145&quot;&gt;&lt;font class=&quot;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;146&quot;&gt;&lt;font class=&quot;papago-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;147&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;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;148&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;149&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 비록 그들 둘 다 거짓 답변을 할 것이지만,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;150&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 참/false 검사가 아닌 피쳐, 객체 또는 변수가 누락된 경우에 대한 추가 단계를 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 더 많은 것을 암시합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선언되지 않은 변수가 누락된 경우 truth 문이 ERROR를 트리거합니다!&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;151&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한번 볼까요?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;152&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫번째:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        //var check1;// variable doesnt even exist so not assigned to &quot;undefined&quot;
        var check2;// variable declared but not initialized so assigned &quot;undefined&quot;
        var check3 = 'hello world';// variable has a value so not undefined

        console.log('What is undefined?');

        //console.log(check1 === undefined);// ERROR! check1 does not exist yet so not assigned undefined!
        console.log(check2 === undefined);// True
        console.log(check3 === undefined);// False
        console.log(typeof check1 === 'undefined');// True - stops the ERROR!
        console.log(typeof check2 === 'undefined');// True
        console.log(typeof check3 === 'undefined');// False
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;153&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;153-1&quot;&gt;선언&lt;/em&gt;되지 않은 변수 또는 &lt;em papago-id=&quot;153-3&quot;&gt;선언&lt;/em&gt;되었지만 &lt;em papago-id=&quot;153-5&quot;&gt;초기화&lt;/em&gt;되지 않은 변수를 볼 수 있듯이 둘 다 다음과 같은 유형이 할당됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;154&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 초기화되지 않은 선언된 변수에는 다음 값이 할당됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;155&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 기본값 유형이지만 존재하지 않는 변수는 &lt;strong papago-id=&quot;155-1&quot;&gt;정의&lt;/strong&gt;되지 않은 &lt;strong papago-id=&quot;155-1&quot;&gt;유형&lt;/strong&gt;입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;156&quot;&gt;&lt;font class=&quot;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;157&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여전히 값입니다.&lt;/font&gt;&lt;/font&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;158&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 이미 &lt;em papago-id=&quot;158-1&quot;&gt;선언&lt;/em&gt;하고 &lt;em papago-id=&quot;158-3&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;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;159&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;object&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;160&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;160-1&quot;&gt;정의&lt;/strong&gt;되지 않은 &lt;strong papago-id=&quot;160-1&quot;&gt;유형&lt;/strong&gt;과 다르게 type을 지정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들면...&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        var check4 = null;
        var check5 = 'hello world';

        console.log('What is null?');

        console.log(check4 === undefined);// False
        console.log(check5 === undefined);// False
        console.log(typeof check4 === 'undefined');// False
        console.log(typeof check5 === 'undefined');// False
        console.log(typeof check4);// return 'object'
        console.log(typeof check5);// return 'string'

&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;197&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각각의 행동이 다르게 나타나지만 둘 다 원시적인 값이기 때문에 모든 변수를 할당할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수와 개체의 상태가 서로 다르다는 것만 이해하면 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;161&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고하시기 바랍니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;162&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;직렬화하면 지워집니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 예를 들어 다음과 같이.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JSON.stringify&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;163&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용하는 경우에는 보이지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;console.log&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;164&quot;&gt;&lt;font class=&quot;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.keys&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;165&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;let obj = {nuller: null, undef: undefined}
console.log(obj)
console.log(JSON.stringify(obj))
console.log(JSON.parse(JSON.stringify(obj))
console.log(Object.keys(obj))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;203&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 거기서 URL 검색 파라미터 같은 것을 사용하더라도&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;console.log((new URLSearchParams(obj)).toString());
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;166&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nuller=null&amp;amp;undef=undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;167&quot;&gt;&lt;font class=&quot;papago-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;206&quot; papago-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/6604749/what-reason-is-there-to-use-null-instead-of-undefined-in-javascript&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>javascript</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1284</guid>
      <comments>https://ittop.tistory.com/1284#entry1284comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:58:11 +0900</pubDate>
    </item>
    <item>
      <title>jQuery Full Calendar에 리소스 보기/간트 차트 추가</title>
      <link>https://ittop.tistory.com/1283</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery Full Calendar에 리소스 보기/간트 차트 추가&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 &lt;a href=&quot;http://arshaw.com/fullcalendar/&quot; papago-id=&quot;1-1&quot; rel=&quot;noreferrer&quot;&gt;jQuery&lt;/a&gt; Full &lt;a href=&quot;http://arshaw.com/fullcalendar/&quot; papago-id=&quot;1-1&quot; rel=&quot;noreferrer&quot;&gt;calendar&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;하지만 저와 제 프로젝트(&lt;a href=&quot;http://code.google.com/p/fullcalendar/issues/detail?id=150&amp;amp;colspec=ID%20Type%20Status%20Milestone%20Summary%20Stars&quot; papago-id=&quot;2-3&quot; rel=&quot;noreferrer&quot;&gt;그리고&lt;/a&gt; 다른 &lt;a href=&quot;http://code.google.com/p/fullcalendar/issues/detail?id=150&amp;amp;colspec=ID%20Type%20Status%20Milestone%20Summary%20Stars&quot; papago-id=&quot;2-3&quot; rel=&quot;noreferrer&quot;&gt;많은&lt;/a&gt; 사람들)에게 &lt;strong papago-id=&quot;2-1&quot;&gt;정말&lt;/strong&gt; 유용하기 위해서는 솔직히 자원/간트 뷰가 필요하다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아무도 생각하지 않을 문제는...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery FullCalendar의 눈 밑을 들여다보고 그것이 뷰를 생성하는 방식이 자바스크립트 개발자들을 위한 것이 아니라는 것을 알게 될 때까지...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 나.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 제 능력 밖이라는 것을 알게 된 후 저는 다른 곳에서 리소스 뷰를 제공해 줄 캘린더/스케줄러를 찾아야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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&gt;&lt;a href=&quot;http://java.daypilot.org/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://java.daypilot.org/&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.dhtmlx.com/docs/products/dhtmlxScheduler/index.shtml&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.dhtmlx.com/docs/products/dhtmlxScheduler/index.shtml&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://web2cal.com/ajaxeventscalendar/calendar-demo/912-premium-demo/157-scheduler-view&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://web2cal.com/ajaxeventscalendar/calendar-demo/912-premium-demo/157-scheduler-view&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안타깝게도 &lt;em papago-id=&quot;9-1&quot;&gt;daypilot&lt;/em&gt;과 &lt;em papago-id=&quot;9-3&quot;&gt;dhtmlxs&lt;/em&gt; 스케줄러 모두 FullCalendar가 매우 잘 달성하는 깨끗하고 명확한 인터페이스가 부족하고 &lt;em papago-id=&quot;9-5&quot;&gt;web2cal&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;또는 jQuery Gannt 차트를 jquery full calendar와 통합하는 방법에 대해 아는 사람이 있는지 궁금합니다.&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;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.maro-z.com/examples/jquery.gantt/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.maro-z.com/examples/jquery.gantt/&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://code.google.com/p/jquery-gantt/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://code.google.com/p/jquery-gantt/&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://github.com/thegrubbsian/jquery.ganttView&quot; rel=&quot;noreferrer&quot; papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://github.com/thegrubbsian/jquery.ganttView&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;/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&gt;&lt;a href=&quot;http://code.google.com/p/fullcalendar/issues/detail?id=150&amp;amp;colspec=ID%20Type%20Status%20Milestone%20Summary%20Stars&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://code.google.com/p/fullcalendar/issues/detail?id=150&amp;amp;colspec=ID%20Type%20Status%20Milestone%20Summary%20Stars&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 갈림길에 놓여있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;커뮤니티 지원이 거의 없는 반쪽짜리 독점 솔루션을 지불하거나 jQuery Fullcalendar의 리소스 뷰를 얻을 수 있는 방법을 jQuery를 정말로 아는 사람들에게 문의하여 찾을 수 있습니다.&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;저는 독점 솔루션을 사용하여 절약한 자금을 Fullcalendar 개발자에게 기꺼이 기부하겠습니다.&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;FullCalendar의 개발자는 많은 것을 가지고 있는 것 같으며 이 정말 놀라운 달력에 대해 다시 한번 감사드립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가 우리와 해결책을 공유할 수 있기를 바랍니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;팀&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 아이디어를 위해 수행된 작업을 업데이트합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/jarnokurlin/fullcalendar&quot; rel=&quot;nofollow&quot; papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/jarnokurlin/fullcalendar&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금은 달력의 한 갈래입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;v2.1.1을 기반으로 리소스 보기를 검색하는 경우.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/ChurchDesk/fullcalendar&quot; papago-id=&quot;27-0&quot; rel=&quot;nofollow&quot;&gt;여기&lt;/a&gt;에 그것을 &lt;a href=&quot;https://github.com/ChurchDesk/fullcalendar&quot; papago-id=&quot;27-0&quot; rel=&quot;nofollow&quot;&gt;구현하는 포크&lt;/a&gt;가 있습니다. 그것은 언젠가 완전히 일정관리로 통합되기를 희망합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;꽤 오래된 질문이라는 것을 알지만, 몇 주 전에 그런 것을 찾고 있었는데 여기서 아무것도 찾을 수 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 제가 사용하는 것은 &lt;a href=&quot;http://demos.telerik.com/kendo-ui/scheduler/index&quot; rel=&quot;nofollow&quot; papago-id=&quot;28-1&quot;&gt;검도 스케줄러&lt;/a&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;수평 그룹화, 수직 그룹화, 타임라인 및 시그널R에 대한 바인딩과 같은 다른 흥미로운 것들이 있습니다.&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;a href=&quot;http://fullcalendar.io/timeline/&quot; rel=&quot;nofollow&quot; papago-id=&quot;29-3&quot;&gt;리소스/타임라인 보기&lt;/a&gt;가 곧 될 것이라고 &lt;a href=&quot;http://blog.arshaw.com/1/post/2015/02/timeline-and-other-news.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;29-1&quot;&gt;발표&lt;/a&gt;했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 아마 상용 라이선스로 출시될 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;StackOverflow 사용자가 제공할 수 있는 답변은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://code.google.com/p/fullcalendar/issues/detail?id=490&quot; rel=&quot;nofollow&quot; papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://code.google.com/p/fullcalendar/issues/detail?id=490&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열려 있는 작업이 있으며 아래에는 원하는 작업을 달성하기 위해 전체 일정을 확장하는 작업 중인 예가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메인스트림 전체 캘린더 프로젝트에 코드를 병합하기 위해 거기에 기여하거나 정리하겠다고 제안해 주십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리소스 뷰를 가진 https://dhtmlx.com/docs/products/dhtmlxGantt/ 도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;전체 달력과 통합할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아주 간단합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3269117/adding-a-resource-view-gannt-chart-to-jquery-fullcalendar&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>jQuery</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1283</guid>
      <comments>https://ittop.tistory.com/1283#entry1283comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:57:59 +0900</pubDate>
    </item>
    <item>
      <title>도커 구성 - cURL 오류 7: 로컬 호스트 포트 8080에 연결하지 못함: 연결 거부</title>
      <link>https://ittop.tistory.com/1282</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 구성 - cURL 오류 7: 로컬 호스트 포트 8080에 연결하지 못함: 연결 거부&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;처음으로 도커 컴포지트를 사용하여 로컬 워드프레스 환경을 설정하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 Wordpress 인스턴스에 액세스할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;localhost:8080&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 로컬로 매핑할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테마를 구입해서 추가했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wp-content/themes&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 필요한 플러그인을 설치하라는 메시지가 나타납니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;클릭할 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Install&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;code&gt;Download failed. cURL error 7: Failed to connect to localhost port 8080: Connection refused&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성 파일은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;version: &quot;2&quot;

services:
  my-wpdb:
    image: mariadb
    ports:
      - &quot;8081:3306&quot;
    environment:
      MYSQL_ROOT_PASSWORD: password
  my-wp:
    image: wordpress:latest
    volumes:
      - ./:/var/www/html
    ports:
      - &quot;8080:80&quot;
    links:
      - my-wpdb:mysql
    environment:
      WORDPRESS_DB_PASSWORD: password
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 해결책일 수도 있지만, 저는 그것을 이해할 수 없는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사합니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;papey의 답변에 따르면 curl은 컨테이너(80) 내부에 있는 동안 외부 포트(8080)에서 연결을 시도하고 있습니다.&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;구글 검색을 많이 한 끝에 사람들이 제시한 유일한 해결책은 내부 포트와 외부 포트를 80:80으로 변경하는 것이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;포트 80에서 다른 서비스를 실행하는 경우에는 이를 실행할 수 없습니다.&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;제 해결책은 컨테이너 내부의 Apache2 conf를 외부 포트에서 Apache가 내부에서 응답하도록 수정하는 것이었습니다.&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;/etc/apache2/ports.conf&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Listen 80
Listen 8080
&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;/etc/apache2/sites-사용 가능/000-default.conf&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;VirtualHost *:*&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 도커 구성에 따라:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  - &quot;8080:80&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;8080은 용기 &lt;strong papago-id=&quot;14-1&quot;&gt;외부&lt;/strong&gt;에 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;80은 &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;저는 폴 H의 해결책에 동의합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 중인 WordPress Linux Docker 컨테이너 안에서 다음 명령을 실행한 후 컨테이너를 다시 시작합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;echo -e &quot;\nListen 8080\n&quot; &amp;gt;&amp;gt; /etc/apache2/ports.conf
echo -e &quot;\n&amp;lt;VirtualHost *:*&amp;gt;\n&amp;lt;/VirtualHost&amp;gt;\n&quot; &amp;gt;&amp;gt; /etc/apache2/sites-available/000-default.conf

cat /etc/apache2/ports.conf &amp;amp;&amp;amp; cat /etc/apache2/sites-available/000-default.conf
&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/43743894/local-wordpress-env-with-docker-compose-curl-error-7-failed-to-connect-to-loc&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>wordpress</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1282</guid>
      <comments>https://ittop.tistory.com/1282#entry1282comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:57:53 +0900</pubDate>
    </item>
    <item>
      <title>스크립팅 SVG</title>
      <link>https://ittop.tistory.com/1281</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립팅 SVG&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;ol&gt; 
 &lt;li papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트로 실행되는 SVG를 주요 기능으로 사용하는 웹 사이트를 설계하는 것이 합리적인 수준(즉, Firefox 또는 다른 SVG/AJAX 호환 브라우저가 필요한 경우)과 같이 SVG가 곧 중요한 수준(1-2년)에 도달했거나 필요한 시점에 도달했습니까?&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;크로스 플랫폼 SVG 스크립팅을 학습하기 위한 좋은 리소스는 무엇입니까(자바스크립트로 가능)?&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;a href=&quot;http://raphaeljs.com/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-0&quot;&gt;라파엘&lt;/a&gt;은 크로스 브라우저 벡터 그래픽 문제에 대한 흥미로운 해석처럼 보입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유감스럽게도 답은 없지만, 여러분이 볼 수 있는 프로젝트에 대한 세 가지 조언이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째는 Sun Labs의 Dan Ingalls(&lt;em papago-id=&quot;6-3&quot;&gt;네&lt;/em&gt;, Dan Ingalls)의 &quot;&lt;a href=&quot;http://Research.Sun.Com/projects/lively/&quot; rel=&quot;noreferrer&quot; title=&quot;생동감 넘치는 커널&quot; papago-id=&quot;6-1&quot; papago-attr-id=&quot;7&quot;&gt;활기찬 커널&lt;/a&gt;&quot;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SVG 위에 자바스크립트로 스몰토크 가상 세계를 구현한 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;좀 더 정확하게 말하자면, SVG를 이용한 자바스크립트의 Squak Smalltalk의 Morphic GUI 프레임워크와 자바스크립트의 Squak Smalltalk의 (일부) 포트를 구현한 것입니다.&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;또는 스몰토커가 아닌데도 위 내용이 이해가 되지 않는 경우에는 자바스크립트로 작성된 운영체제로, 자바스크립트 인터프리터를 CPU로, SVG를 그래픽 카드로, 브라우저를 컴퓨터로 사용합니다.&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;이것은 자바스크립트와 SVG에 관한 한 매우 극단적인 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 Internet Explorer에 대한 실험적인 포트도 있지만 사파리 3에서만 &lt;em papago-id=&quot;8-1&quot;&gt;완벽&lt;/em&gt;하게 작동하고 부분적으로는 Firefox 3에서만 작동합니다.&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;a href=&quot;http://EJohn.Org/blog/processingjs/&quot; papago-id=&quot;9-1&quot; rel=&quot;noreferrer&quot; title=&quot;프로세싱.js&quot; papago-attr-id=&quot;2&quot;&gt;언어&lt;/a&gt;의 John Resig의 &lt;a href=&quot;http://EJohn.Org/blog/processingjs/&quot; papago-id=&quot;9-1&quot; rel=&quot;noreferrer&quot; title=&quot;프로세싱.js&quot; papago-attr-id=&quot;3&quot;&gt;Processing.&lt;/a&gt;jsport입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;canvas&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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 언급한 문제들 때문에 SVG 대신 요소.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이것은 파이어폭스 3에서만 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/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://UselessPickles.Com/triangles/demo.html&quot; papago-id=&quot;11-1&quot; rel=&quot;noreferrer&quot; title=&quot;자바스크립트의 트라이앵글&quot; papago-attr-id=&quot;4&quot;&gt;자바스크립트 실시간 3D&lt;/a&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트, DOM, CSS만 &lt;em papago-id=&quot;11-3&quot;&gt;사용&lt;/em&gt;하고 &lt;em papago-id=&quot;11-5&quot;&gt;SVG나&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 플래시든 뭐든.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 &lt;em papago-id=&quot;12-1&quot;&gt;Internet&lt;/em&gt; Explorer 7 이상을 포함한 거의 모든 브라우저에서 휴대할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;2D를 하는 것은 이것보다 더 쉬울 것입니다.&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;이 세 프로젝트 사이에서 영감을 찾을 수 있을 뿐만 아니라 자바스크립트와 SVG 또는 자바스크립트와 그래픽으로 한계를 극복하고 무엇이 작동하고 무엇이 작동하지 않는지 알려줄 수 있는 사람들을 찾을 수 있을 것입니다.&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;결론: 크로스 브라우저 SVG 또는 크로스 브라우저 수행&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;canvas&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;em papago-id=&quot;5-1&quot;&gt;브라우저&lt;/em&gt; 그래픽은 SVG나&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가능합니다.&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;SVG웹은 플래시를 이용하여 IE에 거의 네이티브 SVG 기능을 추가한 스크립트입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 모든 주요 브라우저들은 SVG를 지원합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://code.google.com/p/svgweb/&quot; rel=&quot;nofollow&quot; papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://code.google.com/p/svgweb/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1/ 아마 절대로 추가하지 않을 것입니다. 만약 제가 그것을 추가하고 싶었더라면 지금쯤 그렇게 했을 것입니다. 하지만 렌더링을 제공하기 위해 &lt;a href=&quot;http://www.intertwingly.net/blog/2007/05/04/Inline-SVG-in-MSIE&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;19-1&quot;&gt;SilverLight&lt;/a&gt;와 &lt;a href=&quot;http://starkravingfinkle.org/blog/2006/03/svg-in-ie-update/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;19-3&quot;&gt;Gecko&lt;/a&gt;를 사용하는 방법이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;한편, 크로스 브라우저 그래픽스 API도 제공됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 XULRunner와 SVG를 사용하여 큰 프론트 엔드를 수행했지만 웹 상에서는 IE를 충족시켜야 하는 것이 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2/ 제가 가장 자주 언급한 두 가지는 mozilla.org 의&lt;a href=&quot;http://phrogz.net/ObjJob/objects.asp?langID=1&quot; papago-id=&quot;20-3&quot; rel=&quot;nofollow noreferrer&quot;&gt; &lt;/a&gt;&lt;a href=&quot;http://www.mozilla.org/projects/svg/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;20-1&quot;&gt;SVG 페이지&lt;/a&gt;와 이 &lt;a href=&quot;http://phrogz.net/ObjJob/objects.asp?langID=1&quot; papago-id=&quot;20-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;SVG&lt;/a&gt; DOM 참조였습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 SVG 링크가 &lt;a href=&quot;http://delicious.com/MachineElf/svg&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;20-5&quot;&gt;맛있는&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;http://www.bpel4chor.org/editor/; 에는 기존 편집기가 한 대 있습니다. 또한 원하는 것이 모든 아크가 격자 위에 있는 도식이라면 SVG 없이 디브와 이미지를 사용하여 이 작업을 매우 잘 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 그냥 &lt;a href=&quot;http://www.tincancamera.com/blog/2005/03/lo-fi-uml.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;21-3&quot;&gt;로파이 루트로&lt;/a&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;@jwmittag가 언급한 것처럼&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;canvas&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&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;그것은 사파리와 파이어폭스 3, 오페라 9에서 작동하며 &lt;a href=&quot;http://arstechnica.com/news.ars/post/20080819-mozilla-drags-ie-into-the-future-with-canvas-element-plugin.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;24-1&quot;&gt;사람들은 IE에 대한 지원을 개발하고 있습니다&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 도구 및 속성과 관련된 마우스 클릭을 쉽게 캡처할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 페이지 디스플레이에 캔버스를 다시 그립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 지금 막 프로젝트를 마쳤습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;canvas&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;또한 OpenGL이나 카이로 작업을 해본 적이 있는 경우에는 작업하기에 간단하고 매우 강력한 API입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;행운을 빌어요, 멋진 프로젝트 같네요.&lt;/font&gt;&lt;/p&gt;&lt;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/33347/about-scripting-svg&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Ajax</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1281</guid>
      <comments>https://ittop.tistory.com/1281#entry1281comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:57:46 +0900</pubDate>
    </item>
    <item>
      <title>wp_insert_post()를 사용할 때 post_content 안에 구텐베르크 블록을 삽입하는 방법은?</title>
      <link>https://ittop.tistory.com/1280</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;wp_insert_post()를 사용할 때 post_content 안에 구텐베르크 블록을 삽입하는 방법은?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 PHP에서 구텐베르크 블록을 생성하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 현재 유튜브에서 동영상을 가져와서 각 동영상에 대한 게시물을 만드는 워드프레스 플러그인을 개발하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;post_content 안에 유튜브 영상을 삽입할 수 있는데, Gutenberg 편집기로 게시물을 편집하면 블록으로 표시되지 않습니다.&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;여기 https://developer.wordpress.org/block-editor/ 에서 대부분의 &quot;블록 편집자 핸드북&quot;을 읽었지만 사용자 지정 블록을 만드는 방법 외에는 찾을 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 구글에서 검색해봤지만, 제가 찾은 것은 역시 커스텀 블록을 만드는 것이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런데 post_content 안에 html comment로 Gutenberg block이 저장되어 있는데, 그 comment는 Gutenberg WYYWYG editor를 통해 js로 생성된 것 같습니다.&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;블록으로 게시물을 만들고 데이터베이스에서 post_content를 복사한 후 &quot;템플릿&quot;으로 사용할 수 있다는 것은 알고 있지만 적절한 방법은 아닌 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WordPress와 함께 제공되는 블록(즉, 임베디드, 문단)을 사용하고 PHP로 post_content에 저장되는 html 주석을 생성하는 것에 대한 문서가 있습니까?&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;YouTube 블록을 수동으로 추가하는 경우 도구 &amp;amp; 옵션 메뉴(오른쪽)에서 &quot;코드 편집기&quot; 보기를 클릭합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Code Editor(코드 편집기) 보기에서 편집기가 블록을 올바르게 구문 분석하는 데 필요한 HTML을 볼 수 있습니다.&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;/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;!-- wp:core-embed/youtube {&quot;url&quot;:&quot;https://www.youtube.com/watch?v=VIDEOID&quot;,&quot;type&quot;:&quot;video&quot;,&quot;providerNameSlug&quot;:&quot;youtube&quot;,&quot;className&quot;:&quot;wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;} --&amp;gt;
&amp;lt;figure class=&quot;wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&amp;gt;&amp;lt;div class=&quot;wp-block-embed__wrapper&quot;&amp;gt;
https://www.youtube.com/watch?v=VIDEOID
&amp;lt;/div&amp;gt;&amp;lt;/figure&amp;gt;
&amp;lt;!-- /wp:core-embed/youtube --&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오늘 구텐베르크 블록의 내용을 프로그래밍 방식으로 업데이트해야 했습니다.&lt;/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;ul&gt; 
 &lt;li&gt;&lt;code&gt;parse_blocks()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기존 배열을 읽기 위해 PHP의 어떤 배열로 수정할 수 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;render_blocks()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 post_content에 컨텐츠를 추가합니다. 그런 다음 post 배열을 다음을 통해 저장할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wp_update_post()&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;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기사를 읽는 것이 도움이 되었습니다. https://www.billerickson.net/access-gutenberg-block-data/&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;저의 프로젝트는 블록 내의 다른 사용자 지정 게시물 유형으로 관계 accf 사용자 지정 필드를 편집하는 것이지만 프로세스는 상당히 유사해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;OP의 프로젝트 관련:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어레이(parse_block) 템플릿을 생성하기 위해 첫 번째 게시물을 수동으로 생성하는 것을 제안합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 이 배열을 사용자 정의하는 것은 상대적으로 사소해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/58473682/how-to-insert-gutenberg-block-inside-post-content-when-using-wp-insert-post&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>wordpress</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1280</guid>
      <comments>https://ittop.tistory.com/1280#entry1280comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:57:40 +0900</pubDate>
    </item>
    <item>
      <title>스프링부트 및 스프링웹플럭스와 함께 &amp;quot;기능성 콩 정의 코틀린 DSL&amp;quot;을 사용하는 방법?</title>
      <link>https://ittop.tistory.com/1279</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스프링부트 및 스프링웹플럭스와 함께 &quot;기능성 콩 정의 코틀린 DSL&quot;을 사용하는 방법?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt 의 댓글은 새로운 &quot;기능성 콩 정의 코틀린 DSL&quot;을 통해 봄 콩을 정의하는 방법을 보여줍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 https://github.com/sdeleuze/spring-kotlin-functional 을 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이 예제에서는 &lt;em papago-id=&quot;1-5&quot;&gt;일반&lt;/em&gt; Spring만 사용하고 Spring &lt;em papago-id=&quot;1-7&quot;&gt;Boot&lt;/em&gt;는 사용하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DSL을 Spring &lt;em papago-id=&quot;1-9&quot;&gt;Boot&lt;/em&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;스프링 부트는 Java Config를 기반으로 하지만 다음을 통해 사용자 정의 &lt;a href=&quot;https://docs.spring.io/spring-framework/docs/5.0.0.BUILD-SNAPSHOT/spring-framework-reference/kotlin.html#functional-bean-declaration-dsl&quot; papago-id=&quot;0-1&quot; rel=&quot;noreferrer&quot;&gt;기능적&lt;/a&gt; 빈 &lt;a href=&quot;https://docs.spring.io/spring-framework/docs/5.0.0.BUILD-SNAPSHOT/spring-framework-reference/kotlin.html#functional-bean-declaration-dsl&quot; papago-id=&quot;0-1&quot; rel=&quot;noreferrer&quot;&gt;선언 DSL&lt;/a&gt;의 실험적 지원을 허용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ApplicationContextInitializer&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;a href=&quot;https://stackoverflow.com/questions/35217354/how-to-add-custom-applicationcontextinitializer-to-a-spring-boot-application&quot; papago-id=&quot;1-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;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로, 예를 들어, 당신은 당신의 콩을 신고할 수 있어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Beans.kt&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;beans()&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;fun beans() = beans {
    // Define your bean with Kotlin DSL here
}
&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;그럼 실행할 때 Boot에서 고려할 수 있도록 하기 위해서입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main()&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;ApplicationContextInitializer&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 BeansInitializer : ApplicationContextInitializer&amp;lt;GenericApplicationContext&amp;gt; {

    override fun initialize(context: GenericApplicationContext) =
        beans().initialize(context)

}
&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;application.properties&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;context.initializer.classes=com.example.BeansInitializer  
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/sdeleuze/spring-kotlin-functional/tree/boot&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12-1&quot;&gt;여기&lt;/a&gt;에서 전체 예시를 찾을 수 있으며 기능성 콩 등록을 위한 전용 스프링 부트 지원에 대한 이 &lt;a href=&quot;https://github.com/spring-projects/spring-boot/issues/8115&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12-3&quot;&gt;문제&lt;/a&gt;를 따를 수도 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring Boot의 또 다른 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;fun main(args: Array&amp;lt;String&amp;gt;) {
    runApplication&amp;lt;DemoApplication&amp;gt;(*args) {
        addInitializers(
                beans {
                    // Define your bean with Kotlin DSL here
                }
        )
    }
}
&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;*Config.kt 파일에서 빈을 정의하고 &lt;strong papago-id=&quot;14-1&quot;&gt;ApplicationContextInitializer&lt;/strong&gt; 인터페이스의 initialize 메서드를 구현할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;override fun initialize(applicationContext: GenericApplicationContext) {
    ....
}
&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;bean&amp;lt;XServiceImpl&amp;gt;(&quot;xService&quot;)

bean(&quot;beanName&quot;) {
        BeanConstructor(ref(&quot;refBeanName&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/45935931/how-to-use-functional-bean-definition-kotlin-dsl-with-spring-boot-and-spring-w&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Spring-boot</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1279</guid>
      <comments>https://ittop.tistory.com/1279#entry1279comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:57:33 +0900</pubDate>
    </item>
    <item>
      <title>js 파일 내의 함수를 호출하려면 어떻게 해야 합니까?</title>
      <link>https://ittop.tistory.com/1278</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;js 파일 내의 함수를 호출하려면 어떻게 해야 합니까?&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;AppForm.js&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;, 성공적인 ajax post response 후에 다시 초기화하고 싶습니다.&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;(function(namespace, $) {
    &quot;use strict&quot;;

    var AppForm = function() {
        // Create reference to this instance
        var o = this;
        // Initialize app when document is ready
        $(document).ready(function() {
            o.initialize();
        });

    };
    var p = AppForm.prototype;

    p.initialize = function() {
        // Init events
        this._enableEvents();

        this._initRadioAndCheckbox();
        this._initFloatingLabels();
        this._initValidation();
    };

    p._enableEvents = function () {
       //blah blah blah
       e.preventDefault();
    };

    p._initRadioAndCheckbox = function () {

    };

    p._initFloatingLabels = function () {

    };

    p._initValidation = function () {

    };

    window.materialadmin.AppForm = new AppForm;
}(this.materialadmin, jQuery)); // pass in (namespace, jQuery):
&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;$.ajax({
    url: path, type: &quot;POST&quot;, cache: &quot;false&quot;,
    dataType: &quot;html&quot;,
    contentType: &quot;application/json; charset=utf-8&quot;,
    traditional: true,
    data: JSON.stringify(postData)
}).success(function (data) {
    $(&quot;#products-list&quot;).html(data);
    //**PERFORM INIT OF JS FILE**

}).error(function (data) {

});
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;댄의 답변 덕분에 해결책은 꽤 근접했지만 이벤트가 작동하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strike papago-id=&quot;5-1&quot;&gt;
&lt;/strike&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strike papago-id=&quot;5-1&quot;&gt;  그 이후로&lt;/strike&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strike papago-id=&quot;5-1&quot;&gt; &lt;code papago-id=&quot;5-1-1&quot;&gt;e.preventDefault();&lt;/code&gt; 라고 합니다.&lt;/strike&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strike papago-id=&quot;5-1&quot;&gt; &lt;/strike&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;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;true&quot;&gt; 
 &lt;div class=&quot;snippet-code snippet-currently-hidden&quot;&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;(function(namespace, $) {
	&quot;use strict&quot;;

	var AppForm = function() {
		// Create reference to this instance
		var o = this;
		// Initialize app when document is ready
		$(document).ready(function() {
			o.initialize();
		});

	};
	var p = AppForm.prototype;

	// =========================================================================
	// INIT
	// =========================================================================

	p.initialize = function() {
		// Init events
		this._enableEvents();
		
		this._initRadioAndCheckbox();
		this._initFloatingLabels();
		this._initValidation();
	};
	
	// =========================================================================
	// EVENTS
	// =========================================================================

	// events
	p._enableEvents = function () {
		var o = this;

		// Link submit function
		$('[data-submit=&quot;form&quot;]').on('click', function (e) {
			e.preventDefault();
			var formId = $(e.currentTarget).attr('href');
			$(formId).submit();
		});
		
		// Init textarea autosize
		$('textarea.autosize').on('focus', function () {
			$(this).autosize({append: ''});
		});
	};
	
	// =========================================================================
	// RADIO AND CHECKBOX LISTENERS
	// =========================================================================

	p._initRadioAndCheckbox = function () {
		// Add a span class the styled checkboxes and radio buttons for correct styling
		$('.checkbox-styled input, .radio-styled input').each(function () {
			if ($(this).next('span').length === 0) {
				$(this).after('&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;');
			}
		});
	};
	
	// =========================================================================
	// FLOATING LABELS
	// =========================================================================

	p._initFloatingLabels = function () {
		var o = this;

		$('.floating-label .form-control').on('keyup change', function (e) {
			var input = $(e.currentTarget);

			if ($.trim(input.val()) !== '') {
				input.addClass('dirty').removeClass('static');
			} else {
				input.removeClass('dirty').removeClass('static');
			}
		});

		$('.floating-label .form-control').each(function () {
			var input = $(this);

			if ($.trim(input.val()) !== '') {
				input.addClass('static').addClass('dirty');
			}
		});

		$('.form-horizontal .form-control').each(function () {
			$(this).after('&amp;lt;div class=&quot;form-control-line&quot;&amp;gt;&amp;lt;/div&amp;gt;');
		});
	};
	
	// =========================================================================
	// VALIDATION
	// =========================================================================

	p._initValidation = function () {
		if (!$.isFunction($.fn.validate)) {
			return;
		}
		$.validator.setDefaults({
			highlight: function (element) {
				$(element).closest('.form-group').addClass('has-error');
			},
			unhighlight: function (element) {
				$(element).closest('.form-group').removeClass('has-error');
			},
			errorElement: 'span',
			errorClass: 'help-block',
			errorPlacement: function (error, element) {
				if (element.parent('.input-group').length) {
					error.insertAfter(element.parent());
				}
				else if (element.parent('label').length) {
					error.insertAfter(element.parent());
				}
				else {
					error.insertAfter(element);
				}
			}
		});

		$('.form-validate').each(function () {
			var validator = $(this).validate();
			$(this).data('validator', validator);
		});
	};
	
	// =========================================================================
	// DEFINE NAMESPACE
	// =========================================================================

	window.materialadmin.AppForm = new AppForm;
}(this.materialadmin, jQuery)); // pass in (namespace, jQuery):&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;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;7-0&quot;&gt;업데이트&lt;/strong&gt; 1 &lt;strong papago-id=&quot;7-0&quot;&gt;추가&lt;/strong&gt;했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;window.materialadmin.AppForm.Initilize&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;ajax 응답에서 이벤트가 작동하지 않습니다.&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;strong papago-id=&quot;9-0&quot;&gt;업데이트&lt;/strong&gt; 2 &lt;strong papago-id=&quot;9-0&quot;&gt;그리고&lt;/strong&gt; 여기 포스트백 후 작동하지 않는 코드가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.ProductOnlyForDemonstation, .IncludeInMainPage, .Active&quot;)
    .on('click', 'button', function(){
        $('.sweet-overlay').toggle();
        if (jQuery(&quot;#FORM&quot;).valid()) {
            var id = $(this).attr(&quot;data-id&quot;);
            $.post(&quot;/product/DemoIncludeActive&quot;, {
                &quot;Id&quot;: id,
                &quot;ProductOnlyForDemonstation&quot;: $(&quot;#ProductOnlyForDemonstation-&quot; + id).is(':checked'),
                &quot;IncludeInMainPage&quot;: $(&quot;#IncludeInMainPage-&quot; + id).is(':checked'),
                &quot;Active&quot;: $(&quot;#Active-&quot; + id).is(':checked'),
            },
            function (data) {

            }).success(function (data) {

            }).error(function () {

            });
        }
    });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 당신의 코드를 전역 함수로 포장할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(function(namespace, $) {
  &quot;use strict&quot;;
  window.main = function() {
    var AppForm = function () {
    // ...
    };
  };

  window.main(); // you can initialize it here
)(this.materialadmin, jQuery);
&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;.success(function (data) {
  $(&quot;#products-list&quot;).html(data);
  //**PERFORM INIT OF JS FILE**
  window.main();
}).error(function (data) {

});
&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-0&quot;&gt;편집&lt;/strong&gt;: 전역 객체에 초기화 방법을 노출하는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;AJAX 응답이 완료되면 init 메서드를 호출할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.success(function (data) {
  $(&quot;#products-list&quot;).html(data);
  //**PERFORM INIT OF JS FILE**
  window.materialadmin.AppForm.initialize();
}).error(function (data) {

});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트 2 관련&lt;/font&gt;&lt;/em&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;$(document).on(
    'click',
    '.ProductOnlyForDemonstation button, .IncludeInMainPage button, .Active button',
    function() {
        // Your code
    }
);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뭔가를 로드하고 응답 후 새 페이지 내용을 렌더링한다고 가정하기 때문에 이전에 등록된 이벤트는 새 요소에 첨부되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위임을 사용하면 이벤트가 연결되어 있기 때문에 요소가 동적으로 DOM에 추가된 후에도(선택하는 선택기와 일치하는 경우) 이벤트가 작동하게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;document&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 당신의 단추에서 거품이 났습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DOM에서 이벤트를 더 깊게 첨부할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;document&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동적 내용을 포함하는 요소(즉, 요청을 완료한 후 덮어쓰지 않는 가장 가까운 요소)에 해당합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 또한 모두에게 고유 클래스를 추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.ProductOnlyForDemonstation button, .IncludeInMainPage button, .Active button&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;이벤트를 해당 클래스에 위임합니다(shorter 정의).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포스트백 후에 이벤트가 작동하는지 확인하는 몇 가지&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;1)$(&quot;#products-list&quot;)를 사용합니다. html(데이터)는 #products-list의 하위 요소에 연결된 모든 이벤트를 제거합니다.&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;그렇다면 a) 이벤트 위임 &lt;a href=&quot;https://stackoverflow.com/questions/1359018/in-jquery-how-to-attach-events-to-dynamic-html-elements&quot; papago-id=&quot;22-1&quot;&gt;InjQuery&lt;/a&gt;를 사용하여 &quot;#products-list&quot;에 이벤트를 한 번만 첨부하면 &lt;a href=&quot;https://stackoverflow.com/questions/1359018/in-jquery-how-to-attach-events-to-dynamic-html-elements&quot; papago-id=&quot;22-1&quot;&gt;동적 html 요소에 이벤트를 첨부하는 방법&lt;/a&gt;은 무엇입니까&lt;a href=&quot;https://stackoverflow.com/questions/1359018/in-jquery-how-to-attach-events-to-dynamic-html-elements&quot; papago-id=&quot;22-1&quot;&gt;?&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 b)$(&quot;#products-list&quot;)를 사용한 후 모든 하위 항목에 이벤트를 다시 첨부합니다. html(데이터)&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;2) . html()를 사용하지 마십시오. 왜냐하면 아이들에 대한 모든 jquery data와 이벤트도 제거하기 때문입니다.&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;이벤트를 다시 초기화한 후 모든 이벤트가 제대로 작동하지 않습니다.&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;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;hr&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;27&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;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;28-1&quot;&gt;jQuery 1.7 또는&lt;/strong&gt; 그 &lt;strong papago-id=&quot;28-1&quot;&gt;외&lt;/strong&gt; 버전을 사용하는 경우 다음 코드를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.ProductOnlyForDemonstation, .IncludeInMainPage, .Active&quot;).off();
$('[data-submit=&quot;form&quot;]').off('click');
$('textarea.autosize').off('focus');
$('.floating-label .form-control').off('keyup change');
//-----------------
//**PERFORM INIT OF JS FILE**
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 선 앞에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;//**PERFORM INIT OF JS FILE**&lt;/code&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;strong papago-id=&quot;30-1&quot;&gt;그리고&lt;/strong&gt; 1&lt;strong papago-id=&quot;30-1&quot;&gt;.7 이하의 jquery&lt;/strong&gt;를 사용하고 다음 코드를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.ProductOnlyForDemonstation, .IncludeInMainPage, .Active&quot;).unbind();
$('[data-submit=&quot;form&quot;]').unbind('click');
$('textarea.autosize').unbind('focus');
$('.floating-label .form-control').unbind('keyup change');
//-----------------
//**PERFORM INIT OF JS FILE**
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 선 앞에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;//**PERFORM INIT OF JS FILE**&lt;/code&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;unbind와 관련된 자세한 도움말을 보려면 &lt;a href=&quot;http://api.jquery.com/unbind/&quot; rel=&quot;nofollow&quot; papago-id=&quot;32-1&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;a href=&quot;http://api.jquery.com/off/&quot; rel=&quot;nofollow&quot; papago-id=&quot;33-1&quot;&gt;여기&lt;/a&gt;를 클릭해주세요. 도움이 되기를 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수를 호출하려면 다음 사항을 고려해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수는 호출을 시도하기 전에 동일한 파일 또는 로드된 파일에 정의되어야 합니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수는 호출하려는 함수의 범위보다 같거나 큰 범위에 있어야 합니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;function fnc1을 first.js에서 선언하고, 두 번째로 fnc1()을 가질 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;&lt;strong papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;first.js :&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function fnc1 (){
    alert('test');
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em&gt;&lt;strong papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;second.js :&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;fnc1();
index.html :

&amp;lt;script type=&quot;text/javascript&quot; src=&quot;first.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot; src=&quot;second.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라인을 추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;namespace.initialize = p.initialize;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드 끝에 다음과(와)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(function(namespace, $) {
    &quot;use strict&quot;;

    /* .......  */

    // =================================================
    // DEFINE NAMESPACE
    // =================================================

    namespace.AppForm = new AppForm;
    namespace.initialize = p.initialize;
}(this.materialadmin, jQuery)); // pass in (namespace, jQuery):
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고나서,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;p.initialize&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로 전세계적으로 사용할 수 있게 되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;materialadmin.initialize&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 다음과 같은 다른 파일에서 호출할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;materialadmin.initialize();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마도 두가지 해결책이&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제1해&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;48&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;&amp;lt;script language=&quot;text/javascript&quot;&amp;gt;
   function load_js()
   {
      var head= document.getElementsByTagName('head')[0];
      var script= document.createElement('script');
      script.type= 'text/javascript';
      script.src= 'source_file.js';
      head.appendChild(script);
   }
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 당신의 성공을 위해:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.success(function (data) {
  $(&quot;#products-list&quot;).html(data);      
   load_js();
}).error(function (data) {

});
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;50&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;em papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 해결책처럼 : 다시 로드할 함수로 js 파일을 만듭니다.&lt;/font&gt;&lt;/em&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;a href=&quot;http://api.jquery.com/jQuery.getScript/&quot; rel=&quot;nofollow&quot; papago-id=&quot;52-1&quot;&gt;getScript&lt;/a&gt;를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;write - 파일이 로드되면 콜백도 가능합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설명: GET HTTP 요청을 사용하여 서버에서 자바스크립트 파일을 로드한 후 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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;.success(function (data) {
    $.getScript('your-file.js', function() {

}).error(function (data) {

});
&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;jQuery.getScript('my-js.js');
&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;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ajax url 스크립트의 맨 위에 이 내용을 인쇄하면 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;your-js-to-be-initialized.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&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;jquery ajax 코드는 그대로 유지됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 요청에 대한 스크립트를 인쇄하면 해당 스크립트가 다시 초기화되어 구성 요소에 바인딩됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
    url: path.php, type: &quot;POST&quot;, cache: &quot;false&quot;,
    dataType: &quot;html&quot;, contentType: &quot;application/json; charset=utf-8&quot;,
    traditional: true,
    data: JSON.stringify(postData)
}).success(function (data) {
    $(&quot;#products-list&quot;).html(data);

    //**PERFORM INIT OF JS FILE** 
    //path.php should echo/print the &amp;lt;script src=&quot;your-js-to-be-initialized.js&quot;&amp;gt;

}).error(function (data) {

});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 당신의 편집 이력을 보고 당신이 편집한 것을 봤습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;p._enableEvents = function () {
    var o = this;

    // Link submit function
    $('[data-submit=&quot;form&quot;]').on('click', function (e) {
        e.preventDefault();
        var formId = $(e.currentTarget).attr('href');
        $(formId).submit();
    });

    // Init textarea autosize
    $('textarea.autosize').on('focus', function () {
        $(this).autosize({append: ''});
    });
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래도 이벤트를 활성화하는 방법이라면, 아약스 콜백을 다시 초기화한 후 폼 클릭 및 텍스트 영역 포커스에 대한 구독이 두 개 이상 있는 것이 원인일 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 init 작업만 하고 콜백 기능에서 이벤트 바인딩은 제외하는 것을 추천합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 해보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&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($) {
    &quot;use strict&quot;;

    var materialadmin = {};

    var AppForm = function() {
        //closure
        var self = this;

        (function(){
        //todo: init events
        };)();

        //&amp;lt;your AppForm class's props here...&amp;gt;
    };

    materialadmin.Init = function(){
        //create instance of AppForm calss for materialadmin object
        materialadmin.appForm = new AppForm();
    }

    return materialadmin;
//*}(jQuery)); //  syntax mistake, i'm sorry)).*
})(jQuery);

$(document).ready(function(){
    materialadmin.Init();
});

$.ajax({
  url: path, 
  type: &quot;POST&quot;, 
  cache: &quot;false&quot;,
  dataType: &quot;html&quot;, 
  contentType: &quot;application/json; charset=utf-8&quot;,
  traditional: true,
  data: JSON.stringify(postData),
  success: function (data) {
    $(&quot;#products-list&quot;).html(data);
    
    materialadmin.Init();
  },
  error: function(){
    alert('error')}
});&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;jQuery validator를 사용하고 있으므로 의 메서드를 사용하여 양식을 재설정할 수 있습니다.&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;이 목적을 위해, 당신은 A를 노출할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;reset&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;    p.reset = function () {
        // Reset managed form
        $('.form-validate').data('validator').resetForm();

        // Reset custom stuff
        this._initRadioAndCheckbox();
        this._initFloatingLabels();
    };
&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;요청을 게시한 후 양식을 올바르게 재설정하려면 init 내용에서 이벤트 바인딩을 분리해야 합니다. 예를 들어 다음 이벤트 바인딩이 다음에서 이동해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;_initFloatingLabels&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;_enableEvents&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;    // Link submit function
    $('[data-submit=&quot;form&quot;]').on('click', function (e) {
        e.preventDefault();
        var formId = $(e.currentTarget).attr('href');
        $(formId).submit();
    });
&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;window.materialadmin.AppForm.reset()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 POST 요청의 콜백에서.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/36247729/how-can-i-call-a-function-within-a-js-file&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Ajax</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1278</guid>
      <comments>https://ittop.tistory.com/1278#entry1278comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:57:27 +0900</pubDate>
    </item>
    <item>
      <title>문자열에 숫자가 포함되어 있는지 확인합니다.</title>
      <link>https://ittop.tistory.com/1277</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열에 숫자가 포함되어 있는지 확인합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 필드의 문자열에 숫자가 포함되어 있는지 확인한 후 삭제하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;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;pre&gt;&lt;code&gt;tbl_tags
 -------------
| id | tag    |
 -------------
| 1  | hello  |
| 2  | hello2 |
| 3  | 2hello |
| 4  | hel3lo |
 -------------
&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;strong papago-id=&quot;3-1&quot;&gt;1%' &lt;/strong&gt;또는 '%&lt;strong papago-id=&quot;3-1&quot;&gt;2%'&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;4&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/regexp.html#operator_regexp&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;MySQL Regex 메서드&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;SELECT * FROM table WHERE tag REGEXP '[0-9]'
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;SELECT * 
FROM clients
WHERE name REGEXP '^[[:digit:]]+$'
ORDER BY `clients`.`country_id` DESC 
LIMIT 0 , 30
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;숫자만 있는 문자열을 찾는다면 이것이 답입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3269857/check-if-a-string-contains-numbers&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>mysql</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1277</guid>
      <comments>https://ittop.tistory.com/1277#entry1277comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:57:13 +0900</pubDate>
    </item>
    <item>
      <title>$ (달러 기호) 구조화된 표기법에 대한 등가(Excel 워크시트 표)</title>
      <link>https://ittop.tistory.com/1276</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$ (달러 기호) 구조화된 표기법에 대한 등가(Excel 워크시트 표)&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 $A를 찾고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;$Excel에서 구조화된 테이블 참조에 해당합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내게 이런 공식이 있다고 치자.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=INDEX(tChoice,MATCH(OFFSET(tData[@[cm_sex]],-3,0),tChoice[name],0),3)
&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;기본적으로 tData는 설문조사에서 가져온 원시 데이터(많은 열)로 가득 찬 표입니다(따라서 각 열은 설문조사 질문입니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;tChoice는 더 작은 테이블입니다(몇 개의 열만 있음). 기본적으로 tChoice의 원시 데이터 값을 조회하고 이를 기반으로 레이블을 반환합니다(value-label table is tChoice).&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;셀의 수식을 왼쪽에 적용하기 때문에 tData[@[cm_sex]가 자동으로 증가되기를 원하지만(원시 데이터의 모든 열을 순환함), tChoice[name] 열이 변경되지 않았으면 합니다(예: 원시 테이블 데이터를 기반으로 일치하는 항목을 찾음).&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;이는 예를 들어 A:A(B:B, C:C 등으로 자동 증가)와 $A:$A(그렇지 않음)를 쓰는 것과 같습니다.&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;P-S: 물론 범위를 검색하고 tChoice[name]로 대체하는 것보다 전체 범위를 늘리는 것과 같은 다른 작업도 할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 적절한 표기법을 사용하는 것이 더 깨끗하고 효율적일 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지원 페이지(https://support.office.com/en-us/article/Using-structured-references-with-Excel-tables-f5ed2452-2337-4f71-bed3-c8ae6d2b276e) 에서 찾을 수 없습니다.&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;user3964075는 댓글로 답을 제공했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이것을 본 적이 없어서 이 대답을 해주신 그나 그녀에게 감사드립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹에는 절대적인 구조화된 표 참조에 대한 정보가 몇 가지 있습니다. 그래서 저는 제가 발견한 것을 요약해 보려고 생각했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상황에 맞게 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tChoice[[name]:[name]]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반 셀 참조에서 $ 기호처럼 열을 고정하는 범위를 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 행(공식이 들어 있는 행)만 처리하려면 앵커는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tChoice[@[name]:[name]]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&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;a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오른쪽, a:a로 시작하여 a:b 등:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gUy0z.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gUy0z.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 부분은 절대적이고 두 번째 부분은 상대적인 공식을 사용하여 이를 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=SUM(Table1[@[a]:[a]]:Table1[@a])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 공식들은 복사되지 않고 드래그되는 경우가 많습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마도 이렇게 하는 키보드 단축키가 있을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 과정은 일반적인 셀 참조와 마찬가지로 F4를 클릭하는 것에 비해 다소 투박합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Jon Acampora는 이 과정을 자동화하는 애드인과 이 주제에 대한 두 개의 상세한 게시물을 만들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.excelcampus.com/tips/absolute-formula-references-excel-structured-table/&quot; papago-id=&quot;18-1&quot; rel=&quot;noreferrer&quot;&gt;그의 &lt;/a&gt;첫 번째 &lt;a href=&quot;http://www.excelcampus.com/tips/absolute-formula-references-excel-structured-table/&quot; papago-id=&quot;18-1&quot; rel=&quot;noreferrer&quot;&gt;게시물&lt;/a&gt;에는 추가 기능이 있는 링크가 포함되어 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/32107549/dollar-sign-equivalent-for-structured-notation-excel-worksheet-table&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Excel</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1276</guid>
      <comments>https://ittop.tistory.com/1276#entry1276comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:57:07 +0900</pubDate>
    </item>
    <item>
      <title>업데이트 명령에서 SQL Server 오류 - &amp;quot;현재 명령에서 심각한 오류가 발생했습니다.&amp;quot;</title>
      <link>https://ittop.tistory.com/1275</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 오류 - &quot;현재 명령에서 심각한 오류가 발생했습니다.&quot;&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL Server Management Studio에서 다음 쿼리를 실행하면 다음 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;update table_name set is_active = 0 where id  = 3
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 명령에서 심각한 오류가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과가 있는 경우에는 폐기해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로그가 잘렸습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트 트리거가 있지만 이 문제는 아닙니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;트랜잭션 수가 0입니다(@trancount).&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스의 다른 테이블 몇 개에도 동일한 업데이트 문을 시도해 보았는데 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DBCC CHECKTABLE('table_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;주는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DBCC results for 'table_name'.
There are 13 rows in 1 pages for object &quot;table_name&quot;.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 오류가 있었는데, 그것은 지수가 손상된 것으로 떨어졌습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블을 다시 색인화하면 문제가 해결되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;SubQuery&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 같은 문제가 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 문제가 메모리 유출 때문이라는 것을 깨달았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 시작 중&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MSSQL&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서비스 플러시 원인&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tempDb&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자원과 자유로운 거대한 양의 메모리.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그래서 이것이 문제를 해결했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&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;DBCC CHECKTABLE('table_name');&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Notance가 설치된 LOG 폴더를 확인합니다(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보통) '라는 이름의 파일에 대해&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SQLDUMP*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 시나리오이지만 동일한 오류:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저장 프로시저를 사용하여 임시 테이블에 레코드를 삽입하려고 할 때 이 오류가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파라미터가 일치하지 않는 것으로 나타났습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;BIGINT를 INT에 삽입하려고 했습니다.&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;비키 하프: http://vickyharp.com/2012/03/troubleshooting-a-severe-error-occurred-on-the-current-command/&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;MS KB에는 3가지 가능성이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://support.microsoft.com/kb/959028/en-us&quot; rel=&quot;nofollow noreferrer&quot;&gt;959028&lt;/a&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://support.microsoft.com/kb/910416/en-us&quot; rel=&quot;nofollow noreferrer&quot;&gt;910416&lt;/a&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://support.microsoft.com/kb/938102/en-us&quot; rel=&quot;nofollow noreferrer&quot;&gt;938102&lt;/a&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 것을 볼 때는&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 항상 핫픽스, 엔진, 서버 오류 등을 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://support.microsoft.com/search/default.aspx?mode=r&amp;amp;query=%22Msg+0%2C+Level+11%2CState+0%2C+Line+0%22+A+severe+error+occurred+on+the+current+command&amp;amp;spid=global&amp;amp;catalog=LCID%3D2057&amp;amp;2057comm=1&amp;amp;res=20&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;4개의 결과: &quot;Msg 0, Level 11, State 0, Line 0&quot;을 검색합니다. 현재 명령에서 심각한 오류가 발생했습니다.&lt;/font&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: &lt;a href=&quot;http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=480713&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;23-1&quot;&gt;MS Connect에도 있습니다.&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우에는 제가 사용하고 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Threading.CancellationTokenSource&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;SqlCommand&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;catch (SqlException) { }&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류는 정확히 의미하는 바와 같습니다.&lt;/font&gt;&lt;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;Msg 9002, Level 17, State 2, Procedure MyProcedure, Line 2 [Batch Start Line 3]
The transaction log for database 'MyDb' is full due to 'LOG_BACKUP'.
&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;ol&gt; 
 &lt;li papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디스크 공간이 부족한지 확인합니다(이 문제는 제 실제 문제였습니다. NOC에서 이 문제를 파악하지 못했습니다.)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모리가 부족한지 확인합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 이벤트 로그에 하드 드라이브 장애와 같은 심각한 시스템 장애가 표시되는지 확인합니다.&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;확장 프로시저 또는 SQLCLR 안전하지 않은 어셈블리를 통해 로드된 안전하지 않은 코드가 있는지 확인하여 SQLServer.exe 프로세스를 비활성화할 수 있습니다.&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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CheckDB를 실행하여 데이터베이스에 손상 문제가 있는지 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&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;ol&gt; 
   &lt;li papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 데이터베이스와 마스터 DB를 위해서도 이렇게 하겠습니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;/ol&gt;&lt;/li&gt; 
&lt;/ol&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;font class=&quot;papago-parent&quot;&gt;다 리빌드 할 수 있는 스크립트를 찾았는데, 수정한 것 같더군요&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류를 찾기 위해 데이터베이스에서 동일한 쿼리를 실행했습니다. 이전에 100번 이상 작동했던 쿼리입니다.&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 papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최대 연결이 sql 서버에 열려 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 연결을 닫지 않고 열려 있는 앱이 있어서 28K-31K 연결 정도를 실행하고 있었습니다(SQL Sever는 32Kish에서 최대 출력). 몇 천 개의 sleeping 연결을 종료한 후 이 질문에 나열된 오류를 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책은 앱을 열어두는 대신 연결을 닫았는지 확인하기 위해 앱을 업데이트하는 것이었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우에는, 방법:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;context.Database.CreateIfNotExists();&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스를 만들기 전에 여러 번 호출되어 오류가 발생했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 현재 명령에서 심각한 오류가 발생했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과가 있는 경우에는 폐기해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Hangfire에서 라이브러리의 내부 작동에 접근할 수 없거나 주요 원인을 추적할 수 있는 오류가 발생했습니다.&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;a href=&quot;https://stackoverflow.com/users/105929/remus-rusanu&quot; papago-id=&quot;44-1&quot;&gt;Remus Rusanu&lt;/a&gt; 답변을 바탕으로 다음과 같은 스크립트로 수정할 수 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    --first set the database to single user mode
    ALTER DATABASE TransXSmartClientJob
    SET SINGLE_USER
    WITH ROLLBACK IMMEDIATE;
    GO

    -- Then try to repair
    DBCC CHECKDB(TransXSmartClientJob, REPAIR_REBUILD)

    -- when done, set the database back to multiple user mode
    ALTER DATABASE TransXSmartClientJob
    SET MULTI_USER;
    GO
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우엔 다른 일이었는데&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;+=&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오퍼레이터가 원인입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;교체해야 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;+= X&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;field = field + X&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 극복하기 위해서.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마이크로소프트 사이트에서 관련 KB를 찾을 수 없었지만 버그인 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL Server 2008 R2(10.50.1600)를 사용하고 있습니다.&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;다음에 이 일을 접한 사람이 누구든 돕기 위해 2센트를 추가하고 싶었을 뿐입니다.&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;우리는 30분 후에 특정 보고서가 실패하고 있다는 것을 알아챘습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;반환되는 데이터의 양이 많아서 타임아웃인 줄 알았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SSRS 기본 시간 초과 설정은 1800초(30분)인 것으로 나타났습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&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;다음 단계는 보고서 뒤에 있는 MSSQL의 성능을 개선하는 방법을 확인하는 것입니다. :)&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;같은 문제가 있었는데 테이블이 너무 커서 UI에서 고칠 수도 없고 모든 인덱스를 떨어뜨려서 만들 수도 없었습니다.&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;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;BAK 파일에 데이터베이스를 백업했습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 새로 백업된 파일에서 새 데이터베이스를 만들었고 새 데이터베이스를 같은 이름으로 부르지만 &quot;_BK&quot;라는 부록이 붙어 있습니다: myDatabase_BK&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 데이터베이스의 &quot;나쁜 테이블&quot;은 이미 오류 없이 잘 작동하고 있으므로 배포를 통해 새 데이터베이스의 문제가 해결된 것 같습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 남은 것은 라이브 데이터베이스(myDatabase)에서 잘못된 테이블의 이름을 바꾼 다음 백업에서 동일한 테이블을 만드는 것이었습니다(myDatabase.myTable의 이름을 바꾼 후).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;select * into myDatabase.myTable from myDatabase_BK.myTable&lt;/code&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 테이블에 모든 인덱스를 작성해야 합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 이와 같은 예외를 받았지만, 제가 Polybase를 사용하여 Transaction Scopes를 통해 Transaction에 등록 중인 API 요청에서 외부 테이블에 쿼리를 발행하고 있었기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ADO에서 허용된 예외입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Net은 &quot;현재 명령에 심각한 오류가 발생했습니다.&quot;라는 도움이 되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 SSMS에서 다음과 같은 작업을 수행하여 이 문제의 원인이 트랜잭션이라는 것을 알게 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;61&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;62&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;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL Server 로그 확장&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 로그 및 이 예외가 기록되었을 때 기록된 오류를 봅니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 다음을 보았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;Unsupported transaction manager request 0 encountered. SQL Server Parallel DataWarehousing TDS endpoint only supports local transaction request for 'begin/commit/rollback'.&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;em papago-id=&quot;66-1&quot;&gt;트랜잭션&lt;/em&gt; 범위를 억제했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-sql prettyprint-override&quot;&gt;&lt;code&gt;using (var transactionScope = this.transactionScopeFactory.Create(
    System.Transactions.TransactionScopeOption.Suppress,
    new System.Transactions.TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted },
    System.Transactions.TransactionScopeAsyncFlowOption.Enabled))
{
    // ... query

    transactionScope.Complete(); // Suppress scope option renders this unnecessary, but just a good habit
}

&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1175244/sql-server-error-on-update-command-a-severe-error-occurred-on-the-current-com&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>sql-server</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1275</guid>
      <comments>https://ittop.tistory.com/1275#entry1275comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:57:00 +0900</pubDate>
    </item>
    <item>
      <title>ODBC 연결을 올바르게 만드는 방법MariaDB</title>
      <link>https://ittop.tistory.com/1274</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ODBC 연결을 올바르게 만드는 방법Maria&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DB&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 Windows 서버에 있으며 다음 두 가지를 설치했습니다.&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;- MariaDB 버전 10.5.9&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;- MariaDB ODBC 드라이버 버전 3.1.13&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금은 &lt;strong papago-id=&quot;4-1&quot;&gt;ODBC 데이터 원본 관리자&lt;/strong&gt;를 사용하여 &lt;strong papago-id=&quot;4-3&quot;&gt;ODBC 연결&lt;/strong&gt;을 만들고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 '&lt;strong papago-id=&quot;4-5&quot;&gt;추가'&lt;/strong&gt;를 클릭하고&lt;strong papago-id=&quot;4-5&quot;&gt; &lt;/strong&gt;&lt;strong papago-id=&quot;4-7&quot;&gt;MariaDB ODBC&lt;/strong&gt; 드라이버를 선택하면 다음 화면이 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WLhjm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WLhjm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;5-1&quot;&gt;서버 이름, 포트, 사용자 이름&lt;/strong&gt; 및 &lt;strong papago-id=&quot;5-1&quot;&gt;비밀번호&lt;/strong&gt; 아래에 무엇을 입력해야 할지 정말 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;특히 &lt;strong papago-id=&quot;5-3&quot;&gt;서버 이름&lt;/strong&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;URL : https://stackoverflow.com/questions/68652675/how-to-properly-create-an-odbc-connection-mariadb&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MariaDB</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1274</guid>
      <comments>https://ittop.tistory.com/1274#entry1274comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:56:53 +0900</pubDate>
    </item>
    <item>
      <title>파일을 문자열로 필요</title>
      <link>https://ittop.tistory.com/1273</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 문자열로 필요&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;노드+익스프레스를 사용하고 있는데 어떤 파일이든 문자열로 가져올 수 있는 방법이 궁금합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 txt 파일을 가지고 있다고 치자, 내가 원하는 것은 그런 변수에 로드하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var string = require(&quot;words.txt&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;modules.exports = function(){

    var string = &quot;whatever&quot;;

    return string;

}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 개의 특정 확장자를 위한 경우에는 자신의 핸들러를 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var fs = require('fs');

require.extensions['.txt'] = function (module, filename) {
    module.exports = fs.readFileSync(filename, 'utf8');
};

var words = require(&quot;./words.txt&quot;);

console.log(typeof words); // string
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 다음과 함께 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var fs = require('fs');

function readModuleFile(path, callback) {
    try {
        var filename = require.resolve(path);
        fs.readFile(filename, 'utf8', callback);
    } catch (e) {
        callback(e);
    }
}

readModuleFile('./words.txt', function (err, words) {
    console.log(words);
});
&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;CSS 파일을 String으로 읽으려면 이 코드를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;효과가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.txt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;const fs = require('fs')
const path = require('path')

const css = fs.readFileSync(path.resolve(__dirname, 'email.css'), 'utf8')
&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;ES6:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import fs from 'fs'
import path from 'path'

let css = fs.readFileSync(path.resolve(__dirname, 'email.css'), 'utf8')
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택한 답변이 더 &lt;strong papago-id=&quot;8-1&quot;&gt;이상&lt;/strong&gt; &lt;strong papago-id=&quot;8-3&quot;&gt;권장되지 않습니다&lt;/strong&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NodeJS 문서는 다음과 같은 다른 접근 방식을 &lt;a href=&quot;https://nodejs.org/api/modules.html#modules_require_extensions&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-5&quot;&gt;제안&lt;/a&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;다른 Node.js 프로그램을 통해 모듈 로드&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;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 매우 &lt;a href=&quot;https://www.npmjs.com/package/require-text&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-1&quot;&gt;간단한&lt;/a&gt; 라이브러리를 사용할 수 있습니다: require-text&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 직접 구현할 수도 있습니다(위 패키지에서와 같이: ).&lt;/font&gt;&lt;/p&gt; 
  &lt;blockquote&gt; 
   &lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;var fs = require('fs');
module.exports = function(name, require) {
   return fs.readFileSync(require.resolve(name)).toString();
};
&lt;/code&gt;&lt;/pre&gt; 
  &lt;/blockquote&gt; &lt;/li&gt; 
&lt;/ul&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;readFile&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;filesystem&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모듈.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://nodejs.org/docs/v0.3.1/api/fs.html#fs.readFile&quot; rel=&quot;noreferrer&quot; papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://nodejs.org/docs/v0.3.1/api/fs.html#fs.readFile&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 가장 간단한 해결책은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var string = require(&quot;fs&quot;).readFileSync(&quot;file.txt&quot;, 'utf8')
console.log(&quot;string = &quot;, string);
&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;node.js와 TypeScript가 있는 .json 파일을 요구할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 텍스트를 직렬화하는 데 적합한 필수()를 지원하는 유일한 형식입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일 타임 도구를 사용하여 https://github.com/cancerberoSgx/fs-to-json 과 같은 json으로 파일을 포장할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/12752622/require-file-as-string&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Node.js</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1273</guid>
      <comments>https://ittop.tistory.com/1273#entry1273comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:56:46 +0900</pubDate>
    </item>
    <item>
      <title>기능에서 기능으로 파워셸의 명령줄 $args 전달</title>
      <link>https://ittop.tistory.com/1272</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능에서 기능으로 파워셸의 명령줄 $args 전달&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;파워셸 스크립트로 변환해야 하는 배치 파일이 2개 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;file1.bat
---------

echo %1
echo %2
echo %3
file2.bat %*

file2.bat
--------
echo %1
echo %2
echo %3
&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;명령줄에서 이를 C:&amp;gt; file1.bat one two two two two two two two two two two two two two two two two two two.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(이것은 조잡한 코드 샘플입니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파워셸로 전환할 때는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;file1.ps1
---------
Write-Host &quot;args[0] &quot; $args[0]
Write-Host &quot;args[1] &quot; $args[1]
Write-Host &quot;args[2] &quot; $args[2]
. ./file2.ps1 $args

file2.ps1
---------
Write-Host &quot;args[0] &quot; $args[0]
Write-Host &quot;args[1] &quot; $args[1]
Write-Host &quot;args[2] &quot; $args[2]

When I invoke this on powershell command line, I get
$&amp;gt; &amp;amp; file1.ps1 one two three
args[0] one
args[1] two
args[2] three
args[0] one two three 
args[1] 
args[2] 
&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;file1.ps 에서 사용되는 $args가 시스템이기 때문인 것으로 알고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;3개의 문자열 대신 개체[].&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;파일1.ps1에서 받은 $args를 파일2.ps1로 전달하는 방법이 필요합니다. 이는 .bat 파일에서 %*이 달성하는 방법과 거의 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유감스럽게도, 제 예에서 파일 간 통화를 하는 것처럼 교차 기능 통화라고 해도 기존 방식이 깨질 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 가지 조합을 시도해 보았지만 아무 것도 되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도와주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대단히 감사하겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;11-1&quot;&gt;PowerShell V2&lt;/strong&gt;에서는 분할 작업이 매우 간단합니다. bar는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function bar { foo @args }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분할하면 배열 구성원이 단일 배열 인수로 전달되지 않고 개별 인수로 처리됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;13-1&quot;&gt;PowerShell V1&lt;/strong&gt;에서는 복잡하기 때문에 위치 인수를 위한 방법이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 fo가 주어지면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function foo { write-host args0 $args[0] args1 $args[1] args2 $args[2]   }
&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;Invoke()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;foo 함수의 스크립트 블록 상의 메소드&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function bar { $OFS=',';  &quot;bar args: $args&quot;;  $function:foo.Invoke($args) }
&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 papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PS (STA) (16) &amp;gt; bar 1 2 3&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;막대 : 1,2,3&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;args01 args1 2 args2 3&lt;/font&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;# use the pipe, Luke!

file1.ps1
---------
$args | write-host
$args | .\file2.ps1    

file2.ps1
---------
process { write-host $_ }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1303921/passing-around-command-line-args-in-powershell-from-function-to-function&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>PowerShell</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1272</guid>
      <comments>https://ittop.tistory.com/1272#entry1272comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:35:38 +0900</pubDate>
    </item>
    <item>
      <title>네이티브 오브젝트를 확장하는 것이 나쁜 관행인 이유는 무엇입니까?</title>
      <link>https://ittop.tistory.com/1271</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네이티브 오브젝트를 확장하는 것이 나쁜 관행인 이유는 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS의 모든 오피니언 리더는 고유 객체를 확장하는 것은 나쁜 관행이라고 말합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 왜 그랬을까?&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공연 대박 났나요?&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들은 누군가가 그것을 &quot;잘못된 방식&quot;으로 하고 열거할 수 있는 유형을 추가하는 것을 두려워합니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Object&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 모든 물체의 고리를 파괴할 수 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/visionmedia&quot; papago-id=&quot;3-1&quot; rel=&quot;noreferrer&quot;&gt;TJ Holowaychuk&lt;/a&gt;의 &lt;a href=&quot;https://github.com/visionmedia/should.js&quot; papago-id=&quot;3-3&quot; rel=&quot;noreferrer&quot;&gt;should.js&lt;/a&gt;를 예로 들어 보겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그는 &lt;a href=&quot;https://github.com/visionmedia/should.js#omg-it-extends-object&quot; papago-id=&quot;3-5&quot; rel=&quot;noreferrer&quot;&gt;간단한 게터를 추가&lt;/a&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Object&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://github.com/visionmedia/should.js/blob/master/lib/should.js#L66-78&quot; papago-id=&quot;4-1&quot; rel=&quot;noreferrer&quot;&gt;source&lt;/a&gt;).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Object.defineProperty(Object.prototype, 'should', {
  set: function(){},
  get: function(){
    return new Assertion(Object(this).valueOf());
  },
  configurable: true
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정말 말이 되네요.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 한 사람은 확장할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Array&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Array.defineProperty(Array.prototype, &quot;remove&quot;, {
  set: function(){},
  get: function(){
    return removeArrayElement.bind(this);
  }
});
var arr = [0, 1, 2, 3, 4];
arr.remove(3);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네이티브 유형을 확장하는 것에 반대하는 주장이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개체를 확장할 때 개체의 동작을 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p 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;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트에서 객체와 배열 클래스에 메서드를 추가할 경우 자바스크립트의 작동 방식으로 인해 무언가가 깨질 위험이 매우 높습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오랜 경험을 통해 이런 종류의 것들이 자바스크립트에서 온갖 끔찍한 버그를 일으킨다는 것을 알게 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 지정 동작이 필요한 경우 기본 클래스를 변경하는 대신 자신의 클래스(아마도 하위 클래스)를 정의하는 것이 훨씬 더 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게 하면 아무것도 깨지지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서브클래스 없이 클래스가 작동하는 방식을 변경할 수 있는 능력은 좋은 프로그래밍 언어의 중요한 특징이지만 거의 사용하지 않고 주의 깊게 사용해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성능적인 히트와 같은 측정 가능한 단점은 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;적어도 아무도 언급하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 이것은 개인적인 선호와 경험의 문제입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;14-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;/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-0&quot;&gt;주요 모순점:&lt;/strong&gt; 코드가 간섭할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;lib A가 함수를 추가하면 lib B의 함수를 덮어쓸 수 있습니다.&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;font class=&quot;papago-parent&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;17&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;em papago-id=&quot;17-1&quot;&gt;큽니다&lt;/em&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;10%만 사용하고 1% 정도는 이해합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇기 때문에 저는 &lt;a href=&quot;https://github.com/component&quot; rel=&quot;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;font 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;strong papago-id=&quot;19-0&quot;&gt;TL;DR&lt;/strong&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;em papago-id=&quot;19-2&quot;&gt;어떤&lt;/em&gt; 경우에도 네이티브 유형의 기존 기능을 조작하지 않으면 기존 인터페이스가 손상됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유형을 확장하기로 결정한 경우 를 사용하고,&lt;a href=&quot;https://kangax.github.io/compat-table/es5/&quot; papago-id=&quot;6-3&quot; rel=&quot;noreferrer&quot;&gt; 확장&lt;/a&gt;할 수 &lt;a href=&quot;https://kangax.github.io/compat-table/es5/&quot; papago-id=&quot;6-3&quot; rel=&quot;noreferrer&quot;&gt;없는 경우&lt;/a&gt; 유형의 것을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;prototype&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 원래 제가 원해서 이런 질문을 하게 되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Error&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;JSON을 통해 보낼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 그들을 끈으로 묶을 방법이 필요했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;error.stringify()&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;errorlib.stringify(error)&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;errorlib&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;error&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;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;should.js 문서 인용:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OMGIT이 개체를 확장 ?&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;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자, 작가가 어떻게 알 수 있을까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 내 조롱의 틀이 똑같이 적용된다면요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 한 약속들이 똑같이 하면 어쩌죠?&lt;/font&gt;&lt;/p&gt; 
&lt;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;font class=&quot;papago-parent&quot;&gt;언더스코어.js는 올바른 방법으로 수행된 작업의 예입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var arr = [];
_(arr).flatten()
// or: _.flatten(arr)
// NOT: arr.flatten()
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사례별로 살펴보면, 일부 구현은 허용될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;String.prototype.slice = function slice( me ){
  return me;
}; // Definite risk.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 생성된 메소드를 덮어쓰는 것은 해결하는 것보다 더 많은 문제를 발생시키기 때문에 많은 프로그래밍 언어에서 이 관행을 피하기 위해 일반적으로 언급됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;개발자는 기능이 변경되었다는 것을 어떻게 알 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String.prototype.capitalize = function capitalize(){
  return this.charAt(0).toUpperCase() + this.slice(1);
}; // A little less risk.
&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 메서드를 덮어쓰는 것이 아니라 String을 확장하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 게시물에서 한 가지 주장은 새로운 개발자가 이 방법이 핵심 JS의 일부인지 또는 문서를 어디서 찾을 수 있는지 어떻게 알 수 있는지 언급했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 핵심 JS String 객체가 &lt;strong papago-id=&quot;34-1&quot;&gt;capitalize&lt;/strong&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;String.prototype.weCapitalize = function weCapitalize(){
  return this.charAt(0).toUpperCase() + this.slice(1);
}; // marginal risk.

var myString = &quot;hello to you.&quot;;
myString.weCapitalize();
// =&amp;gt; Hello to you.
&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 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;핵심 JS 개체를 확장하는 것이 사용자 및/또는 팀을 위한 것이라고 판단한다면, 아마도 이는 사용자를 위한 것일 것입니다.&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;strong papago-id=&quot;38-0&quot;&gt;내장형 프로토타입을 확장하는 것은 정말 나쁜 생각입니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 ES2015는 원하는 동작을 얻기 위해 사용할 수 있는 새로운 기술을 도입했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h1&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;WeakMap&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유형을 내장형 프로토타입과 연관시키다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/h1&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;Number&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;Array&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;손을 전혀 대지 않고 시제품을 제작할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/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;// new types

const AddMonoid = {
  empty: () =&amp;gt; 0,
  concat: (x, y) =&amp;gt; x + y,
};

const ArrayMonoid = {
  empty: () =&amp;gt; [],
  concat: (acc, x) =&amp;gt; acc.concat(x),
};

const ArrayFold = {
  reduce: xs =&amp;gt; xs.reduce(
   type(xs[0]).monoid.concat,
   type(xs[0]).monoid.empty()
)};


// the WeakMap that associates types to prototpyes

types = new WeakMap();

types.set(Number.prototype, {
  monoid: AddMonoid
});

types.set(Array.prototype, {
  monoid: ArrayMonoid,
  fold: ArrayFold
});


// auxiliary helpers to apply functions of the extended prototypes

const genericType = map =&amp;gt; o =&amp;gt; map.get(o.constructor.prototype);
const type = genericType(types);


// mock data

xs = [1,2,3,4,5];
ys = [[1],[2],[3],[4],[5]];


// and run

console.log(&quot;reducing an Array of Numbers:&quot;, ArrayFold.reduce(xs) );
console.log(&quot;reducing an Array of Arrays:&quot;, ArrayFold.reduce(ys) );
console.log(&quot;built-ins are unmodified:&quot;, Array.prototype.empty);&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보시다시피 원시 프로토타입도 이 기술로 확장할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;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;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 제공 프로토타입과 유형을 연결할 수 있는 아이덴티티입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;reduce&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오직 기대하는 함수.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Array&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&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 정상적인 방법을 사용할 수도 있었다는 것을 알아두세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Map&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;type, 약한 참조는 결코 쓰레기를 수집하지 않는 내장 프로토타입만을 나타내는 경우에는 의미가 없기 때문입니다.&lt;/font&gt;&lt;/font&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;WeakMap&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;올바른 키를 가지고 있지 않으면 검사할 수 없고 검사할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 원하는 기능입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;native Objects를 확장하지 &lt;strong papago-id=&quot;52-1&quot;&gt;말아야&lt;/strong&gt; 하는 또 다른 이유:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 &lt;em papago-id=&quot;53-1&quot;&gt;prototype.js&lt;/em&gt;를 사용하고 native Objects에 많은 것을 확장하는 마젠토를 사용합니다.&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;페이지 중 하나에 웹 구성 요소가 소개되어 있으므로 webcomponents-lite.js는 IE의 전체(원본) 이벤트 개체를 대체하기로 결정합니다(왜?).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 당연히 &lt;em papago-id=&quot;54-1&quot;&gt;prototype.js&lt;/em&gt;를 부수고, 이것은 다시 마젠토를 부수는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(문제를 찾을 때까지 많은 시간을 투자하여 문제를 추적할 수 있습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;이렇게 하지 말아야 할 세 가지 이유(적어도 &lt;em papago-id=&quot;56-1&quot;&gt;애플리케이션&lt;/em&gt; 내에서)를 알 수 있는데, 이 중 두 가지만 기존 답변에서 다루고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잘못하면 확장 형식의 모든 개체에 열거형 속성을 실수로 추가하게 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용하여 쉽게 해결할 수 있으므로 기본적으로 숫자가 아닌 속성을 만듭니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 중인 라이브러리와 충돌이 발생할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로토타입에 무언가를 추가하기 전에 라이브러리에서 정의하는 방법을 확인하고 업그레이드할 때 릴리스 노트를 확인하고 응용프로그램을 테스트하는 것이 중요합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네이티브 자바스크립트 환경의 향후 버전과 충돌이 발생할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포인트 3은 거의 틀림없이 가장 중요한 것입니다.&lt;/font&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 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;Array.prototype.swizzle(foo, bar)&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;오늘, 그리고 내일 Google이 추가됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Array.prototype.swizzle(bar, foo)&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;.swizzle&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;MDN에 기록된 행동과 일치하지 않는 것 같습니다&lt;/font&gt;&lt;/font&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;(&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1075059&quot; papago-id=&quot;64-1&quot; rel=&quot;noreferrer&quot;&gt;무툴이 가지고&lt;/a&gt; 있지&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1075059&quot; papago-id=&quot;64-1&quot; rel=&quot;noreferrer&quot;&gt; 않은 프로토타입을 만지작거리면서 어떻게 ES6 방식으로 웹이 끊기지 않도록&lt;/a&gt; 이름을 &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1075059&quot; papago-id=&quot;64-1&quot; rel=&quot;noreferrer&quot;&gt;바꾸게 되었는지에 대한 이야기&lt;/a&gt;도 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네이티브 개체에 추가되는 메서드에 대해 응용 프로그램별 접두사를 사용하여 이를 피할 수 있습니다(예: 정의).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Array.prototype.myappSwizzle&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Array.prototype.swizzle&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로토타입을 증강하는 대신 독립 실행형 유틸리티 기능을 사용하면 해결이 가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;퍼프도 이유입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;때로는 키를 넘겨야 할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 수행하는 몇 가지 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for (let key in object) { ... }
for (let key in object) { if (object.hasOwnProperty(key) { ... } }
for (let key of Object.keys(object)) { ... }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주로 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;for of Object.keys()&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;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 &lt;a href=&quot;https://jsperf.com/for-in-vs-for-of-keys/1&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;71-1&quot;&gt;훨씬 느려요.&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/onF0B.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/onF0B.png&quot; alt=&quot;for-of vs for-in perf results&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 이유를 추측해 보는 것만으로도&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Object.keys&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;느리다는 것은 분명하지만,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Object.keys()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할당을 해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로 AFAIK는 이후 모든 키의 복사본을 할당해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  const before = Object.keys(object);
  object.newProp = true;
  const after = Object.keys(object);

  before.join('') !== after.join('')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS 엔진이 일종의 불변 키 구조를 사용해서&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Object.keys(object)&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;object.newProp&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;완전히 새로운 불변의 키 객체를 생성하지만 무엇이든 간에, 분명히 최대 15배의 속도로 느려집니다.&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;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;hasOwnProperty&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최대 2배 느린 속도입니다.&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;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;for in&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;hasOwnProperty&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;Object.prototype&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용하는 경우 주의하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Object.defineProperty&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 추가한 것들이 열거할 수 없다면, 그것들은 위의 경우에 자바스크립트의 동작에 영향을 미치지 않을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;불행히도, 적어도 크롬 83에서는 성능에 영향을 미칩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ad9gs.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ad9gs.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;85&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 단지 모든 퍼펙트 문제가 나타나도록 하기 위해 숫자가 없는 속성을 3000개 추가했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;30개의 특성만 가지고도 검정이 너무 가까워서 성능에 영향이 있는지 여부를 알 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://jsperf.com/does-adding-non-enumerable-properties-affect-perf&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://jsperf.com/does-adding-non-enumerable-properties-affect-perf&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Firefox 77과 Safari 13.1은 증강 클래스와 비증강 클래스 간의 성능 차이를 보이지 않았습니다. 아마도 v8은 이 영역에서 수정될 것이고 성능 문제를 무시할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만, 에 &lt;a href=&quot;https://developers.google.com/web/updates/2018/03/smooshgate&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;49-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;Array.prototype.flatten&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 표준위원회가 원주민을 추가하려고 했을 때&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Array.prototype.flatten&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들은 많은 사이트를 깨지 않고서는 불가능한 것을 발견했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브레이크를 알게 된 개발자들은 es5 방식의 이름을 제안했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;smoosh&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;농담으로. 근데 사람들은 그게 농담이라는 걸 이해하지 못하고 기겁을 했어요.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들은 결정했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;flat&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;flatten&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;93&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 이야기의 교훈은 토종 물건을 확장해서는 안 된다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게 하면 동일한 내용이 깨지는 문제가 발생할 수 있으며 특정 라이브러리가 MooTools만큼 인기를 끌지 않는 한 브라우저 공급업체는 사용자가 야기한 문제를 해결하지 못할 것입니다.&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;93-1&quot;&gt;네이티브 개체를 확장하지 마십시오.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;94&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;95&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시간이 지나고 나는 마음을 바꾸었습니다 - &lt;strong papago-id=&quot;95-1&quot;&gt;원형 오염은 좋지&lt;/strong&gt; 않습니다 (그러나 게시물의 끝에 예제를 남겼습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;96&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위와 아래 게시물에 언급된 것보다 훨씬 더 많은 문제를 일으킬 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;97&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS/TS 세계 전체에 걸쳐 단일 표준을 갖는 것이 중요합니다(npmjs가 일관성 있게 적용되면 좋을 것입니다).&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전에 저는 bull**it를 작성하고 사람들에게 도서관에서 이를 수행하도록 권장했습니다. 죄송합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/users/2246213/jeff-clayton&quot; papago-id=&quot;54-0&quot;&gt;Jeff Clayton&lt;/a&gt; 제안도 좋은 것 같습니다. 메서드 이름 접두사는 패키지 이름 뒤에 언더스코어(예:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Array.prototype.&amp;lt;custom&amp;gt;_Flatten&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(기존 패키지 접두사가 향후 기존 패키지가 될 수 있음)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원래 답변의 일부:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 개인적으로 네이티브 메소드를 확장하고 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 단지 사용하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 라이브러리의 접두사(서드파티 라이브러리 확장 시에도 사용).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;104&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TS만:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;declare global {
  interface Array&amp;lt;T&amp;gt; {
    xFlatten(): ExtractArrayItemsRecursive&amp;lt;T&amp;gt;;
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;105&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS+TS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Array.prototype.xFlatten = function() { /*...*/ }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;106&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/14034180/why-is-extending-native-objects-a-bad-practice&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>javascript</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1271</guid>
      <comments>https://ittop.tistory.com/1271#entry1271comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:35:30 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 로컬 변수</title>
      <link>https://ittop.tistory.com/1270</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 로컬 변수&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리에 대한 MySQL 변수를 정의하고 초기화하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p 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;declare @countTotal int;
SET @countTotal = select COUNT(*)
 from nGrams;
&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;Netbeans에서 MySQL을 사용하고 있는데 오류가 있다고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 오류는 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 어떻게 고쳐요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL에는 두 가지 다른 유형의 변수가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;0-0&quot;&gt;로컬 변수&lt;/strong&gt;(&lt;em papago-id=&quot;0-2&quot;&gt;앞줄&lt;/em&gt;에 붙지 &lt;em papago-id=&quot;0-2&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;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)를 강력하게 입력하고 저장된 프로그램 블록의 범위를 지정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://dev.mysql.com/doc/en/declare.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;구문&lt;/a&gt; 아래에 문서화된 바와 같이 다음 사항에 유의하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
  &lt;blockquote&gt; 
   &lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://dev.mysql.com/doc/en/declare.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-0&quot;&gt;&lt;code papago-id=&quot;8-0-0&quot;&gt;DECLARE&lt;/code&gt;&lt;/a&gt; 복합문 내부에서만 허용되며 다른 문보다 먼저 시작해야 합니다.&lt;/font&gt;&lt;/p&gt; 
  &lt;/blockquote&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;a href=&quot;http://dev.mysql.com/doc/en/user-variables.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-0&quot;&gt;&lt;strong papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 변수&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;(&lt;em papago-id=&quot;2-2&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;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)를 느슨하게 입력하고 세션 범위를 지정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이들은 선언할 필요도 없고 선언할 수도 없다는 점에 유의하십시오. 단지 이들을 직접 사용할 뿐입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 저장된 프로그램을 정의하고 실제로 &quot;로컬 변수&quot;를 원한다면 질문의 문구에 따라 다음을 삭제해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성품을 갖추고 당신의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DECLARE&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;그렇지 않으면 &quot;user variable&quot;을 사용하려면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DECLARE&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;SET @countTotal = (SELECT COUNT(*) FROM nGrams);
&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;SELECT COUNT(*) INTO @countTotal FROM nGrams;
&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; select @countTotal := COUNT(*) from nGrams;
&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;DROP FUNCTION IF EXISTS test;

DELIMITER $$
CREATE FUNCTION test(in_number INT) RETURNS INT
    BEGIN
        DECLARE countTotal INT;
        SET countTotal = SELECT COUNT(*) FROM nGrams;
    RETURN countTotal + in_number;
END $$
DELIMITER ;
&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;a href=&quot;http://dev.mysql.com/doc/refman/5.5/en/declare.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;8-1&quot;&gt;DELECORE 구문&lt;/a&gt;에 따르면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;declare&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시작... 끝 블록 안에 있어야 합니다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/13670659/mysql-local-variables&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>mysql</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1270</guid>
      <comments>https://ittop.tistory.com/1270#entry1270comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:35:19 +0900</pubDate>
    </item>
    <item>
      <title>설치 관리자가 파일을 인스턴스화할 수 없습니다...\KEY_XE.reg.파일이 존재하지 않는 것 같습니다.</title>
      <link>https://ittop.tistory.com/1269</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설치 관리자가 파일을 인스턴스화할 수 없습니다...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;\KEY_XE.reg.&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;Windows 64에 Oracle Express Edition을 설치하려고 하면 이 오류가 계속 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;온라인으로 검색해보니 누락된 레지스트리 항목에 대한 게시물만 발견되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우에는 실제 파일이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 번 제거하고 재부팅하고 다시 설치했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요한 것은 :&quot;확인만 클릭하면 됩니다.&quot;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 설치하는 것은 차단 문제가 아닙니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/18624104/installer-is-unable-to-instantiate-the-file-key-xe-reg-the-file-does-not-ap&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Oracle</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1269</guid>
      <comments>https://ittop.tistory.com/1269#entry1269comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:35:13 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 클라이언트를 MySQLDB로 자동 재연결하는 방법은?</title>
      <link>https://ittop.tistory.com/1268</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 클라이언트를 MySQLDB로 자동 재연결하는 방법은?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHP를 사용한 방법을 우연히 발견했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;my_bool reconnect = 1;
mysql_options(&amp;amp;mysql, MYSQL_OPT_RECONNECT, &amp;amp;reconnect);
&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;MySQLdb(python-mysql)에서는 운이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아무도 단서를 줄 수 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p&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;cursor.execute()&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;MySQLdb.OperationalError&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예외.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 다른 예는 그것이 다음과 같다는 것을 암시합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;conn.cursor()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 예외를 던지는 메서드입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import MySQLdb

class DB:
  conn = None

  def connect(self):
    self.conn = MySQLdb.connect()

  def query(self, sql):
    try:
      cursor = self.conn.cursor()
      cursor.execute(sql)
    except (AttributeError, MySQLdb.OperationalError):
      self.connect()
      cursor = self.conn.cursor()
      cursor.execute(sql)
    return cursor

db = DB()
sql = &quot;SELECT * FROM foo&quot;
cur = db.query(sql)
# wait a long time for the Mysql connection to timeout
cur = db.query(sql)
# still works
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제안된 해결책이 예외를 못 잡아서 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 그런지 잘 모르겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 그 문제를 해결했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ping(True)&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;import MySQLdb
con=MySQLdb.Connect()
con.ping(True)
cur=con.cursor()
&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;여기서 확인: http://www.neotitans.com/resources/python/mysql-python-connection-error-2006.html&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;우분투 Linux를 사용하는 경우 python-mysql 패키지에 동일한 MYSQL_OPT_RECONNECT 옵션을 설정하는 기능이 추가된 패치가 있습니다(&lt;a href=&quot;https://launchpad.net/ubuntu/hardy/+source/python-mysqldb/1.2.2-5&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12-1&quot;&gt;여기&lt;/a&gt; 참조).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 안 먹어봤어요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;불행히도 패치는 나중에 자동 연결 및 변환(&lt;a href=&quot;https://launchpad.net/ubuntu/+source/python-mysqldb&quot; rel=&quot;noreferrer&quot; papago-id=&quot;13-1&quot;&gt;여기&lt;/a&gt;에 설명됨)과의 충돌로 인해 제거되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 페이지의 의견은 다음과 같습니다. 1.2.2-7 2008-06-19에 용감무쌍하게 공개되었습니다.&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;python-mysqldb(1.2.2-7) 불안정; 긴급=낮음&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;[ Sandro Tosi ] * debian/control - 웹페이지에서 재포맷을 피하기 위해 설명에 항목 라인을 2칸으로 시작합니다 (닫힘: #480341)&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;[ Bernd Zeimetz ] * debian/patchs/02_reconnect.dpatch: - Droping patch: 문제를 설명하는 스톰의 코멘트:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    # Here is another sad story about bad transactional behavior. MySQL
    # offers a feature to automatically reconnect dropped connections.
    # What sounds like a dream, is actually a nightmare for anyone who
    # is dealing with transactions. When a reconnection happens, the
    # currently running transaction is transparently rolled back, and
    # everything that was being done is lost, without notice. Not only
    # that, but the connection may be put back in AUTOCOMMIT mode, even
    # when that's not the default MySQLdb behavior. The MySQL developers
    # quickly understood that this is a terrible idea, and removed the
    # behavior in MySQL 5.0.3. Unfortunately, Debian and Ubuntu still
    # have a patch right now which *reenables* that behavior by default
    # even past version 5.0.3.
&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;cursor.execute()&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;MySQLdb&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 탈출 임무를 대신 처리해 주시오&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;래퍼 모듈은 결국 다음과 같은 모양이 되었습니다(아래 사용).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python

import MySQLdb

class DisconnectSafeCursor(object):
    db = None
    cursor = None

    def __init__(self, db, cursor):
        self.db = db
        self.cursor = cursor

    def close(self):
        self.cursor.close()

    def execute(self, *args, **kwargs):
        try:
            return self.cursor.execute(*args, **kwargs)
        except MySQLdb.OperationalError:
            self.db.reconnect()
            self.cursor = self.db.cursor()
            return self.cursor.execute(*args, **kwargs)

    def fetchone(self):
        return self.cursor.fetchone()

    def fetchall(self):
        return self.cursor.fetchall()

class DisconnectSafeConnection(object):
    connect_args = None
    connect_kwargs = None
    conn = None

    def __init__(self, *args, **kwargs):
        self.connect_args = args
        self.connect_kwargs = kwargs
        self.reconnect()

    def reconnect(self):
        self.conn = MySQLdb.connect(*self.connect_args, **self.connect_kwargs)

    def cursor(self, *args, **kwargs):
        cur = self.conn.cursor(*args, **kwargs)
        return DisconnectSafeCursor(self, cur)

    def commit(self):
        self.conn.commit()

    def rollback(self):
        self.conn.rollback()

disconnectSafeConnect = DisconnectSafeConnection
&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;MySQLDB의 필요에 따라 래퍼 메서드로 클래스를 확장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import mydb

db = mydb.disconnectSafeConnect()
# ... use as a regular MySQLdb.connections.Connection object

cursor = db.cursor()

# no more &quot;2006: MySQL server has gone away&quot; exceptions now
cursor.execute(&quot;SELECT * FROM foo WHERE bar=%s&quot;, (&quot;baz&quot;,))
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커밋과 클로즈를 분리해서 연결할 수 있습니다...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;귀엽진 않지만 그래도 돼요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class SqlManager(object):
 &quot;&quot;&quot;
 Class that handle the database operation
 &quot;&quot;&quot;
 def __init__(self,server, database, username, pswd):

      self.server = server
      self.dataBase = database
      self.userID = username
      self.password = pswd

def Close_Transation(self):
      &quot;&quot;&quot;
      Commit the SQL Query
      &quot;&quot;&quot;
      try:
        self.conn.commit()
      except Sql.Error, e:
        print &quot;-- reading SQL Error %d: %s&quot; % (e.args[0], e.args[1])

 def Close_db(self):
    try:
        self.conn.close()
    except Sql.Error, e:
        print &quot;-- reading SQL Error %d: %s&quot; % (e.args[0], e.args[1])

 def __del__(self):
    print &quot;close connection with database..&quot;
    self.conn.close() 
&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;MySQL과 Python에도 비슷한 문제가 있었는데, 제게 도움이 된 솔루션은 MySQL을 5.0.27로 업그레이드하는 것이었습니다(페도라 Core 6에서는 시스템이 다른 버전에서 잘 작동할 수 있음).&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;Python 라이브러리를 패치하는 것을 포함하여 다른 많은 것을 시도했지만 데이터베이스를 업그레이드하는 것이 훨씬 쉬웠고 더 나은 결정이었다고 생각합니다.&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;Liviu Chircu 솔루션 ...에 추가하여 DisconnectSafeCursor에 다음 메서드를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def __getattr__(self, name):
    return getattr(self.cursor, name)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&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;a href=&quot;https://stackoverflow.com/users/2054305/liviu-chircu&quot; papago-id=&quot;27-1&quot;&gt;리비우 치르쿠&lt;/a&gt; 솔루션을 기반으로 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;너무 &lt;strong papago-id=&quot;28-1&quot;&gt;많은 재시도&lt;/strong&gt;에 대한 통제를 추가했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리가 테이블 구조의 필드와 일치하지 않을 경우 리비우의 원래 답변이 &quot;&lt;strong papago-id=&quot;28-3&quot;&gt;연결&lt;/strong&gt;이 너무 &lt;strong papago-id=&quot;28-3&quot;&gt;많습니다&lt;/strong&gt;&quot; 작동 &lt;em papago-id=&quot;28-5&quot;&gt;&lt;strong papago-id=&quot;28-5-0&quot;&gt;오류&lt;/strong&gt;&lt;/em&gt;로 쉽게 이동할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;MySQLdb.OperationalError: (1054, &quot;Unknown column 'xxxxxxx' in 'field list'&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;strong papago-id=&quot;29-1&quot;&gt;연결 오류가 아닙니다&lt;/strong&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 버전에서는 클래스 변수가 필요 없다고 생각하여 제거했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import MySQLdb


class MySQLdbReconnectableCursor(object):
    def __init__(self, db, cursor):
        self.db = db
        self.cursor = cursor

    def __getattr__(self, name):
        return getattr(self.cursor, name)

    def __iter__(self, *args, **kwargs):
        return self.cursor.__iter__(*args, **kwargs)

    def __next__(self, *args, **kwargs):
        return self.cursor.__next__(*args, **kwargs)

    def close(self):
        self.cursor.close()

    def execute(self, *args, **kwargs):
        try:
            result = self.cursor.execute(*args, **kwargs)
            self.db.refresh_retries()
            return result
        except MySQLdb.OperationalError:
            self.db.reconnect(reraise=True)
            self.cursor = self.db.cursor()
            return self.cursor.execute(*args, **kwargs)

    def fetchone(self):
        return self.cursor.fetchone()

    def fetchall(self):
        return self.cursor.fetchall()


class MySQLdbReconnectable(object):
    def __init__(self, *args, **kwargs):
        self.conn = None
        self.retries = kwargs.get(&quot;max_retries&quot;, 3)
        self.connect_args = args
        self.connect_kwargs = kwargs
        self.refresh_retries()
        self.reconnect()

    def refresh_retries(self):
        self.__retries = self.retries

    def reconnect(self, reraise=False):
        if self.__retries:
            self.__retries -= 1
            self.conn = MySQLdb.connect(
                *self.connect_args, **self.connect_kwargs
            )
        else:
            if reraise:
                raise
            else:
                raise IOError(&quot;Can not retry anymore!&quot;)

    def cursor(self, *args, **kwargs):
        cur = self.conn.cursor(*args, **kwargs)
        return MySQLdbReconnectableCursor(self, cur)

    def commit(self):
        self.conn.commit()

    def rollback(self):
        self.conn.rollback()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사람들은 코드를 사용해서 직접 연결을 끊은 것을 해결하는 것에 베팅합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위한 한 가지 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import MySQLdb

class DB:
    conn = None

    def connect(self):
        self.conn = MySQLdb.connect()

    def cursor(self):
        try:
            return self.conn.cursor()
        except (AttributeError, MySQLdb.OperationalError):
            self.connect()
            return self.conn.cursor()

db = DB()
cur = db.cursor()
# wait a long time for the Mysql connection to timeout
cur = db.cursor()
# still works
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/207981/how-to-enable-mysql-client-auto-re-connect-with-mysqldb&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>mysql</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1268</guid>
      <comments>https://ittop.tistory.com/1268#entry1268comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:35:07 +0900</pubDate>
    </item>
    <item>
      <title>숨겨진 오버플로가 있는 스팬에서 점(&amp;quot;...&amp;quot;)을 표시하려면 어떻게 해야 합니까?</title>
      <link>https://ittop.tistory.com/1267</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;숨겨진 오버플로가 있는 스팬에서 점(&quot;...&quot;)을 표시하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 CSS:&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#content_right_head span
{
  display:inline-block;
  width:180px;
  overflow:hidden !important;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 &lt;strong papago-id=&quot;2-1&quot;&gt;컨텐츠 내용&lt;/strong&gt;을 표시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 저는 &lt;strong papago-id=&quot;3-1&quot;&gt;컨텐츠 내용&lt;/strong&gt;처럼 보여드리고 싶습니다&lt;strong papago-id=&quot;3-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콘텐츠 뒤에 점을 찍어줘야 돼요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨텐츠가 데이터베이스에서 동적으로 전송됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;text-overflow: ellipsis;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소유물.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 적습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;span {
    display: inline-block;
    width: 180px;
    white-space: nowrap;
    overflow: hidden !important;
    text-overflow: ellipsis;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;span&amp;gt;Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book&amp;lt;/span&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/Y5vpb/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JSFiddle&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;text-overflow:ellipsis&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;pre&gt;&lt;code&gt;function add3Dots(string, limit)
{
  var dots = &quot;...&quot;;
  if(string.length &amp;gt; limit)
  {
    // you can also use substr instead of substring
    string = string.substring(0,limit) + dots;
  }
 
    return string;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 같이 부르다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add3Dots(&quot;Hello World&quot;,9);
&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;Hello Wor...
&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;/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 add3Dots(string, limit)
{
  var dots = &quot;...&quot;;
  if(string.length &amp;gt; limit)
  {
    // you can also use substr instead of substring
    string = string.substring(0,limit) + dots;
  }

    return string;
}



console.log(add3Dots(&quot;Hello, how are you doing today?&quot;, 10));&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;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 찾고 있는 것 같아요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;text-overflow: ellipsis&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;white-space: nowrap&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 &lt;a href=&quot;http://www.quirksmode.org/css/textoverflow.html&quot; papago-id=&quot;15-1&quot;&gt;여기&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;text-overflow: ellipsis&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 줄을 보여줘야만 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 많은 경우 사용 가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display: -webkit-box&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나 이상의 선을 보여주고 싶을 경우의 속성.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;2줄에 대해 아래 코드를 입력합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;line-height: 1.6rem;
overflow: hidden;
display: -webkit-box; 
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
max-height: 3.2rem;
&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;.truncate {
    display:inline-block;
    width:180px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.truncate&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;hr&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;21-0&quot;&gt;편집&lt;/strong&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;크로스 브라우저 지원을 통해 jQuery 플러그인을 따라 해 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(function ($) {
    $.fn.ellipsis = function () {
        return this.eachAsync({
            delay: 100,
            bulk: 0,
            loop: function (index) {
                var el = $(this);

                if (el.data(&quot;fullText&quot;) !== undefined) {
                    el.html(el.data(&quot;fullText&quot;));
                } else {
                    el.data(&quot;fullText&quot;, el.html());
                }

                if (el.css(&quot;overflow&quot;) == &quot;hidden&quot;) {
                    var text = el.html();
                    var t = $(this.cloneNode(true))
                                        .hide()
                                        .css('position', 'absolute')
                                        .css('overflow', 'visible')
                                        .width('auto')
                                        .height(el.height())
                                        ;

                    el.after(t);

                    function width() { return t.width() &amp;gt; el.width(); };

                    var func = width;
                    while (text.length &amp;gt; 0 &amp;amp;&amp;amp; width()) {
                        text = text.substr(0, text.length - text.length * 25 / 100);
                        t.html(text + &quot;...&quot;);
                    }

                    el.html(t.html());
                    t.remove();
                }
            }
        });
    };
})(jQuery);
&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;$(&quot;#content_right_head span&quot;).ellipsis();
&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;음, &quot;text-overflow: elipsis&quot;는 제게 효과적이었지만, 제 한계가 'width'에 기반했다면, 저는 ('width'가 아닌 '높이'에) 줄에 적용할 수 있는 해결책이 필요했기 때문에 다음과 같은 스크립트를 수행했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function listLimit (elm, line){
    var maxHeight = parseInt(elm.css('line-Height'))*line;

    while(elm.height() &amp;gt; maxHeight){
        var text = elm.text();
        elm.text(text.substring(0,text.length-10)).text(elm.text()+'...');
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 내 h3가 2개의 행만 가지고 있어야 할 때, 나는 다음과 같이 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('h3').each(function(){
   listLimit ($(this), 2)
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 성능 요구에 대한 최선의 연습이었는지는 모르겠지만, 저에게는 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 시도해 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&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;.classname{
    width:250px;
    overflow:hidden;
    text-overflow:ellipsis;
}&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt; var tooLong = document.getElementById(&quot;longText&quot;).value;
    if (tooLong.length() &amp;gt; 18){
        $('#longText').css('text-overflow', 'ellipsis');
    }
&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;ES6를 사용하는 경우, 3차 연산자 및 템플릿 리터럴로 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function add3Dots(text, limit)
{
    return text.length &amp;gt; limit ? `${text.substring(0, limit)}...` : text;
}
&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;먼저 div tag set width를 만들고 그 안에 p tag를 만들고 거기에 텍스트를 추가하고 아래에 주어진 코드를 적용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;p 태그가 div 태그 &quot;...&quot;의 너비에 도달하면 적용됩니다.&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;h2 id=&quot;list-item&quot; papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리스트항목&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;`div &amp;gt; p{
 overflow: hidden;
 text-overflow: ellipsis;
 white-space: nowrap;}` 
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그의 대답에 깊은 감사를 드립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마우스 클릭으로 텍스트를 표시/숨기기를 원하는 것이 문제였습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 기본적으로 점이 있는 짧은 텍스트가 표시되고 긴 텍스트를 클릭하면 나타납니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 클릭하면 해당 긴 텍스트가 숨겨지고 짧은 텍스트가 다시 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매우 쉬운 작업: 텍스트 오버플로가 있는 클래스를 추가/제거하기만 하면 됩니다. 생략합니다.&lt;/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;HTML:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;span class=&quot;spanShortText cursorPointer&quot;  onclick=&quot;fInventoryShippingReceiving.ShowHideTextOnSpan(this);&quot;&amp;gt;Some really long description here&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS(.cursorPointer가 추가된 @sandeep와 동일)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.spanShortText {
  display: inline-block;
  width: 100px;
  white-space: nowrap;
  overflow: hidden !important;
  text-overflow: ellipsis;
}

.cursorPointer {
  cursor: pointer;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JQuery part - 기본적으로 클래스 cSpanShortText를 제거/추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  function ShowHideTextOnSpan(element) {
    var cSpanShortText = 'spanShortText';
    var $el = $(element);
    if ($el.hasClass(cSpanShortText)) {
      $el.removeClass(cSpanShortText)
    } else {
      $el.addClass(cSpanShortText);
    }
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/11426275/how-can-i-show-dots-in-a-span-with-hidden-overflow&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>CSS</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1267</guid>
      <comments>https://ittop.tistory.com/1267#entry1267comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:34:56 +0900</pubDate>
    </item>
    <item>
      <title>oledb reader 또는 Excel library, Excel data reader 또는 NPOI 등(Interop 제외)을 통해 셀에 수식이 포함되어 있는지 확인하는 방법?</title>
      <link>https://ittop.tistory.com/1266</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;oledb reader 또는 Excel library, Excel data reader 또는 NPOI 등(Interop 제외)을 통해 셀에 수식이 포함되어 있는지 확인하는 방법?&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;oledb reader를 통해 Excel에서 Cell에 수식이 포함되어 있는지 확인하는 방법?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/KTyjG.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;System.Data.OleDb.OleDbConnection conn2 = new System.Data.OleDb.OleDbConnection(&quot;Provider=Microsoft.ACE.OLEDB.12.0; Data Source = &quot; + strFileName + &quot;; Extended Properties = \&quot;Excel 8.0;HDR=NO;IMEX=1\&quot;;&quot;);
conn2.Open();
string strQuery2 = &quot;SELECT * FROM [&quot; + Table + &quot;]&quot;;

System.Data.OleDb.OleDbDataAdapter adapter2 = new System.Data.OleDb.OleDbDataAdapter(strQuery2, conn2);

System.Data.DataTable DT2 = new System.Data.DataTable();

adapter2.Fill(DT2);
&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;com-interop&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;em papago-id=&quot;4-3&quot;&gt;충족&lt;/em&gt;시키기 위해 즉흥적으로 만들 수 &lt;a href=&quot;https://stackoverflow.com/q/16400302/2061309&quot; papago-id=&quot;4-1&quot;&gt;있는&lt;/a&gt; 게시물이 있다는 것을 알았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 정확한 구문이 아닌 뼈대가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Excel.Application excelApp = new Excel.Application();
Excel.Workbook workBook = excelApp.Workbooks.Open(filePath);
Excel.WorkSheet WS = workBooks.WorkSheets(&quot;Sheet1&quot;);

Range rangeData = WS.Range[&quot;A1:C3&quot;];    

foreach (Excel.Range c in rangeData.Cells)
{
    if (c.HasFormula)
    {
       MessageBox.Show(Convert.ToString(c.Value));
    }        
}
&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;OLEDB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 당신의 쿼리는 단지 셀 데이터(공식이 없는 숫자, texts)를 쿼리에 집어넣는 것처럼 보이기 때문입니다.&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;OLEDB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, &lt;a href=&quot;https://stackoverflow.com/a/17109456/2061309&quot; papago-id=&quot;5-1&quot;&gt;이 게시물&lt;/a&gt;은 시작하는데 도움이 될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래도 도움이 필요하다면 언제든지 의견을 내주세요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;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;public bool IsFormulaExistInExcel(string excelpath)
     {
        bool IsFormulaExist = false;
        try
        {
            Microsoft.Office.Interop.Excel.Application excelApp = null;
            Microsoft.Office.Interop.Excel.Workbooks workBooks = null;
            Microsoft.Office.Interop.Excel.Workbook workBook = null;
            Microsoft.Office.Interop.Excel.Worksheet workSheet;
            excelApp = new Microsoft.Office.Interop.Excel.Application();
            workBooks = excelApp.Workbooks;
            workBook = workBooks.Open(excelpath, 0, true, 5, &quot;&quot;, &quot;&quot;, true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, &quot;\t&quot;, false, false, 0, true, 1, 0);
            workSheet = workBook.Worksheets.get_Item(1);
            Microsoft.Office.Interop.Excel.Range rng = workSheet.UsedRange;


            dynamic FormulaExist = rng.HasFormula;
            Type unknown = FormulaExist.GetType();

            if (unknown.Name == &quot;DBNull&quot;)
                IsFormulaExist = true;
            else if (unknown.Name == &quot;Boolean&quot;)
            {
                if (FormulaExist == false)
                    IsFormulaExist = false;
                else if (FormulaExist == true)
                    IsFormulaExist = true;
            }
        }
        catch (Exception E)
        {
        }
    return IsFormulaExist;
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아파치 포이 라이브러리를 사용했습니다...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;관련 방법이 아래에 있는 것.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if(cell.getCellType()==CellType.CELL_TYPE_FORMULA)
{
// this cell contains formula......
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://msdn.microsoft.com/en-us/library/office/bb448854.aspx&quot; rel=&quot;nofollow&quot; papago-id=&quot;12-1&quot;&gt;OpenXML SDK&lt;/a&gt;를 사용하여 Xlsx 파일을 읽을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.nuget.org/packages/DocumentFormat.OpenXml/&quot; papago-id=&quot;13-1&quot; rel=&quot;nofollow&quot;&gt;이&lt;/a&gt; 작업을 수행하려면 nuget &lt;a href=&quot;https://www.nuget.org/packages/DocumentFormat.OpenXml/&quot; papago-id=&quot;13-1&quot; rel=&quot;nofollow&quot;&gt;패키지&lt;/a&gt;를 통해 수행할 수 있는 OpenXML 라이브러리에 참조를 추가해야 합니다(WindowsBase에도 참조가 필요합니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 스프레드시트를 로드하고 관심 있는 시트를 찾아 셀을 반복해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 셀에는 해당 셀에 공식이 있으면 null이 아닌 속성이 있습니다.&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 class=&quot;papago-parent&quot;&gt;돌아올 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 &lt;em papago-id=&quot;7-1&quot;&gt;어떤&lt;/em&gt; 세포가 그 안에 공식을 가지고 있다면; 그렇지 않으면 그것은 돌아올 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;false&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;public static bool OutputFormulae(string filename, string sheetName)
{
    bool hasFormula = false;

    //open the document
    using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(filename, false))
    {
        //get the workbookpart
        WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
        //get the correct sheet
        Sheet sheet = workbookPart.Workbook.Descendants&amp;lt;Sheet&amp;gt;().Where(s =&amp;gt; s.Name == sheetName).First();
        if (sheet != null)
        {
            //get the corresponding worksheetpart
            WorksheetPart worksheetPart = workbookPart.GetPartById(sheet.Id) as WorksheetPart;

            //iterate the child Cells
            foreach (Cell cell in worksheetPart.Worksheet.Descendants&amp;lt;Cell&amp;gt;())
            {
                //check for a formula
                if (cell.CellFormula != null &amp;amp;&amp;amp; !string.IsNullOrEmpty(cell.CellFormula.Text))
                {
                    hasFormula = true;
                    Console.WriteLine(&quot;Cell {0} has the formula {1}&quot;, cell.CellReference, cell.CellFormula.Text);
                }
            }
        }
    }

    return hasFormula;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 &lt;em papago-id=&quot;18-1&quot;&gt;시트&lt;/em&gt;를 반복하기 위해 코드를 업데이트하는 것은 사소한 일이지만 파일 이름과 관심 있는 시트 이름으로 호출할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;통화 예시:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bool formulaExistsInSheet = OutputFormulae(@&quot;d:\test.xlsx&quot;, &quot;Sheet1&quot;);
Console.WriteLine(&quot;Formula exists? {0}&quot;, formulaExistsInSheet);
&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;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;셀 C1은 공식 A1+B1을 갖습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;셀 B3의 화학식은 C1*20입니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공식이 존재합니까? 참&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시트에 공식이 있는 셀이 &lt;em papago-id=&quot;23-1&quot;&gt;있는&lt;/em&gt; 경우에만 관심이 있는 경우 확장 방법을 사용하여 위의 내용을 단순화할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static bool HasFormula(string filename, string sheetName)
{
    bool hasFormula = false;
    //open the document
    using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(filename, false))
    {
        //get the workbookpart
        WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
        //get the correct sheet
        Sheet sheet = workbookPart.Workbook.Descendants&amp;lt;Sheet&amp;gt;().Where(s =&amp;gt; s.Name == sheetName).First();
        if (sheet != null)
        {
            //get the corresponding worksheetpart
            WorksheetPart worksheetPart = workbookPart.GetPartById(sheet.Id) as WorksheetPart;

            hasFormula = worksheetPart.Worksheet.Descendants&amp;lt;Cell&amp;gt;().Any(c =&amp;gt;
                c.CellFormula != null &amp;amp;&amp;amp; !string.IsNullOrEmpty(c.CellFormula.Text));
        }
    }

    return hasFormula;
}
&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;엑셀 파일이 .xlsx이면 .xlsx는 zip 아카이브이므로 xl\cChain.xml을 읽을 수 있습니다.&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;c r=&quot;G3&quot; i=&quot;1&quot; l=&quot;1&quot;/&amp;gt;&amp;lt;c r=&quot;A3&quot; i=&quot;1&quot; l=&quot;1&quot;/&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;이 예제에서는 G3 셀과 A3 셀에 공식이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 다음과 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    // Add references for
    // System.IO.Compression
    // System.IO.Compression.FileSystem

    private static List&amp;lt;string&amp;gt; GetCellsWithFormulaInSheet(string xlsxFileName, int sheetNumber)
    {
        using (var zip = System.IO.Compression.ZipFile.OpenRead(xlsxFileName))
        {
            var list = new List&amp;lt;string&amp;gt;();

            var entry = zip.Entries.FirstOrDefault(e =&amp;gt; e.FullName == &quot;xl/calcChain.xml&quot;);
            if (entry == null)
                return list;

            var xdoc = XDocument.Load(entry.Open());
            XNamespace ns = &quot;http://schemas.openxmlformats.org/spreadsheetml/2006/main&quot;;

            return xdoc.Root.Elements(ns + &quot;c&quot;)
                .Select(x =&amp;gt; new { Cell = x.Attribute(&quot;r&quot;).Value, Sheet = int.Parse(x.Attribute(&quot;i&quot;).Value) })
                .Where(x =&amp;gt; x.Sheet == sheetNumber)
                .Select(x =&amp;gt; x.Cell)
                .ToList();
        }
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 이 방법을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var cellsWithFormula = GetCellsWithFormulaInSheet(@&quot;c:\Book.xlsx&quot;, 1);
bool hasFormulaInSheet = cellsWithFormula.Any();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/30747315/how-to-check-a-cell-contains-formula-or-not-in-excel-through-oledb-reader-or-exc&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Excel</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1266</guid>
      <comments>https://ittop.tistory.com/1266#entry1266comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:34:47 +0900</pubDate>
    </item>
    <item>
      <title>마리아 DB에서 도시 선택을 더 잘 설명하는 방법은 무엇입니까?</title>
      <link>https://ittop.tistory.com/1265</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마리아 DB에서 도시 선택을 더 잘 설명하는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 데이터베이스에 도시 표가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;고객 표와 도시별 예측표가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 고객은 예측이 필요한 도시의 목록을 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 목록들은 지금 텍스트 파일에 있기 때문에 데이터베이스에 넣어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 달성하기 위한 두 가지 방법을 생각해 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부울 값을 사용하여 도시 테이블의 각 클라이언트에 대한 열을 추가합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유형 문자의 클라이언트 테이블에 하나의 열을 추가하고 모든 도시 ID를 ',' 또는 '_'로 구분합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;5&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;DB 규모가 작으며 고객사는 50개, 도시는 200개입니다.&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;저는 두 번째 접근 방식을 더 선호하는 경향이 있지만 데이터를 구조화하는 &quot;DB 방식&quot;에는 다소 맞지 않습니다.&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;mariadb는 모르지만, SQL 데이터베이스를 다대다(multi-to-many)로 모델링하려고 하면 다음과 같이 새로운 테이블 &quot;subscription&quot;(또는 w/e)을 생성하게 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;user_id  |  city_id  | (additional options if needed)
&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;그러나 mongodb에서는 대신 참조(ids) 목록을 가질 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;collection users:
{
   &quot;name&quot;: &quot;blabal&quot;,
   &quot;cities&quot;: [ 1, 2, 7 ]
}
&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;URL : https://stackoverflow.com/questions/28429724/which-is-the-better-way-of-describing-city-selections-in-maria-db&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MariaDB</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1265</guid>
      <comments>https://ittop.tistory.com/1265#entry1265comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:34:37 +0900</pubDate>
    </item>
    <item>
      <title>WP REST API V2(WordPress)를 사용하여 여러 게시 유형 쿼리</title>
      <link>https://ittop.tistory.com/1264</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WP REST API V2(WordPress)를 사용하여 여러 게시 유형 쿼리&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 과거에 여러 웹사이트에서 워드프레스 REST API Version 1(V1)을 사용한 적이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 광범위하게 사용한 한 가지 기능은 하나의 쿼리에서 여러 개의 게시물 유형을 호출할 수 있는 기능이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WP REST API 버전 1에서는 다음 엔드포인트를 사용하여 두 게시물을 포함하는 목록을 얻을 수 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;book&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;movie&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;http://example.com/wp-json/posts?type[]=book&amp;amp;type[]=movie
&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;api에서 액세스할 수 있도록 사용자 지정 게시물 유형을 설정했으며 다음과 같이 호출할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;http://example.com/wp-json/wp/v2/book/
http://example.com/wp-json/wp/v2/movie/
&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;WP REST API 버전 2(V2)에서 이를 수행하는 가장 좋은 방법은 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 지정 엔드포인트를 조사해 보았지만 이 솔루션이 저에게 가장 적합한 솔루션이 될 수 있을지 확신할 수 없습니다(http://v2.wp-api.org/extending/adding/) .&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;12개 정도의 사용자 지정 게시물 유형이 있을 수 있으며 사용자가 어떤 유형의 콘텐츠를 보고 싶은지 입력한 것을 기반으로 동적 쿼리를 실행해야 합니다.&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;strong papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WP-API 문제 포럼에서 V2: https://github.com/WP-API/WP-API/issues/2567 에서는 이것이 불가능하다고 들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 저에게 전혀 말이 되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;WordPress에서 다음에 대한 게시 유형을 만들 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;movie&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;book&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;genre&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WP_Query&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;WordPress용 REST API는 특히 V1에서 정상적으로 작동하는데 왜 이 두 가지를 한 번에 쿼리할 수 있는 기본 기능을 포함하지 않습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능이 없으면 현재 웹 애플리케이션을 V1에서 V2로 업데이트할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 제가 궁금한 점은 이 기능을 만들 수 있는 엔드포인트를 성공적으로 만든 사람이 있느냐는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 원하는 기능이 정확히 필요해서 맞춤형 엔드포인트를 만들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 단지 그것을 노출할 뿐입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WP_REST_Server::READABLE&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;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 포스트 유형 특정 내용은 WP_REST_Posts_Controller 인스턴스로 전달되며, 각 쿼리 결과에 대해 인스턴스화됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 다른 플러그인과의 호환성 문제나 향후 API 업데이트의 위험을 낮췄으면 좋겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 코드를 자유롭게 사용하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/**
 * Custom endpoint for querying for multiple post-types.
 * Mimics `WP_REST_Posts_Controller` as closely as possible.
 *
 * New filters:
 *  - `rest_multiple_post_type_query` Filters the query arguments as generated
 *    from the request parameters.
 *
 * @author Ruben Vreeken
 */
class WP_REST_MultiplePostType_Controller extends WP_REST_Controller
{

    public function __construct()
    {
        $this-&amp;gt;version   = '2';
        $this-&amp;gt;namespace = 'websiteje/v' . $this-&amp;gt;version;
        $this-&amp;gt;rest_base = 'multiple-post-type';
    }

    /**
     * Register the routes for the objects of the controller.
     */
    public function register_routes()
    {
        register_rest_route($this-&amp;gt;namespace, '/' . $this-&amp;gt;rest_base, array(
            array(
                'methods'             =&amp;gt; WP_REST_Server::READABLE,
                'callback'            =&amp;gt; array($this, 'get_items'),
                'permission_callback' =&amp;gt; array($this, 'get_items_permissions_check'),
                'args'                =&amp;gt; $this-&amp;gt;get_collection_params(),
            ),
        ));
    }

    /**
     * Check if a given request has access to get items
     *
     * @return bool
     */
    public function get_items_permissions_check($request)
    {
        return true;
    }

    /**
     * Get a collection of items
     *
     * @param WP_REST_Request  $request  Full data about the request.
     * @return WP_Error|WP_REST_Response
     */
    public function get_items($request)
    {
        $args                        = array();
        $args['author__in']          = $request['author'];
        $args['author__not_in']      = $request['author_exclude'];
        $args['menu_order']          = $request['menu_order'];
        $args['offset']              = $request['offset'];
        $args['order']               = $request['order'];
        $args['orderby']             = $request['orderby'];
        $args['paged']               = $request['page'];
        $args['post__in']            = $request['include'];
        $args['post__not_in']        = $request['exclude'];
        $args['posts_per_page']      = $request['per_page'];
        $args['name']                = $request['slug'];
        $args['post_type']           = $request['type'];
        $args['post_parent__in']     = $request['parent'];
        $args['post_parent__not_in'] = $request['parent_exclude'];
        $args['post_status']         = $request['status'];
        $args['s']                   = $request['search'];

        $args['date_query'] = array();
        // Set before into date query. Date query must be specified as an array
        // of an array.
        if (isset($request['before'])) {
            $args['date_query'][0]['before'] = $request['before'];
        }

        // Set after into date query. Date query must be specified as an array
        // of an array.
        if (isset($request['after'])) {
            $args['date_query'][0]['after'] = $request['after'];
        }

        if (is_array($request['filter'])) {
            $args = array_merge($args, $request['filter']);
            unset($args['filter']);
        }

        // Ensure array of post_types
        if (!is_array($args['post_type'])) {
            $args['post_type'] = array($args['post_type']);
        }

        /**
         * Filter the query arguments for a request.
         *
         * Enables adding extra arguments or setting defaults for a post
         * collection request.
         *
         * @see https://developer.wordpress.org/reference/classes/wp_user_query/
         *
         * @param array            $args     Key value array of query var to query value.
         * @param WP_REST_Request  $request  The request used.
         *
         * @var Function
         */
        $args       = apply_filters(&quot;rest_multiple_post_type_query&quot;, $args, $request);
        $query_args = $this-&amp;gt;prepare_items_query($args, $request);

        // Get taxonomies for each of the requested post_types
        $taxonomies = wp_list_filter(get_object_taxonomies($query_args['post_type'], 'objects'), array('show_in_rest' =&amp;gt; true));

        // Construct taxonomy query
        foreach ($taxonomies as $taxonomy) {
            $base = !empty($taxonomy-&amp;gt;rest_base) ? $taxonomy-&amp;gt;rest_base : $taxonomy-&amp;gt;name;

            if (!empty($request[$base])) {
                $query_args['tax_query'][] = array(
                    'taxonomy'         =&amp;gt; $taxonomy-&amp;gt;name,
                    'field'            =&amp;gt; 'term_id',
                    'terms'            =&amp;gt; $request[$base],
                    'include_children' =&amp;gt; false,
                );
            }
        }

        // Execute the query
        $posts_query  = new WP_Query();
        $query_result = $posts_query-&amp;gt;query($query_args);

        // Handle query results
        $posts = array();
        foreach ($query_result as $post) {
            // Get PostController for Post Type
            $postsController = new WP_REST_Posts_Controller($post-&amp;gt;post_type);

            if (!$postsController-&amp;gt;check_read_permission($post)) {
                continue;
            }

            $data    = $postsController-&amp;gt;prepare_item_for_response($post, $request);
            $posts[] = $postsController-&amp;gt;prepare_response_for_collection($data);
        }

        // Calc total post count
        $page        = (int) $query_args['paged'];
        $total_posts = $posts_query-&amp;gt;found_posts;

        // Out-of-bounds, run the query again without LIMIT for total count
        if ($total_posts &amp;lt; 1) {
            unset($query_args['paged']);
            $count_query = new WP_Query();
            $count_query-&amp;gt;query($query_args);
            $total_posts = $count_query-&amp;gt;found_posts;
        }

        // Calc total page count
        $max_pages = ceil($total_posts / (int) $query_args['posts_per_page']);

        // Construct response
        $response = rest_ensure_response($posts);
        $response-&amp;gt;header('X-WP-Total', (int) $total_posts);
        $response-&amp;gt;header('X-WP-TotalPages', (int) $max_pages);

        // Construct base url for pagination links
        $request_params = $request-&amp;gt;get_query_params();
        if (!empty($request_params['filter'])) {
            // Normalize the pagination params.
            unset($request_params['filter']['posts_per_page']);
            unset($request_params['filter']['paged']);
        }
        $base = add_query_arg($request_params, rest_url(sprintf('/%s/%s', $this-&amp;gt;namespace, $this-&amp;gt;rest_base)));

        // Create link for previous page, if needed
        if ($page &amp;gt; 1) {
            $prev_page = $page - 1;
            if ($prev_page &amp;gt; $max_pages) {
                $prev_page = $max_pages;
            }
            $prev_link = add_query_arg('page', $prev_page, $base);
            $response-&amp;gt;link_header('prev', $prev_link);
        }

        // Create link for next page, if needed
        if ($max_pages &amp;gt; $page) {
            $next_page = $page + 1;
            $next_link = add_query_arg('page', $next_page, $base);
            $response-&amp;gt;link_header('next', $next_link);
        }

        return $response;
    }

    /**
     * Determine the allowed query_vars for a get_items() response and prepare
     * for WP_Query.
     *
     * @param  array            $prepared_args
     * @param  WP_REST_Request  $request
     *
     * @return array            $query_args
     */
    protected function prepare_items_query($prepared_args = array(), $request = null)
    {

        $valid_vars = array_flip($this-&amp;gt;get_allowed_query_vars($request['type']));
        $query_args = array();
        foreach ($valid_vars as $var =&amp;gt; $index) {
            if (isset($prepared_args[$var])) {
                /**
                 * Filter the query_vars used in `get_items` for the constructed
                 * query.
                 *
                 * The dynamic portion of the hook name, $var, refers to the
                 * query_var key.
                 *
                 * @param mixed  $prepared_args[  $var ] The query_var value.
                 */
                $query_args[$var] = apply_filters(&quot;rest_query_var-{$var}&quot;, $prepared_args[$var]);
            }
        }

        // Only allow sticky psts if 'post' is one of the requested post types.
        if (in_array('post', $query_args['post_type']) || !isset($query_args['ignore_sticky_posts'])) {
            $query_args['ignore_sticky_posts'] = true;
        }

        if ('include' === $query_args['orderby']) {
            $query_args['orderby'] = 'post__in';
        }

        return $query_args;
    }

    /**
     * Get all the WP Query vars that are allowed for the API request.
     *
     * @return array
     */
    protected function get_allowed_query_vars($post_types)
    {
        global $wp;
        $editPosts = true;

        /**
         * Filter the publicly allowed query vars.
         *
         * Allows adjusting of the default query vars that are made public.
         *
         * @param array  Array  of allowed WP_Query query vars.
         *
         * @var Function
         */
        $valid_vars = apply_filters('query_vars', $wp-&amp;gt;public_query_vars);

        /**
         * We allow 'private' query vars for authorized users only.
         *
         * It the user has `edit_posts` capabilty for *every* requested post
         * type, we also allow use of private query parameters, which are only
         * undesirable on the frontend, but are safe for use in query strings.
         *
         * To disable anyway, use `add_filter( 'rest_private_query_vars',
         * '__return_empty_array' );`
         *
         * @param array  $private_query_vars  Array of allowed query vars for
         *                                    authorized users.
         *
         * @var boolean
         */
        $edit_posts = true;
        foreach ($post_types as $post_type) {
            $post_type_obj = get_post_type_object($post_type);
            if (!current_user_can($post_type_obj-&amp;gt;cap-&amp;gt;edit_posts)) {
                $edit_posts = false;
                break;
            }
        }
        if ($edit_posts) {
            $private    = apply_filters('rest_private_query_vars', $wp-&amp;gt;private_query_vars);
            $valid_vars = array_merge($valid_vars, $private);
        }

        // Define our own in addition to WP's normal vars.
        $rest_valid = array(
            'author__in',
            'author__not_in',
            'ignore_sticky_posts',
            'menu_order',
            'offset',
            'post__in',
            'post__not_in',
            'post_parent',
            'post_parent__in',
            'post_parent__not_in',
            'posts_per_page',
            'date_query',
        );
        $valid_vars = array_merge($valid_vars, $rest_valid);

        /**
         * Filter allowed query vars for the REST API.
         *
         * This filter allows you to add or remove query vars from the final
         * allowed list for all requests, including unauthenticated ones. To
         * alter the vars for editors only, {@see rest_private_query_vars}.
         *
         * @param array {
         *    Array of allowed WP_Query query vars.
         *
         *    @param string $allowed_query_var The query var to allow.
         * }
         */
        $valid_vars = apply_filters('rest_query_vars', $valid_vars);

        return $valid_vars;
    }

    /**
     * Get the query params for collections of attachments.
     *
     * @return array
     */
    public function get_collection_params()
    {
        $params = parent::get_collection_params();

        $params['context']['default'] = 'view';

        $params['after'] = array(
            'description'       =&amp;gt; __('Limit response to resources published after a given ISO8601 compliant date.'),
            'type'              =&amp;gt; 'string',
            'format'            =&amp;gt; 'date-time',
            'validate_callback' =&amp;gt; 'rest_validate_request_arg',
        );

        $params['author'] = array(
            'description'       =&amp;gt; __('Limit result set to posts assigned to specific authors.'),
            'type'              =&amp;gt; 'array',
            'default'           =&amp;gt; array(),
            'sanitize_callback' =&amp;gt; 'wp_parse_id_list',
            'validate_callback' =&amp;gt; 'rest_validate_request_arg',
        );
        $params['author_exclude'] = array(
            'description'       =&amp;gt; __('Ensure result set excludes posts assigned to specific authors.'),
            'type'              =&amp;gt; 'array',
            'default'           =&amp;gt; array(),
            'sanitize_callback' =&amp;gt; 'wp_parse_id_list',
            'validate_callback' =&amp;gt; 'rest_validate_request_arg',
        );

        $params['before'] = array(
            'description'       =&amp;gt; __('Limit response to resources published before a given ISO8601 compliant date.'),
            'type'              =&amp;gt; 'string',
            'format'            =&amp;gt; 'date-time',
            'validate_callback' =&amp;gt; 'rest_validate_request_arg',
        );
        $params['exclude'] = array(
            'description'       =&amp;gt; __('Ensure result set excludes specific ids.'),
            'type'              =&amp;gt; 'array',
            'default'           =&amp;gt; array(),
            'sanitize_callback' =&amp;gt; 'wp_parse_id_list',
        );
        $params['include'] = array(
            'description'       =&amp;gt; __('Limit result set to specific ids.'),
            'type'              =&amp;gt; 'array',
            'default'           =&amp;gt; array(),
            'sanitize_callback' =&amp;gt; 'wp_parse_id_list',
        );

        $params['menu_order'] = array(
            'description'       =&amp;gt; __('Limit result set to resources with a specific menu_order value.'),
            'type'              =&amp;gt; 'integer',
            'sanitize_callback' =&amp;gt; 'absint',
            'validate_callback' =&amp;gt; 'rest_validate_request_arg',
        );

        $params['offset'] = array(
            'description'       =&amp;gt; __('Offset the result set by a specific number of items.'),
            'type'              =&amp;gt; 'integer',
            'sanitize_callback' =&amp;gt; 'absint',
            'validate_callback' =&amp;gt; 'rest_validate_request_arg',
        );
        $params['order'] = array(
            'description'       =&amp;gt; __('Order sort attribute ascending or descending.'),
            'type'              =&amp;gt; 'string',
            'default'           =&amp;gt; 'desc',
            'enum'              =&amp;gt; array('asc', 'desc'),
            'validate_callback' =&amp;gt; 'rest_validate_request_arg',
        );
        $params['orderby'] = array(
            'description'       =&amp;gt; __('Sort collection by object attribute.'),
            'type'              =&amp;gt; 'string',
            'default'           =&amp;gt; 'date',
            'enum'              =&amp;gt; array(
                'date',
                'id',
                'include',
                'title',
                'slug',
            ),
            'validate_callback' =&amp;gt; 'rest_validate_request_arg',
        );

        $params['orderby']['enum'][] = 'menu_order';

        $params['parent'] = array(
            'description'       =&amp;gt; __('Limit result set to those of particular parent ids.'),
            'type'              =&amp;gt; 'array',
            'sanitize_callback' =&amp;gt; 'wp_parse_id_list',
            'default'           =&amp;gt; array(),
        );
        $params['parent_exclude'] = array(
            'description'       =&amp;gt; __('Limit result set to all items except those of a particular parent id.'),
            'type'              =&amp;gt; 'array',
            'sanitize_callback' =&amp;gt; 'wp_parse_id_list',
            'default'           =&amp;gt; array(),
        );

        $params['slug'] = array(
            'description'       =&amp;gt; __('Limit result set to posts with a specific slug.'),
            'type'              =&amp;gt; 'string',
            'validate_callback' =&amp;gt; 'rest_validate_request_arg',
        );
        $params['status'] = array(
            'default'           =&amp;gt; 'publish',
            'description'       =&amp;gt; __('Limit result set to posts assigned a specific status.'),
            'sanitize_callback' =&amp;gt; 'sanitize_key',
            'type'              =&amp;gt; 'string',
            'validate_callback' =&amp;gt; array($this, 'validate_user_can_query_private_statuses'),
        );
        $params['filter'] = array(
            'description' =&amp;gt; __('Use WP Query arguments to modify the response; private query vars require appropriate authorization.'),
        );

        $taxonomies = wp_list_filter(get_object_taxonomies(get_post_types(array(), 'names'), 'objects'), array('show_in_rest' =&amp;gt; true));
        foreach ($taxonomies as $taxonomy) {
            $base = !empty($taxonomy-&amp;gt;rest_base) ? $taxonomy-&amp;gt;rest_base : $taxonomy-&amp;gt;name;

            $params[$base] = array(
                'description'       =&amp;gt; sprintf(__('Limit result set to all items that have the specified term assigned in the %s taxonomy.'), $base),
                'type'              =&amp;gt; 'array',
                'sanitize_callback' =&amp;gt; 'wp_parse_id_list',
                'default'           =&amp;gt; array(),
            );
        }
        return $params;
    }

    /**
     * Validate whether the user can query private statuses
     *
     * @param  mixed             $value
     * @param  WP_REST_Request   $request
     * @param  string            $parameter
     *
     * @return WP_Error|boolean
     */
    public function validate_user_can_query_private_statuses($value, $request, $parameter)
    {
        if ('publish' === $value) {
            return true;
        }

        foreach ($request[&quot;type&quot;] as $post_type) {
            $post_type_obj = get_post_type_object($post_type);
            if (!current_user_can($post_type_obj-&amp;gt;cap-&amp;gt;edit_posts)) {
                return new WP_Error('rest_forbidden_status', __('Status is forbidden'), array(
                    'status'    =&amp;gt; rest_authorization_required_code(),
                    'post_type' =&amp;gt; $post_type_obj-&amp;gt;name,
                ));
            }
        }

        return true;
    }

}
&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;add_action('rest_api_init', 'init_wp_rest_multiple_post_type_endpoint');
function init_wp_rest_multiple_post_type_endpoint()
{
    $controller = new WP_REST_MultiplePostType_Controller();
    $controller-&amp;gt;register_routes();
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가가 루벤 레이 브리켄의 수락된 답변을 기반으로 플러그인을 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/elevati/wp-api-multiple-posttype&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/elevati/wp-api-multiple-posttype&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저한테 매력적으로 작용했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/38059805/query-multiple-post-types-using-wp-rest-api-v2-wordpress&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>wordpress</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1264</guid>
      <comments>https://ittop.tistory.com/1264#entry1264comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:34:31 +0900</pubDate>
    </item>
    <item>
      <title>텍스트 상자에서 플라스크로 데이터를 보내시겠습니까?</title>
      <link>https://ittop.tistory.com/1263</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;HTML의 텍스트 상자에서 무언가를 가져와 플라스크에 넣은 다음 파이썬으로 데이터를 파싱하는 방법이 있는지 궁금합니다.&lt;/font&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;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좀 더 복잡한 작업을 하고 싶지 않다면 HTML 양식의 데이터를 Flask에 입력하는 것은 매우 쉽습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;POST 요청을 수락하는 보기 만들기 (&lt;/font&gt;&lt;/font&gt;&lt;code&gt;my_form_post&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;).&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사전의 양식 요소에 액세스합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;request.form&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;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;code&gt;templates/my-form.html&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form method=&quot;POST&quot;&amp;gt;
    &amp;lt;input name=&quot;text&quot;&amp;gt;
    &amp;lt;input type=&quot;submit&quot;&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;from flask import Flask, request, render_template

app = Flask(__name__)

@app.route('/')
def my_form():
    return render_template('my-form.html')

@app.route('/', methods=['POST'])
def my_form_post():
    text = request.form['text']
    processed_text = text.upper()
    return processed_text
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://flask.pocoo.org/docs/quickstart/#accessing-request-data&quot; papago-id=&quot;8-1&quot; rel=&quot;noreferrer&quot;&gt;이&lt;/a&gt; 문서는 요청 &lt;a href=&quot;http://flask.pocoo.org/docs/quickstart/#accessing-request-data&quot; papago-id=&quot;8-1&quot; rel=&quot;noreferrer&quot;&gt;데이터 접근&lt;/a&gt;에 관한 Flask 문서입니다.&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;검증이 필요한 복잡한 양식이 더 필요한 경우 WT &lt;a href=&quot;http://wtforms.simplecodes.com/docs/1.0.2/crash_course.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;양식&lt;/a&gt;을 살펴보고 &lt;a href=&quot;http://flask.pocoo.org/docs/patterns/wtforms/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-3&quot;&gt;플라스크와 통합&lt;/a&gt;하는 방법을 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 다른 제한 사항이 없는 한, 데이터를 보내는 데 자바스크립트가 &lt;em papago-id=&quot;10-1&quot;&gt;전혀&lt;/em&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;Plask endpoint를 선언하여 POST 입력 유형을 수락한 후 필요한 단계를 수행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery를 사용하여 데이터를 게시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from flask import request

@app.route('/parse_data', methods=['GET', 'POST'])
def parse_data(data):
    if request.method == &quot;POST&quot;:
         #perform action here
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre class=&quot;lang-javascript prettyprint-override&quot;&gt;&lt;code&gt;var value = $('.textbox').val();
$.ajax({
  type: 'POST',
  url: &quot;{{ url_for('parse_data') }}&quot;,
  data: JSON.stringify(value),
  contentType: 'application/json',
  success: function(data){
    // do something with the received data
  }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버(플라스크 앱)와 클라이언트(브라우저) 간의 모든 상호 작용은 요청 및 응답에 따라 이루어집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 양식에 있는 버튼을 누르면 브라우저가 이 양식의 요청을 서버(플라스크 앱)로 보내면 다음과 같은 양식의 내용을 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;request.args.get('form_name')
&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;a href=&quot;http://flask.pocoo.org/docs/tutorial/views/&quot; rel=&quot;nofollow&quot; papago-id=&quot;5-1&quot;&gt;보기를 작성&lt;/a&gt;하는 방법을 이미 알고 있다고 가정할 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Flask&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;url에 응답하는 url, 다음을 읽는 url을 생성합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;request.post&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;input box&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 포스트 데이터에 텍스트 상자를 사용하여 페이지에 양식을 작성합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jquery&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;var data = $('#&amp;lt;form-id&amp;gt;').serialize()&lt;/code&gt; &lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 아래와 같은 것을 사용하여 비동기적으로 자신의 보기에 게시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.post('&amp;lt;your view url&amp;gt;', function(data) {
  $('.result').html(data);
});
&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;def parse_data():
    if request.method == &quot;POST&quot;:
        data = request.get_json()
        print(data['answers'])
        return render_template('output.html', data=data)
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
      type: 'POST',
      url: &quot;/parse_data&quot;,
      data: JSON.stringify({values}),
      contentType: &quot;application/json;charset=utf-8&quot;,
      dataType: &quot;json&quot;,
      success: function(data){
        // do something with the received data
      }
    });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/12277933/send-data-from-a-textbox-into-flask&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>python</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1263</guid>
      <comments>https://ittop.tistory.com/1263#entry1263comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:34:15 +0900</pubDate>
    </item>
    <item>
      <title>C가 왜 &amp;quot;가짜 배열&amp;quot;을 가지고 있을까요?</title>
      <link>https://ittop.tistory.com/1262</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C가 왜 &quot;가짜 배열&quot;을 가지고 있을까요?&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;문&lt;/b&gt; 닫았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문은&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;/help/closed-questions&quot; papago-id=&quot;1-3&quot;&gt;의견&lt;/a&gt;에 입각한&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 답변을 받지 않고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;hr class=&quot;my12 outline-none baw0 bb bc-powder-400&quot;&gt; 
  &lt;div class=&quot;fw-nowrap fc-black-600&quot;&gt; 
   &lt;div class=&quot;d-flex fd-column lh-md&quot;&gt; 
    &lt;div class=&quot;mb0 d-flex&quot;&gt; 
     &lt;div class=&quot;flex--item mr8&quot;&gt; 
      &lt;svg aria-hidden=&quot;true&quot; class=&quot;svg-icon iconLightbulb&quot; width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 18 18&quot;&gt;
       &lt;path d=&quot;M15 6.38A6.48 6.48 0 0 0 7.78.04h-.02A6.49 6.49 0 0 0 2.05 5.6a6.31 6.31 0 0 0 2.39 5.75c.49.39.76.93.76 1.5v.24c0 1.07.89 1.9 1.92 1.9h2.75c1.04 0 1.92-.83 1.92-1.9v-.2c0-.6.26-1.15.7-1.48A6.32 6.32 0 0 0 15 6.37ZM4.03 5.85A4.49 4.49 0 0 1 8 2.02a4.48 4.48 0 0 1 5 4.36 4.3 4.3 0 0 1-1.72 3.44c-.98.74-1.5 1.9-1.5 3.08v.1H7.2v-.14c0-1.23-.6-2.34-1.53-3.07a4.32 4.32 0 0 1-1.64-3.94ZM10 18a1 1 0 0 0 0-2H7a1 1 0 1 0 0 2h3Z&quot;&gt;&lt;/path&gt;
      &lt;/svg&gt; 
     &lt;/div&gt; 
     &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;2-0&quot;&gt;이 질문을 개선하고 싶으십니까?&lt;/b&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;/posts/41652112/edit&quot; papago-id=&quot;2-2&quot;&gt;이 게시물을 편집&lt;/a&gt;하여 사실과 인용으로 답변할 수 있도록 질문을 업데이트합니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;mb0 mt6 d-flex&quot;&gt; 
     &lt;p class=&quot;ml24 pl2&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;3-1&quot; title=&quot;2017-01-15 22:09:12Z&quot; papago-attr-id=&quot;1&quot;&gt;6년전&lt;/span&gt;에 문을 닫았습니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;ml24 pl2&quot;&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;mt24 d-flex gsx gs8&quot;&gt; 
   &lt;a class=&quot;s-btn s-btn__outlined flex--item js-post-notice-edit-post&quot; href=&quot;/posts/41652112/edit&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문을 개선합니다.&lt;/font&gt;&lt;/a&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://web.mit.edu/~simsong/www/ugh.pdf&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;&lt;em papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유닉스 헤이터즈 핸드북&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;을 읽고 있는데 9장에 이해가 잘 안 가는 부분이 있습니다.&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;C도 사실 어레이가 없습니다.&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;메모리 위치를 색인화하는 포인터를 사용하는 것 외에는 메모리에 배열을 저장할 방법이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C가 어떻게 &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;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 배열이 정말로 포인터 연산의 얇은 베니어판에 불과하다는 것이라고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첨자 연산자는 간단히 다음과 같이 정의됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a[b] == *(a + b)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그래서 쉽게 말할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;5[a]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a[5]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;이와 비교하면, &quot;진정한 배열&quot;은 자신의 크기를 알고 있거나, 포인터 산술을 할 수 없고, 마지막 인덱스를 오류 없이 통과하거나, 다른 항목 유형을 사용하여 내용에 액세스할 수 없는 배열입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 말해, &quot;진정한 배열&quot;이란 표현을 하나의 표현으로 묶지 않고, 예를 들어 링크된 목록일 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추신. 수고를 덜기 위해:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이에 대한 의견이 별로 없고, 그냥 책에서 인용한 내용을 설명하는 거예요.&lt;/font&gt;&lt;/p&gt;&lt;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;C 배열과 포인터 사이에는 차이가 있으며, 이는 의 출력으로 알 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표현.&lt;/font&gt; 예를 들어:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void sample1(const char * ptr)
{
   /* s1 depends on pointer size of architecture */
   size_t s1 = sizeof(ptr); 
}
size_t sample2(const char arr[])
{
   /* s2 also depends on pointer size of architecture, because arr decays to pointer */
   size_t s2 = sizeof(arr); 
   return s2;
}
void sample3(void)
{
   const char arr[3];
   /* s3 = 3 * sizeof(char) = 3 */
   size_t s2 = sizeof(arr); 
}
void sample4(void)
{
   const char arr[3];
   /* s4 = output of sample2(arr) which... depends on pointer size of architecture, because arr decays to pointer */
   size_t s4 = sample2(arr); 
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sample2&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;sample4&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;특히 사람들이 C 배열을 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 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;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 또한 볼 수 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(C 배열이 포인터로 붕괴되기 때문에) C의 패스 바이 값 시맨틱스의 결과로 출력됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 일부 컴파일러들은 다음과 같은 C 구문도 지원합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void foo(const char arr[static 2])
{
   /* arr must be **at least** 2 elements in size, cannot pass NULL */
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 인용한 명세서는 사실 틀렸습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C의 배열은 포인터가 아닙니다.&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;배열을 포인터로 구현하는 아이디어는 B 언어와 BCPL 언어(C의 조상)에서 사용되었지만 C로의 전환에서는 살아남지 못했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C의 초기에는 B 및 BCPL과의 &quot;역호환성&quot;이 다소 중요하게 여겨졌는데, 이것이 C 어레이가 B 및 BCPL 어레이의 동작을 밀접하게 &lt;em papago-id=&quot;23-1&quot;&gt;모방&lt;/em&gt;하는 이유입니다(즉, C 어레이가 포인터에 쉽게 &quot;붕괴&quot;됨).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼에도 불구하고 C 어레이는 &quot;메모리 위치에 대한 포인터&quot;가 아닙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 책의 인용구는 완전히 가짜입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 오해는 초보자들 사이에 널리 퍼져있습니다.&lt;/font&gt;&lt;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;작성자는 아마도 프로그래머의 관점에서 볼 때 어레이가 2등 시민처럼 느껴질 정도로 제약을 받고 있다는 것을 의미할 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 두 개의 함수, 하나는 OK이고 다른 하나는 그렇지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int finefunction() {
    int ret = 5;
    return ret;
}

int[] wtffunction() {
    int ret[1] = { 5 };
    return ret;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어레이를 구조로 감싸면 이 문제를 해결할 수 있지만, 어레이가 다른 유형과는 다르다는 점을 강조할 뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;struct int1 {
    int a[1];
}

int[] finefunction2() {
    struct int1 ret = { { 5 } };
    return ret;
}
&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;int my_sizeof(int a[]) {
    int size = sizeof(a);
    return size;
}

int main() {
    int arr[5];
    // prints 20 4, not 20 20 as it would if arrays were 1st class things
    printf(&quot;%d %d\n&quot;, sizeof(arr), my_sizeof(arr)); 
}
&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;저자가 말하는 또 다른 방법은 C(및 C++) 용어에서 &quot;array&quot;는 대부분의 다른 언어와는 다른 것을 의미합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면, 당신의 제목 질문은 어떻게 &quot;진정한 배열&quot;을 메모리에 저장할 것인가 입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;음, &quot;진정한 배열&quot;이란 단 하나의 종류는 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C에서 진정한 어레이를 원한다면 기본적으로 두 가지 옵션이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;calloc을 사용하여 버퍼를 할당하고 포인터와 항목 수를 여기에 저장합니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;struct intarrayref {
  size_t count;
  int *data;
}
&lt;/code&gt;&lt;/pre&gt; &lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 구조는 기본적으로 배열을 참조한 것으로, 함수 등에 잘 전달할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 데이터의 복사본을 만드는 것과 같이 이를 조작하기 위한 함수를 작성할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Flexible_array_member&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;32-1&quot;&gt;유연한 배열 부재&lt;/a&gt;를 사용하고 단일 calloc으로 전체 구조를 할당합니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;struct intarrayobject {
    size_t count;
    int data[];
}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;count&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;), 그리고 어레이 데이터를 한 번에 저장할 수 있는 공간도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 하지만 가격은 이 구조를 더 이상 가치 있는 것으로 돌릴 수 없다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 왜냐하면 이 구조는 여분의 데이터를 남겨둘 것이기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 등에 이 구조물에 포인터를 전달해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 이를 &quot;진정한 배열&quot;로 볼 것인지, 아니면 약간 향상된 일반 C 배열로 볼 것인지에 대한 의견이 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;책 전체와 마찬가지로, 그것은 트롤링의 사례인데, 구체적으로는 거의 사실이지만 잘못된 것을 언급하여 왜 그것이 잘못된 것인지에 대한 분노한 반응을 간청하는 것과 관련이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C는 포인터-투-어레이 유형(및 다차원 어레이)의 작동 방식에서 알 수 있듯이 실제 어레이/어레이 유형을 가지고 있습니다.&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;URL : https://stackoverflow.com/questions/41652112/why-would-c-have-fake-arrays&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1262</guid>
      <comments>https://ittop.tistory.com/1262#entry1262comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:34:08 +0900</pubDate>
    </item>
    <item>
      <title>페이지에 공간을 차지하지 않고 요소를 숨기는 방법은?</title>
      <link>https://ittop.tistory.com/1261</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지에 공간을 차지하지 않고 요소를 숨기는 방법은?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;visibility:hidden&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;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DOM에 전혀 없는 것처럼(실제로 DOM에서 제거하지 않고) 시각적으로 완전히 사라지게 하려면 어떻게 해야 합니까?&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;display:none&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;숨어서 설정하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display:block&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보여주기 위해서.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스타일 대신에 스타일을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div style=&quot;display:none;&quot;&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;토글링&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 원활한 CSS 전환을 허용하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 둘 다 전환합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;visibility&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;max-height&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;visibility: hidden;
max-height: 0;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용방법&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display: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;strong papago-id=&quot;13-1&quot;&gt;판독기의 경우에도 제거&lt;/strong&gt;됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SEO에 영향을 미치는지에 대한 논의도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://alistapart.com/article/now-you-see-me&quot; papago-id=&quot;13-3&quot;&gt;A List Apart에 &lt;/a&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;strong papago-id=&quot;14-3&quot;&gt;제거하지 않고&lt;/strong&gt; &lt;strong papago-id=&quot;14-1&quot;&gt;숨기기&lt;/strong&gt;만 원하는 경우 다음을 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;div {
  position: absolute; 
  left: -999em;
}
&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;이 방법의 유일한 단점은 이 DIV가 실제로 렌더링되어 &lt;strong papago-id=&quot;16-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;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;봐요, 사용하는 대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;visibility: hidden;&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;display: none;&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;strong papago-id=&quot;19-1&quot;&gt;공간&lt;/strong&gt;을 확보하고 두 번째 옵션은 숨어서 공간을 확보하지 &lt;strong papago-id=&quot;19-3&quot;&gt;않습니다.&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;20-0&quot;&gt;display: none&lt;/strong&gt; is solution, 즉 공간과 함께 요소를 완전히 숨깁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3 papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 관한 이야기와&lt;/font&gt;&lt;/h3&gt; 
&lt;p 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;&lt;code papago-id=&quot;22-0-0&quot;&gt;visibility:hidden&lt;/code&gt;&lt;/strong&gt; 태그는 보이지 않지만 페이지에 공간이 할당되어 있음을 의미합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;23-0&quot;&gt;&lt;code papago-id=&quot;23-0-0&quot;&gt;display:none&lt;/code&gt;&lt;/strong&gt; 의미는 공간과 함께 요소를 완전히 숨깁니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(DOM을 통해 상호 작용할 수 있지만)&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;이 질문에 대한 답은 display:none 및 display:block을 사용하라는 것이지만, css 전환을 사용하여 가시성 속성을 사용하여 콘텐츠를 표시하고 숨기려는 사용자에게는 도움이 되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디스플레이를 사용하면 CSS 전환이 사라지기 때문에 이것 또한 나를 미치게 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 가지 해결책은 가시성을 사용하는 클래스에 이를 추가하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;overflow:hidden
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 작동하려면 레이아웃에 따라 다르지만, 빈 내용은 위치한 부서 내에 유지해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;display:none&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;숨어서 설정하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display:block&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;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디스플레이 후에 다시 놓는 것에 대한 다른 의견이 있습니다: none. 디스플레이 사용 안 함: 블록/inline 등.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신(자바스크립트를 사용하는 경우) cs 속성 표시를 '로 설정합니다(예: 공백).&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$('#abc').css({&quot;display&quot;:&quot;none&quot;});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내용을 숨기고 빈 공간을 남기지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 아는 한 그것은 4가지 방법으로 가능합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;button style=&quot;display:none;&quot;&amp;gt;&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#buttonId{ display:none; }&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$('#buttonId').prop('display':'none');&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;&amp;amp;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(&quot;#buttonId&quot;).css('opacity', 0);&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;37-0&quot;&gt;&lt;em papago-id=&quot;37-0-0&quot;&gt;display: 페이지&lt;/em&gt;&lt;/strong&gt;의 공백을 차지하지 않으려면 &lt;strong papago-id=&quot;37-0&quot;&gt;&lt;em papago-id=&quot;37-0-0&quot;&gt;none&lt;/em&gt;&lt;/strong&gt;가 가장 좋습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문 덕분에.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 정반대의 것을 원했습니다. 즉 숨겨진 디브가 브라우저의 공간을 여전히 차지해야 한다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 제가.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;visibility: hidden&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;display: none&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;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;이 페이지를 접했다면 스타일에도 불구하고 페이지의 공간을 차지하는 요소를 이해하려는 것 같습니다.display = &quot;none&quot;.&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;strong papago-id=&quot;23-0&quot;&gt;이유는 문제의 요소&lt;/strong&gt;가 아니라 &lt;strong papago-id=&quot;23-0&quot;&gt;자녀, 부모 또는 형제자매&lt;/strong&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 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;&amp;lt;br&amp;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&gt;&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 더 해야 할 도 있습니다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 또는 더 많은 중첩 요소를 대상으로 지정해야 할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제를 해결하는 동안 이러한 선을 따라 생각해 보십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소를 숨기기 위한 다른 모든 옵션이 사용자에게 적합하지 않은 경우 언급되지 않은 다른 옵션이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;45-1&quot;&gt;요소에 자식이 없다고 가정하면 작동합니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공간을 차지하지 않고 요소를 숨깁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;display: contents;
&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;브라우저 지원은 새로운 CSS 기능이므로 확인합니다.&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;position:absolute&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상단, 좌측 등의 파라미터를 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;표시되는 경우: none; clear: none; clear를 추가할 필요가 없습니다; none;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2928688/how-to-hide-elements-without-having-them-take-space-on-the-page&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>CSS</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1261</guid>
      <comments>https://ittop.tistory.com/1261#entry1261comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:34:00 +0900</pubDate>
    </item>
    <item>
      <title>mysql 프로세스를 중지할 수 없습니다.</title>
      <link>https://ittop.tistory.com/1260</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;최근 우분투 12.04 OS 데스크톱에 5.5.28-29.2 Percona Server(GPL), Release 29.2를 설치했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 방법을 사용하여 서버를 중지하려고 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- sudo /etc/init.d/mysql stop
- sudo kill -9 pid
- mysqladmin -u root -p shutdown
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 모든 방법은 프로세스를 중지하지만 프로세스가 종료된 후 자동으로 시작됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;syslog(/var/log/syslog/)를 확인하면 항상 다음 추적이 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Jan  4 17:50:44 kernel: [ 1915.494219] init: mysql main process (17311) killed by KILL signal
Jan  4 17:50:44 kernel: [ 1915.494245] init: mysql main process ended, respawning
Jan  4 17:50:44 kernel: [ 1915.500025] type=1400 audit(1357318244.557:48): apparmor=&quot;STATUS&quot; operation=&quot;profile_replace&quot; name=&quot;/usr/sbin/mysqld&quot; pid=18458 comm=&quot;apparmor_parser&quot;
Jan  4 17:50:46 /etc/mysql/debian-start[18501]: Upgrading MySQL tables if necessary.
Jan  4 17:50:46 /etc/mysql/debian-start[18504]: /usr/bin/mysql_upgrade: the '--basedir' option is always ignored
Jan  4 17:50:46 /etc/mysql/debian-start[18504]: Looking for 'mysql' as: /usr/bin/mysql
Jan  4 17:50:46 /etc/mysql/debian-start[18504]: Looking for 'mysqlcheck' as: /usr/bin/mysqlcheck
Jan  4 17:50:46 /etc/mysql/debian-start[18504]: This installation of MySQL is already upgraded to 5.5.28, use --force if you still need to run mysql_upgrade
Jan  4 17:50:46 /etc/mysql/debian-start[18515]: Checking for insecure root accounts.
Jan  4 17:50:46 /etc/mysql/debian-start[18520]: Triggering myisam-recover for all MyISAM tables
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로세스가 자동으로 다시 시작되는 이유를 알고 계십니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;미리 감사드립니다!!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 똑같은 문제를 겪고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행중&lt;/font&gt;&lt;/font&gt;&lt;code&gt;kill&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령어를 사용하면 프로세스가 중단되지만, 제 경우에는 다른 프로세스 ID로 계속 나타납니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;영원히 막을 방법을 찾을 수 있는 유일한 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo stop mysql
&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;출처 : http://www.itfromscratch.com/how-to-stop-the-percona-mysql-server/&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;sudo service mysql stop&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;모든 mysql 인스턴스를 삭제하시겠습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;루트로 시도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; pkill mysqld;
&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;맥 OS에서 홈브루를 사용하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;brew services stop mysql&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나에겐 통하지 &lt;em papago-id=&quot;5-1&quot;&gt;않았지만&lt;/em&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo brew services stop mysql&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;여기서 추측하겠지만 mysqld가 mysql_safe init 스크립트를 통해 시작되어 서버가 다시 시작될 수 있습니다.&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;/etc/init 디렉토리에 mysql.conf 파일과 함께 orig_mysql.conf라는 두 번째 init 스크립트가 있었던 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이로 인해 스타트업이 두 개의 인스턴스를 시작하게 되었고 하나가 종료되었을 때 혼란스러워 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 계속해서 답례가 이루어졌습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 솔루션:&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가능한 경우 시동을 통해 mysql을 중지합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;service mysql stop&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;conf 파일 중 하나를 제거합니다( /etc/init/orig_mysql.conf를 제거했습니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 다음을 사용하여 init를 다시 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;telinit u&lt;/code&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;나머지 모든 mysqld 프로세스를 수동으로 제거합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 중인 mysqld 프로세스가 없고 해당 프로세스가 더 이상 응답하지 않는다는 것을 확인하면 다음과 같이 mysqld 프로세스를 다시 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;service mysql start&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가에게 도움이 되길 바랍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결하는 데 2년이 걸렸습니다.&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;에러 로그(&quot;/var/log/mysql/error.log&quot;)를 확인해보니 &quot;explicit_defaults_for_timestamp=&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;TRUE&quot;(&quot;알 수 없는 변수&quot;)에서 오류가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 내 .cnf(&quot;/etc/mysql/my.cnf&quot;)에서 제거하고 &quot;sudo start mysql&quot;을 실행하면 백업 및 실행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것도 도움이 되었으면 좋겠습니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/14161415/mysql-process-cannot-be-stopped&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>mysql</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1260</guid>
      <comments>https://ittop.tistory.com/1260#entry1260comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:33:53 +0900</pubDate>
    </item>
    <item>
      <title>jax가 있는 파일에서 JSON 개체를 로드하려면 어떻게 해야 합니까?</title>
      <link>https://ittop.tistory.com/1259</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jax가 있는 파일에서 JSON 개체를 로드하려면 어떻게 해야 합니까?&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;저는 데이터 전송을 위해 JSON을 사용하고 있습니다.&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;스크립트에 하나의 JSON 개체만 포함된 Ajax 파일을 읽으려면 HTML 페이지에서 무엇이 필요합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 jQuery가 필요한가요, 아니면 그 JSON 파일을 Ajax와 함께 로딩하는 것이 가능한가요?&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;라이브러리는 필요 없습니다. json 파일을 가져와 파싱하는 바닐라 자바스크립트로 모든 것을 이용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function fetchJSONFile(path, callback) {
    var httpRequest = new XMLHttpRequest();
    httpRequest.onreadystatechange = function() {
        if (httpRequest.readyState === 4) {
            if (httpRequest.status === 200) {
                var data = JSON.parse(httpRequest.responseText);
                if (callback) callback(data);
            }
        }
    };
    httpRequest.open('GET', path);
    httpRequest.send(); 
}

// this requests the file and executes a callback with the parsed result once
//   it is available
fetchJSONFile('pathToFile.json', function(data){
    // do something with your data
    console.log(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;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var a = new XMLHttpRequest();
a.open(&quot;GET&quot;,&quot;your_json_file&quot;,true);
a.onreadystatechange = function() {
  if( this.readyState == 4) {
    if( this.status == 200) {
      var json = window.JSON ? JSON.parse(this.reponseText) : eval(&quot;(&quot;+this.responseText+&quot;)&quot;);
      // do something with json
    }
    else alert(&quot;HTTP error &quot;+this.status+&quot; &quot;+this.statusText);
  }
}
a.send();
&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;과거에 Ajax는 브라우저마다 달랐습니다. 불행하게도 많은 사용자들이 여전히 사용하고 있는 오래된 브라우저를 지원해야 한다면 말입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전 브라우저의 경우 브라우저 차이를 처리하려면 JQuery와 같은 라이브러리(또는 자체 등가 코드)가 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든 초보자에게는 좋은 문서, 간단한 API, 빠른 시작을 위해 jQuery를 추천할 수 있지만 &lt;a href=&quot;http://developer.mozilla.org/&quot; rel=&quot;nofollow&quot; papago-id=&quot;7-1&quot;&gt;MDN&lt;/a&gt;은 자바스크립트 자체에도 도움이 됩니다(그리고 jQuery에 주로 의존하더라도 자바스크립트/DOM API를 점점 더 이해해야 합니다).&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;저는 ajax jquery를 사용하는 것을 선호합니다.&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;예를 들어 서버 측에서 수행할 수 있는 작업은 php를 사용하고 있다고 가정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) &amp;amp;&amp;amp; $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){
    // if it's an ajax request

    $json['success'] = 1;
    $json['html'] = '&amp;lt;div id=&quot;test&quot;&amp;gt;..[more html code here].. &amp;lt;/div&amp;gt;';
    echo json_encode($json);
}else{
    // if it's an non ajax request


}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클라이언트 측에서는 jquery ajax를 사용하여 다음 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    $.ajax({
          type: &quot;POST&quot;,
          url: &quot;[your request url here]&quot;,
          data: { name: &quot;JOKOOOOW OOWNOOO&quot; },
          complete: function(e, xhr, settings){
              switch(e.status){
                  case 500:
                     alert('500 internal server error!');
                     break;
                  case 404:
                      alert('404 Page not found!');
                     break;
                  case 401:
                      alert('401 unauthorized access');     
                     break;       
              }
          }           
        }).done(function( data ) {
            var obj = jQuery.parseJSON(data)

            if (obj.success == 1){

                  $('div#insert_html_div').html(obj.html);

            }else if (obj.error == 1){


                            }


            // etc

        });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/14388452/how-do-i-load-a-json-object-from-a-file-with-ajax&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Ajax</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1259</guid>
      <comments>https://ittop.tistory.com/1259#entry1259comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:33:47 +0900</pubDate>
    </item>
    <item>
      <title>wait3(waitpid alias)는 ECHILD로 설정된 오류가 없는 -1을 반환합니다.</title>
      <link>https://ittop.tistory.com/1258</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;wait3(waitpid alias)는 ECHILD로 설정된 오류가 없는 -1을 반환합니다.&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://github.com/antirez/redis/issues/2897&quot; papago-id=&quot;1-1&quot; rel=&quot;noreferrer&quot;&gt;Redis 이슈&lt;/a&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저희가.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait3()&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;디스크에 새 AOF 버전을 생성할 때까지 AOF 다시 쓰기 하위를 기다리는 호출.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이가 끝나면 부모에게 다음을 통해 알립니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait3()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기존 AOF를 새 AOF로 대체하기 위해서입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 위 문제와 관련하여 사용자가 버그에 대해 알려주었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 언제를 명확하게 기록하기 위해 Redis 3.0의 구현을 조금 수정했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait3()&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;이 예기치 않은 상태 때문에 충돌 대신 -1을 반환했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;code&gt;wait3()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대기 중인 아이들이 있을 때 호출됩니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIGCHLD&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;SIG_DFL&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;, Redis에는 이 신호를 설정하는 코드가 전혀 없으므로 기본 동작입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫번째 AOF 재작성이 발생하면,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait3()&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;/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;두 번째 AOF 재작성(두 번째 자식 생성)부터 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait3()&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;는 -1을 반환하기 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AFAIK 현재 우리가 부르는 코드에서는 불가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait3()&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;보류 중인 자식이 없는 동안, AOF 자식이 생성될 때부터 우리는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;server.aof_child_pid&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;pid 값으로, 그리고 우리는 성공한 후에야 그것을 재설정했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait3()&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;wait3()&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;-1과 함께 실패할 이유가 없어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ECHILD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 하지만, 그래서 좀비 아이는 아마도 어떤 예기치 않은 이유로 만들어지지 않았을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;21-0&quot;&gt;가설 1&lt;/strong&gt;: 특정 홀수 조건 동안 리눅스가 메모리 압력 때문에 좀비 자식을 버릴 가능성이 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;좀비는 메타데이터만 첨부되어 있지만 누가 알겠습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;wait3()&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;WNOHANG&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그런 점을 감안하면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIGCHLD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로 설정됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIG_DFL&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;기본적으로, 실패 및 반환으로 이어져야 하는 유일한 조건 -1 및&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ECHLD&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;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;28-0&quot;&gt;가설 2&lt;/strong&gt;: 발생할 수 있는 다른 일이지만 발생할 경우 설명할 수 없는 것은 첫째 아이가 죽은 후에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIGCHLD&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;SIG_IGN&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,발생시키는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait3()&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;과 -1및 -1을 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ECHLD&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&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;33-0&quot;&gt;가설 3&lt;/strong&gt;: 좀비 아이들을 외부에서 제거할 수 있는 방법은?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마도 이 사용자는 백그라운드에서 좀비 프로세스를 제거하여 정보를 더 이상 사용할 수 없도록 하는 일종의 스크립트를 가지고 있을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait3()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;? 내가 아는 한, 부모가 좀비를 기다리지 않으면 &lt;em papago-id=&quot;34-1&quot;&gt;절대&lt;/em&gt;로 좀비를 제거할 수 &lt;em papago-id=&quot;34-1&quot;&gt;없습니다&lt;/em&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;waitpid&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;SIGCHLD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;무시되는 것은 아니지만 아마도 리눅스 특유의 방법이 있을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;37-0&quot;&gt;가설 4&lt;/strong&gt;: 실제로 Redis 코드에 버그가 있어서 성공적입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait3()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;처음에는 상태를 올바르게 재설정하지 않고 나중에는 전화를 걸죠&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait3()&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;몇 번이고 하지만 좀비가 없어져서 -1로 돌아옵니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드를 분석해보면 불가능해 보이지만, 제가 틀렸을 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 중요한 것은 &lt;em papago-id=&quot;40-1&quot;&gt;우리는 과거에 이것을 관찰한 적&lt;/em&gt;이 없다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 특정 Linux 시스템에서만 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;41-0&quot;&gt;업데이트&lt;/strong&gt;: Yossi Gottlieb은 다음과 같이 제안했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIGCHLD&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;어떠한 이유로 인해 Redis 프로세스의 다른 스레드에서 수신됩니다(정상적으로 발생하지 않음, 이 시스템에서만).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 이미 가면을 썼습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIGALRM&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;bio.c&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;SIGCHLD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;I/O 쓰레드에서도 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부록: Rediscode에서 선택한 부분&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;wait3()이 호출되는 위치:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/* Check if a background saving or AOF rewrite in progress terminated. */
if (server.rdb_child_pid != -1 || server.aof_child_pid != -1) {
    int statloc;
    pid_t pid;

    if ((pid = wait3(&amp;amp;statloc,WNOHANG,NULL)) != 0) {
        int exitcode = WEXITSTATUS(statloc);
        int bysignal = 0;

        if (WIFSIGNALED(statloc)) bysignal = WTERMSIG(statloc);

        if (pid == -1) {
            redisLog(LOG_WARNING,&quot;wait3() returned an error: %s. &quot;
                &quot;rdb_child_pid = %d, aof_child_pid = %d&quot;,
                strerror(errno),
                (int) server.rdb_child_pid,
                (int) server.aof_child_pid);
        } else if (pid == server.rdb_child_pid) {
            backgroundSaveDoneHandler(exitcode,bysignal);
        } else if (pid == server.aof_child_pid) {
            backgroundRewriteDoneHandler(exitcode,bysignal);
        } else {
            redisLog(REDIS_WARNING,
                &quot;Warning, detected child with unmatched pid: %ld&quot;,
                (long)pid);
        }
        updateDictResizePolicy();
    }
} else {
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택한 부분&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;backgroundRewriteDoneHandler&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;void backgroundRewriteDoneHandler(int exitcode, int bysignal) {
    if (!bysignal &amp;amp;&amp;amp; exitcode == 0) {
        int newfd, oldfd;
        char tmpfile[256];
        long long now = ustime();
        mstime_t latency;

        redisLog(REDIS_NOTICE,
            &quot;Background AOF rewrite terminated with success&quot;);

        ... more code to handle the rewrite, never calls return ...

    } else if (!bysignal &amp;amp;&amp;amp; exitcode != 0) {
        server.aof_lastbgrewrite_status = REDIS_ERR;

        redisLog(REDIS_WARNING,
            &quot;Background AOF rewrite terminated with error&quot;);
    } else {
        server.aof_lastbgrewrite_status = REDIS_ERR;

        redisLog(REDIS_WARNING,
            &quot;Background AOF rewrite terminated by signal %d&quot;, bysignal);
    }

cleanup:
    aofClosePipes();
    aofRewriteBufferReset();
    aofRemoveTempFile(server.aof_child_pid);
    server.aof_child_pid = -1;
    server.aof_rewrite_time_last = time(NULL)-server.aof_rewrite_time_start;
    server.aof_rewrite_time_start = -1;
    /* Schedule a new rewrite if we are waiting for it to switch the AOF ON. */
    if (server.aof_state == REDIS_AOF_WAIT_REWRITE)
        server.aof_rewrite_scheduled = 1;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보시다시피 모든 코드 경로가 실행되어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;cleanup&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;server.aof_child_pid&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;1 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제가 발생하는 동안 Redis에서 기록한 오류&lt;/font&gt;&lt;/h1&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;21353:C 11월 29일 04:00:29&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;957 * AOF rewrite: 카피 온 라이트(copy-on-write)에서 사용되는 8MB의 메모리&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;27848:M 29 11월 04:00:30.133 ^@ wait3()에서 오류를 반환했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자식 프로세스가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;rdb_child_pid = -1, aof_child_pid = 21353&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 볼 수 있듯이.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;aof_child_pid&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;-1이 아닙니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TLDR: 현재 지정되지 않은 동작에 의존하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;signal&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; (2); &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sigaction&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(carefully) 대신에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIGCHLD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이상합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 &lt;a href=&quot;http://man7.org/linux/man-pages/man2/sigaction.2.html&quot; papago-id=&quot;62-1&quot; rel=&quot;nofollow&quot;&gt;설명서 페이지&lt;/a&gt;에서 다음에 대해&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sigaction&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;POSIX.1-1990에 대한 작업 설정이 허용되지 않음&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIGCHLD&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;SIG_IGN&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. POSIX.1-2001은 이러한 가능성을 허용하여 무시합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIGCHLD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좀비의 생성을 방지하기 위해 사용될 수 있습니다(참조).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에도 불구하고 및 V  (2&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그럼에도 불구하고, 과거 BSD 및 시스템 V의 무시 행위&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIGCHLD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;차이가 있기 때문에, 종료된 아이들이 좀비가 되지 않도록 보장하는 유일하게 완전하게 휴대할 수 있는 방법은 잡는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIGCHLD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;신호를 보내고 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait&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;(2) 또는 유사한.&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;font class=&quot;papago-parent&quot;&gt;그리고 여기서 한가지.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(2)의 &lt;a href=&quot;http://linux.die.net/man/2/wait&quot; papago-id=&quot;73-1&quot; rel=&quot;nofollow&quot;&gt;수동 페이지&lt;/a&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;POSIX.1-2001은 다음과 같이 규정하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIGCHLD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로 설정됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIG_IGN&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;68&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SA_NOCLDWAIT&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;SIGCHLD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;70&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조) )&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sigaction&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(2)), 그러면 종료되는 아이들은 좀비가 되지 않고 전화를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;72&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;waitpid()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 자식이 종료될 때까지 차단한 다음 오류를 다음으로 설정하여 실패합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ECHILD&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;. (원래 POSIX 표준은 설정 동작을 남겼습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIGCHLD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;75&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIG_IGN&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;76&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;불특정의&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;주의할 점은 다음과 같은 기본적인 처분이&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIGCHLD&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;는 &quot;ignore&quot;이며, 명시적으로 다음과 같이 처분을 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIG_IGN&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;78&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과적으로 좀비 프로세스 아동에 대한 다양한 대우를 초래합니다.)&lt;/font&gt;&lt;font class=&quot;papago-parent&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.6은 이 규격에 부합합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 리눅스 2.4(이전 버전)는 다음과 같이 하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;79&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;waitpid()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;80&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;통화중입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIGCHLD&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;SIGCHLD&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;무시되지 않았습니다. 즉, 다음 자식이 종료된 후 해당 자식의 프로세스 ID와 상태를 반환할 때까지 호출이 차단됩니다.&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;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;SIG_IGN&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;가 설정되어 있으면 (리눅스 2.6+ 아래에서) 사용자가 보고 있는 동작을 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;85&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;돌아올 것입니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;86&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ECHLD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;87&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이가 자동으로 거둬들일 것이기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;88&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째로, 신호 처리는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pthreads&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;89&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(당신이 여기서 쓰고 있는 것 같아요) 그건 어려운 걸로 악명이 높습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 작동하는 방식은 (여러분도 아시다시피) 프로세스 지향 신호가 마스킹되지 않은 프로세스 내의 임의의 스레드로 전송되는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;90&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 두 가지를 종합해보면, 제가 전에 마주쳤던 문제를 우연히 마주친 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제가 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIGCHLD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;91&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업 처리&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;signal()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;92&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(이는 pthreads 이전에 감가상각되었기 때문에 충분히 공정합니다)로 이동함으로써 수정되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sigaction&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;93&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나사산 신호 마스크를 주의 깊게 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;font 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;sigaction&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;94&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 제가 말씀드리던 것은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;signal()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;95&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 하지만 그들에게 걸려 넘어지고 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pthreads&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;96&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;97&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 &lt;em papago-id=&quot;97-1&quot;&gt;지정&lt;/em&gt;되지 않은 &lt;em papago-id=&quot;97-1&quot;&gt;동작&lt;/em&gt;에 의존하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 &lt;a href=&quot;http://linux.die.net/man/2/signal&quot; rel=&quot;nofollow&quot; papago-id=&quot;97-3&quot;&gt;수동 페이지에서&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;signal(2)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;98&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;99&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;signal()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;100&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다중 스레드 프로세스에서는 지정되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;109&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 여러분께 권장하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;101&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이동 위치&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sigaction()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;102&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pthread_sigmask()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;103&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 사용자가 신경 쓰는 모든 신호의 처리를 명시적으로 설정합니다(현재 기본값이라고 생각하더라도).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIG_IGN&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;104&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIG_DFL&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;105&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 심할 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이 작업을 수행하는 동안 신호를 차단합니다(주의가 지나칠 수 있지만 어디선가 예제를 복사했습니다).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;115&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 하고 있는 일은 이렇습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sigset_t set;
struct sigaction sa;

/* block all signals */
sigfillset (&amp;amp;set);
pthread_sigmask (SIG_BLOCK, &amp;amp;set, NULL);

/* Set up the structure to specify the new action. */
memset (&amp;amp;sa, 0, sizeof (struct sigaction));
sa.sa_handler = handlesignal;        /* signal handler for INT, TERM, HUP, USR1, USR2 */
sigemptyset (&amp;amp;sa.sa_mask);
sa.sa_flags = 0;
sigaction (SIGINT, &amp;amp;sa, NULL);
sigaction (SIGTERM, &amp;amp;sa, NULL);
sigaction (SIGHUP, &amp;amp;sa, NULL);
sigaction (SIGUSR1, &amp;amp;sa, NULL);
sigaction (SIGUSR2, &amp;amp;sa, NULL);

sa.sa_handler = SIG_IGN;
sigemptyset (&amp;amp;sa.sa_mask);
sa.sa_flags = 0;
sigaction (SIGPIPE, &amp;amp;sa, NULL);     /* I don't care about SIGPIPE */

sa.sa_handler = SIG_DFL;
sigemptyset (&amp;amp;sa.sa_mask);
sa.sa_flags = 0;
sigaction (SIGCHLD, &amp;amp;sa, NULL);     /* I want SIGCHLD to be handled by SIG_DFL */

pthread_sigmask (SIG_UNBLOCK, &amp;amp;set, NULL);
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;106&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가능한 경우 모든 신호 처리기 및 마스크 등을 먼저 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pthread&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;107&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작전.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가능한 경우 신호 처리기 및 마스크를 변경하지 마십시오(이전 및 이후에 이 작업을 수행해야 할 수 있습니다).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fork()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;108&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;109&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;신호 처리기가 필요한 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIGCHLD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;110&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(믿기 보다는)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIG_DFL&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;111&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;), 가능한 경우 스레드에서 수신하게 하고 자체 파이프 방식 또는 유사한 방식을 사용하여 메인 프로그램에 알립니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;112&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 신호를 처리하지 않는 스레드가 있어야 하는 경우 다음으로 제한합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pthread_sigmask&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;113&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보다 관련된 분야에서&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sig*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;114&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;름&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;115&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;혹시라도 내가 마주친 다음 문제에 정면으로 부딪힐 경우를 대비해서, 당신이 그 다음에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fork()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;116&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'d, 부모 프로세스에서 물려받을 수 있는 모든 것에 의존하지 않고 처음부터 (자녀의) 신호 처리를 다시 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;pthread와 혼합된 신호보다 더 나쁜 것이 있다면 pthread와 혼합된 신호입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fork()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;117&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;118&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고로 (1) 변화가 작동하는 &lt;em papago-id=&quot;118-1&quot;&gt;이유&lt;/em&gt;를 완전히 설명할 수는 없지만, 저에게 매우 유사한 문제로 보이는 것을 수정했고 결국 이전에 '특정되지 않은' 것에 의존하고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 당신의 '가설 2'에 가장 가깝지만, 나는 그것이 레거시 신호 함수의 완전하지 않은 에뮬레이션이라고 생각합니다(특히 이전의 희귀한 행동을 에뮬레이션합니다).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;signal()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;119&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 그것을 대체하게 한 원인입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sigaction()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;120&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;처음부터 - 하지만 이것은 단지 추측일 뿐입니다).&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;121&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;덧붙여서, 제가 제안하는 것은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait4()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;122&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 (사용하지 않는 경우)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rusage&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;123&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;waitpid()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;124&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보다는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wait3()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;125&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 대기할 특정 PID를 지정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이들을 낳게 하는 다른 무언가가 있다면 (도서관에서 하게 한 적이 있습니다), 잘못된 일을 기다리게 될지도 모릅니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;136&quot; papago-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/33994543/wait3-waitpid-alias-returns-1-with-errno-set-to-echild-when-it-should-not&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1258</guid>
      <comments>https://ittop.tistory.com/1258#entry1258comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:33:39 +0900</pubDate>
    </item>
    <item>
      <title>제출 후 연락 양식 7 방향 전환</title>
      <link>https://ittop.tistory.com/1257</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제출 후 연락 양식 7 방향 전환&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;연락처 양식 7을 사용하고 있으며 연락처 양식 제출에 성공한 후 다른 페이지로 리디렉션하려고 합니다.&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;연락처 양식 7 – 성공 페이지 리디렉션(https://nl-be.wordpress.org/plugins/contact-form-7-success-page-redirects/) 을 사용해 보았지만 플러그인이 테마와 호환되지 않고 일부 오류가 발생합니다.&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;저도 이 https://contactform7.com/redirecting-to-another-url-after-submissions/ 을 찾았지만 구현할 수가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 사이트의 모든 연락처 양식이 아닌 하나의 연락처 양식에만 리디렉션이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;j.&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;중요한 질문은 양식 10개와 감사 페이지 10개가 있는데 이 솔루션이 작동하지 않을 때 나타납니다.&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;1단계: 양식에 숨겨진 필드를 만들고 그 안에 감사 페이지 URL을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[hidden thankyouURL id:thankyouURL default:http://example.com/thank-you/ &quot;http://example.com/thank-you/&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;2단계: DOM 이벤트에서 필드에서 감사 URL을 가져와 사용자를 리디렉션합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
document.addEventListener( 'wpcf7mailsent', function( event ) {
    var thankyouURL = document.getElementById(&quot;thankyouURL&quot;).value;
    location = thankyouURL;
}, false );
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바로 그겁니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;11-1&quot;&gt;functions.php&lt;/strong&gt;에 아래 코드 추가 (테마에 위치 -&amp;gt; 테마 이름 폴더)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_action( 'wp_footer', 'mycustom_wp_footer' );

function mycustom_wp_footer() {
?&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
document.addEventListener( 'wpcf7mailsent', function( e ) {
    var str = window.location.href;
    if( str.includes(&quot;flp&quot;) ){
        window.location.href = &quot;http://www.YourWebsite.com/facebook-thank-you&quot;;
    } else if( str.includes(&quot;glp&quot;) ){
        window.location.href = &quot;http://www.YourWebsite.com/google-thank-you&quot;;
    }
}, false );
&amp;lt;/script&amp;gt;
&amp;lt;?php
}
&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;on_sent_ok은 더 이상 권장되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지 끝에 있는 이 페이지 DOM Events를 확인하면 &lt;a href=&quot;https://contactform7.com/dom-events/&quot; papago-id=&quot;12-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;특정&lt;/a&gt; 양식에 &lt;a href=&quot;https://contactform7.com/dom-events/&quot; papago-id=&quot;12-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;대한&lt;/a&gt; 코드를 찾을 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 페이지에 여러 양식이 있으면 어떻게 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 답변을 사용하면 문제가 될 수 있습니다(예를 들어 ID가 고유해야 하거나 리디렉션 ID가 페이지에 있지만 사용자가 다른 양식을 제출하는 경우).&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;이 답변은 CF7의 숨겨진 폼 필드를 사용하지만, 새 폼을 만들 때마다 JS 코드를 편집할 필요 없이 각 폼에 대한 고유한 리디렉션 URL을 가질 수 있습니다(아래 코드와 같이 &quot;url_redirect&quot;와 같은 일관된 이름만 사용).&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;연락처 양식 7:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[hidden url_redirect &quot;http://customurl.com?customvar=1&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;document.addEventListener( 'wpcf7mailsent', function( e ) {

    var url_redirect = '';

    var inputs = e.detail.inputs;
    for ( var i = 0; i &amp;lt; inputs.length; i++ ) {

        if( 'url_redirect' == inputs[i].name ) {//used for misc forms
            url_redirect = inputs[i].value;//set the redirect value from current submitted form
        }

    }

    //Check for redirect 
    if( url_redirect ){
        location = url_redirect;
    }

}, false );  
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;****쉬운 솔루션****&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;EventListener 스크립트를 사용하는 옵션은 제게 효과가 없었지만 아주 간단한 해결책을 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;연락처 양식 7에 대한 리디렉션이라는 워드프레스 플러그인을 추가하면 됩니다(아래 스크린샷 보기).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ISLDk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ISLDk.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&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;플러그인을 설치한 후 작성한 연락처 양식(2번째 스크린샷 보기) 안으로 들어가면 &quot;Redirect Settings&quot;라는 탭이 새로 나타납니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 프로젝트의 이미 존재하는 사용자 지정 페이지 중 하나를 리디렉션 url로 설정하거나 목적을 위한 외부 url을 설정할 수 있습니다.&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/78mwR.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/78mwR.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/43707576/contact-form-7-redirect-after-submission&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>wordpress</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1257</guid>
      <comments>https://ittop.tistory.com/1257#entry1257comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:33:30 +0900</pubDate>
    </item>
    <item>
      <title>Laravel 5 Ajax 파일/이미지 업로드</title>
      <link>https://ittop.tistory.com/1256</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Laravel 5 Ajax 파일/이미지 업로드&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;ajax POST를 통해 이미지/파일을 업로드 할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 제 코드가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아약스..&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/*Add new catagory Event*/
$(&quot;.addbtn&quot;).click(function(){
$.ajax({
      url:'add-catagory',
      data:{
        logo:new FormData($(&quot;#upload_form&quot;)[0]),
        },
      dataType:'json',
      async:false,
      type:'post',
      processData: false,
      contentType: false,
      success:function(response){
        console.log(response);
      },
    });
 });
/*Add new catagory Event*/
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;블레이드 템플릿...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;form enctype=&quot;multipart/form-data&quot; id=&quot;upload_form&quot; role=&quot;form&quot; method=&quot;POST&quot; action=&quot;&quot; &amp;gt;
      &amp;lt;div class=&quot;form-group&quot;&amp;gt;
        &amp;lt;label for=&quot;catagry_name&quot;&amp;gt;Name&amp;lt;/label&amp;gt;
         &amp;lt;input type=&quot;hidden&quot; name=&quot;_token&quot; value=&quot;{{ csrf_token()}}&quot;&amp;gt;
        &amp;lt;input type=&quot;text&quot; class=&quot;form-control&quot; id=&quot;catagry_name&quot; placeholder=&quot;Name&quot;&amp;gt;
        &amp;lt;p class=&quot;invalid&quot;&amp;gt;Enter Catagory Name.&amp;lt;/p&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;div class=&quot;form-group&quot;&amp;gt;
        &amp;lt;label for=&quot;catagry_name&quot;&amp;gt;Logo&amp;lt;/label&amp;gt;
        &amp;lt;input type=&quot;file&quot; class=&quot;form-control&quot; id=&quot;catagry_logo&quot;&amp;gt;
        &amp;lt;p class=&quot;invalid&quot;&amp;gt;Enter Catagory Logo.&amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;/form&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;modelFootr&quot;&amp;gt;
      &amp;lt;button type=&quot;button&quot; class=&quot;addbtn&quot;&amp;gt;Add&amp;lt;/button&amp;gt;
      &amp;lt;button type=&quot;button&quot; class=&quot;cnclbtn&quot;&amp;gt;Reset&amp;lt;/button&amp;gt;
    &amp;lt;/div&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;pre&gt;&lt;code&gt;public function catadd(){
    if (Input::hasFile('logo'))
    {
       return &quot;file present&quot;;
    }
    else{
        return &quot;file not present&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; Route::post('add-catagory',['as'=&amp;gt;'catagory_add','uses'=&amp;gt;'MastersController@catadd']);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 코드의 오류는 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 정보를 laravel controller에서 가져올 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결하려면 어떻게 해야 할까요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경해야 할 두 가지 사항:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;js 파일을 다음에서 변경합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; data:{
    logo:new FormData($(&quot;#upload_form&quot;)[0]),
 },
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;받는 사람:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; data:new FormData($(&quot;#upload_form&quot;)[0]),
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜냐하면 당신은 전체 양식을 보내길 원하기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;15&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;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 입력 필드에 이름 추가&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;file&quot; class=&quot;form-control&quot; id=&quot;catagry_logo&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;file&quot; name=&quot;logo&quot; class=&quot;form-control&quot; id=&quot;catagry_logo&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;다음을 게시할 때 얻을 수 있는 것을 컨트롤러에서 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;echo dd(Input::all()); 
&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;php에서 파일 개체를 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHP의 내용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$_FILES

Request::file(&quot;logo&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;네, 자료는 따로 안 올려요?&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;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 나에게 효과가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dataType:'json'&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;dataType:'json'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;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/32367132/laravel-5-ajax-file-image-upload&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Ajax</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1256</guid>
      <comments>https://ittop.tistory.com/1256#entry1256comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:33:21 +0900</pubDate>
    </item>
    <item>
      <title>Eclipse(C/C++) 오류: 플랫폼 종료 후에도 계속 실행 중인 작업 발견</title>
      <link>https://ittop.tistory.com/1255</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Eclipse(C/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;제가 이클립스를 열러 갔을 때, 이클립스는 한 시간 전에 작동했는데, 시작할 때 멈춰서 &quot;오류가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;로그 파일 참조&quot;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 로그 파일을 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;OS: Mac OSX 10.7.5&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;C/C++ 개발자용 이클립스 IDE 3.8&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;또한 -clean으로 Eclipse 실행 파일을 실행하고 .metadata 폴더의 다양한 파일을 삭제해 보았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인터넷상의 많은 해결책들은 지금까지 아무 것도 효과가 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;!SESSION 2012-11-10 22:10:32.651 -----------------------------------------------
eclipse.buildId=M20120914-1800
java.version=1.7.0_09
java.vendor=Oracle Corporation
BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=en_US
Framework arguments:  -product org.eclipse.epp.package.cpp.product -keyring /Users/Puzzel/.eclipse_keyring -showlocation
Command-line arguments:  -os macosx -ws cocoa -arch x86_64 -product org.eclipse.epp.package.cpp.product -keyring /Users/Puzzel/.eclipse_keyring -showlocation

!ENTRY org.eclipse.core.net 1 0 2012-11-10 22:10:35.937
!MESSAGE System property http.nonProxyHosts has been set to local|*.local|169.254/16|*.169.254/16 by an external source. This value will be overwritten using the values from the preferences

!ENTRY org.eclipse.osgi 4 0 2012-11-10 22:10:36.479
!MESSAGE Application error
!STACK 1
org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NullPointerException)
    at org.eclipse.swt.SWT.error(SWT.java:4361)
    at org.eclipse.swt.SWT.error(SWT.java:4276)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:138)
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3944)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3621)
    at org.eclipse.swt.widgets.Display.release(Display.java:3682)
    at org.eclipse.swt.graphics.Device.dispose(Device.java:190)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:140)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
Caused by: java.lang.NullPointerException
    at org.eclipse.ui.internal.Workbench.createWorkbenchWindow(Workbench.java:1231)
    at org.eclipse.ui.internal.Workbench.getActiveWorkbenchWindow(Workbench.java:1224)
    at org.eclipse.cdt.codan.internal.ui.cxx.Startup$1.run(Startup.java:39)
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
    ... 17 more

!ENTRY org.eclipse.mylyn.monitor.ui 4 0 2012-11-10 22:10:36.569
!MESSAGE Monitor UI stop failed
!STACK 0
java.lang.NullPointerException
    at org.eclipse.mylyn.internal.monitor.ui.ActivityContextManager.stop(ActivityContextManager.java:152)
    at org.eclipse.mylyn.internal.monitor.ui.MonitorUiPlugin.stop(MonitorUiPlugin.java:157)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl$2.run(BundleContextImpl.java:771)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.stop(BundleContextImpl.java:764)
    at org.eclipse.osgi.framework.internal.core.BundleHost.stopWorker(BundleHost.java:510)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.suspend(AbstractBundle.java:566)
    at org.eclipse.osgi.framework.internal.core.Framework.suspendBundle(Framework.java:1206)
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.decFWSL(StartLevelManager.java:592)
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:257)
    at org.eclipse.osgi.framework.internal.core.StartLevelManager.shutdown(StartLevelManager.java:215)
    at org.eclipse.osgi.framework.internal.core.InternalSystemBundle.suspend(InternalSystemBundle.java:284)
    at org.eclipse.osgi.framework.internal.core.Framework.shutdown(Framework.java:692)
    at org.eclipse.osgi.framework.internal.core.Framework.close(Framework.java:600)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.shutdown(EclipseStarter.java:399)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:199)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1438)

!ENTRY org.eclipse.core.jobs 2 2 2012-11-10 22:10:36.917
!MESSAGE Job found still running after platform shutdown.  Jobs should be canceled by the plugin that scheduled them during shutdown: org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin$TasksUiInitializationJob

!ENTRY org.eclipse.core.jobs 2 2 2012-11-10 22:10:36.918
!MESSAGE Job found still running after platform shutdown.  Jobs should be canceled by the plugin that scheduled them during shutdown: org.eclipse.epp.internal.mpc.ui.wizards.MarketplaceDropAdapter$1
&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;workspace/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi&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;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;a href=&quot;https://stackoverflow.com/a/12045547/1580190&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;CLI에서 clearPersistedState Work for me 옵션으로 열어서도 문제가 해결되었습니다.&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;Flash Builder와 동일한 문제가 있는 경우 다음을 제거합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.metadata\.plugins\org.eclipse.ui.workbench\workbench.xml
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/13328278/eclipse-c-c-error-job-found-still-running-after-platform-shutdown&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1255</guid>
      <comments>https://ittop.tistory.com/1255#entry1255comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:33:13 +0900</pubDate>
    </item>
    <item>
      <title>지시문의 요소에 html을 추가하고 상호 작용할 로컬 함수를 만듭니다.</title>
      <link>https://ittop.tistory.com/1254</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 papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인 마이 앵글&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS application, 나는 곳곳에 다른 복잡한 입력들을 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 일부 입력에는 Google Places에서 자동 완성을 사용하거나 Twitter Bootstrap에서 자동 완성을 사용하라는 지시가 있습니다.&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;iOS 기능과 같은 텍스트를 추가할 때 지우기 버튼을 표시하는 지시문을 만드는 방법을 찾고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거는 제가 만들었지만.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scope.erase&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시작하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng-show&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;문자 입력 후 HTML을 추가하여 컨트롤러 내에서 '재생'할 수 있습니까?&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;app.directive('eraseBtn', function($parse, $compile){

return {
    require: 'ngModel',
    restrict: &quot;A&quot;,
    transclude: true,
    link : function(scope, element, attrs, model){

        element.parent().append('&amp;lt;button ng-click=&quot;erase()&quot; ng-show=&quot;model.length &amp;gt; 0&quot; class=&quot;erase-btn&quot;&amp;gt;x&amp;lt;/button&amp;gt;');

        scope.erase = function(){
            console.log('Erase test');
        }
    }
}
});
&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;제 입력의 HTML이 모두 다르기 때문에 템플릿을 사용하고 싶지 않습니다.&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 class=&quot;papago-parent&quot;&gt;해당 요소를 모델에 바인딩하거나 지침을 사용하여 구성하려면 다음을 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$compile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(그리고 컴파일된 템플릿을 모델과 함께 호출하는 것을 잊지 마십시오):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html ng-app=&quot;demo&quot;&amp;gt;

  &amp;lt;head&amp;gt;
    &amp;lt;script data-require=&quot;angular.js@*&quot; data-semver=&quot;1.2.10&quot; src=&quot;http://code.angularjs.org/1.2.10/angular.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot; /&amp;gt;
    &amp;lt;script src=&quot;script.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;/head&amp;gt;

  &amp;lt;body ng-controller=&quot;demoController&quot;&amp;gt;
    &amp;lt;div demo-directive ng-repeat=&quot;input in inputs&quot;&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;

&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;angular.module('demo', []).
  controller('demoController', function($scope) {
    $scope.inputs = [{
      inputType: 'checkbox',
      checked: true,
      label: 'input 1'
    }, {
      inputType: 'text',
      value: 'some text 1',
      label: 'input 2'
    }];

    $scope.doSomething = function() {
      alert('button clicked');
    };
  }).
  directive('demoDirective', function($compile) {
    return {
      template: '&amp;lt;div&amp;gt;&amp;lt;label&amp;gt;{{input.label}}: &amp;lt;/label&amp;gt;&amp;lt;/div&amp;gt;',
      replace: true,
      link: function(scope, element) {
        var el = angular.element('&amp;lt;span/&amp;gt;');
        switch(scope.input.inputType) {
          case 'checkbox':
            el.append('&amp;lt;input type=&quot;checkbox&quot; ng-model=&quot;input.checked&quot;/&amp;gt;&amp;lt;button ng-if=&quot;input.checked&quot; ng-click=&quot;input.checked=false; doSomething()&quot;&amp;gt;X&amp;lt;/button&amp;gt;');
            break;
          case 'text':
            el.append('&amp;lt;input type=&quot;text&quot; ng-model=&quot;input.value&quot;/&amp;gt;&amp;lt;button ng-if=&quot;input.value&quot; ng-click=&quot;input.value=\'\'; doSomething()&quot;&amp;gt;X&amp;lt;/button&amp;gt;');
            break;
        }
        $compile(el)(scope);
        element.append(el);
      }
    }
  });
&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;플렁커: http://plnkr.co/edit/pzFjgtf9Q4kTI7XGAUCF?p=preview&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/21452706/append-html-to-an-element-in-directive-and-make-a-local-function-to-interact-wit&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>angularJS</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1254</guid>
      <comments>https://ittop.tistory.com/1254#entry1254comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:33:06 +0900</pubDate>
    </item>
    <item>
      <title>Apache 웹 서버와 symphony 애플리케이션</title>
      <link>https://ittop.tistory.com/1253</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Apache 웹 서버와 symphony 애플리케이션&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;symphony 어플리케이션이 있는 Apache 웹 서버(Orange)가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.orangehrm.com/OpenSource.php&quot; papago-id=&quot;1-1&quot; rel=&quot;nofollow&quot;&gt;HRM&lt;/a&gt; 오픈소스 에디션)과 마리아DB 10.&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;브라우저를 엽니다.&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;서버 로그인 페이지의 URL을 입력합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자격 증명을 제공합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주 대시보드가 표시됩니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 페이지를 열기 위해 어딘가를 클릭하면 페이지를 로드하기 위해 2분을 기다려야 합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 후 서로의 페이지 로드가 적절히(초간) 완료됩니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;5단계에서 문제 디버그를 시도할 때 파이어버그를 사용하여 무슨 일이 일어나고 있는지 확인했습니다. 그래서 애플리케이션에서 이미 인증된 어딘가를 클릭하면 서버에서 수신된 메시지가 중지되고 대량 쿼리처럼 2분 동안 기다린 후에 많은 메시지가 수신되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DB를 확인해보니 느린 질의가 없는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 DB 자체는 매우 작습니다. 왜냐하면 이것은 새로운 설치를 중단하는 것이고 이러한 동작은 처음부터 눈에 띄기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디버그할 수 있는 방법이나 이 문제의 근본 원인이 무엇인지 확인할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아파치 서버와 그 안에 있는 심포니 애플리케이션에 비슷한 문제가 있는 사람?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/40241751/apache-web-server-with-symfony-application&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MariaDB</category>
      <author>ittop</author>
      <guid isPermaLink="true">https://ittop.tistory.com/1253</guid>
      <comments>https://ittop.tistory.com/1253#entry1253comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:32:59 +0900</pubDate>
    </item>
  </channel>
</rss>