<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>manysource</title>
    <link>https://manysource.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Fri, 10 Apr 2026 21:45:46 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>manysource</managingEditor>
    <item>
      <title>gcc는 정적 변수를 자동으로 0으로 초기화합니까?</title>
      <link>https://manysource.tistory.com/960</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;gcc는 정적 변수를 자동으로 0으로 초기화합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수에 정적 변수가 선언되었지만 초기화되지 않았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 변수가 자동으로 0으로 초기화됩니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;static int idx;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예 - C 표준 &lt;a href=&quot;http://open-std.org/JTC1/SC22/WG14/www/standards&quot; rel=&quot;noreferrer&quot;&gt;ISO/IEC 9899:1999&lt;/a&gt; a.k.a.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/C99&quot; rel=&quot;noreferrer&quot;&gt;C99&lt;/a&gt;(및 C++) 표준은 이에 해당한다고 말합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정확한 텍스트는 &lt;a href=&quot;http://open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf&quot; rel=&quot;noreferrer&quot;&gt;WG14 N1256&lt;/a&gt; 섹션 6.7.8(&quot;초기화&quot;)의 항목 10을 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 사람들이 지적한 것처럼 항상 정적 변수를 초기화하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;static int idx = 0;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하는 이유는 일부 컴파일러가 정적 변수를 항상 0으로 초기화하지 않기 때문이 아닙니다(이러한 초기화에 실패한 컴파일러는 종단적으로 고장나 C 또는 C++ 컴파일러라고 주장할 수 없음), 이것은 Say What You Mean - 아마도 프로그래밍의 가장 기본적인 규칙입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기준은 그렇다고 하지만...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모범 사례는 &lt;strong&gt;항상&lt;/strong&gt; 변수를 초기화해야 한다는 것을 나타냅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컴파일러를 변경하거나 다른 컴퓨터에서 컴파일해야 할 때 예기치 않은 동작이 발생할 가능성을 최소화하려는 경우를 결코 알 수 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/1294772/does-gcc-automatically-initialize-static-variables-to-zero&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/960</guid>
      <comments>https://manysource.tistory.com/960#entry960comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:55:44 +0900</pubDate>
    </item>
    <item>
      <title>트랙터 전역 변수 설정</title>
      <link>https://manysource.tistory.com/959</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;트랙터 전역 변수 설정&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 설명 블록에 사용할 트랙터의 전역 변수를 설정하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var glob = 'test';

describe('glob test', function () {
    it('should set glob', function () {
        browser.get('http://example.com/test');
        browser.executeScript(function () {
            window.glob = glob;
        });
    });    
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 이것은 나에게 다음과 같은 오류를 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Message:
[firefox #2]      UnknownError: glob is not defined
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저도 이 질문을 봤습니다. &lt;a href=&quot;https://stackoverflow.com/questions/21320400/protractor-angularjs-global-variables&quot;&gt;트랙터 각도&lt;/a&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/21320400/protractor-angularjs-global-variables&quot;&gt;JS 전역 변수&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 conf.js에서 변수 glob을 다음과 같이 설정하려고 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;exports.config = {
  ...,
  onPrepare: function () {
      global.glob = 'test';
  }
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여전히 같은 오류를 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;트랙터 테스트에서 적절한 전역 변수를 추가하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의 도움으로 Protractor 구성 파일에서 전역을 설정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;params&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;속성:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;exports.config = {
    // ...

    params: {
        glob: 'test'
    }

    // ...
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음을 사용하여 사양으로 액세스할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;browser.params.glob&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/angular/protractor/blob/master/docs/referenceConf.js#L233&quot; rel=&quot;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;&gt;params 개체는 Tractor 인스턴스로 직접 전달되며 browser.params로 테스트에서 액세스할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;임의의 개체이므로 테스트에 필요한 모든 것을 포함할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 명령줄을 통해 다음과 같이 변경할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;code&gt;protractor conf.js --params.glob 'other test'&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;업데이트:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://angular.github.io/protractor/#/api?view=webdriver.WebDriver.prototype.executeScript&quot; rel=&quot;noreferrer&quot;&gt;다음&lt;/a&gt;에 대한 &lt;a href=&quot;http://angular.github.io/protractor/#/api?view=webdriver.WebDriver.prototype.executeScript&quot; rel=&quot;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;&gt;스크립트가 함수 개체로 제공되는 경우 해당 함수는 대상 창에 주입하기 위한 문자열로 변환됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스크립트 외에 제공되는 모든 인수는 스크립트 인수로 포함되며 인수 개체를 사용하여 참조할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 이 경우 자바스크립트 스코프는 작동하지 않습니다. 당신은 다음으로 전달되는 기능을 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;browser.executeScript&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스펙과 같은 종결 변수는 없을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;browser&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 그러나 다음 변수를 명시적으로 전달할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;browser.executeScript(function (glob) {

    // use passed variables on the page
    console.log(glob);

}, browser.params.glob);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음에서 전역 변수를 설정할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;onPrepare()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;global&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;onPrepare: function () {
    global.myVariable = &quot;test&quot;;
},
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면, 당신은 그냥.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;myVariable&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시험 내내 그대로&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사실 이게 어떻게.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;protractor&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;browser&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기타 내장 글로벌 변수를 전 &lt;a href=&quot;https://github.com/angular/protractor/blob/f2a11a7369319edac0f1221a1c6ab0f9a2cc73eb/lib/runner.js#L152&quot;&gt;세계적으로 사용&lt;/a&gt;할 수 있도록 &lt;a href=&quot;https://github.com/angular/protractor/blob/f2a11a7369319edac0f1221a1c6ab0f9a2cc73eb/lib/runner.js#L152&quot;&gt;했습니다&lt;/a&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Runner.prototype.setupGlobals_ = function(browser_) {
  // Export protractor to the global namespace to be used in tests.
  global.protractor = protractor;
  global.browser = browser_;
  global.$ = browser_.$;
  global.$$ = browser_.$$;
  global.element = browser_.element;
  global.by = global.By = protractor.By;

  // ...
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 접근 방식은 전역 범위/이름 공간을 오염시키므로 주의해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 옵션은 공정 변수를 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;트랙터는 노드 프로세스입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자 지정 노드 변수를 사용하여 노드 프로세스를 시작할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;윈도우에서 어떻게 이루어지는지 확실하지 않지만(방법을 알고 있다면 댓글을 달아주세요), Mac과 모든 Linux/Unix OS에서는 가능합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이와 같은 환경변수를 사용하여 트랙터&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;MY_VAR=Dev protractor tmp/config.js
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 프로세스 내 어디에서나 사용할 수 있고 심지어 구성에서도 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;console.log(process.env.MY_VAR)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 답변에 조금 늦었다는 것을 알지만, 여기 파일 전체에서 사용할 수 있는 글로벌 변수를 설정하는 또 다른 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;describe(&quot;Some Global most outer describe&quot;, function(){
    var glob = &quot;some global variable&quot;;
    var blob = &quot;some other global variable&quot;;

    it('should test glob', function(){
        expecte(glob).toEqual(&quot;some global variable&quot;);
    });

    it('should test blob', function(){
        expecte(glob).toEqual(&quot;some other global variable&quot;);
    });

    describe('Some inner describe', function(){
        //Some other inner tests can also see glob and blob
    });
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/31203398/protractor-set-global-variables&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>angularJS</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/959</guid>
      <comments>https://manysource.tistory.com/959#entry959comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:55:38 +0900</pubDate>
    </item>
    <item>
      <title>MySQL의 10진수(3,2) 값은 항상 9.99입니다.</title>
      <link>https://manysource.tistory.com/958</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL의 10진수(3,2) 값은 항상 9.99입니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL에는 78.3과 같은 것을 삽입할 때 항상 9.99의 값을 가지는 것으로 보이는 십진법(3,2) 유형의 필드가 있습니다. 왜죠?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 테이블은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; describe testtable;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | int(11)      | NO   | PRI | NULL    | auto_increment | 
| firstname     | varchar(20)  | YES  |     | NULL    |                | 
| lastname      | varchar(20)  | YES  |     | NULL    |                | 
| justsomenum   | decimal(3,2) | YES  |     | NULL    |                | 
+---------------+--------------+------+-----+---------+----------------+
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이와 같은 것을 삽입하고 선택할 때:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; insert into testtable (firstname, lastname, justsomenum) values (&quot;Lloyd&quot;, &quot;Christmas&quot;, 83.5);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;선택할 때 9.99점을 받습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; select * from testtable;
+----+-----------+-----------+---------------+
| id | firstname | lastname  | justsomenum   |
+----+-----------+-----------+---------------+
|  1 | Shooter   | McGavin   |          9.99 | 
|  2 | Lloyd     | Christmas |          9.99 | 
|  3 | Lloyd     | Christmas |          9.99 | 
|  4 | Lloyd     | Christmas |          9.99 | 
+----+-----------+-----------+---------------+
4 rows in set (0.00 sec)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Mac OS X 10.5.8의 MySQL 5.0.86입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;무슨 생각 있어요?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최대 값:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;decimal(3, 2)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;9.99이므로 그보다 큰 것을 넣으려고 하면 9.99로 상한이 정해집니다. 시도해 보세요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;decimal(5, 2)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 큰 숫자를 저장하려면 다른 것을 선택해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫 번째 인수는 정밀도의 총 자릿수이고, 두 번째 인수는 소수점 뒤의 자릿수입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전 버전에서 MySQL DECIAL(3,2)은 DP 왼쪽으로 3개의 정수, 오른쪽으로 2개를 의미했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 개발자들은 그 이후로 MySQL을 변경하여 첫 번째 속성(이 경우 '3')은 십진수의 정수(9.99는 세 개의 숫자)이고 두 번째 속성(이 경우 '2')은 십진수 자리 수와 동일하게 유지됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;좀 헷갈리네요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 DECIAL 필드의 경우 DP 이전에 원하는 정수 수를 DP 다음에 원하는 정수 수에 &lt;strong&gt;추가&lt;/strong&gt;하여 첫 번째 옵션으로 설정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 앞서 설명한 바와 같이 필드의 최대값보다 큰 숫자를 입력하려고 하면 MySQL이 이를 트리밍합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 문제는 MySQL 구성입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://scrumpy-jack.blogspot.com/2009/10/putting-my-dba-hat-on-again.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;저는 블로그&lt;/a&gt;에서 이에 대해 더 자세히 알아봅니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/1523173/decimal3-2-values-in-mysql-are-always-9-99&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MySQL</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/958</guid>
      <comments>https://manysource.tistory.com/958#entry958comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:55:30 +0900</pubDate>
    </item>
    <item>
      <title>html 코드를 mysql에 저장하는 가장 좋은 방법은 무엇입니까?</title>
      <link>https://manysource.tistory.com/957</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;html 코드를 mysql에 저장하는 가장 좋은 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;닫힘&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;span class=&quot;relativetime&quot; title=&quot;2012-05-220 01:48:13Z&quot; papago-attr-id=&quot;1&quot;&gt;11년 전&lt;/span&gt;에.&lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;중복 가능:&lt;/font&gt;&lt;/strong&gt;&lt;br&gt; &lt;a href=&quot;https://stackoverflow.com/questions/7833465/what-structure-type-do-i-use-for-html-content-mysql&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML 컨텐츠(MySQL)에 사용할 구조 유형&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL에 HTML 코드를 저장하는 가장 좋은 방법은 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;소스 코드의 전체 페이지를 저장하려고 할 경우 MySQL의 열에 어떤 데이터 유형을 사용해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 MySQL에서 생성된 기본 키, 고유 ID와 동일한 파일 이름으로(아마도 데이터 파일의 공간을 절약하기 위해) 코드를 파일로 저장하는 것이 더 나을까요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;TEXT를 추천합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 블롭이 텍스트보다는 멀티미디어 등에 더 적합하다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Binary_large_object&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위키백과 블롭&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터베이스에 HTML을 저장할 데이터 유형은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TEXT&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만, 당신은 그것을 사용해서 인코딩해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysqli_real_escape_string&lt;/code&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$dbh는 MySQL 인스턴스에 연결할 때 사용한 데이터베이스 연결 핸들입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysqli_connect()&lt;/code&gt;&lt;br&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$html=&quot;Yor HTML&quot;;
$sql = &quot;INSERT INTO tbl (html) 
VALUES ('&quot; . mysqli_real_escape_string($dbh,$html) . &quot;')&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;또는 준비&lt;/strong&gt;된 문장을 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/blob.html&quot; rel=&quot;noreferrer&quot;&gt;BLOB&lt;/a&gt;&lt;/strong&gt; 또는 &lt;strong&gt;&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/blob.html&quot; rel=&quot;noreferrer&quot;&gt;TEXT&lt;/a&gt;&lt;/strong&gt;를 이용하실 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/9322569/whats-the-best-way-to-store-html-code-in-mysql&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MySQL</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/957</guid>
      <comments>https://manysource.tistory.com/957#entry957comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:55:24 +0900</pubDate>
    </item>
    <item>
      <title>Jquery $(이) 하위 선택기</title>
      <link>https://manysource.tistory.com/956</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Jquery $(이) 하위 선택기&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이걸 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery('.class1 a').click( function() {
  if ($(&quot;.class2&quot;).is(&quot;:hidden&quot;)) {
    $(&quot;.class2&quot;).slideDown(&quot;slow&quot;);
  } else {
    $(&quot;.class2&quot;).slideUp();
  }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;페이지 구조 상:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;class1&quot;&amp;gt;
  &amp;lt;a href=&quot;...&quot;&amp;gt;text&amp;lt;/a&amp;gt;
  &amp;lt;div class=&quot;class2&quot;&amp;gt;text&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 여러 개의 class1/class2 집합이 없는 경우에만 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;class1&quot;&amp;gt;
  &amp;lt;a href=&quot;...&quot;&amp;gt;text&amp;lt;/a&amp;gt;
  &amp;lt;div class=&quot;class2&quot;&amp;gt;text&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;class1&quot;&amp;gt;
  &amp;lt;a href=&quot;...&quot;&amp;gt;text&amp;lt;/a&amp;gt;
  &amp;lt;div class=&quot;class2&quot;&amp;gt;text&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;class1&quot;&amp;gt;
  &amp;lt;a href=&quot;...&quot;&amp;gt;text&amp;lt;/a&amp;gt;
  &amp;lt;div class=&quot;class2&quot;&amp;gt;text&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클릭한 class1 아래 class2에만 영향을 주도록 초기 jquery 코드를 어떻게 변경합니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/306583/jquery-this-selector-and-children&quot;&gt;$(이) 선택자의 자녀를 얻는 방법&lt;/a&gt;을 추천해 보았습니다&lt;a href=&quot;https://stackoverflow.com/questions/306583/jquery-this-selector-and-children&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성공하지 못했습니다&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML을 사용하는 가장 좋은 방법은 아마도 다음과 같은 기능을 사용하는 것일 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var div = $(this).next('.class2');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클릭 핸들러가 에 발생하기 때문에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 상위 DIV까지 횡단한 다음 두 번째 DIV를 검색할 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;와 의 조합으로 이 작업을 수행할 수.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;게시한 HTML이 정확히 그렇지 않고 두 번째 DIV가 링크와 관련된 다른 위치에 있을 수 있는 경우 이 접근 방식이 가장 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var div = $(this).parent().children('.class2');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;검색&quot;이 직계 자녀에게 국한되지 않기를 원하는 경우 다음 대신 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;children&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위의 예에서&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 가능한 경우 클래스 선택자 앞에 태그 이름을 붙이는 것이 가장 좋습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들면, 만일&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;태그들은 그 클래스들을 가질 것이고, 선택자를&lt;/font&gt;&lt;/font&gt;&lt;code&gt;div.class1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;div.class2&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클릭 이벤트에서 &quot;이것&quot;은 클릭된 태그입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery('.class1 a').click( function() {
   var divToSlide = $(this).parent().find(&quot;.class2&quot;);
   if (divToSlide.is(&quot;:hidden&quot;)) {
      divToSlide.slideDown(&quot;slow&quot;);
   } else {
      divToSlide.slideUp();
   }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;디브에 갈 수 있는 방법은 여러 가지가 있지만 .sibles, .next 등을 사용할 수도 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://docs.jquery.com/Effects/slideToggle&quot; rel=&quot;noreferrer&quot;&gt;.slideToggle()&lt;/a&gt;을 사용하면 훨씬 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery('.class1 a').click( function() {
  $(this).next('.class2').slideToggle();
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;EDIT: .sibles 대신 .next로 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.mredesign.com/demos/jquery-effects-1/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://www.mredesign.com/demos/jquery-effects-1/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쿠키를 추가해서 지금의 위치를 기억할 수도 있습니다...&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://c.hadcoleman.com/2008/09/jquery-slide-toggle-with-cookie/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://c.hadcoleman.com/2008/09/jquery-slide-toggle-with-cookie/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://jqapi.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://jqapi.com/ &lt;/a&gt;횡단 --&amp;gt; 트리 횡단 --&amp;gt; 어린이&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/841553/jquery-this-child-selector&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>jQuery</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/956</guid>
      <comments>https://manysource.tistory.com/956#entry956comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:55:18 +0900</pubDate>
    </item>
    <item>
      <title>메인 스레드가 종료되면 다른 스레드도 종료됩니까?</title>
      <link>https://manysource.tistory.com/955</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메인 스레드가 종료되면 다른 스레드도 종료됩니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;같은 과정에서 메인 쓰레드와 다른 쓰레드에 문제가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메인 기능이 돌아오면 다른 스레드도 종료됩니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 이것에 대해 혼란스럽습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 테스트 코드를 고려합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void* test1(void *arg)
{
    unsigned int i = 0;
    while (1){
        i+=1;
    }
    return NULL;
}

void* test2(void *arg)
{
    long double i = 1.0;
    while (1){
        i *= 1.1;
    }
    return NULL;
}

void startThread ( void * (*run)(void*), void *arg) {
  pthread_t t;
  pthread_attr_t attr;
  if (pthread_attr_init(&amp;amp;attr) != 0
      || pthread_create(&amp;amp;t, &amp;amp;attr, run, arg) != 0
      || pthread_attr_destroy(&amp;amp;attr) != 0
      || pthread_detach(t) != 0) {
    printf(&quot;Unable to launch a thread\n&quot;);
    exit(1);
  }
}

int main()
{
    startThread(test1, NULL);
    startThread(test2, NULL);

    sleep(4);
    printf(&quot;main thread return.\n&quot;);

    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;메인 스레드 리턴&quot;이 출력되면 스레드 test1 및 test2도 ，을 종료합니다. 이유를 알려줄 수 있는 사람이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주 스레드가 반환될 때(즉, 사용자가 반환)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;function), 전체 프로세스를 종료합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기에는 다른 모든 스레드가 포함됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 전화할 때도 똑같은 일이 일어납니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;exit&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 전화를 걸어 이를 피할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pthread_exit&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;목적은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pthread_detach&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 스레드의 리소스를 해제하기 위해 다른 스레드와 가입할 필요가 없도록 만드는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스레드를 분리한다고 프로세스 종료 후에도 해당 스레드가 존재하지는 않지만 다른 모든 스레드와 함께 삭제됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 새 스레드에서 를 사용하여 하위 스레드에서 대기하도록 호출 스레드에 알려주고 실행을 일시 중지하며 해당 스레드가 종료될 때까지 프로세스를 종료해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;생성된 스레드를 호출해도 프로세스가 종료된 후에는 해당 스레드가 유지되지 &lt;strong&gt;않습니다.&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Linux &lt;a href=&quot;http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_detach.3.html&quot; rel=&quot;noreferrer&quot;&gt;man 페이지&lt;/a&gt;에서:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;분리된 속성은 스레드가 종료될 때 시스템의 동작을 결정할 뿐이며, 프로세스가 종료(3)를 사용하여 종료될 경우(또는 주 스레드가 반환될 경우) 스레드가 종료되는 것을 방지하지는 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 가끔 볼 수 있을 겁니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;명시적인 대신에 사용됨&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pthread_join&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;호출, 목적은 나가는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 다른 스레드가 계속 실행될 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제로 &lt;a href=&quot;http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_exit.3.html&quot; rel=&quot;noreferrer&quot;&gt;리눅스 man 페이지&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;&gt;다른 스레드가 실행을 계속할 수 있도록 하려면 기본 스레드가 exit(3)이 아닌 pthread_exit()를 호출하여 종료해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 이것이 모든 플랫폼에서 예상되는 행동인지는 알 수 없으며, 항상 사용을 고수해 왔습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pthread_join&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;pthread_join&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필요한 것은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pthread_t&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대상 스레드의 경우, 호출하기 전에 두 스레드를 모두 생성해야 하므로 코드를 약간 변경해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pthread_join&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 사람을 기다리기 위해서요&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 당신은 전화를 할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;startThread&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 당신은 A를 반환해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pthread_t&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 또는 에 포인터를 전달합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pthread_t&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신에게&lt;/font&gt;&lt;/font&gt;&lt;code&gt;startThread&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기능.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로세스의 모든 스레드는 다음에서 반환될 때 종료됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;libc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도서관은 호출에 의해 이 행동을 실행할 책임이 있는 사람입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;exit()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 때에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수가 반환됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;차례로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;exit()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;function은 이름이 붙은 씬 wrapper function을 호출하게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;_exit()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어느 것(시작부터)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;libc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;v2.3)에서 최종적으로 &lt;a href=&quot;https://man7.org/linux/man-pages/man2/exit_group.2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;exit_group&lt;/a&gt; 시스템 호출을 호출하여 프로세스를 종료하고 모든 스레드를 종료합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 마지막 시스템 호출은 여러분이 알아차린 행동에 대한 책임이 있는 호출입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우리는 이 미묘한 음을 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;_exit()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수동 &lt;a href=&quot;https://man7.org/linux/man-pages/man2/exit.2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;여기&lt;/a&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;C library/kernel differences
       In glibc up to version 2.3, the _exit() wrapper function invoked
       the kernel system call of the same name.  Since glibc 2.3, the
       wrapper function invokes exit_group(2), in order to terminate all
       of the threads in a process.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 당신의 의도가 이런 행동을 피하는 것이라면, 유일한 선택은 전화하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pthread_exit&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 당신의 주요 실을 끝낼 것이고 당신이 다시 돌아오는 것을 막을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;libc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__libc_start_main()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기능.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/11875956/when-the-main-thread-exits-do-other-threads-also-exit&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/955</guid>
      <comments>https://manysource.tistory.com/955#entry955comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:55:11 +0900</pubDate>
    </item>
    <item>
      <title>malloc() 통화량을 최소화하면 성능이 향상됩니까?</title>
      <link>https://manysource.tistory.com/954</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;malloc() 통화량을 최소화하면 성능이 향상됩니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;malloc()를 여러 번 호출하는 (1번) 애플리케이션과 malloc()를 몇 번 호출하는 (2번) 애플리케이션을 생각해 보십시오.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 응용 프로그램 모두 &lt;em&gt;동일&lt;/em&gt;한 양의 메모리를 할당합니다(100MB로 가정).&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 malloc() 호출은 #1과 #2 중 어느 애플리케이션에서 더 빠를까요?&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉,&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;malloc()는 메모리에 할당된 위치의 인덱스를 가지고 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 두가지 질문을 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 malloc () 호출은 1번과 2번 중 어느 애플리케이션에서 더 빠를까요?&lt;/font&gt;&lt;/em&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉,&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;malloc()는 메모리에 할당된 위치의 인덱스를 가지고 있습니까?&lt;/font&gt;&lt;/em&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 그들이 같은 질문이라고 암시했지만, 그렇지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;후자의 질문에 대한 답은 YES입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어느 쪽이 더 빠를지에 대해서는 말할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;할당기 알고리즘, 기계 상태, 현재 프로세스의 단편화 등에 따라 달라집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 당신의 생각은 건전합니다. 당신은 매크로 사용이 성능에 어떤 영향을 미칠지 생각해 보아야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예전에 제가 쓴 앱 중에 malloc()로 할당된 메모리를 많이 사용하는 앱이 있었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제대로 작동은 했지만 속도는 느렸습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;malloc에 걸려오는 수많은 호출을 단 하나로 바꾼 다음, 제 앱에서 그 큰 블록을 잘라냈습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;훨씬 더 빨랐습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 방법은 권장하지 않습니다. 단지 몰로크 사용이 성능에 중요한 영향을 미칠 수 있다는 점을 보여주는 것일 뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;제&lt;/em&gt; 조언은 &lt;em&gt;치수&lt;/em&gt;를 재라는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론 이는 malloc 구현에 전적으로 달려 있지만, 이 경우 무료 통화가 없는 대부분의 malloc 구현은 아마도 동일한 알고리즘 속도를 제공할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 답변이 언급한 것처럼, 보통 무료 블록 목록이 나오겠지만, 무료로 전화하지 않았다면 하나만 있을 것이므로 두 경우 모두 O(1)이어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 두 경우 모두 힙에 할당된 메모리가 충분히 크다는 것을 가정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;#1의 경우, 각 할당에는 메타 데이터를 저장하기 위한 메모리 오버헤드가 수반되므로, 결과적으로 sbrk()를 호출하거나 #1의 경우 힙을 증가시키기 위해 동등한 메모리를 호출해야 하므로, 추가 오버헤드가 발생할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 할당에 대한 메모리 정렬이 동일하지 않기 때문에 캐시 및 기타 2차 효과로 인해 다를 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일부 메모리 블록을 사용할 수 있었다면 조각화가 덜 되어 검색할 수 있는 사용 가능한 블록 목록이 적어 #2가 더 빨라질 가능성이 높습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 메모리 블록을 자유롭게 사용했다면 블록을 다시 단일 메모리 영역으로 통합할 수 있기 때문에 완전히 동일한 상태로 끝날 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Malloc은 할당할 블록을 찾기 위해 링크된 무료 블록 목록을 살펴봐야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시간이 걸립니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 #1은 보통 더 느립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;malloc에 자주 전화할수록 더 많은 시간이 소요됩니다. 따라서 통화 횟수를 줄이면 속도가 향상됩니다(정확한 상황에 따라 중요한지 여부가 달라집니다).&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 작은 블록을 많이 할당하면 해당 블록을 해제할 때 큰 블록 몇 개만 할당하고 해제하는 경우보다 힙을 훨씬 더 많이 조각화할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 몇 개의 큰 블록보다는 여러 개의 작은 빈 블록이 힙에 쌓이게 될 가능성이 높으며 따라서 mallocs는 할당할 적합한 블록을 찾기 위해 빈 공간 목록을 더 검색해야 할 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 또 더 느려질 겁니다&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론 구현 세부 사항이지만, 일반적으로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;free()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메모리를 사용 가능한 블록 목록에 삽입합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 이 목록에서 올바른 크기 이상의 사용 가능한 블록이 있는지 확인합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로 실패한 경우에만 해당됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;커널에 더 많은 메모리를 요구합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인접한 여러 블록을 하나의 더 큰 블록으로 통합하는 경우와 같은 다른 고려 사항도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 또 다른 이유는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;값이 비쌉니다: 만약&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여러 스레드에서 호출되며, 이러한 전역 구조에 어떤 종류의 동기화가 있어야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(즉, 자물쇠)&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;존재합니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여러 스레드에서 더 나은 최적화 방식으로 구현하지만 일반적으로 여러 스레드에서 서로 잠금을 다투고 진행을 차단하기 때문에 다중 thread 안전을 유지하면 비용이 증가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;malloc()를 사용하여 &lt;em&gt;대용량&lt;/em&gt; 메모리를 할당하고 직접 세분화하여 더 나은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Malloc()는 일반적인 경우에 잘 작동하도록 최적화되었으며 스레드를 사용하는지 여부 또는 프로그램의 할당 크기가 얼마인지에 대한 가정은 하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자신의 하위 할당기를 구현하는 것이 좋은 아이디어인지 여부는 부차적인 질문입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;명시적인 메모리 관리가 이미 충분히 어려운 경우는 거의 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;디버그할 수 있는 좋은 방법 없이 프로그램을 엉망으로 만들고 손상시킬 수 있는 코드 계층이 필요한 경우는 거의 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;디버그 할당기를 작성하는 경우가 아니라면요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;답은 그것이 달라지는데, 잠재적인 느림의 대부분은 오히려 malloc()와 free() 조합에서 오고 보통 #1과 #2는 비슷한 속도가 될 것이라는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 malloc() 구현에는 인덱싱 메커니즘이 있지만 인덱스에 새 블록을 추가하는 속도는 인덱스에 이미 있는 블록의 수에 따라 달라지지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;malloc의 느림의 대부분은 두가지 원천에서 비롯됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전에 해제된 블록(블록) 중 적절한 사용 가능한 블록 검색&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;잠금과 관련된 다중 processor 문제&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나만의 거의 표준을 준수하는 malloc() 교체 도구 malloc() &amp;amp; free()를 35%에서 3-4%까지 작성하는 것은 이 두 가지 요소를 심각하게 최적화했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 고성능 malloc을 사용하는 것과 비슷한 속도였을 것입니다. 하지만 우리 제품을 사용하는 것은 비밀스러운 장치에 더 휴대하기 쉬웠고 물론 어떤 곳에서는 무료로 줄을 설 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;많은&quot;과 &quot;소수&quot; 사이의 상대적인 차이를 정의하지는 않지만, 대부분의 말록은 두 시나리오에서 거의 동일하게 작동할 것이라고 생각합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 질문은 malloc에 대한 각 호출이 시스템 호출 및 페이지 테이블 업데이트만큼 많은 오버헤드를 가지고 있음을 의미합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;뇌사가 아닌 환경에서 malloc(14)와 같은 malloc 호출을 수행하면 malloc은 실제로 요청하는 것보다 더 많은 메모리를 할당하게 되며, 종종 시스템 MMU 페이지 크기의 배수가 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;14바이트를 받으면 malloc이 새로 할당된 영역을 추적하여 나중에 호출하면 OS에서 더 많은 메모리를 요청해야 할 때까지 이미 할당된 메모리의 한 덩어리를 반환할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉 malloc(14)를 100번이나 malloc(1400)를 한번 정도 부르면 오버헤드가 거의 같아집니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 큰 용량의 메모리 청크는 제가 직접 관리해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한 블록의 메모리를 할당하는 것이 여러 블록을 할당하는 것보다 빠릅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시스템 호출의 오버헤드가 있으며 사용 가능한 블록을 검색합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로그래밍에서 작업 수를 줄이면 일반적으로 실행 시간이 빨라집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메모리 할당자는 올바른 크기의 메모리 블록을 찾기 위해 검색해야 할 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이로 인해 실행 시간의 오버헤드가 가중됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 작은 메모리 블록을 할당할 때 큰 블록을 할당할 때보다 성공 가능성이 더 높을 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로그램에서 하나의 작은 블록을 할당하고 해제합니까, 아니면 작은 블록을 할당(및 보존)해야 합니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메모리가 단편화되면 사용할 수 있는 큰 청크가 적어지므로 메모리 할당자는 할당에 필요할 만큼 큰 블록을 형성하기 위해 모든 블록을 병합해야 할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로그램이 많은 작은 메모리 블록을 할당하고 파괴하는 경우 정적 배열을 할당하여 메모리에 사용하는 것을 고려해 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/2079151/minimizing-the-amount-of-malloc-calls-improves-performance&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/954</guid>
      <comments>https://manysource.tistory.com/954#entry954comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:55:04 +0900</pubDate>
    </item>
    <item>
      <title>메모리에서 FLOOT 번호를 C로 표현하는 방법</title>
      <link>https://manysource.tistory.com/953</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메모리에서 FLOOT 번호를 C로 표현하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;튜토리얼을 읽다가 Float number를 메모리에 표현하는 방법을 발견했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자습서에는 부동 소수점 번호가 포함된 예제가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   float a=5.2  with below Diagram
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/onZFo.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위 도표에서 이 5.2가 어떻게 이진법으로 변환되고 메모리에 어떻게 표현되는지 누가 말해줄 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;앞서 말한 것처럼 5.2는 부호 비트, 지수 및 가수로 표현됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;5.2를 어떻게 인코딩합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;5는 쉽습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;101. 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나머지 0.2는 1/5이니 나누세요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1.00000...&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(hex) 5시까지 당신은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0.3333333...&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(16진수).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(이는 한 가지만 덜 고려한다면 더 쉽게 따라 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0.FFFF...&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;→&lt;/font&gt;&lt;/font&gt;&lt;code&gt;F / 5 = 3&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그래서 쉽게 알 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0.FFFF... / 5 = 0.33333...&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 5로 나눌 때 빠진 비트 하나는 중요하지 않아요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1.0000... / 5 = 0.3333...&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;역시).&lt;/font&gt;&lt;/font&gt;&lt;/em&gt; &lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 당신에게 줄 겁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;0.0011001100110011001100110011... 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;5를 더하면 당신은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;101.00110011001100110011...         exp 0    (== 5.2 * 2^0)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 오른쪽으로 이동하고(정규화합니다. 예를 들어 상위 비트가 소수점 바로 앞에 있는지 확인합니다.) 지수를 그에 따라 조정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;1.010011001100110011001100110011... exp +2   (== 1.3 * 2^2 == 5.2)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 127의 편의만 더하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;129 = 0b10000001&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;) 지수에 저장합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;0 10000001 1010 0110 0110 0110 0110 0110 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가수(일부 특수 값을 제외하고는 항상 1이어야 하므로 저장되지 않음)의 맨 위 1을 잊어 버리면 다음을 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;01000000 10100110 01100110 01100110
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 여러분은 작은 엔디안이나 큰 엔디안만 결정하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 정확히 이것이 작동하는 방식은 아니지만, 그것은 5.2와 같은 숫자가 이진법으로 변환될 때 발생하는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 그 도표가 100퍼센트 정확하지 않다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;플로트는 다음과 같이 메모리에 저장됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이들은 다음과 같이 분류됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서명하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;s&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(긍정인지 부정인지 표시) - 1bit&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가수&lt;/font&gt;&lt;/font&gt;&lt;code&gt;m&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(본질적으로 당신 숫자의 숫자 - 24비트)&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기특한&lt;/font&gt;&lt;/font&gt;&lt;code&gt;e&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;- 7비트&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 아무 숫자나 쓸 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;~하듯이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;s * m * 2^e&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어디에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;^&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 지수화를 나타냅니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;5.2는 다음과 같이 표시해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;0 10000001 01001100110011001100110    
S    E               M
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;S=0&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 양수임을 나타냅니다. 즉,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;s=+1&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;E&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음을 나타내는 부호 없는 숫자로 해석됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;129&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 127을 빼야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;E&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원 지수를 구하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;e = E - 127 = 2&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;M&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 해석해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 a로 시작하는 숫자로 해석됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음에 한 점(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 다음에 숫자가 표시됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;뒤의 숫자는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제로 암호화되어 있는 것들입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;m&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 각 숫자에 대한 가중치를 소개합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bits in M: 0   1    0     0      1       ... 
weight:    0.5 0.25 0.125 0.0625 0.03125 ... (take the half of the previous in each step)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 해당 비트가 설정된 가중치를 합산합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 일을 한 후에, 당신은 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(IEEE 표준의 정규화로 인해 해석을 위해 항상 1을 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;M&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;) 및 원본을 가져옵니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;m&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제, 당신은 컴퓨터로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x = s * m * 2^e&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원래 번호를 받아보세요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서, 남은 것은 실제 메모리에서 바이트가 역순일 수 있다는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 다음과 같이 번호를 저장할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;0 10000001 01001100110011001100110    
S    E               M
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 그 반대의 경우가 더 많습니다(simply은 8비트 블록을 사용하여 순서를 미러링합니다).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;01100110 01100110 10100110 01000000
MMMMMMMM MMMMMMMM EMMMMMMM SEEEEEEE
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;값은 메모리에 역순으로 표시되지만 부동 소수점 값의 정확도 손실로 인해 5.2f가 실제로 5.1999998로 표시되는 것이 혼란스러울 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;5.2를 표현하는 것은 이진 논리에서 매우 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;     8 4 2 1
5 -&amp;gt; 0 1 0 1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;10진수의 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.2를 취하고 2를 곱합니다(이진법으로 나타내므로).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.2 X 2 = 0.4 -&amp;gt; take the value after the
                decimal point, don't take the value before
                the decimal point

.4 X 2 = 0.8
.8 X 2 = 1.6
.6 X 2 = 1.2
.2 X 2 = 0.4
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;등등...&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 단계가 끝나면 위 단계의 출력에서 소수점 앞의 값을 취합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.2 X 2 = 0.4 -&amp;gt; take 0 from this for representing in binary form
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 5.2의 최종 o/p는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;0101.00110...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원시 플로트 5.2:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;01000000101001100110011001100110
^ sign bit
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메모리에서 역 바이트 순서(그림과 같이):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;01100110011001101010011001000000
                        ^ sign bit
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;5.2&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;번호는 &quot;Sign Bit, Exponent, Mantissa&quot; 형태로 저장됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;5의 이진법으로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;8 4 2 1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇게&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0101&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 .2는&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.2*2=.4   0
.4*2=.8   0
.8*2=1.6  1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;숫자가 양수이기 때문에 비트 0에 부호를 붙입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;0 0101 001....
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;5.2 in 바이너리 101.00110011......--------&amp;gt; 정규화되지 않은 형태 5.2는 .10100110011......&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;x 2^3 ------&amp;gt; 명시적 정규 형태 5.2는 암시적 정규 형태에서 .0100110011 x 2^3입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 부호 비트는 0이 되고(숫자가 양수이기 때문에) 지수는 7비트이므로 초과 64 지수 표기를 사용하므로 지수는 64+3 = 69,000101이 되고 나머지는 가수가 됩니다(총 32비트 - 7 지수 비트 - 1 부호 비트 = 24비트) 01001100110011001100&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위의 예제에서 부호 비트는 정확합니다 64 초과가 적용되지 않으므로 정규화되지는 않지만 이상적으로 MSB '1'이 오지 않을 경우 second byte에서 암묵적 정규화 Tantissa part를 사용해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;5.2는 &quot;0100000010100110011001100110&quot;으로 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://www.h-schmidt.net/FloatApplet/IEEE754.html&quot; rel=&quot;nofollow&quot;&gt;Converter 애플릿&lt;/a&gt; 확인&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원래 다른 웹사이트에 게시된 변환 기법은 불필요하게 복잡한 것으로 보여집니다. (우리가 정답을 맞추는데도) 메모리에서 5.2의 메모리를 표현하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;먼저 간단한 이진 시스템으로 변환하면 101.0011001100110011001100110011을 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 과학적 형태로 바꿉니다: 1.0100110011001100110011001100110011 x 10^2.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 숫자가 양수이므로 우리의 부호 비트는 0입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지수의 경우 최대 8비트(127 + 2)가 필요하므로 10000001을 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;분수는 010011001100110011001100110 . (23비트) (과학 형태의 선두 1을 폐기)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;=&amp;gt; 표현은&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;0 10000001 0100 1100 1100 1100 1100 110&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래의 두 가지 참고문헌은 IEE 754 부동 소수점 번호 인코딩을 이진 형식으로 이해하는 데 실질적으로 도움이 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.pitt.edu/~juy9/142/slides/L3-FP_Representation.pdf&quot; rel=&quot;nofollow&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://www.pitt.edu/ ~juy9/142/슬라이드/L3-FP_Representation.pdf&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Single-precision_floating-point_format&quot; rel=&quot;nofollow&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://en.wikipedia.org/wiki/Single-precision_floating-point_format&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;int a;
float b=5.2;
memcpy(&amp;amp;a, &amp;amp;b, 4);
printf(&quot;%d&quot;,a);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 0100000010010011010011010000001 (1084647041)을 줍니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/6910115/how-to-represent-float-number-in-memory-in-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/953</guid>
      <comments>https://manysource.tistory.com/953#entry953comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:54:57 +0900</pubDate>
    </item>
    <item>
      <title>RecyclerView vs.리스트뷰</title>
      <link>https://manysource.tistory.com/952</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;RecyclerView vs.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리스트뷰&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Android 개발자(&lt;a href=&quot;http://developer.android.com/training/material/lists-cards.html&quot; rel=&quot;noreferrer&quot;&gt;목록&lt;/a&gt; 및 &lt;a href=&quot;http://developer.android.com/training/material/lists-cards.html&quot; rel=&quot;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;&gt;RecyclerView 위젯은 ListView의 보다 고급스럽고 유연한 버전입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네, 멋지네요, 그런데 이 예시 사진을 보고 이 둘의 차이점에 대해 정말 헷갈렸어요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q213P.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위의 그림은 쉽게 만들 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자 지정 어댑터를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서, 어떤 상황에서 사용해야 할까요?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로 생성되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;개선, 예, 첨부된 목록을 생성할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제어, 그러나 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보다 간단합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;위/아래로 스크롤하는&lt;/strong&gt; 동안 &lt;strong&gt;셀을 재사용&lt;/strong&gt;합니다. 이는 에서 View Holder를 구현할 때 가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어댑터, 하지만 선택적인 것이었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecycleView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어댑터를 쓰는 기본 방법입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;해당 컨테이너에서 목록을 분리&lt;/strong&gt;합니다 - 설정을 통해 런타임에 목록 항목을 다른 컨테이너(선형 레이아웃, 그리드 레이아웃)에 쉽게 넣을 수 있습니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;LayoutManager&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예:&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
//or
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;애니메이션 공통&lt;/strong&gt; 목록 &lt;strong&gt;작업&lt;/strong&gt; - 애니메이션이 분리되어 다음으로 위임됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ItemAnimator&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에 관한 것이 더 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 이런 점들이 주를 이루는 것 같아요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러니까 결론부터 말하자면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 관심사 위임 패턴을 따르고 재활용 항목이라는 하나의 작업만 수행하는 &quot;목록 데이터&quot;를 보다 유연하게 처리할 수 있는 제어입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;목록 보기가 성능이 좋으려면 홀더 패턴을 구현해야 하며, 특히 목록을 여러 종류의 보기로 채우려는 경우에는 이 패턴이 엉망이 되기 쉽습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;RecyclerView는 이 패턴을 구워서 엉망으로 만들기가 더 어렵습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 그리드처럼 직선형이 아닌 다양한 레이아웃을 쉽게 처리할 수 있도록 유연성이 향상되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의 조상입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 많은 것들이 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;잘 못 했거나 못 했거나 둘 중 하나일 겁니다&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 당신이 그것의 단점들을 모아본다면.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제를 다른 도메인으로 추상화하여 문제를 해결했습니다. 리사이클러 보기와 같은 것이 나타납니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ListViews의 주요 문제점은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시행하지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;View&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동일한 항목 유형에 대해 재사용(에서 사용되는 어댑터 중 하나를 참조)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 만약 당신이 getView 메소드를 공부한다면 당신은 프로그래머가 모든 행에 대해 새로운 뷰를 만드는 것을 막지 못한다는 것을 알 수 있을 것입니다. 비록 어떤 것도 프로그래머가 그것을 통해 전달된다 하더라도.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;convertView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변수)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비용이 많이 드는 것을 방지하지 못했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;findViewById&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;uses(위에서 언급한 뷰를 재활용하는 경우에도 개발자가 호출할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;findViewById&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하위 보기의 표시 내용을 업데이트합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의 주된 목적.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ViewHolder&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;무늬를 그리다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListViews&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;캐싱을 하기 위해서였습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;findViewById&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;호출. 단, 플랫폼의 일부가 아닌 것으로 알고 계셨을 경우에만 가능)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;행이 표시된 보기에서 지원되는 수직 스크롤만 있음(재활용 보기는 보기가 배치되는 위치와 이동 방법에 상관없이 자동으로 추상화됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;LayoutManager&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 그러므로 재활용자는 전통적인 것을 지지할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위에 보여진 것과 같이.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GridView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 하지만 이에 국한된 것이 아니라 더 많은 작업을 수행할 수 있지만 프로그래밍 발 작업을 수행해야 실현할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;추가/제거할 애니메이션은 고려 대상이 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 문제를 해결하는 방법은 전적으로 사용자에게 달려 있습니다(리사이클러 보기 비교).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어댑터 클래스는 아이디어를 얻기 위해* 메서드 오퍼링 v.ListViews에 알립니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요컨대&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 유연하게 생각하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 당신 쪽에서 코딩을 더 해야 할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 어댑터 기반 뷰를 비슷한 방식으로 렌더링하도록 준비된 새 ViewGroup입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 의 뒤를 이을 것으로 추정되며, 그것은 에서 찾을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;latest support-v7 version&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 는 &lt;em&gt;확장성&lt;/em&gt;을 염두에 두고 개발되었기 때문에 생각할 수 있는 모든 종류의 레이아웃을 만드는 것이 가능하지만, 약간의 진통제 투여 없이는 불가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://antonioleiva.com/recyclerview/&quot; rel=&quot;noreferrer&quot;&gt;안토니오 레이바&lt;/a&gt;에게서 받은 답변&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; compile 'com.android.support:recyclerview-v7:27.0.0'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가 정말로 보다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 자세한 내용은 이 &lt;a href=&quot;https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html&quot; rel=&quot;noreferrer&quot;&gt;페이지&lt;/a&gt;를 참조할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 RecyclerView와 ListView 간의 몇 가지 주요 사항/ 차이점입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현명하게 판단하세요.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ListView가 사용자에게 적합한 경우 마이그레이션할 이유가 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 UI를 작성하는 경우 RecyclerView를 사용하는 것이 더 나을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;RecyclerView에 뷰가 내장되어 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;홀더, listView와 같이 자체적으로 구현할 필요는 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특정 인덱스의 알림도 지원합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아이템의 추가나 제거를 애니메이션화하는 것과 같은 것들은 당신이 아무것도 할 필요 없이 재활용자 보기에 이미 구현되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;레이아웃 관리자를 RecyclerView와 연결할 수 있습니다. 이는 ListView에서 제한적으로 사용할 수 있는 재활용 뷰에서 임의 뷰를 얻는 데 사용할 수 있습니다. ListView에서 사용할 수 있는 유일한 유형의 뷰는 ListView(수직 목록 뷰)뿐입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수평 리스트뷰를 구현할 수 있는 공식적인 방법조차 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 리사이클러 뷰를 사용하면, 우리는&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;i) Linear Layout Manager - 수직 목록과 수평 목록을 모두 지원하는 ii) Staggered Layout Manager - Pinterest를 시차 목록처럼 지원하는 iii) Grid Layout Manager - 갤러리 앱에서 볼 수 있는 그리드 표시를 지원합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 가장 좋은 것은 우리가 원하는 대로 이 모든 것을 역동적으로 할 수 있다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주요 장점:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;ViewHolder&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에서 기본적으로 사용할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 우리는 그 안에서 명시적으로 창조할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getView()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내장된&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Viewholder&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리사이클러뷰가 리스트뷰에 비해 가지는 장점:&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보기 포함&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 보유자.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쉬운 애니메이션.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수평, 그리드 및 시차 레이아웃 지원&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;recyclerView와 비교한 listView의 장점View:&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;디바이더 추가가 용이합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내장 어레이 어댑터를 사용하여 간단한 일반 목록 작성 가능&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;머리글 및 바닥글을 지원합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;OnItemClickListner를 지원합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 생각에 그들의 가장 큰 차이점은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;항목을 만들거나 배치하는 동안 항목의 위치를 찾습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;항목의 유형을 찾습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동일한 유형으로 생성된 다른 항목이 있는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;를 다시 만들지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;먼저 어댑터를 요청한 다음 재활용 풀에 요청합니다. 재활용 풀에 &quot;네, 유사한 유형을 만들었습니다.&quot;라고 표시되면 재활용 풀에 요청합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동일한 유형을 만들지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이런 종류의 풀링 메커니즘은 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리사이클러보기 정보&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;와 함께 소개되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Android 5.0 (Lollipop)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. &lt;a href=&quot;https://developer.android.com/topic/libraries/support-library/index.html&quot; rel=&quot;noreferrer&quot;&gt;지원 라이브러리&lt;/a&gt;에 포함되어 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 안드로이드 API 레벨 7과 호환됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마찬가지로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView’s&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주요 아이디어는 성능 친화적인 방식으로 목록 기능을 제공하는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 견해의 이름 중 'Recycler' 부분은 우연히 거기에 있는 것이 아닙니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 작업 중인 항목을 실제로 재활용할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://developer.android.com/training/improving-layouts/smooth-scrolling.html&quot; rel=&quot;noreferrer&quot;&gt;뷰 홀더&lt;/a&gt;라는 패턴 덕분에 재활용 공정이 진행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;재활용자에 대한 찬반 견해&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;장점:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;항목 추가, 업데이트 및 제거를 위한 통합 애니메이션&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보기를 사용하여 보기 재활용을 시행합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;홀더패턴&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리드와 목록을 모두 지원합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;세로 및 가로 스크롤 지원&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DiffUtil과 함께 사용할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단점:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;복잡성을 더함&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;No OnItem클릭리스너&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;목록 보기 정보&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안드로이드가 시작된 이래로 존재해왔습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 심지어 사용할 수 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;API Level 1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 그것은 그것과 같은 목적을 가지고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ListView의 사용법은 사실 매우 간단합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이런 면에서는 후계자답지 못합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;학습 곡선은 Recycler View에 대한 곡선보다 매끄럽습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 더 쉽게 파악할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Layout Manager, Item Animator 또는 DiffUtil과 같은 것을 처리할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;목록 보기의 장단점&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;장점:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단순 용법&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 어댑터&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용 가능한 OnItemClickListener&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것이 그들의 기반입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ExpandableListView&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단점:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보기의 용도를 수용하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;홀더패턴&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위의 차이점 외에 다음과 같은 것들이 더 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;RV는 뷰 생성과 뷰할 데이터의 바인딩을 구분합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;LV에서 view에 데이터를 바인딩하기 전에 view를 생성하기 위해 convertView가 null인지 아닌지 확인해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 RV의 경우는 필요할 때만 뷰가 생성되지만 LV의 경우는 변환 뷰에 대한 체크를 놓칠 수 있고 매번 뷰가 생성됩니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Layout Manager를 사용하면 그리드와 목록 간의 전환이 더욱 쉬워졌습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단일 항목만 변경되어도 모든 항목을 알리고 업데이트할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;LV의 경우 뷰 캐싱을 구현해야 했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 RV로 제공됩니다. (뷰 캐싱과 재활용은 차이가 있습니다.)&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;RV의 경우 매우 쉬운 아이템 애니메이션.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내생각엔&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리스트뷰에 사용된 재활용 패턴의 문제점을 해결하기 위해 개발자의 삶을 더 어렵게 만들기 때문에 만들어졌습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 밖의 모든 것들은 당신이 어느 정도 감당할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 에 대해 동일한 어댑터를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GridView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 관점 모두 중요하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getItemCount&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getTypeCount&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하니까 똑같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 필요하지 않다면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListAdapter&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GridView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리드 어댑터를 사용하면 이미 효과가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;올바르게 구현한 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ViewHolder&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리스트 뷰의 패턴은 다음과 같이 큰 개선을 볼 수 없을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecycleView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 조금 같이 일했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 여전히 더 선호합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론이죠, 둘 다 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ViewHolders&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그래서 이건 장점이 아닙니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;A &lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코딩이 더 어렵습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;A &lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;헤더와 풋터가 포함되어 있지 않아서 마이너스입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;A &lt;/font&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보기를 작성할 필요가 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;소지자.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;섹션이나 부제목이 있는 목록을 원하는 경우에는 보기 없이 독립적인 항목을 만드는 것이 좋습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보유자), 더 쉽고 별도의 수업이 필요 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;간단한 답변:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아이템을 많이 보여주고 싶은 상황에서 리사이클러뷰를 사용해야 하며, 아이템의 개수는 동적입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ListView는 항목 수가 항상 동일하고 화면 크기로 제한된 경우에만 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안드로이드 라이브러리만 염두에 두고 생각하기 때문에 더 힘들어집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오늘날 사용자 자신의 어댑터를 구축하는 데 도움이 되는 수많은 옵션이 존재하며, 선택, 재정렬, 애니메이션, 분할기, 바닥글 추가, 헤더 등을 사용할 수 있는 동적 아이템의 목록과 그리드를 쉽게 구축할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;겁먹지 말고 리사이클러뷰를 시도해보세요. 웹에서 다운로드한 100개의 항목 목록을 리스트뷰와 리사이클러뷰로 만드는 것을 좋아하게 될 수 있습니다. 스크롤을 시도하면 UX(사용자 경험)의 차이를 볼 수 있습니다. 테스트 앱이 실행하기도 전에 멈출 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 두 라이브러리를 통해 쉬운 어댑터를 만들 수 있는지 확인하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/mikepenz/FastAdapter&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마이크펜즈의 빠른 어댑터&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/davideas/FlexibleAdapter&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다비데아별 유연한 어댑터&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ListView와 RecyclerView에는 많은 차이점이 있지만 특히 다음 사항에 유의해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 뷰&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;홀더 패턴은 ListView에서 완전히 선택사항이지만 RecyclerView로 구워집니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ListView는 세로 스크롤만 지원하지만 RecyclerView는 세로 스크롤 목록에만 국한되지 않습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리사이클러뷰는 호환성 패키지의 일부라는 점만 강조하고 싶습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 모든 애플리케이션은 OS의 기능과 코드를 사용하는 대신 자체 리사이클러뷰 구현을 수행합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;RecycleerView와 유사한 기능은 미래 OS의 일부가 될 수 있으며 여기서 사용하는 것이 도움이 될 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 하모니 OS가 곧 출시될 예정입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;호환성 패키지 라이선스는 향후 변경될 수 있으며 시사점이 될 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단점이 많은 여름:&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;허가증&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특히 많은 앱의 일부로서 더 큰 풋 프린트&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;OS에서 오는 일부 기능이 있을 경우 효율성이 떨어짐&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 좋은 점은 리사이클러뷰에서 일부 기능을 스와이핑 아이템으로 구현했다는 점입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위에서 말한 모든 것은 고려해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/26728651/recyclerview-vs-listview&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Android</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/952</guid>
      <comments>https://manysource.tistory.com/952#entry952comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:54:49 +0900</pubDate>
    </item>
    <item>
      <title>meteor .gitignore 파일에 무엇을 넣어야 합니까?</title>
      <link>https://manysource.tistory.com/951</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;meteor .gitignore 파일에 무엇을 넣어야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 새로운 유성 프로젝트가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 생각에는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.meteor&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;dir에는 구성 파일(필요한)과 임시 파일(필요하지 않은)의 조합이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 당신의 안에 있는 것은.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.gitignore&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;버전 제어에서 제외하고 싶은 유일한 디렉토리는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.meteor/local&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;운석이 자동으로 오른쪽을 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.meteor&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.meteor/.gitignore&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 하지만 -- 아무것도 할 필요는 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;공용 저장소로 푸시하는 경우 구성 설정 파일을 여기에 넣을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 smtp, twitter, facebook 등의 서비스에 대한 암호화 키 및 다양한 암호와 같은 보안에 민감한 데이터 구성 설정을 config.js에 저장한 다음 .gitignore 또는 info/exclude 파일에 저장합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 공개 보고서에 원하지 않는 것들.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 .gitignore에 대해 고려해야 할 추가적인 제안입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 무시는 또한 다음을 포함해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;공용/노드_&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 당신은 이것을 적절하게 &lt;a href=&quot;https://github.com/matb33/heroku-meteor-npm&quot;&gt;만들어진 패키지&lt;/a&gt;로 보충합니다&lt;a href=&quot;https://github.com/matb33/heroku-meteor-npm&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;노드 모듈 종속성 설치를 관리하는 &lt;a href=&quot;https://github.com/matb33/heroku-meteor-npm&quot;&gt;json&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 위해서는 새로운 곳에 설치할 때 오후 설치가 필요합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://joshowens.me/environment-settings-and-security-with-meteor-js/&quot; rel=&quot;noreferrer&quot;&gt;이 기사&lt;/a&gt;에 따르면, 당신은 당신의 것을 무시해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;settings.json&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 특히 API 키를 포함할 수 있는 환경별 정보가 있는 경우.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신도 무시하고 싶은 유성 1.3과 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;node_modules&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. npm을 통해서 설치가 가능하기 때문에 모든 라이브러리를 git에 추가할 이유가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;node_modules&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;폴더는 당신의 앱보다 더 클 가능성이 높습니다. (제외)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.meteor/local&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;폴더)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유성이 만들어냅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.gitignore&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.meteor&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 디렉토리입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 당신의 프로젝트는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.gitignore&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 민감한 데이터 구성 파일을 제외해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;node_modules&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하는 경우&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://www.jetbrains.com/idea/&quot; rel=&quot;nofollow&quot;&gt;Intellij IDE&lt;/a&gt; 무시&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.idea&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;폴더&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://www.sublimetext.com/&quot; rel=&quot;nofollow&quot;&gt;서브라임 텍스트&lt;/a&gt; 무시&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sublime-project&lt;/code&gt; &lt;code&gt;sublime-workspace&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 당신이 맥 유저라면 무시해도 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DS_Store&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 npm을 사용하면 무시합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;window와 mac 사용자가 동일한 프로젝트에서 작업하는 경우, 동일한 npm 버전이 mac과 window에 대해 다르기 때문에 오류가 나타납니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;웹스톰과 Mupx와 함께 배포된 Meteor 1.4와 함께 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# Meteor files to ignore now handled by .ignore file within .Meteor folder automatically

# settings file to ignore to protect API keys
settings.json

# MUP / MUPX file to ignore to protect server passwords and sensitive info.
mup.json

# npm package files to ignore
node?modules/
npm-debug.log

# Webstorm IDE files to ignore
.idea/*

# Typing type definition files to ignore. Webstorm uses type definitions for autocomplete even without typescript
typings/*
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우리는 시스템 파일 등과 함께 많은 IDE와 Meteor를 포함하는 이 gitignore를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;### WebStorm ###
.idea/

### OSX ###
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear on external disk
.Spotlight-V100
.Trashes
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

### Windows ###
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows shortcuts
*.lnk

### Linux ###
*~
# KDE directory preferences
.directory

### SublimeText ###
# cache files for sublime text
*.tmlanguage.cache
*.tmPreferences.cache
*.stTheme.cache
# workspace files are user-specific
*.sublime-workspace
# project files should be checked into the repository, unless a significant
# proportion of contributors will probably not be using SublimeText
# *.sublime-project
# sftp configuration file
sftp-config.json

### Node/NPM ###
node_modules
npm-debug.log

### Development ###
dump
mochawesome-reports
ngrok
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;루트 디렉터리에 node_ modules이라는 이름의 설치된 패키지 디렉터리를 넣어야 하며, 프로젝트를 커밋하는 동안에는 무시됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 product manager는 package.json을 사용하여 서버에 패키지를 쉽게 설치할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;### MeteorJS ###
# default meteor build and local packages
.meteor/local

# meteor settings file
settings.json

# meteor build output files
*.tar.gz

# general swp files from vim
*.swp

# End of https://www.gitignore.io/api/meteorjs
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 이 사이트 https://www.gitignore.io/ 를 사용하여 어떤 프로젝트든 .gitignore 파일을 생성할 수 있습니다. 당신이 사용하는 기술과 당신의 IDE를 삽입하면 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Intellij와 함께 사용하는 .gitignore 파일입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  node_modules/
  .meteor/local/*
  .idea/
  npm-debug.log
  packages/*/.npm/
&lt;/code&gt;&lt;/pre&gt;&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;gitignore는 git 서버에 대한 불필요한 부담과 당신의 가져오기를 항상 무시하는 데 사용됩니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 이 무지함 속에 넣을 수 있는 가장 좋은 것은 포장 가능한 개체입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기에는 meteor downloadable 패키지가 포함되어 있으므로 gitignore 안에 &quot;meteor/local&quot;을 추가해야 합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 gitignore 구성에 추가하면 프로젝트의 크기가 패키지의 경우보다 10배 작게 줄어듭니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지금 전체 프로젝트를 다른 위치에 잘라넣거나 .meteor/local 폴더 없이 저장소를 가져온 후 meteor 명령을 사용하여 프로젝트를 시작하면 meteor가 먼저 필요한 패키지를 다운로드한 다음 서버를 시작합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.meteor/local은 버전 관리에서 누락되기를 원하는 유일한 항목입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Meteor는 당신의 필요에 맞는 .gitignore 파일을 자동으로 생성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;공용 저장소인 경우 &quot;settings-development.json&quot; 또는 AWS API 키와 같이 일반에 공개하고 싶지 않은 정보를 포함하는 다른 JSON 파일을 포함하고 싶을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 Bitbucket 등은 필요에 맞는 무료 개인 저장소를 제공합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/10728956/what-should-i-put-in-a-meteor-gitignore-file&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Git</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/951</guid>
      <comments>https://manysource.tistory.com/951#entry951comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:54:40 +0900</pubDate>
    </item>
    <item>
      <title>열에 대한 최소 길이 제약 조건</title>
      <link>https://manysource.tistory.com/950</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열에 대한 최소 길이 제약 조건&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오라클에서 최소 길이 제약을 구현하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 답변과 &lt;a href=&quot;https://stackoverflow.com/questions/4426005/how-can-i-create-a-check-constraint-on-a-varchar-column-in-sql-server-specifying&quot;&gt;다른&lt;/a&gt; 여러 유사한 질문을 읽으며 다음과 같이 시도했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALTER TABLE my_table 
ADD CONSTRAINT MY_TABLE_PASSWORD_CK CHECK (DATALENGTH(password) &amp;gt;=4)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 나는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;DATALENGTH&quot;: invalid identifier&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 저도 해봤습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;( DATALENGTH([password]) &amp;gt;=4 )
( LEN([password]) &amp;gt;=4 )
( LEN(password) &amp;gt;=4 )
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle에서 이 검사 제약 조건에 대한 현재 형식은 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;DATALENGTH()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;SQL Server&lt;/em&gt;에서 바이트 단위의 길이를 반환합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동등한 Oracle 함수는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;LENGTHB()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(여기에 document&lt;a href=&quot;http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions076.htm&quot; rel=&quot;noreferrer&quot;&gt;):&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALTER TABLE my_table
    ADD CONSTRAINT MY_TABLE_PASSWORD_CK CHECK (LENGTHB(password) &amp;gt;= 4)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 당신의 목적을 위해서는 문자열 길이가 두 데이터베이스 모두 적절할 것으로 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;LENGTH()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle(또는 Oracle)에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;LEN()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(SQL Server).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/32156650/minimum-length-constraint-on-a-column&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Oracle</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/950</guid>
      <comments>https://manysource.tistory.com/950#entry950comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:54:32 +0900</pubDate>
    </item>
    <item>
      <title>angular.js - 유럽 표기법의 10진수</title>
      <link>https://manysource.tistory.com/949</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;angular.js - 유럽 표기법의 10진수&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각도에서 통화 필터를 사용하여 다음과 같이 숫자 형식을 지정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{{service.price | currency: &quot;€ &quot;}}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표준 생산량은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;€ #,##0.00
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출력은 어떻게 됩니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;€ #.##0,00
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(유럽 표기법)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각지지대&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i18n&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;입지기준 | 세계화 | 국제화&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;숫자 형식에 관한 한 앵글은 다음을 의지합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$locale&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서비스 및 부동산에 대한 보다 구체적인 서비스&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NUMBER_FORMATS&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;'위치'를 변경하지 않는 한 통화 기호 자체는 번호 지정 형식을 변경하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 현재 지원되는 위치 목록입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://cdnjs.com/libraries/angular-i18n/&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://cdnjs.com/libraries/angular-i18n/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://docs.angularjs.org/guide/i18n&quot;&gt;다음은 독일어&lt;/a&gt; 로케일을 지원하는 방법에 대한 예입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;html ng-app&amp;gt;
 &amp;lt;head&amp;gt;

   &amp;lt;script src=&quot;angular.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
   &amp;lt;script src=&quot;i18n/angular-locale_de-de.js&quot;&amp;gt;&amp;lt;/script&amp;gt;

 &amp;lt;/head&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 자세히 조사하고 싶다면 검색할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NUMBER_FORMATS&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위에 제공된 CDN 중 하나에서, 숫자를 포맷하기 위해 어떤 각도를 사용할 것인지를 찾을 수 있습니다. 다음은 예시입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;NUMBER_FORMATS&quot;: {
    &quot;CURRENCY_SYM&quot;: &quot;\u20ac&quot;,
    &quot;DECIMAL_SEP&quot;: &quot;,&quot;,
    &quot;GROUP_SEP&quot;: &quot;.&quot;,
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/23409939/angular-js-decimal-numbers-in-european-notation&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>angularJS</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/949</guid>
      <comments>https://manysource.tistory.com/949#entry949comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:54:26 +0900</pubDate>
    </item>
    <item>
      <title>Oracle 연결 압축?</title>
      <link>https://manysource.tistory.com/948</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle 연결 압축?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JDBC를 이용해 오라클 11g에 연결하는 애플리케이션이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유감스럽게도 제 앱이 실행 중인 기계와 오라클 기계가 다소 낮은 대역폭 연결을 통해 연결되어 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연결을 스니핑하지는 않았지만, 연결을 통해 스트리밍되는 데이터가 압축되지 않은 것은 확실합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;애플리케이션의 경우 지연 시간보다 대역폭이 더 중요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JDBC 드라이버와 Oracle에게 연결을 통해 전송되는 데이터를 압축하도록 지시할 방법이 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구글은 데이터 파일 압축에 대해 많은 답을 내놓지만, 저는 네트워크 프로토콜 압축에 대해 아무것도 찾을 수 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle의 Thin 드라이버를 사용하고 있지만 OCI 드라이버에서만 지원되는 경우에는 OCI 드라이버로 전환할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 제안이든 감사합니다!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오라클의 씬 드라이버와 OCI 드라이버에 대해서는 자세히 모릅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 &lt;a href=&quot;http://en.wikipedia.org/wiki/Secure_Shell&quot; rel=&quot;nofollow noreferrer&quot;&gt;SSH&lt;/a&gt; 터널을 사용하여 &lt;a href=&quot;http://unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1&quot; rel=&quot;nofollow noreferrer&quot;&gt;압축&lt;/a&gt;을 수행할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 Oracle 시스템에서 SSH 데몬을 설정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle 서버가 RedHat Linux에서 실행 중인 경우 완료됩니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클라이언트 시스템(JDBC를 통해 연결하는 애플리케이션을 호스팅하는 시스템)에서 압축 터널을 사용하도록 SSH 연결을 설정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;명령행 SSH 또는 &lt;a href=&quot;http://www.chiark.greenend.org.uk/~sgtatham/putty/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Putty&lt;/a&gt;(창 아래에 있는 경우)를 사용하여 이를 수행할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 연결을 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ ssh -L1521:localhost:1521 username@oracleserver_ip
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 애플리케이션에서 localhost:1521을 Oracle 주소로 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;질문에 직접 답하기 위해 드라이버(씬 또는 OCI)에는 압축 메커니즘이 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전송된 데이터가 펑키 바이너리 형식일 가능성이 높기 때문에 SSL을 통해 잘 압축될 수 있을지 확신할 수 없습니다. 네트워크 성능을 향상시키기 위한 다른 메커니즘을 사용해야 할 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 경험으로는, 높은 지연 시간은 낮은 대역폭보다 훨씬 더 많은 Oracle JDBC 드라이버를 사용하는 성능에 해를 끼칩니다. (적어도 제가 작업하는 애플리케이션에서는)&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대기 시간에 대해 걱정하지 않는다고 하셨는데, 저대역폭 환경의 대기 시간에 대해 견적을 내주시겠습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보내주시는 데이터의 크기가 얼마나 됩니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;BLOB 열이 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연결 풀 또는 최대 절전 모드와 같은 다른 기술이 관련되어 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터가 압축되는 것뿐만 아니라 여러 가지 잠재적 요인이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성능을 가장 저하시키는 요소를 분리하기 위해 WAN 에뮬레이션을 해본 적이 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://wanem.sourceforge.net/&quot; rel=&quot;noreferrer&quot;&gt;WANem&lt;/a&gt;은 설정이 아주 쉽습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 이 문제에 대해 몇 주 동안 연구해 왔는데, 100-200ms 지연으로 인해 1Mbit 대역폭 제한보다 훨씬 더 많은 피해를 입게 되었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여러분이 다른 보트를 타고 있기를 바랍니다. 압축은 해결하기 쉬운 문제입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;업데이트일 뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;12.2의 Oracle JDBC 연결에는 이제 다음 게시물에 명시된 압축 기능이 있습니다. http://www.oracle.com/technetwork/topics/jdbc-faq-090281.html#0000_00&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네트워크 압축을 활성화하려면 &lt;a href=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/12.2/jjdbc/data-sources-and-URLs.html#GUID-6D8EFA50-AB0F-4A2B-88A0-45B4A67C361E&quot; rel=&quot;nofollow noreferrer&quot;&gt;Oracle JDBC Developer's Guide&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 기능은 Oracle 12c Release 2 기능입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;질문과 답변이 최신이 아니거나 링크가 끊어졌으므로 연결 압축을 사용할 수 있는 방법을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터베이스 서버측:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DBA에게 문의하여 $DB_HOME\NETWORK\ADM 파일 구성&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IN\sqlnet.ora&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래 줄 추가:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SQLNET.COMPRESSION=on
SQLNET.COMPRESSION_THRESHOLD=1024
SQLNET.COMPRESSION_LEVELS=(high)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본값:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SQLNET.COMPRESSION_LEVELS&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서버에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(low)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. OCI 드라이버를 사용하는 경우에는 잘 작동할 수 있지만, 일반적으로 &lt;em&gt;권장&lt;/em&gt;되는 씬 드라이버를 사용하는 경우에는 다음과 같이 특별히 구성해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(high)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클라이언트측 Java 코드:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
OracleDataSource ds = new OracleDataSource();

Properties prop = new Properties();
prop.setProperty(&quot;user&quot;, &quot;myuser&quot;);
prop.setProperty(&quot;password&quot;, &quot;mypassword&quot;);
prop.setProperty(&quot;oracle.net.networkCompression&quot;, &quot;on&quot;); 
prop.setProperty(&quot;oracle.net.networkCompressionThreshold&quot;, &quot;1024&quot;);

ds.setConnectionProperties(prop);
ds.setURL(&quot;jdbc:oracle:thin:@&amp;lt;HOSTNAME&amp;gt;:&amp;lt;PORT&amp;gt;/&amp;lt;SERVICENAME&amp;gt;&quot;);

Connection conn = ds.getConnection();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;압축을 높게 설정하면 클라이언트와 특히 데이터베이스 서버 모두에서 CPU 사용량이 증가할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네트워크 지연 시간이 실제로 문제가 되지 않는 한, 이는 선택해야 할 사항입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 JDBC 연결 문자열 구문은 허용 가능하며 다음과 같이 작동하는 것으로 보입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jdbc:oracle:thin:@(description=(COMPRESSION=on)(COMPRESSION_LEVELS=(LEVEL=high))(address=(host=host1)(protocol=tcp)(port=1521)) (connect_data=(SERVICE_NAME=SERV1)(SERVER = DEDICATED)))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/1954279/oracle-connection-compression&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Oracle</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/948</guid>
      <comments>https://manysource.tistory.com/948#entry948comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:54:20 +0900</pubDate>
    </item>
    <item>
      <title>문자열에 PowerShell의 배열에 부분 문자열이 포함되어 있는지 확인합니다.</title>
      <link>https://manysource.tistory.com/947</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열에 PowerShell의 배열에 부분 문자열이 포함되어 있는지 확인합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 파워쉘을 공부하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열에 PowerShell의 배열에 부분 문자열이 포함되어 있는지 확인하는 방법을 알고 싶습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 파이썬에서도 같은 방법을 할 줄 압니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;any(substring in string for substring in substring_list)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PowerShell에 사용 가능한 유사한 코드가 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저의 PowerShell 코드는 아래와 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$a = @('one', 'two', 'three')
$s = &quot;one is first&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$s를 $a로 검증하고 싶습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$a에 있는 문자열이 $s에 있으면 True를 반환합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파워쉘에서 가능합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;질문의 실제 변수를 사용하여 단순화하기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$a = @('one', 'two', 'three')
$s = &quot;one is first&quot;
$null -ne ($a | ? { $s -match $_ })  # Returns $true
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$a에 포함되지 &lt;em&gt;않도록&lt;/em&gt; $s 수정:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$s = &quot;something else entirely&quot;
$null -ne ($a | ? { $s -match $_ })  # Returns $false
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(물론 같은 변수 이름을 &lt;a href=&quot;https://stackoverflow.com/a/31603685/185123&quot;&gt;사용하는 ChingNotCHING&lt;/a&gt;의 답변보다 약 25% 적은 문자입니다 :-)&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;($substring_list | %{$string.contains($_)}) -contains $true
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 외줄을 철저히 따라야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PowerShell 버전 5.0+용&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신에.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$null -ne ($a | ? { $s -match $_ })
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 간단한 버전을 사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$q = &quot;Sun&quot;
$p = &quot;Sunday&quot;, &quot;Monday&quot;, &quot;Tuesday&quot;, &quot;Wednesday&quot;, &quot;Thursday&quot;, &quot;Friday&quot;, &quot;Saturday&quot;
[bool]($p -match $q)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 돌아옵니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$True&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약에 부현이라면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$q&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열 배열에 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$p&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if ($p -match $q) {
    Write-Host &quot;Match on Sun !&quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;6년 동안 아무도 이렇게 간단하고 읽을 수 있는 답을 주지 않았다는 것이 놀랍습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$a = @(&quot;one&quot;,&quot;two&quot;,&quot;three&quot;)
$s = &quot;one1 is first&quot;

($s -match ($a -join '|')) #return True
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 배열을 수직 막대 &quot;|&quot;를 사용하여 문자열에 삽입하면 됩니다. 이것이 정규 표현식의 교대(&quot;OR&quot; 연산자)이기 때문입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://www.regular-expressions.info/alternation.html&quot; rel=&quot;noreferrer&quot;&gt;https://www.regular-expressions.info/alternation.html&lt;/a&gt; &lt;a href=&quot;https://blog.robertelder.org/regular-expression-alternation/&quot; rel=&quot;noreferrer&quot;&gt;https://blog.robertelder.org/regular-expression-alternation/&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 허용된 답변은 정확하게 일치하는 내용을 검색하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정확한 일치를 원하시면 \b(단어 경계) https://www.regular-expressions.info/wordboundaries.html 를 이용하시면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$a = @(&quot;one&quot;,&quot;two&quot;,&quot;three&quot;)
$s = &quot;one1 is first&quot;

($s -match '\b('+($a -join '|')+')\b') #return False
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/31603128/check-if-a-string-contains-any-substring-in-an-array-in-powershell/31620141#31620141&quot;&gt;마이클&lt;/a&gt; 소렌스(Michael &lt;a href=&quot;https://stackoverflow.com/questions/31603128/check-if-a-string-contains-any-substring-in-an-array-in-powershell/31620141#31620141&quot;&gt;Sorens&lt;/a&gt;)의 &lt;a href=&quot;https://stackoverflow.com/questions/31603128/check-if-a-string-contains-any-substring-in-an-array-in-powershell/31620141#31620141&quot;&gt;코드 답변&lt;/a&gt;은 부분 서브스트링 일치의 함정을 피하기 위해 가장 효과적입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단지 약간의 정규장 수정만 필요합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 당신이 그 끈을 가지고 있다면.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$s = &quot;oner is first&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 'one'이 'oneer'와 일치하므로 코드가 true로 반환됩니다(PowerShell의 일치는 두 번째 문자열에 첫 번째 문자열이 포함됨을 의미함).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$a = @('one', 'two', 'three')
$s = &quot;oner is first&quot;
$null -ne ($a | ? { $s -match $_ })  # Returns $true
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단어 경계 '\b'에 일부 regex를 추가하면 ron 'oneer'는 false를 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$null -ne ($a | ? { $s -match &quot;\b$($_)\b&quot; })  # Returns $false
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(나는 그것이 오래된 스레드라는 것을 알고 있지만 적어도 미래에 이것을 보는 사람들을 도울 수 있을 것입니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;uses -match라는 응답이 있을 경우 오답이 발생합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예: $a-match $b가 &quot;&quot;인 경우 $a-match $b는 거짓 음성을 생성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하는 것이 더 좋은 답일 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;포함 - 그러나 대소문자를 구분하므로 비교하기 전에 모든 문자열을 대문자 또는 소문자로 설정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$a = @('one', 'two', 'three')
$s = &quot;one is first&quot;
$a | ForEach-Object {If ($s.toLower().Contains($_.toLower())) {$True}}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$True를 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$a = @('one', 'two', 'three')
$s = &quot;x is first&quot;
$a | ForEach-Object {If ($s.toLower().Contains($_.toLower())) {$True}}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반환 없음&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원한다면 $True 또는 $False를 반환하도록 조정할 수 있지만, 위의 IMO가 더 쉽습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같은 문자열을 포함하는 문자열의 하위 집합을 선택할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$array = @(&quot;a&quot;, &quot;b&quot;)
$source = @(&quot;aqw&quot;, &quot;brt&quot;, &quot;cow&quot;)

$source | where { 
    $found = $FALSE
    foreach($arr in $array){
        if($_.Contains($arr)){
            $found = $TRUE
        }
        if($found -eq $TRUE){
            break
        }
    }
    $found
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한 가지 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$array = @(&quot;test&quot;, &quot;one&quot;)
$str = &quot;oneortwo&quot;
$array|foreach {
    if ($str -match $_) {
        echo &quot;$_ is a substring of $str&quot;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/31603128/check-if-a-string-contains-any-substring-in-an-array-in-powershell&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>PowerShell</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/947</guid>
      <comments>https://manysource.tistory.com/947#entry947comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:54:13 +0900</pubDate>
    </item>
    <item>
      <title>html 페이지의 div에 외부 웹페이지를 로드하는 방법</title>
      <link>https://manysource.tistory.com/946</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;html 페이지의 div에 외부 웹페이지를 로드하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 응답 웹사이트를 사용하지 않고 내 HTML 페이지의 div에 로드해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;iframe&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/12938386/load-external-div-content-to-my-page-div&quot;&gt;제&lt;/a&gt;가 이 링크를 시도해봤는데, 스크립트에서 언급한 단일 페이지 URL에서 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#mydiv').load('http://localhost/qa/ask#external-div', function(response, status, xhr) {
    if (status == &quot;error&quot;) {
        var msg = &quot;Sorry but there was an error: &quot;;
        alert(msg + xhr.status + &quot; &quot; + xhr.statusText);
      }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;간단한 html을 사용해서,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;div&amp;gt; 
    &amp;lt;object type=&quot;text/html&quot; data=&quot;http://validator.w3.org/&quot; width=&quot;800px&quot; height=&quot;600px&quot; style=&quot;overflow:auto;border:5px ridge blue&quot;&amp;gt;
    &amp;lt;/object&amp;gt;
 &amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오서리,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
        $(&quot;#mydiv&quot;)
            .html('&amp;lt;object data=&quot;http://your-website-domain&quot;/&amp;gt;');
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://jsfiddle.net/SsJsL/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JSFIDDLE 데모&lt;/font&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 스택 오버플로 스레드에서 언급한 것처럼 &lt;a href=&quot;https://stackoverflow.com/questions/16660559/difference-between-iframe-embed-and-object-elements&quot;&gt;iframe, Embedd&lt;/a&gt; 및 &lt;a href=&quot;https://stackoverflow.com/questions/16660559/difference-between-iframe-embed-and-object-elements&quot;&gt;개체 요소&lt;/a&gt; 간의 &lt;a href=&quot;https://stackoverflow.com/questions/16660559/difference-between-iframe-embed-and-object-elements&quot;&gt;차이&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;lt;object&amp;gt; 태그 대신 &amp;lt;embed&amp;gt; 태그를 사용할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자식과 부모 사이에 의사소통이 필요한 경우.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;† 아래 주석에서 지적한 바와 같이, &amp;lt;객체&amp;gt;의 스크립트가 실행되지만 부모와 자식 컨텍스트가 직접 통신할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;lt;embed&amp;gt;를 사용하면 부모에게서 자녀의 컨텍스트를 얻을 수도 있고 그 반대도 가능합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 부모에서 스크립트를 사용하여 자녀 등을 조작할 수 있음을 의미합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 부분은 자바스크립트 postMessage API와 같은 다른 메커니즘을 대신 설정해야 하는 &amp;lt;object&amp;gt;나 &amp;lt;iframe&amp;gt;에서는 불가능합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;embed type=&quot;text/html&quot; src=&quot;snippet.html&quot; width=&quot;500&quot; height=&quot;200&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/18145273/how-to-load-an-external-webpage-into-a-div-of-a-html-page&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>jQuery</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/946</guid>
      <comments>https://manysource.tistory.com/946#entry946comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:54:06 +0900</pubDate>
    </item>
    <item>
      <title>ORA-32795: 생성된 always identity 열에 삽입할 수 없습니다.</title>
      <link>https://manysource.tistory.com/945</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ORA-32795: 생성된 always identity 열에 삽입할 수 없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래 삽입문을 실행하려고 하는데 계속 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;생성된 항상 ID 열에 삽입할 수 없음&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 진술합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;INSERT INTO leaves_approval 
SELECT * 
FROM   requests_temp r 
WHERE  r.civil_number = 33322 
       AND r.request_id = (SELECT Max(s.request_id) 
                           FROM   requests_temp s)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대상 테이블의 열 중 하나(leaves_approval)에 &lt;strong&gt;항상 생성&lt;/strong&gt;된 것으로 정의된 ID 열이 들어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ID 열은 &lt;strong&gt;할당&lt;/strong&gt;할 수 &lt;strong&gt;없는&lt;/strong&gt; 항상 &lt;strong&gt;생성&lt;/strong&gt; 모드와 할당할 수 &lt;strong&gt;있는&lt;/strong&gt; &lt;strong&gt;기본적으로 생성&lt;/strong&gt; 모드의 두 가지 모드로 생성할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열 모드를 변경한 다음 &quot;그대로&quot; 삽입할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ID 열에 중복이 발생하거나 제약 조건으로 인해 실패할 수 있음을 고려하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALTER TABLE leaves_approval MODIFY **my_identity_column** GENERATED BY DEFAULT AS IDENTITY;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 IDColumn을 INSERT 목록에서 제외할 수도 있습니다(단, IDColumn을 제외하고는 전체 열 목록을 표시해야 합니다). 예를 들어 -&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;INSERT INTO leaves_approval (c1,c2,c3,c4,...)
SELECT c1,c2,c3,c4 ...
FROM   requests_temp r 
WHERE  r.civil_number = 33322 
       AND r.request_id = (SELECT Max(s.request_id) 
                           FROM   requests_temp s)
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;a href=&quot;https://docs.oracle.com/database/121/SQLRF/statements_7002.htm#SQLRF01402&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터베이스 SQL 언어 참조 - CREATE TABLE&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;항상을 지정하는 경우 오라클 데이터베이스는 항상 시퀀스 생성기를 사용하여 열에 값을 할당합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;INSERT 또는 UPDATE를 사용하여 열에 값을 명시적으로 할당하려고 하면 오류가 반환됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본값입니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 기본적으로 지정하는 경우 오라클 데이터베이스는 시퀀스 생성기를 사용하여 기본적으로 열에 값을 할당하지만 지정된 값을 열에 명시적으로 할당할 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ON NULL을 지정하면 후속 INSERT 문에서 NULL로 평가되는 값을 할당하려고 할 때 Oracle Database가 시퀀스 생성기를 사용하여 열에 값을 할당합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 오류에 대해 이해가 안 되는 것은 무엇입니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;값이 시퀀스로 생성되는 &quot;아이덴티티&quot; 열이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;삽입할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 모든 열을 나열합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;INSERT INTO LEAVES_APPROVAL(col1, col2, col3, . . .) 
    SELECT col1, col2, col3, . . .
    FROM REQUESTS_TEMP r
    WHERE r.CIVIL_NUMBER = 33322 AND
          r.REQUEST_ID = (SELECT MAX(s.REQUEST_ID) FROM REQUESTS_TEMP s);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로, 모든 열을 다음과 같이 나열하는 것이 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;INSERT&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어쨌든.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 열 순서가 잘못되었거나 테이블의 열 개수가 다르기 때문에 예기치 않은 오류를 방지할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예: my_table_column NUMBER GENERED BY DEFAULT ON NUMBER AS IDENTY - 로 정의된 열이 있으면 NULL일 때 값을 얻고 해당 열에 대한 값을 삽입/업데이트해도 간섭하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 나에게 효과가 있었다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/41275920/ora-32795-cannot-insert-into-a-generated-always-identity-column&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Oracle</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/945</guid>
      <comments>https://manysource.tistory.com/945#entry945comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:27:56 +0900</pubDate>
    </item>
    <item>
      <title>인라인 자바스크립트 연기하는 방법?</title>
      <link>https://manysource.tistory.com/944</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인라인 자바스크립트 연기하는 방법?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 다음과 같은 html 코드를 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
    &amp;lt;script src=&quot;https://cdn.jsdelivr.net/blazy/1.8.2/blazy.min.js&quot; defer&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src=&quot;https://code.jquery.com/jquery-2.1.4.min.js&quot; integrity=&quot;sha256-8WqyJLuWKRBVhxXIL1jBDD7SDxU936oZkCnxQbWwJVw=&quot; crossorigin=&quot;anonymous&quot; defer&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.9.0/js/lightbox.min.js&quot; defer&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js&quot; integrity=&quot;sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa&quot; crossorigin=&quot;anonymous&quot; defer&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;!-- 26 dec flexslider js --&amp;gt;
    &amp;lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/flexslider/2.6.3/jquery.flexslider.min.js&quot; defer&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script defer&amp;gt;
    (function($) {
        $(document).ready(function() {
            //do something with b-lazy plugin, lightbox plugin and then with flexslider
        });
    })(jQuery);
    &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery가 정의되지 않았다는 오류가 발생합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 인라인 JS 코드에서 지연을 제거해도 jQuery가 정의되지 않았다고 표시됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 이유에서인지 저는 jQuery 플러그인을 머리에 꽂고 JS 코드를 인라인으로 유지해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 질문은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;왜 인라인 자바스크립트 코드가 지연되지 않습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;defer&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;속성이 거기에 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 인라인 자바스크립트 코드에서 deefer 동작을 모방할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필요하다면 바디 태그 끝에 넣을 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같은 스크립트.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;defer&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지정된 순서에 따라 속성 로드가 발생하지만 문서 자체가 로드되기 &lt;em&gt;전에는 발생&lt;/em&gt;할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;defer&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에 영향을 미치지 않는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;script&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;태그들은 또한 그들이 또한 가지고 있지 않는 한.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;src&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;속성, 가장 먼저 실행되는 스크립트는 인라인 스크립트입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 그 때 jQuery는 아직 로딩되지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 문제는 적어도 두 가지 방법으로 해결할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인라인 스크립트를 에 넣습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.js&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일을 작성하고 a와 함께 참조합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;src&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특성(추가)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;defer&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이미 가지고 있던 속성) 또는&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인라인 스크립트가 문서와 지연된 스크립트가 로드될 때까지 기다리십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DOMContentLoaded&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;발생 시 이벤트가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
    window.addEventListener('DOMContentLoaded', function() {
        (function($) {
            //do something with b-lazy plugin, lightbox plugin and then with flexslider
        })(jQuery);
    });
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NB: 후자의 경우 주의하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(document).ready(function()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 이상 포함되지 않습니다. 그러면 동일한 이벤트가 발생할 것이기 때문입니다(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DOMContentLoaded&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;). 원래 코드에 있던 것처럼 포함할 수 &lt;em&gt;있지만&lt;/em&gt; jQuery는 콜백을 &lt;em&gt;즉시&lt;/em&gt; 실행하므로 실질적인 차이가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스크립트에서 Base64 URL을 생성하여 src에 입력할 수 있습니다!&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;data:text/javascript;base64,YWxlcnQoJ0hlbGxvIHdvcmxkIScpOw==&quot;
        defer&amp;gt;
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 그것을 실제적으로 보기 위해 빠른 테스트를 만들었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같은 알림이 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Hello world!&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마지막으로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;defer&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작동 중:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/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;script defer&amp;gt;
  alert('Why no defer?!?');
&amp;lt;/script&amp;gt;

&amp;lt;!-- alert('Hello world!'); --&amp;gt;
&amp;lt;script src=&quot;data:text/javascript;base64,YWxlcnQoJ0hlbGxvIHdvcmxkIScpOw==&quot;
        defer&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;script&amp;gt;
  alert('Buh-bye world!');
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수동으로 작업하는 것은 약간 힘들기 때문에 HTML을 어떤 식으로든 컴파일할 수 있는 여유가 있다면(핸들바, 앵글 등) 많은 도움이 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 사용 중인 항목:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;data:text/javascript;base64,{{base64 &quot;alert('Hello world!');&quot;}}&quot;
        defer&amp;gt;
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;type=&quot;module&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;meta charset=&quot;utf-8&quot;&amp;gt;

&amp;lt;script type=&quot;module&quot;&amp;gt;
let t = document.getElementById('top');
console.log(t);
&amp;lt;/script&amp;gt;

&amp;lt;h1 id=&quot;top&quot;&amp;gt;Top Questions&amp;lt;/h1&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/docs/Web/HTML/Element/script#attr-type&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://developer.mozilla.org/docs/Web/HTML/Element/script#attr-type&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MDN 문서에서:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;미루다&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 부울 특성은 문서가 구문 분석된 후 실행되기 전에 스크립트가 실행되도록 브라우저에 지시하도록 설정됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DOMContentLoaded&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. &lt;strong&gt;&lt;em&gt;지연 특성은 외부 스크립트에서만 사용해야 합니다.&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt; &lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 IIFE&lt;em&gt;(Imediate Invocated Function Expression)&lt;/em&gt;라고 하며, DOM을 사용할 수 있기 전에 실행됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서, 그 경우에는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jQuery&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DOM에 없기 때문에 정의되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;h1&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반 텍스트로 로딩 연기Data URI - Chrome and FF&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;#noLib #vanillaJS&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Cross Browser PRODUCT에서 사용하지 말 것을 제안합니다.&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MSIE가 죽고 MS Edge가 Chrome 오픈 소스를 채택할 때까지 ;)&lt;/font&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스크립트를 지연할 수 있는 유일한 &lt;strong&gt;방법&lt;/strong&gt;은 외부 파일 또는 &lt;strong&gt;Data_URI&lt;/strong&gt;입니다(이벤트 DOM ContentLoaded를 사용하지 않음).&lt;/font&gt;&lt;/h2&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;미루다&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사양 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-defer&quot; rel=&quot;noreferrer&quot;&gt;스크립트#attr-dfer(MDN&lt;/a&gt; 웹 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-defer&quot; rel=&quot;noreferrer&quot;&gt;문서):&lt;/a&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;이 특성은 src 특성이 없는 경우(즉, 인라인 스크립트의 경우)에는 사용되지 않아야 하며, 이 경우에는 영향을 미치지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;)&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터_URI&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사양 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs&quot; rel=&quot;noreferrer&quot;&gt;데이터_URI&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;올바른 타입의 &quot;text/&lt;/strong&gt;javscript&quot;에서는 64를 &lt;strong&gt;베이스&lt;/strong&gt;로 할 필요가 전혀 없습니다.. ;)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;간단한 텍스트를 사용&lt;/strong&gt;하여 다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script defer src=&quot;data:text/javascript,

//do something with b-lazy plugin, lightbox plugin and then with flexslider

lightbox.option({
  resizeDuration: 200,
  wrapAround: true
})

&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네, 조금 이상한 해킹이지만,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;script type=&quot;module&quot;&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 다음을 &lt;strong&gt;정확한 순서로 혼합&lt;/strong&gt;할 수 있는 다른 옵션은 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모듈 외부 파일 - &lt;strong&gt;기본적&lt;/strong&gt;으로 지연됨&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모듈 인라인 스크립트 - &lt;strong&gt;기본적&lt;/strong&gt;으로 지연됨&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;외부 파일 - &lt;strong&gt;선택적&lt;/strong&gt;으로 연기됨&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인라인 스크립트 - 이 &lt;strong&gt;해킹&lt;/strong&gt;에서만 - 제가 알고 있는 (라이브러리/프레임워크 없이)&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연기/비동기 스크립트 태그가 충분하지 않습니다.&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용해야 할 공통 지식이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;script src=&quot;..&quot; async defer&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(또는 세트&lt;/font&gt;&lt;/font&gt;&lt;code&gt;script.async = true&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;할당하기 전에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;src&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, JS)에서 작업을 수행할 때 및/또는 페이지 맨 아래에 스크립트를 배치하여 페이지가 최대한 빨리 로드되고 사용자에게 렌더링되도록 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/shinsenter/defer.js&quot; rel=&quot;nofollow noreferrer&quot;&gt;deeper.js&lt;/a&gt;(참고: &lt;strong&gt;나&lt;/strong&gt;는 이 스크립트의 &lt;strong&gt;작성자&lt;/strong&gt;입니다)는 일반 자바스크립트로 작성되어 다른 콘텐츠를 더 빠르고 성능적으로 로딩합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인라인 스크립트 블록뿐만 아니라 모든 자바스크립트 파일을 효율적으로 연기할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5BXrM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5BXrM.jpg&quot; alt=&quot;Defer loading of JavaScript&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 당신의 페이지가 단지 일부 자바스크립트로 향상된 HTML 페이지라면, 당신은 단지 그것만으로 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;script async&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 브라우저가 스크립트를 구문 분석하고 실행하는 데 시간이 걸리고, 각 UI 변경 시 레이아웃이 다시 흘러 로드 속도가 더 느려질 수 있으며, 아무도 빈 흰 페이지를 쳐다보는 것을 좋아하지 않으며, 사용자는 참을성이 없어 빨리 떠날 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다양한 경우 사용하기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;async&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;defer&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/shinsenter/defer.js&quot; rel=&quot;nofollow noreferrer&quot;&gt;deefer.js&lt;/a&gt;보다 빠른 페이지 속도를 제공하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제안된 솔루션을 모두 확인했지만 모두 단점이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 제가 직접 발명했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 인라인 스크립트를 머리 태그에 넣거나 본문 태그 시작 직후에 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;var Defer = []; document.addEventListener('DOMContentLoaded', function() { while (Defer.length) Defer.shift().call(); }); &amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 하나의 라이너는 문서가 완전히 로드되는 즉시 연기할 모든 인라인 스크립트를 수집하고 각각 실행합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 지연된 인라인 스크립트를 실행해야 할 때는 언제든지 다음과 같이 등록하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
  alert('This alert will show immediately.');

  Defer.push(function() {
   alert('This alert will show only after document is loaded.');
   // You can use anything which is not loaded yet, like jQuery
   $(&quot;.selector&quot;).doSomeJqueryStuff();
  });

  // You can use it as many times as you like and in any place of your DOM.
  Defer.push(function() {
    // Any inline code you want to defer
  });
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 인라인 스크립트는 문서가 로드된 후에만 실행됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 인라인 jQuery 스크립트를 실행하여 jQuery를 DOM 끝에 유지할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 데이터 URL을 src 속성으로 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;data:application/javascript,eval(document.currentScript.textContent)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 스크립트 태그를 사용하여 외부 파일 안에 있는 것처럼 내용을 평가합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 게으른 속성에도 작용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IE 브라우저에서 지원하지 않는 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Document/currentScript&quot; rel=&quot;nofollow noreferrer&quot;&gt;document.currentScript&lt;/a&gt;를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script defer src=&quot;https://cdn.jsdelivr.net/npm/vue&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script defer src=&quot;data:application/javascript,eval(document.currentScript.textContent)&quot;&amp;gt;
    console.log('defered', typeof Vue); // function
&amp;lt;/script&amp;gt;
&amp;lt;script&amp;gt;
    console.log('not defered', typeof Vue); // undefined
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;콜백, 약속 또는 데이터 URL을 필요로 하지 않는 지연을 달성하는 데 다소 덜 모호한 방법이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배경에서 약간의 DOM 조작을 하기는 하지만요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작은 라이브러리(109바이트 압축/gzip) https://www.npmjs.com/package/deferscript 이렇게 해보세요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래 예시는 원래 게시물을 기반으로 한 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/flexslider/2.6.3/jquery.flexslider.min.js&quot; defer&amp;gt;
&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;./deferscript.js&quot; defer&amp;gt;
    (function($) {
        $(document).ready(function() {
            //do something with b-lazy plugin, lightbox plugin and then with flexslider
        });
    })(jQuery);
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 해야 할 일은 단지 a를 삽입하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;src&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;값을 가진 속성&lt;/font&gt;&lt;/font&gt;&lt;code&gt;./deferscript.js&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery 변수 $가 정의되지 않은 것이 문제라면 DOM ContentLoaded를 기다리는 준비된 함수를 반환하는 가짜 $ 함수를 만들 수도 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 인라인 스크립트에 $(문서)가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ready(.....) 그리고 문제는 헤더 스크립트가 지연됨에 따라 $가 정의되지 않는다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 인라인 스크립트에 가짜 $를 추가하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
var $ = function(element) {
    return {
        ready: function(callback) {
            // in case the document is already rendered
            if (document.readyState!=&quot;loading&quot;) callback();
            // modern browsers
            else if (document.addEventListener) 
                document.addEventListener(&quot;DOMContentLoaded&quot;, callback);
            // IE &amp;lt;= 8
            else document.attachEvent(&quot;onreadystatechange&quot;, function(){    
                if (document.readyState==&quot;complete&quot;) callback();
            });
        }
    };
};
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/41394983/how-to-defer-inline-javascript&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>jQuery</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/944</guid>
      <comments>https://manysource.tistory.com/944#entry944comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:27:50 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트에서 배열을 선언할 때 지켜야 할 가장 좋은 방법은 무엇입니까?</title>
      <link>https://manysource.tistory.com/943</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바스크립트에서 배열을 선언할 때 지켜야 할 가장 좋은 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 배열을 선언해야 할 때 이 표기법을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var arr = new Array();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 &lt;a href=&quot;http://jsbin.com/#javascript,html&quot; rel=&quot;noreferrer&quot;&gt;jsbin&lt;/a&gt;과 같은 온라인 테스트를 할 때 &quot;array 리터럴 표기법 []을(를) 사용하라&quot;는 경고가 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시공자를 사용하지 않을 이유를 찾지 못했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하는 것보다 효율성이 떨어집니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;? 아니면 나쁜 연습입니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용해야 할 합당한 이유가 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;var arr = [];&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;var arr = new Array();&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;대부분&lt;/em&gt; 사람들은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;var a = []&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://yuiblog.com/blog/2006/11/13/javascript-we-hardly-new-ya/&quot; rel=&quot;noreferrer&quot;&gt;더글러스 크록포드가 그렇게&lt;/a&gt; 말했기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그의 이유는 직관적이지 않고 일관되지 않은 행동을 포함합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;new Array()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var a = new Array(5);     // an array pre-sized to 5 elements long
var b = new Array(5, 10); // an array with two elements in it
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주의할 점은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;new Array()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;미리 지정된 숫자 요소가 &lt;em&gt;하나&lt;/em&gt;만 있는 배열을 만듭니다!&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 효율적이고 &lt;a href=&quot;https://stackoverflow.com/questions/2280285/what-does-mean-in-javascript&quot;&gt;안전&lt;/a&gt;합니다!&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 덮어쓸 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Array&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;생성자와 이상한 작업을 수행하게 만들지만, 동작을 덮어쓸 수는 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 개인적으로 항상.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구문, 그리고 마찬가지로 항상 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;{}&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신 구문&lt;/font&gt;&lt;/font&gt;&lt;code&gt;new Object()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한가지 중요한 차이점은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;항상&lt;/em&gt; 새 배열을 인스턴스화하는 반면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;new Array&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://jsfiddle.net/ASvqT/&quot; rel=&quot;noreferrer&quot;&gt;다른 개체를 만들기 위해 납치&lt;/a&gt;될 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(function () {
    &quot;use strict&quot;;
    var foo,
        bar;
    //don't do this, it's a bad idea
    function Array() {
        alert('foo');
    }
    foo = new Array();
    bar = [];
}());​
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 제가 예를 들어보면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Array&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나머지 문서 범위에는 숨겨진 기능이 있지만, 이런 문제가 발생하면 코드가 제대로 닫히지 않고 찾기가 어려울 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;sub&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;면책&lt;/strong&gt; 사항:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;범인을 납치하는 것은 좋은 생각이 아닙니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Array&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시공자&lt;/font&gt;&lt;/font&gt;&lt;/sub&gt;&lt;/p&gt;&lt;h1&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유지보수성을 위해,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열 리터럴은 대부분의 개발자들이 사용하기 때문에 더 예측 가능합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대부분의 배열 사용은 리터럴을 사용할 것이며, 코드를 다른 개발자가 사용하는 것과 일치시키는 것은 가치가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h1&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;빈 배열의 경우 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/h1&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;var ns = [];
var names = [ 'john', 'brian' ];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://jsperf.com/array-constructor-versus-literal&quot; rel=&quot;noreferrer&quot;&gt;여기&lt;/a&gt;에 나와 있는 것처럼 비어 있는 요소와 알려진 요소 몇 개에 리터럴을 사용하는 것이 배열 생성자보다 더 뚱뚱합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h1&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;알려진 크기의 배열을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;new Array(size)&lt;/code&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;크기가 알려진 경우 배열 생성기를 사용하면 성능이 크게 향상됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 이미 '정의되지 않은' 배열이 모든 값을 채우고 있음을 의미하기도 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://jsperf.com/array-filling-speed/&quot; rel=&quot;noreferrer&quot;&gt;여기&lt;/a&gt;와 같이&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;// fill an array with 100 numbers
var ns = new Array( 100 );
for ( var i = 0; i &amp;lt; 100; i++ ) {
    ns[i] = i;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 매우 &lt;a href=&quot;http://jsperf.com/array-filling-speed/2&quot; rel=&quot;noreferrer&quot;&gt;작은 어레이에도 적용&lt;/a&gt;됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니요, 실제로 빈 배열에 대해 다른 하나의 표기법보다 하나의 표기법을 사용할 이유가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 대부분의 브라우저는 다음을 사용하여 약간 더 나은 성능을 보여줍니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x = [];&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;건설자&lt;/em&gt;에게 전화하는 것 보다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특정 크기의 배열을 생성해야 하는 경우 다음을 사용해야 &lt;em&gt;합니다&lt;/em&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x = new Array(10);&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 10으로 배열을 생성할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;슬롯들&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;vararr=[]는 배열/객체 리터럴을 사용합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;vararar = new Array()는 배열/객체 생성자를 사용합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열 또는 객체를 정의하는 가장 빠른 방법은 문자 그대로입니다. 왜냐하면 생성자를 호출할 필요가 없기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var arr1 = new Array(1, 2, 3, 4);
var arr2 = [1, 2, 3, 4];

alert(arr1[0]); // 1
alert(arr2[0]); // 1

var arr3 = new Array(200);
var arr4 = [200];

alert(arr3[0]); // 'undefined'
alert(arr4[0]); // 200
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;둘 다 맞는 말입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 대부분의 사람들은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;var a = []&lt;/code&gt; &lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바스크립트에서 배열을 선언하는 세 가지 방법.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;방법 1&lt;/strong&gt;: 자바스크립트 &quot;new&quot; 키워드를 사용하여 어레이를 명시적으로 선언하여 메모리에서 어레이를 인스턴스화할 수 있습니다(즉, 생성하여 사용 가능하게 할 수 있습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Declare an array (using the array constructor)
var arlene1 = new Array();
var arlene2 = new Array(&quot;First element&quot;, &quot;Second&quot;, &quot;Last&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;방법 2&lt;/strong&gt;: 배열을 선언하는 대체 방법을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Declare an array (using literal notation)
var arlene1 = [];
var arlene2 = [&quot;First element&quot;, &quot;Second&quot;, &quot;Last&quot;];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;방법 3&lt;/strong&gt;: 자바스크립트는 특정 방법을 호출하여 간접적으로 배열을 만들 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Create an array from a method's return value
var carter = &quot;I-learn-JavaScript&quot;;
var arlene3 = carter.split(&quot;-&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;생성자가 인수로 사용할 수 있는 한계가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대부분의 시스템에서 제한은 2^16(2바이트)입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var myFreshArr = new Array(0,1,2,3 ..... 65536);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 오류가 발생합니다. 인수가 너무 많습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리터럴 []을 사용할 때는 그런 문제가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 큰 어레이를 신경쓰지 않으신다면, 원하시는 대로 사용하셔도 될 것 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;var array = [ 1, 2, 3, 4];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;설탕입니다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var array = new Array(1, 2, 3, 4);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;소금입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;왜냐하면.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;new Array()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;애매합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;올바른 생성자는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Using brackets
[element0, element1, ..., elementN]

// Using new AND a list of elements
new Array(element0, element1, ..., elementN)

// Using new AND an integer specifying the array length
new Array(arrayLength)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/11500492/what-are-the-best-practices-to-follow-when-declaring-an-array-in-javascript&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>JavaScript</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/943</guid>
      <comments>https://manysource.tistory.com/943#entry943comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:27:40 +0900</pubDate>
    </item>
    <item>
      <title>C의 포인터 크기 가져오기</title>
      <link>https://manysource.tistory.com/942</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C의 포인터 크기 가져오기&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C에서 포인터의 크기를 가져오려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;? 가리키는 값이 아닌 포인터를 저장하기 위해 메모리를 할당하려고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;임의 유형이 주어졌을 때(선택했습니다)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기에, 그러나 그것은 구체적인 예를 위해서입니다):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *p;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 표현 중 하나를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sizeof(p)
sizeof(char *)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;A로 이어짐&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같은 호출:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char **ppc = malloc(sizeof(char *));
char **ppc = malloc(sizeof(p));
char **ppc = malloc(sizeof(*ppc));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마지막 버전은 다음과 같은 유형의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ppc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변경하면 식을 통해 올바른 공간을 할당할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 효과가 있을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sizeof(void*)
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;char *ptr;
char **ptr2 = malloc(sizeof(ptr));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;목적을 달성할 수 있어야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;플랫폼이 무엇이든 간에 이 코드는 작동해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/9760113/get-size-of-pointer-in-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/942</guid>
      <comments>https://manysource.tistory.com/942#entry942comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:27:32 +0900</pubDate>
    </item>
    <item>
      <title>2-D 배열 앨리어싱 시 예기치 않은 스트렐렌 최적화</title>
      <link>https://manysource.tistory.com/941</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2-D 배열 앨리어싱 시 예기치 않은 스트렐렌 최적화&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 내 코드가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;string.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;

typedef char BUF[8];

typedef struct
{
    BUF b[23];
} S;

S s;

int main()
{
    int n;

    memcpy(&amp;amp;s, &quot;1234567812345678&quot;, 17);

    n = strlen((char *)&amp;amp;s.b) / sizeof(BUF);
    printf(&quot;%d\n&quot;, n);

    n = strlen((char *)&amp;amp;s) / sizeof(BUF);
    printf(&quot;%d\n&quot;, n);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;gcc 8.3.0 또는 8.2.1을 제외한 모든 최적화 레벨에서 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-O0&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 이 산출물들&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0 2&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 예상하고 있던 때에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;2 2&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 컴파일러는 다음과 같이 결정했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strlen&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에 국한됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;b[0]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 분할되는 값과 같거나 초과할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 제 코드의 버그인가요, 컴파일러의 버그인가요?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 표준에 명확하게 명시되어 있지는 않지만, 포인터 프로번스에 대한 주류 해석은 어떤 물체에 대해서도&lt;/font&gt;&lt;/font&gt;&lt;code&gt;X&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 강령&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(char *)&amp;amp;X&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전체적으로 반복할 수 있는 포인터를 생성해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;X&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;-- 이 개념은 비록 유지되야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;X&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내부 구조로 하위 arrays을 갖게 됩니다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(보너스 질문, 이 특정 최적화를 끄는 gcc 플래그가 있습니까?)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이거 확인해보니까 이거랑 같이.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-O1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;gcc 8.3&lt;/em&gt;에 있어서 방금 &lt;a href=&quot;https://gcc.gnu.org/onlinedocs/gcc-4.9.1/gcc/Optimize-Options.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;여기&lt;/a&gt; gcc 최적화 플래그 목록을 열고 하나씩 실험을 시작했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 &lt;strong&gt;희소 조건부&lt;/strong&gt; 상수 전파만 비활성화하는 것으로 나타났습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-fno-tree-ccp&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제를 사라지게 만들었습니다(오 운이 좋네요, 하나씩 테스트해도 결과가 나오지 않으면 몇 개의 플래그를 테스트하려고 계획했습니다).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 다음에 저는 다음으로 바꿨습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-O2&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지우지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-fno-tree-ccp&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;깃발. 또 재현이 됐어요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;오케이&quot; 라고 말하고 추가적인 테스트를 시작했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-O2&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;flags. 단일 &lt;strong&gt;Value Range Propagation&lt;/strong&gt;(값 범위 전파)을 비활성화하면 추가적으로 의도된 결과를 초래하는 것으로 나타났습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;2 2&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;산출량.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음에 그걸 먼저 지웠습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-fno-tree-ccp&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 다시 번식하기 시작했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-O2&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-O2 -fno-tree-ccp -fno-tree-vrp&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 프로그램이 기대한 대로 작동하도록 하기 위해서입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 플래그를 지우지 않고 다음으로 전환했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-O3&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제가 재현되지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 gcc 8.3의 이 두 가지 최적화 기술 모두 이러한 이상한 동작을 초래합니다(내부적으로 일반적인 것을 사용할 수도 있음).&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;트리에서의 희박 조건부 상수 전파&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;트리에서의 값 범위 전파&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 거기서 무슨 일이 일어나고 있는지, 왜 일어나고 있는지, 다른 사람이 설명할 수 있을지도 모릅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 확실히 특정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-fno-tree-ccp -fno-tree-vrp&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;플래그를 지정하여 코드가 예상대로 작동하도록 이러한 최적화 기법을 비활성화합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;&quot;일을 열심히 할수록 운이 좋아집니다.&quot;&lt;/em&gt; – Samuel Goldwyn&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편집&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;@KamilCuk&lt;/em&gt;이 문제의 댓글에서 언급했듯이,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-fno-builtin-strlen&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 의도된 동작으로 이어지므로 데드 코드를 차단하고 가능한 식 값을 정적으로 결정하고 프로그램을 통해 상수를 전파하는 기본 &lt;em&gt;제공&lt;/em&gt;과 &lt;em&gt;다른&lt;/em&gt; 최적화를 결합한 &lt;em&gt;컴파일러&lt;/em&gt; 버그가 있을 가능성이 높습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컴파일러는 &lt;strong&gt;구현&lt;/strong&gt; 시 문자열 길이를 &lt;strong&gt;데드&lt;/strong&gt; 코드(정수 분할 및/또는 &lt;strong&gt;2차원 배열&lt;/strong&gt;과 결합하여)로 결정하고 컴파일 시 0으로 계산하는 것을 가장 잘못 고려했을 것이라고 생각했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 저는 이론을 확인하고 버그의 다른 &quot;참가자&quot;들을 제거하기 위해 코드를 조금 가지고 놀기로 결정했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 생각을 확인해 준 행동의 아주 작은 예에 도달했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int main()
{
    // note that &quot;7&quot; - inner arrays size, you can put any other number here
    char b[23][7]; // local variable, no structs, no typedefs
    memcpy(&amp;amp;b[0][0], &quot;12345678123456781234&quot;, 21);

    printf(&quot;%d\n&quot;, strlen(&amp;amp;b[0][0]) / 8); // greater than that &quot;7&quot; !!!
    printf(&quot;%d\n&quot;, strlen(&amp;amp;b[0][0]) / 7);
    printf(&quot;%d\n&quot;, strlen(&amp;amp;b[0][0]) / 6); // less than that &quot;7&quot; !!!
    printf(&quot;%d\n&quot;, strlen(&amp;amp;b[0][0])); // without division
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;0&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;0&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;3&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;20&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우리는 &lt;em&gt;이것&lt;/em&gt;을 gcc의 버그라고 생각할 수 있을 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;생각합니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-fno-builtin-strlen&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 최적화 레벨에만 적용되고 내장되어 있기 때문에 문제에 대한 더 나은 해결책입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strlen&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특히 당신의 프로그램이 사용하지 않는 경우에는, 덜 강력한 최적화 기술인 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strlen()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;많이. 그래도.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-fno-tree-ccp -fno-tree-vrp&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 옵션이기도 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구조를 정의하는 방식은 처음에는 배열 유형을 만들어 본 적이 없는 것 같아서 혼란스러웠습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기능에 전달하려고 하면 값을 전달한다고 생각할 수 있지만 실제로는 기준을 전달할 수 있기 때문에 그런 식으로 하는 것도 위험할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스타일에 상관없이, 만약 내가 그런 타입을 만들어야 한다면, 나는 다음과 같은 것을 할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//typedef char BUF[8];

//do it this way instead
typedef struct
{
    char x[8];
} BUF;

typedef struct
{
    BUF b[23];
} S;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 식으로 정의하면 어느 쪽이든 기대 값을 반환합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://godbolt.org/z/xMTYLQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;여기&lt;/a&gt;서 보세요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컴파일러가 메모리 레이아웃을 결정하는 방식에 따라 영향을 받을 수 있는 몇 가지 문제가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    n = strlen((char *)&amp;amp;s.b) / sizeof(BUF);
    printf(&quot;%d\n&quot;, n);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위 코드에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;s.b&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 8자 배열로 구성된 23개 엔트리 배열입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 단지 언급할 때.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;s.b&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;23 바이트 배열의 첫 번째 항목(그리고 8 문자 배열의 첫 번째 바이트)의 주소를 가져옵니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드에 의하면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;s.b&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 이것은 배열의 주소를 묻는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표지 아래에서 컴파일러는 일부 로컬 스토리지를 생성하여 어레이의 주소를 저장하고 로컬 스토리지의 주소를 제공할 가능성이 높습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strlen&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 가지 가능한 해결책이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    n = strlen((char *)s.b) / sizeof(BUF);
    printf(&quot;%d\n&quot;, n);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    n = strlen((char *)&amp;amp;s.b[0]) / sizeof(BUF);
    printf(&quot;%d\n&quot;, n);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 또한 당신의 프로그램을 실행하고 그 문제를 시연하려고 했지만, 내가 가지고 있는 gcc 버전과 clang 둘다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-O&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;옵션은 여전히 당신이 기대한 대로 작동했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 x86_64-pc-linux-gnu)에서 clang 버전 9.0.0-2와 gcc 버전 9.2.1을 실행하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 gcc의 버그일 수도 있다고 생각합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;몇 가지 해결책을 찾았지만, 가장 쉬운 것은 noinline 속성으로 프록시 함수를 만드는 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 다른 최적화를 놓치는 것이 아니라 스트렌과 관련된 최적화를 놓치는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int  __attribute__ ((noinline)) _strlen(char *x) { return strlen(x); }
#define strlen _strlen

int main(){
    int n;

    memcpy(&amp;amp;s, &quot;1234567812345678&quot;, 17);
    n = strlen((char *)&amp;amp;s.b) / sizeof(BUF);
    printf(&quot;%d\n&quot;, n);

    n = strlen((char *)&amp;amp;s) / sizeof(BUF);
    printf(&quot;%d\n&quot;, n);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컴파일러 탐색기에서 출력을 볼 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://godbolt.org/z/U2L9us&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://godbolt.org/z/U2L9us&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드에 오류가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; memcpy(&amp;amp;s, &quot;1234567812345678&quot;, 17);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 위험합니다. b로 시작하는 s는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; memcpy(&amp;amp;s.b, &quot;1234567812345678&quot;, 17);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두번째 strlen()에도 오류가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;n = strlen((char *)&amp;amp;s) / sizeof(BUF);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;n = strlen((char *)&amp;amp;s.b) / sizeof(BUF);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;s.b 문자열은 올바르게 복사된 경우 17자 길이여야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구조물이 정렬되어 있는 경우 메모리에 어떻게 저장되어 있는지 확실하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;s.b에 실제로 복사된 17자가 포함되어 있는지 확인했습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러므로 스트렐렌(s.b)은 17을 보여야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;%d이(가) 정수이고 변수 n은 정수로 선언되므로 printf에는 정수 숫자만 표시됩니다. 크기는 (BUF) 8이어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 17을 8로 나눈 값(17/8)은 n이 정수로 선언됨에 따라 2를 인쇄해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;memcpy는 s로 데이터를 복사하고 s.b로 복사하지 않기 위해 사용되었기 때문에 메모리 정렬과 관련이 있다고 생각합니다. 64비트 컴퓨터라고 가정하면 하나의 메모리 주소에 8자가 있을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 어떤 사람이 malloc(1)을 불렀다고 가정해 봅시다. 다음 &quot;자유 공간&quot;이 정렬되지 않은 경우...&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 번째 strlen 호출은 문자열 복사가 s.b 대신 struct에 수행되었기 때문에 정확한 번호를 보여줍니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/58759591/unexpected-optimization-of-strlen-when-aliasing-2-d-array&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/941</guid>
      <comments>https://manysource.tistory.com/941#entry941comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:27:26 +0900</pubDate>
    </item>
    <item>
      <title>조건문과 3항 연산자를 사용하지 않고 C에서 최대 3개의 숫자 찾기</title>
      <link>https://manysource.tistory.com/940</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;조건문과 3항 연산자를 사용하지 않고 C에서 최대 3개의 숫자 찾기&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 사용자가 제공하는 최대 3개의 번호를 찾아야 하지만 몇 가지 제한이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;조건문은 사용할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래와 같이 ternary operator를 사용해 보았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;max=(a&amp;gt;b?a:b)&amp;gt;c?(a&amp;gt;b?a:b):c
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 역시 삼원 연산자를 사용하는 것은 제한적입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 어떻게 하는지 전혀 모르겠어요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;부울 식에서 단락의 이점 활용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int max(int a, int b, int c)
{
     int m = a;
     (m &amp;lt; b) &amp;amp;&amp;amp; (m = b); //these are not conditional statements.
     (m &amp;lt; c) &amp;amp;&amp;amp; (m = c); //these are just boolean expressions.
     return m;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;설명:&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;부울에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AND&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;등의 조작&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x &amp;amp;&amp;amp; y&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, y는 &lt;strong&gt;다음과 같은 경우&lt;/strong&gt;에만 평가됩니다.&lt;/font&gt;&lt;/font&gt; &lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사실입니다. 만약에.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇다면 거짓입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;y&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;평가되지 않습니다. 평가하지 않아도 추론할 수 있는 전체 표현이 거짓이기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;y&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 부울 식의 모든 피연산자를 계산하지 않고 부울 식의 값을 추론할 수 있는 경우 이를 단락이라고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위 코드에 이 원칙을 적용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;처음에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;m&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 만약에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(m &amp;lt; b)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사실이라면, 그 말은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;b&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보다 큼&lt;/font&gt;&lt;/font&gt;&lt;code&gt;m&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(실제로는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;), 그래서 두 번째 부분 표현식&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(m = b)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;평가되고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;m&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로 설정됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;b&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 만약에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(m &amp;lt; b)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;false입니다. 그러면 두 번째 하위 표현식은 평가되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;m&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;남아있을 것&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(보다 큰 값)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;b&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비슷한 방식으로 두 번째 식을 평가합니다(다음 줄에).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한마디로 표현을 읽을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(m &amp;lt; x) &amp;amp;&amp;amp; (m = x)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;m&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만일의 경우에만&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt; &lt;code&gt;m&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보다 작음&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(m &amp;lt; x)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사실입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드를 이해하는 데 도움이 되기를 바랍니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테스트 코드:&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int main() {
        printf(&quot;%d\n&quot;, max(1,2,3));
        printf(&quot;%d\n&quot;, max(2,3,1));
        printf(&quot;%d\n&quot;, max(3,1,2));
        return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출력:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;3
3
3
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구현을 기록합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;max&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 평가된 식이 사용되지 않으므로 경고를 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;prog.c:6: 경고: 계산된 값이 사용되지 않음&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;prog.c:7: 경고: 계산된 값이 사용되지 않음&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 (무해) 경고를 방지하기 위해 다음을(를) 구현할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;max&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int max(int a, int b, int c)
{
     int m = a;
     (void)((m &amp;lt; b) &amp;amp;&amp;amp; (m = b)); //these are not conditional statements.
     (void)((m &amp;lt; c) &amp;amp;&amp;amp; (m = c)); //these are just boolean expressions.
     return m;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;효과는 이제 &lt;a href=&quot;https://stackoverflow.com/questions/689677/casting-unused-return-values-to-void/7160837#7160837&quot;&gt;부울 식을 &lt;/a&gt;에&lt;a href=&quot;https://stackoverflow.com/questions/689677/casting-unused-return-values-to-void/7160837#7160837&quot;&gt; 캐스팅&lt;/a&gt;한다는 것이며,&lt;a href=&quot;https://stackoverflow.com/questions/689677/casting-unused-return-values-to-void/7160837#7160837&quot;&gt; 이는 경고&lt;/a&gt;를 억제하는 원인이 &lt;a href=&quot;https://stackoverflow.com/questions/689677/casting-unused-return-values-to-void/7160837#7160837&quot;&gt;됩니다&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정수를 다룬다고 가정하면 다음은 어떻습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#define max(x,y) (x ^ ((x ^ y) &amp;amp; -(x &amp;lt; y)))
int max3(int x, int y, int z) {
    return max(max(x,y),z);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;조건부 실행을 피하기 위한 또 다른 대안을 추가하는 것입니다(사용할 수 있는 대안은 아니지만 솔루션 집합에서 누락된 것처럼 보임).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int max( int a, int b, int c ) {
   int l1[] = { a, b };
   int l2[] = { l1[ a&amp;lt;b ], c };
   return l2[ l2[0] &amp;lt; c ];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 방법은 대부분의 다른 방법과 마찬가지로 int로 변환할 때 부울 식의 결과가 0 또는 1을 산출한다는 사실을 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 값의 단순화된 버전은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int max( int a, int b ) {
   int lookup[] { a, b };
   return lookup[ a &amp;lt; b ];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 표현이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&amp;lt;b&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우리가 돌아오는게 맞습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;b&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, lookup array의 첫 번째 인덱스에 신중하게 저장됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 그 표현이 거짓이 된다면, 우리는 다시 돌아옵니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소로 저장된&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Lookup Array의.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 구성 요소로 사용하면 다음과 같이 말할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int max( int a, int b, int c ) {
   int lookup[ max(a,b), c ];
   return lookup[ max(a,b) &amp;lt; c ];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내부로 두 번째 호출을 피하면 위의 코드로 사소한 변환이 가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;max&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에 이미 저장된 결과를 사용하여&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lookup[0]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 원래의 전화를 연결하는 것.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;max(int,int)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(이 부분은 결론에 도달하기 전에 측정해야 하는 또 다른 증거일 뿐입니다. 마지막 편집 참조)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 실제로 사용할 수 있는 것은...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/7074010/find-maximum-of-three-number-in-c-without-using-conditional-statement-and-ternary/7074101#7074101&quot;&gt;아마도&lt;/a&gt; @FooBaa의 것은 매크로가 아닌 인라인 함수를 사용하도록 수정되었을 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 옵션은 이 옵션 또는 @&lt;a href=&quot;https://stackoverflow.com/questions/7074010/find-maximum-of-three-number-in-c-without-using-conditional-statement-and-ternary/7074112#7074112&quot;&gt;MSN&lt;/a&gt;의 옵션 중 하나입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수용된 답변에 존재하지 않는 이 세 가지 해결책의 공통분모는 그것들이 단지 다음의 통사적 구조를 피하지 않는다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 3항 연산자.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;?:&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, &lt;em&gt;하지만&lt;/em&gt; 분기를 아예 피하게 되고 성능에 영향을 미칠 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CPU의 분기 &lt;em&gt;예측기&lt;/em&gt;는 분기가 없을 때 놓칠 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성능을 고려할 때는 먼저 측정을 하고 생각을 합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 실제로 2-way max에 대한 몇 가지 다른 옵션을 구현했고, 컴파일러에 의해 생성된 코드를 분석했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 세 가지 솔루션은 모두 동일한 어셈블리 코드를 생성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int max( int a, int b ) { if ( a &amp;lt; b ) return b; else return a; }
int max( int a, int b ) { return (a &amp;lt; b? b : a ); }
int max( int a, int b ) {
   (void)((a &amp;lt; b) &amp;amp;&amp;amp; (a = b));
   return a;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 놀라운 일이 아닙니다. 세 가지 모두가 정확히 동일한 작업을 나타내기 때문입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;흥미로운 정보는 생성된 코드에 분기가 포함되어 있지 않다는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구현은 다음과 같이 간단합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;cmovge&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;명령(인텔 x64 플랫폼에서 g++로 테스트 수행):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;movl    %edi, %eax       # move a into the return value
cmpl    %edi, %esi       # compare a and b
cmovge  %esi, %eax       # if (b&amp;gt;a), move b into the return value
ret
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;조건부 이동 지침에 따라 분기 가능성을 피할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 솔루션들 중 어떤 것도 분기점을 가지고 있지 않지만, 그들 모두는 이것보다 더 많은 CPU 명령어로 번역되며, 결국 우리는 항상 &lt;em&gt;간단한 코드를 작성&lt;/em&gt;하고 컴파일러가 우리를 위해 그것을 최적화하도록 해야 한다고 안심시킵니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;업데이트:&lt;/strong&gt; 4년 후에 이것을 보면 두 개 이상의 값이 같아지면 크게 실패한다는 것을 봅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;교체&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;타고&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;gt;=&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동작은 변경되지만 문제는 해결되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아직 회수가 가능할 수도 있으니 아직 삭제하지는 않겠지만, 생산코드에는 이것을 사용하지 마세요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;좋아요, 여기 제 거예요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int max3(int a, int b, int c)
{
    return a * (a &amp;gt; b &amp;amp; a &amp;gt; c) +
           b * (b &amp;gt; a &amp;amp; b &amp;gt; c) +
           c * (c &amp;gt; a &amp;amp; c &amp;gt; b);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의 사용에 유의하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보다는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;조건부 코드를 피합니다; 그것은 사실에 의존합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;항상 0 또는 1을 산출합니다. (에 대해 생성된 코드는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a &amp;gt; b&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;조건부 점프를 포함할 수 있지만 C에서는 보이지 않습니다.)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;int fast_int_max(int a, int b)
{
    int select= -(a &amp;lt; b);
    unsigned int b_mask= select, a_mask= ~b_mask;

    return (a&amp;amp;a_mask)|(b&amp;amp;b_mask);
}

int fast_int_max3(int a, int b, int c)
{
    return fast_int_max(a, fast_int_max(b, c));
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;부울 값 연산자(&amp;lt;, &amp;amp; &amp;amp; 등 포함)는 일반적으로 기계 코드 수준의 조건부 연산으로 변환되므로 도전 정신을 수행하지 마십시오.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 합리적인 컴파일러가 조건부 점프 없이 산술 명령어로만 번역하는 솔루션이 있습니다(길이가 int보다 비트 수가 많고 길이가 64비트라고 가정하면).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아이디어는 &quot;m&quot;이 b - a의 부호 비트를 캡처하여 복제한다는 것입니다. som은 모든 1비트(a &amp;gt; b인 경우) 또는 모든 0비트(a &amp;lt;= b인 경우)입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;롱은 오버플로우를 방지하기 위해 사용된다는 점에 유의합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 이유에서인지 b-a가 오버/언더플로우되지 않는다는 것을 알고 있다면 long을 사용할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int max(int a, int b)
{
    long d = (long)b - (long)a;
    int m = (int)(d &amp;gt;&amp;gt; 63);
    return a &amp;amp; m | b &amp;amp; ~m;
}

int max(int a, int b, int c)
{
    long d;
    int m;
    d = (long)b - (long)a;
    m = (int)(d &amp;gt;&amp;gt; 63);
    a = a &amp;amp; m | b &amp;amp; ~m;
    d = (long)c - (long)a;
    m = (int)(d &amp;gt;&amp;gt; 63);
    return a &amp;amp; m | c &amp;amp; ~m;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;조건 없음.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;깁스만 한 거죠.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;완벽한 해결책.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int abs (a) { return (int)((unsigned int)a); }
int max (a, b) { return (a + b + abs(a - b)) / 2; }
int min (a, b) { return (a + b - abs(a - b)) / 2; }


void sort (int &amp;amp; a, int &amp;amp; b, int &amp;amp; c)
{
   int max = max(max(a,b), c);
   int min = min(min(a,b), c);
   int middle = middle = a + b + c - max - min;
   a = max;
   b = middle;
   c = min;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 코드를 사용하여 두 가지 중에서 가장 큰 것을 찾을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;max{a,b} = abs(a-b)/2 + (a+b)/2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 이 값을 다시 사용하여 세 번째 숫자를 찾습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;max{a,b,c} = max(a,max(b,c))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;양수의 경우에도 적용되므로 음수의 경우에도 적용되도록 변경할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;#include &quot;stdafx.h&quot;
#include &amp;lt;iostream&amp;gt;
int main()
{       
        int x,y,z;
        scanf(&quot;%d %d %d&quot;, &amp;amp;x,&amp;amp;y, &amp;amp;z);
        int max = ((x+y) + abs(x-y)) /2;
        max = ((max+z) + abs(max-z)) /2;
        printf(&quot;%d &quot;, max);
        return 0;
}            
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Conditional_%28computer_programming%29&quot; rel=&quot;nofollow&quot;&gt;조건문&lt;/a&gt;은 없고 루프와 과제만 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 다른 사람들의 대답과는 전혀 다른 것 :)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;while (a &amp;gt; b)
{
    while (a &amp;gt; c)
    {
        tmp = a;
        goto finish;
    }
    tmp = c;
    goto finish;
}
while (b &amp;gt; c)
{
    tmp = b;
    goto finish;
}
tmp = c;
finish: max = tmp;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;int compare(int a,int b, intc)
{
    return (a &amp;gt; b ? (a &amp;gt; c ? a : c) : (b &amp;gt; c ? b : c))
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이거 먹어봐요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &quot;stdio.h&quot;
main() {
    int a,b,c,rmvivek,arni,csc; 
    printf(&quot;enter the three numbers&quot;);
    scanf(&quot;%d%d%d&quot;,&amp;amp;a,&amp;amp;b,&amp;amp;c);
    printf(&quot;the biggest value is %d&quot;,(a&amp;gt;b&amp;amp;&amp;amp;a&amp;gt;c?a:b&amp;gt;c?b:c));
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;max =  a &amp;gt; b ? ( a &amp;gt; c ? a : c ) : ( b &amp;gt; c ? b : c ) ;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/7074010/find-maximum-of-three-number-in-c-without-using-conditional-statement-and-ternar&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/940</guid>
      <comments>https://manysource.tistory.com/940#entry940comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:27:18 +0900</pubDate>
    </item>
    <item>
      <title>python에서 두 변수가 동일한 개체를 참조하는지 비교</title>
      <link>https://manysource.tistory.com/939</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;python에서 두 변수가 동일한 개체를 참조하는지 비교&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 변수가 동일한 개체를 참조하는지 확인하는 방법은?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;x = ['a', 'b', 'c']
y = x                 # x and y reference the same object
z = ['a', 'b', 'c']   # x and z reference different objects
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 그런 거지.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x is y&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;돌아온다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;True&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;왜냐하면 그것은 그 동안 같은 물체이기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x is z&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;돌아온다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;False&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서로 다른 개체(동일한 데이터를 보유하는 경우)이기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 가지 해결책이 맞는 동안&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x is z&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;id(x) == id(z)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이미 게시되어 있습니다, python의 구현 세부 사항을 지적하고 싶습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Python은 정수를 객체로 저장하며, 최적화를 위해 시작할 때(-5~256) 작은 정수를 많이 생성하고 작은 값을 가진 정수를 포함하는 모든 변수를 이러한 미리 초기화된 객체로 포인팅합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://www.laurentluce.com/posts/python-integer-objects-implementation/&quot; rel=&quot;noreferrer&quot;&gt;추가 정보&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 같은 작은 숫자(-5 ~ 256)로 초기화된 정수 개체의 경우 두 개체가 동일한지 확인하면 true로 반환됩니다(&lt;em&gt;&lt;strong&gt;ON C-Pyhon&lt;/strong&gt;&lt;/em&gt;, 제가 알기로는 이것이 &lt;strong&gt;구현 세부&lt;/strong&gt; 사항입니다). 큰 숫자의 경우 한 개체가 다른 개체에서 초기화된 경우에만 true로 반환됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; i = 13
&amp;gt; j = 13
&amp;gt; i is j
True

&amp;gt; a = 280
&amp;gt; b = 280
&amp;gt; a is b
False

&amp;gt; a = b
&amp;gt; a
280
&amp;gt; a is b
True
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://docs.python.org/3/library/functions.html#id&quot; rel=&quot;noreferrer&quot;&gt;id()&lt;/a&gt;를 사용하여 각 변수 이름이 참조하는 고유 개체를 확인할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [1]: x1, x2 = 'foo', 'foo'

In [2]: x1 == x2
Out[2]: True

In [3]: id(x1), id(x2)
Out[3]: (4509849040, 4509849040)

In [4]: x2 = 'foobar'[0:3]

In [5]: x2
Out[5]: 'foo'

In [6]: x1 == x2
Out[6]: True

In [7]: x1 is x2
Out[7]: False

In [8]: id(x1), id(x2)
Out[8]: (4509849040, 4526514944)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;y is x&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;될 것이다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;True&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;y is z&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;될 것이다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;False&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 문서에서 가져온 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;python.org : &quot;모든 개체는 동일성, 유형 및 값을 가집니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한 번 생성된 개체의 ID는 변경되지 않으며, 개체를 메모리에 저장된 개체의 주소로 생각할 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;'is' 연산자는 두 개체의 ID를 비교합니다. id() 함수는 자신의 ID를 나타내는 정수를 반환합니다.&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;값을 변경할 때마다 개체가 ID 변경에 따라 다시 생성되는 것으로 보입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;x=3 선 다음 x=3.14 선은 오차를 주지 않으며 x에 대한 다양한 ID, 유형 및 값을 제공합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 시각적 피드백을 정말 좋아합니다. 그래서 가끔 http://www.pythontutor.com/visualize.html#mode=edit 을 열어 메모리가 어떻게 할당되는지, 무엇이 무엇을 참조하는지 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/17GV8.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/17GV8.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 답장은 시각화에 관한 것이라 멋진 gif를 추가했습니다..&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/5445080/compare-if-two-variables-reference-the-same-object-in-python&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Python</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/939</guid>
      <comments>https://manysource.tistory.com/939#entry939comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:27:09 +0900</pubDate>
    </item>
    <item>
      <title>Angular 2는 템플릿 기반 형식으로 입력할 수 없습니다.</title>
      <link>https://manysource.tistory.com/938</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Angular 2는 템플릿 기반 형식으로 입력할 수 없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;템플릿 기반 Blueprint를 사용하는 양식이 있으므로 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form #myForm=&quot;ngForm&quot; ngSubmit=&quot;save(myForm.value, myForm.isValid)&quot;&amp;gt;
  &amp;lt;input #name=&quot;ngModel&quot; [(ngModel)]=&quot;name&quot;&amp;gt;
  &amp;lt;button type=&quot;submit&quot;&amp;gt;Submit form&amp;lt;/button&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 어떻게 하면 ENTER가 양식을 제출하지 못하게 할 수 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;양식 내부의 사용자 지정 ENTER 동작을 방해하며, 실수로 입력 입력을 누를 경우에도 이를 원하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주변을 살펴보니 오래된 앵귤러 1 답변과 표준 자바스크립트 답변도 발견했지만 앵귤러 2에는 이런 것이 이미 내장되어 있을 것 같지만 찾을 수 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 그렇지 않다면, 이것을 달성하는 가장 좋은 방법은 무엇일까요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 간단한 것을 사용할 수 있는 것으로 나타났습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form (keydown.enter)=&quot;$event.preventDefault()&quot;&amp;gt;&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ENTER에서 양식이 제출되지 않도록 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 늦었다는 것은 알지만, 이에 대한 적절한 해결책이 있다면,&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;lt; 를 사용하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;button&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;gt; 그럼 정의하기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;button type=&quot;button&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정의하지 않거나 type=&quot;submit&quot;로 정의하지 않으면 양식이 제출되기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하는 경우에도 동일&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정의하기도 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;button&quot;&amp;gt; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 정도면 될 겁니다&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;-- 편집된 As @Chrillewoodz&lt;/strong&gt; 코멘트.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제출/클릭 시 특정 프로세스를 수행하고자 할 경우 클릭 이벤트를 버튼에 추가할 수 있으며 원하는 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각도 파일의 양식 태그를 원할 경우 &lt;a href=&quot;https://angular.io/api/core/ViewChild&quot; rel=&quot;noreferrer&quot;&gt;@ViewChild&lt;/a&gt;를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;입력 키가 텍스트 영역에서 작동하도록 허용하되 양식을 제출하지 못하도록 하려면 다음과 같이 수정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML 템플릿에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form (keydown.enter)=&quot;handleEnterKeyPress($event)&quot;&amp;gt;...&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;뒤에 있는 .ts 코드의 컴포넌트 클래스에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;handleEnterKeyPress(event) {
    const tagName = event.target.tagName.toLowerCase();
    if (tagName !== 'textarea') {
      return false;
    }
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각도: 8.2.11&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;div101&quot;&amp;gt;
  &amp;lt;div class=&quot;card col-md-10&quot;&amp;gt;
    &amp;lt;form [formGroup]=&quot;postForm&quot; (keydown.enter)=&quot;$event.preventDefault()&quot; (ngSubmit)=&quot;onSubmit()&quot;&amp;gt;
      &amp;lt;br /&amp;gt;
      &amp;lt;div class=&quot;form-group&quot;&amp;gt;
        &amp;lt;label class=&quot;col-md-3&quot;&amp;gt;Name&amp;lt;/label&amp;gt;
        &amp;lt;input class=&quot;col-md-12 form-control&quot; type=&quot;text&quot; formControlName=&quot;Name&quot; required&amp;gt;
      &amp;lt;/div&amp;gt;

      &amp;lt;div class=&quot;form-group&quot;&amp;gt;
        &amp;lt;label class=&quot;col-md-4&quot;&amp;gt;Date of Birth&amp;lt;/label&amp;gt;
        &amp;lt;input type=&quot;text&quot; placeholder=&quot;Date of Birth&quot; class=&quot; col-md-12 form-control&quot; formControlName=&quot;DateofBirth&quot;
          required bsDatepicker&amp;gt;
      &amp;lt;/div&amp;gt;

      &amp;lt;div class=&quot;form-group&quot;&amp;gt;
        &amp;lt;label class=&quot;col-md-3&quot;&amp;gt;Mobile No&amp;lt;/label&amp;gt;
        &amp;lt;input class=&quot;col-md-12 form-control&quot; type=&quot;text&quot; formControlName=&quot;MobileNo&quot; required&amp;gt;
      &amp;lt;/div&amp;gt;


      &amp;lt;div class=&quot;form-group&quot;&amp;gt;
        &amp;lt;label for=&quot;SelectCountry&quot; class=&quot;col-md-3&quot;&amp;gt;Country&amp;lt;/label&amp;gt;
        &amp;lt;select class=&quot;col-md-12 form-control&quot; formControlName=&quot;Country&quot; (change)=&quot;onChangeCountry($event)&quot;&amp;gt;
          &amp;lt;option *ngFor=&quot;let country of country; let i = index&quot; value=&quot;{{i}}&quot;&amp;gt;{{country.name}}&amp;lt;/option&amp;gt;
        &amp;lt;/select&amp;gt;
      &amp;lt;/div&amp;gt;


      &amp;lt;div class=&quot;form-group&quot;&amp;gt;
        &amp;lt;button type=&quot;submit&quot; (click)=&quot;Save()&quot; [disabled]=&quot;!postForm.valid&quot; class=&quot;btn btn-success&quot;&amp;gt;Submit&amp;lt;/button&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/form&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;용도:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form (keydown.enter)=&quot;$event.preventDefault()&quot; (keydown.shift.enter)=&quot;$event.preventDefault()&quot;&amp;gt;&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 태그와 이 태그에 있는 내용이 &lt;strong&gt;enter&lt;/strong&gt;와 &lt;strong&gt;shift&lt;/strong&gt; +&lt;strong&gt; enter&lt;/strong&gt;를 제출하는 것을 방지합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어,&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저에겐 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div name = &quot;example&quot; (keydown.shift.enter)=&quot;$event.preventDefault()&quot; (keydown.enter)=&quot;$event.preventDefault()&quot; ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 이후에는 이 예제 div의 모든 것이 &lt;strong&gt;entry&lt;/strong&gt;와 &lt;strong&gt;shift&lt;/strong&gt; +&lt;strong&gt; entry&lt;/strong&gt;를 제출하는 것을 막습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;키 조합에 대한 자세한 정보: https://alligator.io/angular/binding-keyup-keydown-events/ #키&lt;a href=&quot;https://alligator.io/angular/binding-keyup-keydown-events/#key-combinations&quot; rel=&quot;nofollow noreferrer&quot;&gt; 조합&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 제게 도움이 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제출하는 역할을 해야 하는 버튼은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;type=&quot;button&quot;&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 단추는 있어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(click)=&quot;onSubmit()&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;lt;- 호출할 메서드&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제거할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(ngSubmit)=&quot;onSubmit()&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;부터&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;form [formGroup]=&quot;form&quot; (ngSubmit)=&quot;onSubmit()&quot;&amp;gt;&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제거할 때 부작용이 있는지 잘 모르겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(ngSubmit)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;형식상으로는&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;BTW: 나는 그것을 관찰했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form (keydown.enter)=&quot;$event.preventDefault()&quot; (keydown.shift.enter)=&quot;$event.preventDefault()&quot;&amp;gt;&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자 정의 검증자를 사용하지 않도록 설정했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Angular 6.x+ 특정 입력에 입력되지 않도록 하려면 다음 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;text&quot; (keydown)=&quot;$event.keyCode == 13 ? $event.preventDefault() : null&quot;&amp;gt;

&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동일한 문제가 있었으므로 다음과 같은 도움이 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;button type=&quot;submit&quot; [disabled]=&quot;!myForm.valid&quot;&amp;gt;Save&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각10&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$event.preventDefault()가 작동하지 않았습니다. $event.stopPropagation이 작동했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;바꾸다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;button type=&quot;submit&quot; (click)=&quot;submit()&quot;&amp;gt;Submit&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;button type=&quot;button&quot; (click)=&quot;submit()&quot;&amp;gt;Submit&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/angular/angular/issues/12643&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://github.com/angular/angular/issues/12643&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지시어를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-typescript prettyprint-override&quot;&gt;&lt;code&gt;@Directive({
  selector: '[appNoEnterSubmit]'
})
export class NoEnterSubmitDirective {
  
  @HostListener('keydown', ['$event'])
  keyEvent(event: KeyboardEvent) {
    // Deactivates submit on &quot;Enter&quot; in form fields.
    // Allows &quot;Enter&quot; on buttons, links and text areas.
    if (event.key == 'Enter' &amp;amp;&amp;amp; !event.ctrlKey &amp;amp;&amp;amp; !event.altKey &amp;amp;&amp;amp;
      !(event.target instanceof HTMLButtonElement || event.target instanceof HTMLLinkElement || event.target instanceof HTMLTextAreaElement)) {
      event.preventDefault();
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;용도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;form [formGroup]=&quot;form&quot; appNoEnterSubmit&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/40653758/angular-2-prevent-enter-from-submitting-in-template-driven-form&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>angular</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/938</guid>
      <comments>https://manysource.tistory.com/938#entry938comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:27:02 +0900</pubDate>
    </item>
    <item>
      <title>오류: 작업 ':app:clean'에 대해 실행에 실패했습니다.파일을삭제할수없습니다.</title>
      <link>https://manysource.tistory.com/937</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오류: 작업 ':app:clean'에 대해 실행에 실패했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일을삭제할수없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Android Studio Gradle 프로젝트(주로 Kotlin 코드 포함)를 재구축하려고 하는데, 작업이 시작되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UnableToDeleteFileException&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;청소/재시공 과정 중:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Execution failed for task ':app:clean'.
&amp;gt; Unable to delete file: C:\Users\User\KotlinGameEngine\app\build\intermediates\exploded-aar\com.android.support\appcompat-v7\23.0.1\jars\classes.jar
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트의 패키지 구조를 변경하려고 시도한 후부터 이런 일이 발생하기 시작했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아쉽게도 안드로이드 스튜디오를 통해 리팩토링을 하기보다는 소스 폴더의 이름을 바꾸고 이동하는 방식으로 진행했는데, 이는 잘못된 생각이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 하루 종일 이 문제에 대한 해결책을 찾고 있었는데, 이것들이 제가 실패하려고 노력했던 것들입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래들 동기화를 하는 중.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Java JRE 및 Java SDK 재설치;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Android Studio(1.4)의 최신 버전을 다시 설치합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전 AS 버전(1.3)으로 롤백합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;AS 캐시를 무효화하고 다시 시작합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;삭제하기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gradle&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.gradle&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트 디렉토리에 있는 디렉토리.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;삭제하기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.gradle&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 사용자 디렉토리에 있는 디렉토리;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gradlew clean&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;AS 터미널로부터.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;소스를 수동으로 새 프로젝트에 복사(프로젝트 전반에 걸쳐 지속된다는 것이 이상합니다.)&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;약간의 성공을 거두었지만 오류가 다시 발생하기 전에 한 번만 더 정리하고 재구축할 수 있게 해준 것들:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;AS를 닫고 빌드 파일을 수동으로 삭제한 후 다시 엽니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;킬링 더&lt;/font&gt;&lt;/font&gt;&lt;code&gt;java.exe&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;AS가 실행되는 동안 프로세스 수행(기술적으로는 매번 수행할 수 있지만 지루하고 빌드 프로세스 속도가 느려짐)&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 자바 프로세스 컴파일은 어떤 이유로 빌드 파일에 잠금을 걸 수도 있지만, 코틀린과도 관련이 있을 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 작업 중인 (보다 성숙한) Java Android 프로젝트가 있지만, 클리닝할 때 이 오류를 재현할 수는 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 코틀린 프로젝트에만 해당되는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;업데이트:&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코틀린 안드로이드 플러그인으로 인해 문제가 발생하고 있음을 알게 되었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제거하면 문제가 사라집니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;apply plugin: 'kotlin-android'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모듈에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;build.gradle&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일을 다시 삽입하면 다시 나타납니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이에 대한 통찰력을 자유롭게 제시해 주시기 바랍니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;업데이트 2:&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마지막 업데이트가 원인이 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트에 Kotlin 파일이 포함되어 있으면 리빌드 및 클리닝이 실패한다는 것을 발견했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 Kotlin 파일이 제거되어도 백그라운드 Java 프로세스가 삭제될 때까지 계속 실패합니다. 즉, 빌드 파일에 대한 일종의 잠금이 있음을 의미합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 버그 재현을 위한 좀 더 자세한 내용과 단계를 담은 버그를 제출했습니다: &lt;a href=&quot;https://youtrack.jetbrains.com/issue/KT-9440&quot; rel=&quot;noreferrer&quot; title=&quot;KT-9440&quot; papago-attr-id=&quot;2&quot;&gt;KT-94&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작업 관리자의 자바 TM 프로세스를 모두 죽였고 이를 통해 재구축할 수 있었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Android Studio 2.0 Beta를 사용하는 경우 이 문제가 나타날 수 있으며(NTFS 파일 시스템에서 작업하는 경우) &quot;인스턴트 실행&quot;이 원인인 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;설정에서 &quot;Instant Run&quot;을 검색한 후 확인란의 선택을 취소합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;버그 추적기에 &lt;a href=&quot;https://code.google.com/p/android/issues/detail?id=202297&quot;&gt;문제&lt;/a&gt;를 제기했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일 시도 -&amp;gt; 캐시 무효화 후 다시 시작&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이거 나한테 통했어요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코틀린 버그 트래커에 버그 리포트를 올린 후, AOSP 트래커에 &lt;a href=&quot;https://code.google.com/p/android/issues/detail?id=61300&quot;&gt;이슈 61300&lt;/a&gt;을 통보받았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것이 원인인 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재로서는 제가 할 수 있는 일이 없기 때문에, 이 질문은 답변대로 표시하고 버그가 수정되면 답변을 업데이트하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그동안 Windows를 실행하고 있다면 해결책을 찾은 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://lockhunter.com/index.htm&quot;&gt;LockHunter&lt;/a&gt;를 다운로드한 다음 모듈에 다음을 추가해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gradle.build&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일, 바꾸기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lockhunter&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;LockHunter로 가는 경로의 변수입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;exe:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;task clean(type: Exec) {
    ext.lockhunter = '\&quot;C:\\LockHunter.exe\&quot;'
    def buildDir = file(new File(&quot;build&quot;))
    commandLine 'cmd', &quot;$lockhunter&quot;, '/delete', '/silent', buildDir
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 app:clean 작업이 실행될 때 LockHunter는 빌드 파일의 잠금을 강제적으로 자동으로 해제하고 삭제합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 명령을 사용하여 터미널에서 프로젝트 치료&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gradlew clean&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hO7Gi.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hO7Gi.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;명령으로 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;taskkill /F /IM java.exe
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 다음:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;gradle assembleDebug 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;디렉터리 삭제&lt;/font&gt;&lt;/font&gt;&lt;code&gt;intermediates&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제를 빨리 해결할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트가 재구축되면 디렉토리가 재구축됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안드로이드 스튜디오 2.2 프리뷰 1에서 같은 문제에 직면하고 있었는데 @AndresSuarez의 솔루션이 맞았지만 어떤 이유로 태스크 관리자에서 JAVA TM 프로세스를 찾을 수 없었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 다음과 같은 해결책을 시도해 보았는데 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;명령 프롬프트&lt;/em&gt;를 열고 입력합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TASKKILL /F /IM java.exe&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 이렇게 하면 모든 JAVA TM 프로세스가 자동으로 종료됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 앱을 다시 컴파일하면 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 &lt;em&gt;.bat&lt;/em&gt; 파일을 생성하여 위 코드를 추가하고 문제가 발생할 때마다 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저도 같은 문제를 겪었고 이것이 저에게 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안드로이드 스튜디오를 닫습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;중간 디렉터리 삭제(Android Studio가 열려 있는 한 이 디렉터리는 삭제할 수 없습니다.)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Android Studio를 다시 엽니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안드로이드 스튜디오 2.3에서 이런 문제가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안드로이드 스튜디오를 다시 시작해보기만 하면 아무런 불만 없이 청소를 할 수 있었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 &lt;strong&gt;능동적인 디버깅 과정&lt;/strong&gt; 때문에 이런 일이 발생했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 청소나 재시공을 하기 전에 활성화된 모든 공정을 반드시 제거해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성공을 확정하려면 &lt;strong&gt;캐시 무효화/재시작&lt;/strong&gt;을 실행합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나에게는 도움이 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Exit Android Studio&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 한번 더 클릭&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Clean Project&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(동일한 오류로 나타남) 그리고 다음 클릭&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Make Project&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;- 그 후에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Run 'app'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Android Studio에 있는 버튼.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 명령 줄을 통해 apk 파일을 물리적 장치에 설치하고 애플리케이션을 시작하는 데 사용하기 때문에 범인이 &lt;strong&gt;apk&lt;/strong&gt; 파일을 붙잡고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 간단하게:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작업 관리자 &amp;gt; 프로세스 종료 &lt;strong&gt;adb.exe&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일을 자유롭게 삭제할 수 있고 프로젝트를 청소할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 이걸 제 우분투에서 이렇게 풀었어요.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;윈도우의 작업 관리자에서와 같이 시스템(Ubuntu)에서 실행 중인 프로세스를 확인합니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행 중인 모든 프로세스를 나열하는 Ubuntu terminal 명령 ----&amp;gt; &quot;gnome-system-monitor&quot;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;목록에서 JAVA 및 ANDROID 프로세스를 종료하거나 종료합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다시 스튜디오를 시작하고 프로젝트를 가져옵니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 문제없이 저에게 효과가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이게 도움이 되길...&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 이미 생성되어 복제된 프로세스의 문제라고 생각했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 해결책은 꽤 쉽습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 제게 효과가 있었던 해결책 중 하나입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트의 &lt;strong&gt;app/build/outputs/apk&lt;/strong&gt; 폴더가 열릴 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러니 이 폴더를 닫고 프로젝트를 다시 빌드하기만 하면 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해결될 겁니다&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;app/build/outputs/apk&lt;/strong&gt; 폴더를 사용한 프로그램을 찾은 후 폴더만 삭제합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안드로이드 스튜디오는 리빌드 하기 전에 오래된 apk 폴더를 삭제해야 할 것 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저 같은 경우는 - 로 해결합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;먼저 에뮬레이터에서 실행 중인 경우 앱을 닫습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 명령을 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gradle --stop&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;안드로이드 스튜디오&lt;/strong&gt;의 &lt;strong&gt;터미널&lt;/strong&gt;에 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 &lt;strong&gt;프로젝트&lt;/strong&gt;를 정리하고 &lt;strong&gt;프로젝트&lt;/strong&gt;를 재구성합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://code.google.com/p/android/issues/detail?id=202297#c81&quot; rel=&quot;nofollow noreferrer&quot;&gt;버그 보고서에 제시&lt;/a&gt;된 것과 같이 줄에 대한 코멘트를 해제합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;idea.jars.nocopy=false
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;idea.properties&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일로 문제가 해결되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Android Studio를 업데이트할 때마다 이 작업을 수행해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;중간에 문제가 발생하는 경우가 있으므로 삭제하고 프로젝트를 재구성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오어&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;simply run cmd command - &amp;gt; gradlew clean&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작업 공간의 프로젝트 폴더(나를 위한 작업)에서&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안드로이드 스튜디오 3.0에서도 같은 문제가 있었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스튜디오 닫기&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;projectRoot/build/및 projectRoot/app/build/를 삭제합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스튜디오 다시 시작&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;토종 개발자들을 반응시킵니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;달려.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo cd android &amp;amp;&amp;amp; ./gradlew clean
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 만약 당신이 apk를 출시하고 싶다면.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo cd android &amp;amp;&amp;amp; ./gradlew assembleRelease
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;누군가에게 도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단순히 cmd 명령어를 실행합니다 - &amp;gt; gradlew clean, 그리고 문제를 해결합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로컬 백엔드(로컬 구글 앱 엔진의 자바 서블릿)로 테스트하는 경우 실행 중인 프로세스가 일부 파일을 차단합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 라이브 디플로이가 불가능합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 이 경우 클린 또는 빌드를 시작하기 전에 로컬 백엔드를 중지하면 이 문제를 해결할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행 -&amp;gt; 백엔드 중지에서 옵션을 찾을 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동일한 오류가 발생하여 여러 방법으로 시도했지만 해결책은 /android 및 /android/app 디렉토리에서 빌드 폴더를 삭제하는 것이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;달려.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;react-native run-android&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나를 위해 일했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트에서 누락된 디렉토리를 글로벌 검색하여 해결하였습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 해당 키워드가 포함된 파일을 삭제합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 내가 모든 것을 제거한 후에 성공적으로 청소할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;build&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.externalNativeBuild&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수동 디렉터리&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트를 D:에서 G: 드라이브로 옮긴 후에도 같은 문제가 있었는데 디스크 확인을 통해 문제가 해결되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;chkdsk /f /r /&lt;/strong&gt;x&lt;strong&gt; G:&lt;/strong&gt; ** 여기서 일부 명령줄 스위치를 사용했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;**&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;/F 디스크의 오류 수정&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;/R 불량 섹터를 찾아 읽을 수 있는 정보를 복구합니다(즉 /F).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;/X 필요한 경우 볼륨을 먼저 마운트 해제합니다(즉 /F)(중요).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고: /X는 드라이브를 마운트 해제하고 프로젝트의 &lt;strong&gt;빌드&lt;/strong&gt; 디렉토리를 수동으로 삭제할 수 있기 때문에 중요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 프로젝트를 재구축합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 위한 내 솔루션은 매우 간단했습니다(Windows를 사용하는 경우).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1 - Android Studio를 닫습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2- 안드로이드 스튜디오를 관리자로 실행합니다. 3- 여기까지입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 이 정확한 문제를 제 스스로 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제는 다른 사람이 파일을 만들어서 컴퓨터에 대한 관리자 권한이 있는데도 파일이나 파일을 변경할 수 없다는 것이었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일이나 폴더의 속성으로 들어가 소유권을 변경하거나 소유권을 추가해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://answers.microsoft.com/en-us/windows/forum/windows_vista-files/how-do-i-change-folder-and-file-permissions/465f2b42-63dd-4486-8dd1-c870290efeed&quot; rel=&quot;nofollow noreferrer&quot;&gt;이 &lt;/a&gt;웹&lt;a href=&quot;https://answers.microsoft.com/en-us/windows/forum/windows_vista-files/how-do-i-change-folder-and-file-permissions/465f2b42-63dd-4486-8dd1-c870290efeed&quot; rel=&quot;nofollow noreferrer&quot;&gt; 페이지&lt;/a&gt;는 당신이 해야 할 일을 차근차근 잘 설명해 줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위와 같은 작업을 한 후 파일 탐색기에서 파일을 찾아 수동으로 추출했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어차피 삭제하려고 했다면 안드로이드 스튜디오 프로젝트에서는 필요 없다고 생각합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리소스를 사용할 수 있는 또 다른 애플리케이션은 안드로이드 스튜디오의 코틀린 REPL입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그걸 닫았는데 문제없이 다시 지을 수 있었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 자바 서비스를 제거하려고 했지만 IntelliJ terminal에서 &lt;strong&gt;gradlew clean build&lt;/strong&gt; 명령을 실행하는 동안 여전히 실패하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;삭제를 시도하는 경로와 동일한 경로로 개설한 다른 응용 프로그램도 확인했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 그런 것은 찾을 수 없었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 마침내 IntelliJIDE를 다시 시작했고 빌드를 원활하게 진행할 수 있었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/32914499/error-execution-failed-for-task-appclean-unable-to-delete-file&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Android</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/937</guid>
      <comments>https://manysource.tistory.com/937#entry937comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:26:54 +0900</pubDate>
    </item>
    <item>
      <title>Wordpress 정의('COOKIE_DOMAIN', 잘못된) 의미</title>
      <link>https://manysource.tistory.com/936</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Wordpress 정의('COOKIE_DOMAIN', 잘못된) 의미&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Wordpress 다중 사이트는 두 개의 도메인을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;www.test.com - 주 사이트&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;www.example.com&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비 주 사이트에서 로그인이 가능하도록 하려면 wp-config.php 파일에 다음 줄을 추가해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;define('COOKIE_DOMAIN',false);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 워드프레스 도메인에서 쿠키를 설정할 수 있고 사용자가 보조 사이트에 로그인할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 질문은 쿠키 도메인을 효과적으로 와일드카드화하는 데 보안적인 영향이 무엇인가 하는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/33781155/wordpress-definecookie-domain-false-implications&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Wordpress</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/936</guid>
      <comments>https://manysource.tistory.com/936#entry936comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:26:46 +0900</pubDate>
    </item>
    <item>
      <title>구문 오류 Maria에서 변수 선언 오류DB</title>
      <link>https://manysource.tistory.com/935</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구문 오류 Maria에서 변수 선언 오류&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DB&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 쿼리에 문제가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;START TRANSACTION;
INSERT INTO posts
(
-- not relevant
)
VALUES
(
-- insert works as intended
);
COMMIT WORK AND CHAIN;

DECLARE @insertId INT; -- this is where i get the syntax error
SET @insertId = LAST_INSERT_ID();

UPDATE posts
SET guid = CONCAT('foo.bar?p=', @insertId)
WHERE id = @insertId;

-- continue to work with the variable
INSERT INTO postmeta(post_id, key, value)
VALUES
(@insertId, ..., ...),
(@insertId, ..., ...),
(@insertId, ..., ...),
(@insertId, ..., ...);
COMMIT WORK;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 행을 삽입하며 삽입 직후 &lt;strong&gt;자동&lt;/strong&gt; 증분 ID를 사용하여 업데이트해야 합니다(LAST_INSERT_ 함수에서 올바른 값을 얻을 수 있는지 확인합니다).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ID). 그럼 자동 증분 ID를 사용해서 다른 테이블을 채워야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 사용 사례에서는 값을 변수에 저장해야 한다고 생각했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 오류 메시지가 표시되는 이유는 무엇입니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 매뉴얼에서 1행의 'DEClare @insertId INT; SET @insertId = LAST_INSERT_ID()'에 가까운 구문을 사용할 수 있는지 확인하십시오.&quot; 프로시저나 사용자 정의 함수를 만들지 않는 것이 문제입니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;빠르게 검색해보니 MariaDB 웹사이트(https://mariadb.com/kb/en/user-defined-variables/) :&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;사용자 정의 변수 유형을 선언할 수 없으므로 CAST() 또는 CONVERT()를 사용하는 방법밖에 없습니다.&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그들의 사이트에는 신고하지 않고 변수를 만드는 예시들이 있기 때문에 해결책은 신고 문구를 삭제하는 것일 뿐이라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이게 효과가 있었으면 좋겠네요, 전 마리아를 잘 몰라요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DB!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/60522562/syntax-error-declaring-variables-in-mariadb&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>mariadb</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/935</guid>
      <comments>https://manysource.tistory.com/935#entry935comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:26:40 +0900</pubDate>
    </item>
    <item>
      <title>Ajax - 성공 함수에서 반환된 배열을 사용하는 방법</title>
      <link>https://manysource.tistory.com/934</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Ajax - 성공 함수에서 반환된 배열을 사용하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안녕하세요 저는 배열을 반환하는 php 코드를 가지고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 이 배열을 나의 ajax 성공 함수에 사용할 수 있기를 원하지만 어떻게 해야 할지 잘 모르겠습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 다음을 시도해 보았지만, 운이 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;php 코드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$arr = array();
$arr[0] = &quot;Mark Reed&quot;
$arr[1] = &quot;34&quot;;
$arr[2] = &quot;Australia&quot;;

exit($arr);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;js 코드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
    type: &quot;POST&quot;,
    url: &quot;/returndetails.php&quot;,
    data: 'id=' + userid,
    success: function (data) {
        document.getElementById(&quot;name&quot;).innerHTML = data[0];
        document.getElementById(&quot;age&quot;).innerHTML = data[1];
        document.getElementById(&quot;location&quot;).innerHTML = data[2];
    }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서버에서 데이터를 JSON으로 반환해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PHP&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$arr = array();
$arr[0] = &quot;Mark Reed&quot;;
$arr[1] = &quot;34&quot;;
$arr[2] = &quot;Australia&quot;;

echo json_encode($arr);
exit();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JS&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
    type: &quot;POST&quot;,
    url: &quot;/returndetails.php&quot;,
    data: 'id=' + userid,
    dataType: &quot;json&quot;, // Set the data type so jQuery can parse it for you
    success: function (data) {
        document.getElementById(&quot;name&quot;).innerHTML = data[0];
        document.getElementById(&quot;age&quot;).innerHTML = data[1];
        document.getElementById(&quot;location&quot;).innerHTML = data[2];
    }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작은 실수 하나:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;없음:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;exit($arr);&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대체 위치:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;echo json_encode($arr);&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 표시하려는 경우 문제가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data[0]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data[1]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 스트링에서 나온 캐릭터 같아요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;추가하는것을 해결합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;header(&quot;Content-Type: application/json&quot;);&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;신청하기 전에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;echo json_encode($arr)&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해결책은 이렇습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$arr = array();
$arr[0] = &quot;Mark Reed&quot;
$arr[1] = &quot;34&quot;;
$arr[2] = &quot;Australia&quot;;

header(&quot;Content-Type: application/json&quot;);

echo json_encode($arr);

exit();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신에&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$arr = array();
$arr[0] = &quot;Mark Reed&quot;
$arr[1] = &quot;34&quot;;
$arr[2] = &quot;Australia&quot;;

exit($arr);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/19503631/ajax-how-to-use-a-returned-array-in-a-success-function&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>ajax</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/934</guid>
      <comments>https://manysource.tistory.com/934#entry934comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:26:34 +0900</pubDate>
    </item>
    <item>
      <title>Log4j XML 구성 파일을 사용하여 최대 절전 모드 로깅 구성?</title>
      <link>https://manysource.tistory.com/933</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Log4j XML 구성 파일을 사용하여 최대 절전 모드 로깅 구성?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Log4j의 XML 스타일 구성 파일을 사용하여 Hibernate의 로깅을 구성하는 방법에 대한 설명서를 찾을 수 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 가능하기는 하나 아니면 속성 스타일의 구성 파일을 사용하여 Hibernate의 로깅을 제어하는 것이 가능한가요?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 누군가가 어떤 정보를 가지고 있거나 설명서에 대한 링크를 가지고 있다면 감사하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편집:&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;명확히 하기 위해, 저는 Hibernate를 제어하기 위한 실제 XML 구문의 예를 찾고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;EDIT2:&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 제 XML 구성 파일에 있는 것이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&amp;gt;
&amp;lt;!DOCTYPE log4j:configuration SYSTEM &quot;log4j.dtd&quot;&amp;gt;

&amp;lt;log4j:configuration xmlns:log4j=&quot;http://jakarta.apache.org/log4j/&quot;&amp;gt;
    &amp;lt;appender name=&quot;console&quot; class=&quot;org.apache.log4j.ConsoleAppender&quot;&amp;gt;
        &amp;lt;param name=&quot;Threshold&quot; value=&quot;info&quot;/&amp;gt;
        &amp;lt;param name=&quot;Target&quot; value=&quot;System.out&quot;/&amp;gt;
        &amp;lt;layout class=&quot;org.apache.log4j.PatternLayout&quot;&amp;gt;
            &amp;lt;param name=&quot;ConversionPattern&quot; value=&quot;%d{ABSOLUTE} [%t] %-5p %c{1} - %m%n&quot;/&amp;gt;
        &amp;lt;/layout&amp;gt;
    &amp;lt;/appender&amp;gt;
    &amp;lt;appender name=&quot;rolling-file&quot; class=&quot;org.apache.log4j.RollingFileAppender&quot;&amp;gt;
        &amp;lt;param name=&quot;file&quot; value=&quot;Program-Name.log&quot;/&amp;gt;
        &amp;lt;param name=&quot;MaxFileSize&quot; value=&quot;1000KB&quot;/&amp;gt;
    &amp;lt;!-- Keep one backup file --&amp;gt;
        &amp;lt;param name=&quot;MaxBackupIndex&quot; value=&quot;4&quot;/&amp;gt;
        &amp;lt;layout class=&quot;org.apache.log4j.PatternLayout&quot;&amp;gt;
            &amp;lt;param name=&quot;ConversionPattern&quot; value=&quot;%d [%t] %-5p %l - %m%n&quot;/&amp;gt;
        &amp;lt;/layout&amp;gt;
    &amp;lt;/appender&amp;gt;

    &amp;lt;root&amp;gt;
        &amp;lt;priority value =&quot;debug&quot; /&amp;gt;
        &amp;lt;appender-ref ref=&quot;console&quot; /&amp;gt;
        &amp;lt;appender-ref ref=&quot;rolling-file&quot; /&amp;gt;
    &amp;lt;/root&amp;gt;
&amp;lt;/log4j:configuration&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로깅은 정상적으로 작동하지만 현재 로그가 범람하고 있기 때문에 애플리케이션 수준 로깅과 별도로 최대 절전 모드 로깅을 제어할 수 있는 방법을 찾고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 설정 파일을 사용하여 이 작업을 수행하는 예를 찾았는데 XML 파일에서 이 작업을 수행하는 방법이 궁금합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출처: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-logging&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로거 카테고리 목록은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Category                    Function

org.hibernate.SQL           Log all SQL DML statements as they are executed
org.hibernate.type          Log all JDBC parameters
org.hibernate.tool.hbm2ddl  Log all SQL DDL statements as they are executed
org.hibernate.pretty        Log the state of all entities (max 20 entities) associated with the session at flush time
org.hibernate.cache         Log all second-level cache activity
org.hibernate.transaction   Log transaction related activity
org.hibernate.jdbc          Log all JDBC resource acquisition
org.hibernate.hql.ast.AST   Log HQL and SQL ASTs during query parsing
org.hibernate.secure        Log all JAAS authorization requests
org.hibernate               Log everything (a lot of information, but very useful for troubleshooting) 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;log4j XML 구성 파일에 붙여넣을 수 있도록 포맷:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- Log all SQL DML statements as they are executed --&amp;gt;
&amp;lt;Logger name=&quot;org.hibernate.SQL&quot; level=&quot;debug&quot; /&amp;gt;
&amp;lt;!-- Log all JDBC parameters --&amp;gt;
&amp;lt;Logger name=&quot;org.hibernate.type&quot; level=&quot;debug&quot; /&amp;gt;
&amp;lt;!-- Log all SQL DDL statements as they are executed --&amp;gt;
&amp;lt;Logger name=&quot;org.hibernate.tool.hbm2ddl&quot; level=&quot;debug&quot; /&amp;gt;
&amp;lt;!-- Log the state of all entities (max 20 entities) associated with the session at flush time --&amp;gt;
&amp;lt;Logger name=&quot;org.hibernate.pretty&quot; level=&quot;debug&quot; /&amp;gt;
&amp;lt;!-- Log all second-level cache activity --&amp;gt;
&amp;lt;Logger name=&quot;org.hibernate.cache&quot; level=&quot;debug&quot; /&amp;gt;
&amp;lt;!-- Log transaction related activity --&amp;gt;
&amp;lt;Logger name=&quot;org.hibernate.transaction&quot; level=&quot;debug&quot; /&amp;gt;
&amp;lt;!-- Log all JDBC resource acquisition --&amp;gt;
&amp;lt;Logger name=&quot;org.hibernate.jdbc&quot; level=&quot;debug&quot; /&amp;gt;
&amp;lt;!-- Log HQL and SQL ASTs during query parsing --&amp;gt;
&amp;lt;Logger name=&quot;org.hibernate.hql.ast.AST&quot; level=&quot;debug&quot; /&amp;gt;
&amp;lt;!-- Log all JAAS authorization requests --&amp;gt;
&amp;lt;Logger name=&quot;org.hibernate.secure&quot; level=&quot;debug&quot; /&amp;gt;
&amp;lt;!-- Log everything (a lot of information, but very useful for troubleshooting) --&amp;gt;
&amp;lt;Logger name=&quot;org.hibernate&quot; level=&quot;debug&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NB: 대부분의 로거는 DEBUG 레벨을 사용하지만 org.hibernate.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;type은 TRACE를 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전 버전의 Hibernate org.hibernate.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;type 또한 dEBUG를 사용했지만, Hibernate 3의 경우 JDBC 파라미터 바인딩 로깅을 보려면 TRACE(또는 ALL)로 레벨을 설정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 범주는 다음과 같이 지정됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;logger name=&quot;org.hibernate&quot;&amp;gt;
    &amp;lt;level value=&quot;ALL&quot; /&amp;gt;
    &amp;lt;appender-ref ref=&quot;FILE&quot;/&amp;gt;
&amp;lt;/logger&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;루트 요소 앞에 배치해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/users/39057/loki&quot;&gt;로키&lt;/a&gt;의 &lt;a href=&quot;https://stackoverflow.com/questions/436276/configuring-hibernate-logging-using-log4j-xml-config-file/436687#436687&quot;&gt;대답&lt;/a&gt;은 하이버네이트 3 문서를 가리키며 좋은 정보를 제공하지만, 저는 여전히 제가 기대했던 결과를 얻지 못했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;많은 때리기, 팔 흔들기, 쥐죽은 사람들이 마침내 내 치즈를 가져다 줬습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Hibernate 3은 SLF4J(&lt;a href=&quot;http://www.slf4j.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Simple Logging Facade for Java&lt;/a&gt;)를 사용하기 때문에(문서에 따라) Log4j 1.2를 사용하는 &lt;strong&gt;경우&lt;/strong&gt; log4j 구성 파일로 Hibernate &lt;strong&gt;로깅&lt;/strong&gt;을 완전히 &lt;strong&gt;구성&lt;/strong&gt;하려면 &lt;strong&gt;slf4j-log4j12-1.5.10&lt;/strong&gt;.jar도 필요합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이게 다음 사람에게 도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;homaxto의 댓글에 대한 답변으로 지금 제가 가지고 있는 것은 이것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&amp;gt;
&amp;lt;!DOCTYPE log4j:configuration SYSTEM &quot;log4j.dtd&quot;&amp;gt;

&amp;lt;log4j:configuration xmlns:log4j=&quot;http://jakarta.apache.org/log4j/&quot;&amp;gt;
    &amp;lt;appender name=&quot;console&quot; class=&quot;org.apache.log4j.ConsoleAppender&quot;&amp;gt;
        &amp;lt;param name=&quot;Threshold&quot; value=&quot;debug&quot;/&amp;gt;
        &amp;lt;param name=&quot;Target&quot; value=&quot;System.out&quot;/&amp;gt;
        &amp;lt;layout class=&quot;org.apache.log4j.PatternLayout&quot;&amp;gt;
            &amp;lt;param name=&quot;ConversionPattern&quot; value=&quot;%d{ABSOLUTE} [%t] %-5p %c{1} - %m%n&quot;/&amp;gt;
        &amp;lt;/layout&amp;gt;
    &amp;lt;/appender&amp;gt;
    &amp;lt;appender name=&quot;rolling-file&quot; class=&quot;org.apache.log4j.RollingFileAppender&quot;&amp;gt;
        &amp;lt;param name=&quot;file&quot; value=&quot;Program-Name.log&quot;/&amp;gt;
        &amp;lt;param name=&quot;MaxFileSize&quot; value=&quot;500KB&quot;/&amp;gt;
        &amp;lt;param name=&quot;MaxBackupIndex&quot; value=&quot;4&quot;/&amp;gt;
        &amp;lt;layout class=&quot;org.apache.log4j.PatternLayout&quot;&amp;gt;
            &amp;lt;param name=&quot;ConversionPattern&quot; value=&quot;%d [%t] %-5p %l - %m%n&quot;/&amp;gt;
        &amp;lt;/layout&amp;gt;
    &amp;lt;/appender&amp;gt;

    &amp;lt;logger name=&quot;org.hibernate&quot;&amp;gt;
        &amp;lt;level value=&quot;info&quot; /&amp;gt;
    &amp;lt;/logger&amp;gt;

    &amp;lt;root&amp;gt;
        &amp;lt;priority value =&quot;debug&quot; /&amp;gt;
        &amp;lt;appender-ref ref=&quot;console&quot; /&amp;gt;
        &amp;lt;appender-ref ref=&quot;rolling-file&quot; /&amp;gt;
    &amp;lt;/root&amp;gt;
&amp;lt;/log4j:configuration&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;중요한 부분은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;logger name=&quot;org.hibernate&quot;&amp;gt;
    &amp;lt;level value=&quot;info&quot; /&amp;gt;
&amp;lt;/logger&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;logger name=&quot;org.hibernate&quot;&amp;gt;
    &amp;lt;level value=&quot;warn&quot;/&amp;gt;
&amp;lt;/logger&amp;gt;

&amp;lt;logger name=&quot;org.hibernate.SQL&quot;&amp;gt;
    &amp;lt;level value=&quot;warn&quot;/&amp;gt;
&amp;lt;/logger&amp;gt;

&amp;lt;logger name=&quot;org.hibernate.type&quot;&amp;gt;
    &amp;lt;level value=&quot;warn&quot;/&amp;gt;
&amp;lt;/logger&amp;gt;

&amp;lt;root&amp;gt;
    &amp;lt;priority value=&quot;info&quot;/&amp;gt;
    &amp;lt;appender-ref ref=&quot;C1&quot;/&amp;gt;
&amp;lt;/root&amp;gt; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;분명히 저는 최대 절전 모드 메시지를 보는 것을 좋아하지 않습니다 ;) -- 출력을 얻으려면 레벨을 &quot;디버그&quot;로 설정합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;답은 유용했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변경 후 log4j 로그 파일에 있는 SQL 문과 표준 콘솔에 있는 SQL 문의 중복 로깅을 받았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표준 콘솔에서 로깅을 제거하기 위해 persistence.xml 파일을 show_sql로 변경했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;format_sql true를 유지하는 것은 log4j 로그 파일에도 영향을 미치므로 이를 그대로 유지했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;persistence xmlns=&quot;http://java.sun.com/xml/ns/persistence&quot;
        xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
        xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd&quot;
        version=&quot;2.0&quot;&amp;gt;
    &amp;lt;persistence-unit name=&quot;myUnit&quot; transaction-type=&quot;RESOURCE_LOCAL&quot;&amp;gt;
        &amp;lt;provider&amp;gt;org.hibernate.ejb.HibernatePersistence&amp;lt;/provider&amp;gt;
        &amp;lt;properties&amp;gt;
            &amp;lt;property name=&quot;javax.persistence.jdbc.driver&quot; value=&quot;org.hsqldb.jdbcDriver&quot;/&amp;gt;
            &amp;lt;property name=&quot;javax.persistence.jdbc.url&quot; value=&quot;jdbc:hsqldb:file:d:\temp\database\cap1000;shutdown=true&quot;&amp;gt;&amp;lt;/property&amp;gt;
            &amp;lt;property name=&quot;dialect&quot; value=&quot;org.hibernate.dialect.HSQLDialect&quot;/&amp;gt;
            &amp;lt;property name=&quot;hibernate.show_sql&quot; value=&quot;false&quot;/&amp;gt;
            &amp;lt;property name=&quot;hibernate.format_sql&quot; value=&quot;true&quot;/&amp;gt;
            &amp;lt;property name=&quot;hibernate.connection.username&quot; value=&quot;sa&quot;/&amp;gt;
            &amp;lt;property name=&quot;hibernate.hbm2ddl.auto&quot; value=&quot;create-drop&quot;/&amp;gt;
        &amp;lt;/properties&amp;gt;
    &amp;lt;/persistence-unit&amp;gt;
&amp;lt;/persistence&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구성할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;log4j&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같은 범주 태그가 있는 파일(예를 들어 콘솔 첨부 파일 포함):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;appender name=&quot;console&quot; class=&quot;org.apache.log4j.ConsoleAppender&quot;&amp;gt;
    &amp;lt;layout class=&quot;org.apache.log4j.PatternLayout&quot;&amp;gt;
        &amp;lt;param name=&quot;ConversionPattern&quot; value=&quot;%d{yy-MM-dd HH:mm:ss} %p %c - %m%n&quot; /&amp;gt;
    &amp;lt;/layout&amp;gt;
&amp;lt;/appender&amp;gt;
&amp;lt;category name=&quot;org.hibernate&quot;&amp;gt;
    &amp;lt;priority value=&quot;WARN&quot; /&amp;gt;
&amp;lt;/category&amp;gt;
&amp;lt;root&amp;gt;
    &amp;lt;priority value=&quot;INFO&quot; /&amp;gt;
    &amp;lt;appender-ref ref=&quot;console&quot; /&amp;gt;
&amp;lt;/root&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 최대 절전 모드에서 발생하는 모든 경고, 오류 또는 치명적인 메시지가 표시되며, 그 이상은 표시되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 코드와 라이브러리 코드는 정보 수준이 됩니다(따라서 정보, 경고, 오류 및 치명적).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;라이브러리의 로그 수준을 변경하려면 비활성 스프링 정보 로그에 범주를 추가하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;category name=&quot;org.springframework&quot;&amp;gt;
    &amp;lt;priority value=&quot;WARN&quot; /&amp;gt;
&amp;lt;/category&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 다른 첨부자와 함께, (additivity default value는 true입니다)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;category name=&quot;org.springframework&quot; additivity=&quot;false&quot;&amp;gt;
    &amp;lt;priority value=&quot;WARN&quot; /&amp;gt;
    &amp;lt;appender-ref ref=&quot;anotherAppender&quot; /&amp;gt;
&amp;lt;/category&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쿼리마다 최대 절전 모드 로그를 원하지 않으면 최대 절전 모드 속성을 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;show_sql&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;false&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/436276/configuring-hibernate-logging-using-log4j-xml-config-file&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>XML</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/933</guid>
      <comments>https://manysource.tistory.com/933#entry933comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:26:27 +0900</pubDate>
    </item>
    <item>
      <title>매개 변수가 있는 지시어에서 컨트롤러 함수 호출</title>
      <link>https://manysource.tistory.com/932</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매개 변수가 있는 지시어에서 컨트롤러 함수 호출&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지시문은 일부 매개변수를 사용하여 컨트롤러에서 함수를 호출하는 방법은 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 범위에 변수 myVar를 부여하고자 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$apply(attrs)&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(할 일);&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ng-app=&quot;component&quot;&amp;gt;
  &amp;lt;div ng-controller=&quot;ctrl&quot;&amp;gt;
    &amp;lt;span ng-repeat=&quot;i in myarray&quot;&amp;gt;
     &amp;lt;span  customattr  whattodo=&quot;addVal&quot;&amp;gt;{{i}}&amp;lt;/span&amp;gt;
    &amp;lt;/span&amp;gt;
  &amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컨트롤러 JS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   function ctrl($scope) {
      $scope.myarray = [1];
      $scope.addVal = function (value) {
          $scope.myarray.push(value);
      }
   }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지시 JS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;angular.module('component', []).directive('customattr', function () {
  return {
      restrict: 'A',
      link: function (scope, element, attrs) {
          var myVar = 5;
          scope.$apply(attrs.whattodo);
      } 
  }; 
}); 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작업 방법 중 하나는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 속성을 스코프에 함수 유형이 있는 스코프 모델로 바인딩해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 (지시)소프가 필요할 때 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;body ng-controller=&quot;MainCtrl&quot;&amp;gt;
  Value: {{value}}!

  &amp;lt;button customattr whattodo=&quot;addValue&quot;&amp;gt;Add&amp;lt;/button&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JS&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;angular.module('component', [])

.controller('MainCtrl', function($scope) {
  $scope.value = 1;

  $scope.addValue = function(val){
    alert(val);
    $scope.value = val;
  }
});

.directive('customattr', function () {
  return {
      restrict: 'A',
      scope: {
          whattodo: &quot;=&quot; // or ' someOtherScopeName: &quot;=whattodo&quot; '
      },
      link: function (scope, element, attrs) {
          var myVar = 5;
          scope.whattodo(myVar); // or ' scope.someOtherScopeName(myVar) '
      } 
  }; 
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;&lt;a href=&quot;http://plnkr.co/edit/QdwMf9jDXz7ClYm77r8H&quot; rel=&quot;noreferrer&quot;&gt;여기&lt;/a&gt;&lt;/strong&gt; &lt;strong&gt;&lt;a href=&quot;http://plnkr.co/edit/QdwMf9jDXz7ClYm77r8H&quot; rel=&quot;noreferrer&quot;&gt;플렁커&lt;/a&gt;&lt;/strong&gt;의 코드가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;부터&lt;/font&gt;&lt;/strong&gt; &lt;a href=&quot;http://docs.angularjs.org/guide/directive&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;AngularJS: 지시사항&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;= 또는 =attr - 로컬 스코프 속성과 속성 값을 통해 정의된 이름의 상위 스코프 속성 간에 양방향 바인딩을 설정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특성 이름을 지정하지 않으면 특성 이름이 로컬 이름과 동일한 것으로 가정됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지정된 범위 및 위젯 정의: {localModel:'=myAttr'}: 위젯 범위 속성 localModel은 상위 범위에 상위 모델의 값을 반영합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;parentModel의 모든 변경 사항은 localModel에 반영되고 localModel의 모든 변경 사항은 parentModel에 반영됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;html로&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;whattodo=&quot;addVal(value)&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지시에 따라&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;scope.$apply(function(s){
    s.whattodo({value : myVar});
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;분리된 범위에서 &amp;amp; 기호를 사용하는 것은 어떨까요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;body ng-controller=&quot;MainCtrl&quot;&amp;gt;
  Value: {{value}}!
  &amp;lt;button customattr add-val=&quot;addValue(value)&quot;&amp;gt;Add&amp;lt;/button&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컨트롤러에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   function ctrl($scope) {
      $scope.myarray = [1];
      $scope.addValue = function (value) {
          $scope.myarray.push(value);
      }
   }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 지시사항:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;angular.module('component', []).directive('customattr', function () {
  return {
      restrict: 'A',
      scope: {
          addVal: &quot;&amp;amp;&quot;
      },
      controller: function ($scope) {
          var myVar = 5;
             // To execute addVal in controller with 'value' param
          $scope.addVal({value: value}) 
      } 
  }; 
}); 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/16135711/call-a-controller-function-from-directive-with-parameters&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>angularJS</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/932</guid>
      <comments>https://manysource.tistory.com/932#entry932comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:26:18 +0900</pubDate>
    </item>
    <item>
      <title>jQuery의 .hide()와 표시할 CSS 설정의 차이: 없음</title>
      <link>https://manysource.tistory.com/931</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery의 .hide()와 표시할 CSS 설정의 차이: 없음&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 어느 쪽이 더 나을까요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.hide()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쓰는 것보다 빠릅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.css(&quot;display&quot;, &quot;none&quot;)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 하지만 HTML 요소에 실제로 어떤 차이가 있으며 둘 다 무엇을 하고 있을까요?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://api.jquery.com/hide/&quot; rel=&quot;noreferrer&quot;&gt;.hide()&lt;/a&gt;에 대한 jQuery 페이지에서:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;매칭된 요소들은 애니메이션 없이 바로 숨겨질 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 디스플레이 속성의 값이 jQuery의 데이터 캐시에 저장되어 나중에 디스플레이를 초기 값으로 복원할 수 있다는 점을 제외하고는 .css('display', 'none')를 호출하는 것과 거의 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소의 표시 값이 inline이면 숨어서 표시됩니다.&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 이전 가치로 되돌릴 수 있는 것이 중요한 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 사용하시는 게 좋겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;hide()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;왜냐하면 이전 상태가 기억되기 때문입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것을 제외하고는 차이가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;true&quot; data-console=&quot;false&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code snippet-currently-hidden&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;$(function() {
    $('.hide').click(function(){
        $('.toggle').hide();
        setDisplayValue();
    });
    $('.show').click(function(){
        $('.toggle').show();
        setDisplayValue();
    });
});

function setDisplayValue() {
    var display = $('.toggle')[0].style.display;
    $('.displayvalue').text(display);
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;div {
    display: table-cell;
    border: 1px solid;
    padding: 5px;
}&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&amp;gt;
    &amp;lt;button class=&quot;hide&quot;&amp;gt;Hide&amp;lt;/button&amp;gt;
    &amp;lt;button class=&quot;show&quot;&amp;gt;Show&amp;lt;/button&amp;gt;
&amp;lt;/p&amp;gt;

&amp;lt;div class=&quot;toggle&quot;&amp;gt;Lorem Ipsum&amp;lt;/div&amp;gt;

&amp;lt;p&amp;gt;
    The display value of the div is:
    &amp;lt;span class=&quot;displayvalue&quot;&amp;gt;&amp;lt;/span&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&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://api.jquery.com/hide/&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;.hide()&lt;/code&gt;&lt;/a&gt; &lt;em&gt;이전&lt;/em&gt; 저장&lt;/font&gt;&lt;/font&gt; &lt;code&gt;display&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;설정하기 직전의 속성&lt;/font&gt;&lt;/font&gt;&lt;code&gt;none&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 만약 그게 기준이 아니었다면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;좀 더 안전한 요소의 속성은 저장된 속성을 다시 사용할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서... 추가적인 작업이 필요합니다. 하지만 &lt;em&gt;수많은&lt;/em&gt; 요소를 사용하지 않는 한 속도 차이는 무시할 수 있을 겁니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery 코드를 살펴보면 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;hide: function( speed, easing, callback ) {
    if ( speed || speed === 0 ) {
        return this.animate( genFx(&quot;hide&quot;, 3), speed, easing, callback);

    } else {
        for ( var i = 0, j = this.length; i &amp;lt; j; i++ ) {
            var display = jQuery.css( this[i], &quot;display&quot; );

            if ( display !== &quot;none&quot; ) {
                jQuery.data( this[i], &quot;olddisplay&quot;, display );
            }
        }

        // Set the display of the elements in a second loop
        // to avoid the constant reflow
        for ( i = 0; i &amp;lt; j; i++ ) {
            this[i].style.display = &quot;none&quot;;
        }

        return this;
    }
},
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그들은 같은 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.hide()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에서는 jQuery 함수를 호출하고 여기에 콜백 함수를 추가할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 저희가.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.hide()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 애니메이션을 추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;.css(&quot;display&quot;,&quot;none&quot;)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소의 속성을 다음으로 변경합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display:none&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 이것은 자바스크립트에서 다음을 하는 것과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.getElementById('elementId').style.display = 'none';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.hide()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기능은 콜백 기능, 속도 등을 확인하기 때문에 실행에 더 많은 시간이 소요됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;둘 &lt;strong&gt;다&lt;/strong&gt; 사용하는 것은 좋은 답입니다. 둘 중 하나의 문제가 아닙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 가지를 모두 사용하는 &lt;strong&gt;장점&lt;/strong&gt;은 페이지가 로드되면 &lt;strong&gt;CSS가 요소를 즉시 숨긴다는&lt;/strong&gt; 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery.hide는 요소를 0.5초간 플래시한 다음 숨깁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;페이지가 로드될 때 요소가 표시되지 않도록 하려면 CSS를 사용하고 display:none &amp;amp; set display:jQuery .hide()를 사용하면 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소를 토글할 계획이라면 jQuery 토글을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;둘 다 모든 브라우저, AFAIK에서 동일하게 작동합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Chrome과 Firefox에서 확인, 둘 다 부록&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display:none&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에게&lt;/font&gt;&lt;/font&gt;&lt;code&gt;style&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소의 속성입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 숨김 방법을 사용해도 차이가 없다는 것을 확인합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 jquery는 요소에 효과를 주는 다양한 숨김 방법을 제공합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자세한 설명은 아래 링크 참조: &lt;a href=&quot;http://aspdotnetraining.blogspot.in/2013/11/jquery-hide.html&quot; rel=&quot;nofollow&quot;&gt;Jquery에서 숨김 효과&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/4396983/difference-between-jquery-s-hide-and-setting-css-to-display-none&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>jQuery</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/931</guid>
      <comments>https://manysource.tistory.com/931#entry931comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:26:10 +0900</pubDate>
    </item>
    <item>
      <title>다른 버전의 mariadb에 대한 다른 검색 키</title>
      <link>https://manysource.tistory.com/930</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 버전의 mariadb에 대한 다른 검색 키&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mariadb 10.3에서 매우 빠르게 쿼리가 실행됩니다. 그러나 mariadb 10.7로 이동하면 최대 6분이 걸립니다!&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;SELECT
    products.code AS productCode,
    products. `name` AS productDescription,
    products.unit_of_measure,
    product_types.fg_or_rp AS productType,                
    product_batches.is_blocked,
    CASE WHEN product_batches.expiry_date &amp;lt; NOW() AND products.is_batch_tracked = 1 THEN
        1
    ELSE
        0
    END AS is_expired,
    sum(pallet_items.quantity) AS quantity_soh
FROM
    products
    INNER JOIN product_batches ON product_batches.product_id = products.id
    INNER JOIN pallet_items ON pallet_items.product_batch_id = product_batches.id
    INNER JOIN pallets ON pallets.id = pallet_items.pallet_id
    INNER JOIN storage_locations ON storage_locations.id = pallets.current_location_id
    INNER JOIN product_types ON products.product_type_id = product_types.id
    INNER JOIN stock_locations ON stock_locations.id = storage_locations.stock_location_id
WHERE
    stock_locations.stock_group_id in(
        SELECT
            id FROM stock_groups
        WHERE
            stock_groups.include_in_stock_on_hand = 1)
GROUP BY
    products.code, products. `name`, unit_of_measure, product_batches.is_blocked, 
    CASE WHEN product_batches.expiry_date &amp;lt; NOW() AND products.is_batch_tracked = 1 THEN
        1
    ELSE
        0
    END, product_types.fg_or_rp, product_batches.is_blocked
ORDER BY
    products.code

&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;설명&quot; 기능을 사용하면 아래와 같이 mariadb 10.7이 mariadb 10.3에 대한 한 섹션의 키를 다르게 선택한 것을 볼 수 있습니다.&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;Mariaadb 10.3(빠른)은 pallet_items 테이블에 다음 키를 사용합니다: &lt;strong papago-id=&quot;4-1&quot;&gt;pallet_items_pallet_id_foreign&lt;/strong&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;반면에 마리아드비 10.7(느림)은 다음을 사용합니다: &lt;strong papago-id=&quot;5-1&quot;&gt;pallet_items_product_batch_id_foreign&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;요청에 따라 쿼리에 대한 전체 &quot;설명&quot;을 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/o7bR4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/o7bR4.png&quot; alt=&quot;Table of the &amp;quot;Explain&amp;quot; output&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 각 테이블에 대한 &quot;테이블 표시&quot; {tablename}이(가) 다음과 같습니다.&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;pre&gt;&lt;code&gt;pallet_types    &quot;CREATE TABLE `pallet_types` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `description` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보관_&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;storage_locations   &quot;CREATE TABLE `storage_locations` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `description` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `entry_x` int(11) DEFAULT NULL,
  `entry_y` int(11) DEFAULT NULL,
  `entry_z` int(11) DEFAULT NULL,
  `exit_x` int(11) DEFAULT NULL,
  `exit_y` int(11) DEFAULT NULL,
  `exit_z` int(11) DEFAULT NULL,
  `status` int(11) DEFAULT NULL,
  `storage_function_id` bigint(20) unsigned DEFAULT 1,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `max_quantity` int(10) unsigned DEFAULT NULL,
  `is_multi_product` tinyint(1) DEFAULT 0,
  `stock_location_id` bigint(20) unsigned DEFAULT 2,
  `client_location_code` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `storage_locations_storage_function_id_foreign` (`storage_function_id`),
  KEY `storage_locations_stock_location_id_foreign` (`stock_location_id`),
  CONSTRAINT `storage_locations_stock_location_id_foreign` FOREIGN KEY (`stock_location_id`) REFERENCES `stock_locations` (`id`),
  CONSTRAINT `storage_locations_storage_function_id_foreign` FOREIGN KEY (`storage_function_id`) REFERENCES `storage_functions` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=770 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;재고_&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;stock_locations &quot;CREATE TABLE `stock_locations` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `stock_group_id` bigint(20) unsigned NOT NULL,
  `description` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `stock_locations_stock_group_id_foreign` (`stock_group_id`),
  CONSTRAINT `stock_locations_stock_group_id_foreign` FOREIGN KEY (`stock_group_id`) REFERENCES `stock_groups` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주식_그룹&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;stock_groups    &quot;CREATE TABLE `stock_groups` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `description` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `include_in_stock_on_hand` tinyint(1) NOT NULL DEFAULT 1,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;팔레트_상태&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;pallet_statuses &quot;CREATE TABLE `pallet_statuses` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `description` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;팔레트_ledger_&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;pallet_ledger_entries   &quot;CREATE TABLE `pallet_ledger_entries` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `pallet_id` bigint(20) unsigned NOT NULL,
  `product_id` bigint(20) unsigned NOT NULL,
  `product_batch_id` bigint(20) unsigned DEFAULT NULL,
  `quantity` decimal(14,4) NOT NULL,
  `event_type` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `reference` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `soh_pallet` decimal(14,4) NOT NULL,
  `user_id` bigint(20) unsigned DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `pallet_ledger_entries_product_id_foreign` (`product_id`),
  KEY `pallet_ledger_entries_product_batch_id_foreign` (`product_batch_id`),
  KEY `pallet_ledger_entries_pallet_id_foreign` (`pallet_id`),
  KEY `pallet_ledger_entries_user_id_foreign` (`user_id`),
  CONSTRAINT `pallet_ledger_entries_pallet_id_foreign` FOREIGN KEY (`pallet_id`) REFERENCES `pallets` (`id`),
  CONSTRAINT `pallet_ledger_entries_product_batch_id_foreign` FOREIGN KEY (`product_batch_id`) REFERENCES `product_batches` (`id`),
  CONSTRAINT `pallet_ledger_entries_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`),
  CONSTRAINT `pallet_ledger_entries_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=231839 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상품들&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;products    &quot;CREATE TABLE `products` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `product_type_id` bigint(20) unsigned DEFAULT NULL,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `code` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `is_batch_tracked` tinyint(1) NOT NULL DEFAULT 1,
  `metric_of_weight` decimal(10,3) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `unit_of_measure` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `cost` decimal(20,10) DEFAULT NULL,
  `unit_ean` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `shrink_ean` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `case_ean` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `shipping_weight` decimal(10,2) DEFAULT NULL,
  `shipping_weight_unit` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `net_weight` decimal(10,2) DEFAULT NULL,
  `net_weight_unit` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `size` decimal(10,2) DEFAULT NULL,
  `size_unit` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `production_line` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `shelf_life_days` int(11) DEFAULT NULL,
  `exclude_from_receiving_stack` tinyint(1) NOT NULL DEFAULT 0,
  `ignore_batch_no_check` tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `products_product_type_id_foreign` (`product_type_id`),
  CONSTRAINT `products_product_type_id_foreign` FOREIGN KEY (`product_type_id`) REFERENCES `product_types` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=738 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제품_타입&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;product_types   &quot;CREATE TABLE `product_types` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `description` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `fg_or_rp` varchar(2) COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci&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;10.7에서 쿼리가 올바른 (더 빠른) 키를 선택하도록 하는 방법에 대한 생각이 있습니까?&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;p&gt;&lt;code&gt;FORCE INDEX (pallet_items_pallet_id_foreign)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 항목에 추가되는 경우:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt; LEFT JOIN pallet_items FORCE INDEX (pallet_items_pallet_id_foreign) ON pallet_items.pallet_id = pallets.id&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제를 해결했습니다!&lt;/font&gt;&lt;/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/73289011/different-search-keys-for-different-versions-of-mariadb&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>mariadb</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/930</guid>
      <comments>https://manysource.tistory.com/930#entry930comment</comments>
      <pubDate>Fri, 27 Oct 2023 22:01:32 +0900</pubDate>
    </item>
    <item>
      <title>호출기능의 파일명, 회선번호, 함수명 출력 - C Prog</title>
      <link>https://manysource.tistory.com/929</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;호출기능의 파일명, 회선번호, 함수명 출력 - C Prog&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;info(), debug(), error() 함수가 포함된 log.c 파일을 만들고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 기능은 파일 이름, 라인 번호 등을 인쇄하지 않고 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 이 기능 중 하나를 호출할 때 호출자의 파일명, 회선번호, 기능명을 덤프하고 싶습니다.&lt;/font&gt;&lt;font 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;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;int info(const char *fname, int lineno, const char *fxname, ...) { /* ... */ }
int debug(const char *fname, int lineno, const char *fxname, ...) { /* ... */ }
int error(const char *fname, int lineno, const char *fxname, ...) { /* ... */ }
&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;info(__FILE__, __LINE__, __func__, ...);
debug(__FILE__, __LINE__, __func__, ...);
error(__FILE__, __LINE__, __func__, ...);
&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;__func__&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C99; gcc, 모드 C89에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__FUNCTION__&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매크로를 사용한다면, 이것을 사용해서 만들 수 있을 것이라고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__FILE__&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__LINE__&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;__FUNCTION__&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;#define INFO(msg) \
    fprintf(stderr, &quot;info: %s:%d: &quot;, __FILE__, __LINE__); \
    fprintf(stderr, &quot;%s&quot;, msg);
&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;__FILE__&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/8884335/print-the-file-name-line-number-and-function-name-of-a-calling-function-c-pro&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/929</guid>
      <comments>https://manysource.tistory.com/929#entry929comment</comments>
      <pubDate>Fri, 27 Oct 2023 22:01:23 +0900</pubDate>
    </item>
    <item>
      <title>데이터 프레임에서 발생하는 문자열 모두 바꾸기</title>
      <link>https://manysource.tistory.com/928</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;저는 '&amp;lt;'로 코딩된 non-detect가 있는 데이터 프레임을 작업하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;때로는 '&amp;lt;' 뒤에 공백이 있을 때도 있고, 때로는 유의하지 않을 때도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;'&amp;lt;2' 또는 '&amp;lt;2'.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;공간이 발생할 때마다 제거하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;data &amp;lt;- data.frame(name = rep(letters[1:3], each = 3), var1 = rep('&amp;lt; 2', 9), var2 = rep('&amp;lt;3', 9))

  name var1 var2 
1    a  &amp;lt; 2   &amp;lt;3
2    b  &amp;lt; 2   &amp;lt;3
3    c  &amp;lt; 2   &amp;lt;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;여기가 제가 해야 할 일입니다.&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;index &amp;lt;- str_detect(unlist(data), '&amp;lt;')
index &amp;lt;- matrix(index, nrow = 3)

data[index] 
#[1] &quot;&amp;lt; 2&quot; &quot;&amp;lt; 2&quot; &quot;&amp;lt; 2&quot; &quot;&amp;lt;3&quot;  &quot;&amp;lt;3&quot;  &quot;&amp;lt;3&quot; 

replacements &amp;lt;- str_replace_all(data[index], &quot;&amp;lt;[ ]+&quot;,&quot;&amp;lt;&quot;) 
replacements
#[1] &quot;&amp;lt;2&quot; &quot;&amp;lt;2&quot; &quot;&amp;lt;2&quot; &quot;&amp;lt;3&quot; &quot;&amp;lt;3&quot; &quot;&amp;lt;3&quot;

data[index] &amp;lt;- replacements

#Error in `[&amp;lt;-.data.frame`(`*tmp*`, index, value = c(&quot;&amp;lt;2&quot;, &quot;&amp;lt;2&quot;, &quot;&amp;lt;2&quot;,  : 
#  unsupported matrix index in replacement
&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;strong papago-id=&quot;5-1&quot;&gt;교체&lt;/strong&gt;하려는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;&amp;lt; &quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(여유를 두고)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;&amp;lt;&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(공백 없음), 그러면 당신이 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lapply&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 프레임에 걸쳐, a와 함께.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gsub&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;교체용:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; data &amp;lt;- data.frame(lapply(data, function(x) {
+                  gsub(&quot;&amp;lt; &quot;, &quot;&amp;lt;&quot;, x)
+              }))
&amp;gt; data
  name var1 var2
1    a   &amp;lt;2   &amp;lt;3
2    a   &amp;lt;2   &amp;lt;3
3    a   &amp;lt;2   &amp;lt;3
4    b   &amp;lt;2   &amp;lt;3
5    b   &amp;lt;2   &amp;lt;3
6    b   &amp;lt;2   &amp;lt;3
7    c   &amp;lt;2   &amp;lt;3
8    c   &amp;lt;2   &amp;lt;3
9    c   &amp;lt;2   &amp;lt;3
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;찾고 바꾸기&quot;에 해당합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;너무 많이 생각하지 마세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나로 시도해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;library(tidyverse)
df &amp;lt;- data.frame(name = rep(letters[1:3], each = 3), var1 = rep('&amp;lt; 2', 9), var2 = rep('&amp;lt;3', 9))

df %&amp;gt;% 
  mutate(var1 = str_replace(var1, &quot; &quot;, &quot;&quot;))
#&amp;gt;   name var1 var2
#&amp;gt; 1    a   &amp;lt;2   &amp;lt;3
#&amp;gt; 2    a   &amp;lt;2   &amp;lt;3
#&amp;gt; 3    a   &amp;lt;2   &amp;lt;3
#&amp;gt; 4    b   &amp;lt;2   &amp;lt;3
#&amp;gt; 5    b   &amp;lt;2   &amp;lt;3
#&amp;gt; 6    b   &amp;lt;2   &amp;lt;3
#&amp;gt; 7    c   &amp;lt;2   &amp;lt;3
#&amp;gt; 8    c   &amp;lt;2   &amp;lt;3
#&amp;gt; 9    c   &amp;lt;2   &amp;lt;3
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모두에 적용&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df %&amp;gt;% 
  mutate_all(funs(str_replace(., &quot; &quot;, &quot;&quot;)))
#&amp;gt;   name var1 var2
#&amp;gt; 1    a   &amp;lt;2   &amp;lt;3
#&amp;gt; 2    a   &amp;lt;2   &amp;lt;3
#&amp;gt; 3    a   &amp;lt;2   &amp;lt;3
#&amp;gt; 4    b   &amp;lt;2   &amp;lt;3
#&amp;gt; 5    b   &amp;lt;2   &amp;lt;3
#&amp;gt; 6    b   &amp;lt;2   &amp;lt;3
#&amp;gt; 7    c   &amp;lt;2   &amp;lt;3
#&amp;gt; 8    c   &amp;lt;2   &amp;lt;3
#&amp;gt; 9    c   &amp;lt;2   &amp;lt;3
&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;str_trim&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;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://reprex.tidyverse.org&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15-1&quot;&gt;repex 패키지&lt;/a&gt;(v0.2.0)에서 2018-03-11에 생성되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 열의 모든 공백을 제거하려면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;data[] &amp;lt;- lapply(data, gsub, pattern = &quot; &quot;, replacement = &quot;&quot;, fixed = TRUE)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 이를 두 번째와 세 번째 열(즉, 첫 번째 열을 제외한 모든 열)로만 제한하려면,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;data[-1] &amp;lt;- lapply(data[-1], gsub, pattern = &quot; &quot;, replacement = &quot;&quot;, fixed = TRUE)
&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;library(dplyr)
library(stringr)

Censor_consistently &amp;lt;-  function(x){
  str_replace(x, '^\\s*([&amp;lt;&amp;gt;])\\s*(\\d+)', '\\1\\2')
}


test_df &amp;lt;- tibble(x = c('0.001', '&amp;lt;0.002', ' &amp;lt; 0.003', ' &amp;gt;  100'),  y = 4:1)

mutate_all(test_df, funs(Censor_consistently))

# A tibble: 4 × 2
x     y
&amp;lt;chr&amp;gt; &amp;lt;chr&amp;gt;
1  0.001     4
2 &amp;lt;0.002     3
3 &amp;lt;0.003     2
4   &amp;gt;100     1
&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;a href=&quot;https://stackoverflow.com/a/49222212/7002525&quot; papago-id=&quot;19-1&quot;&gt;@Nettle의 답변&lt;/a&gt; 업데이트로,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mutate_all()&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;library(tidyverse)

df &amp;lt;- data.frame(
    name = rep( letters[1:3], each = 3 ),
    var1 = rep( '&amp;lt; 2', 9 ),
    var2 = rep( '&amp;lt;3', 9 )
)

df %&amp;gt;%
    mutate( across(
        .cols = everything(),
        ~str_replace( ., &quot; &quot;, &quot;&quot; )
    ) )

#&amp;gt;   name var1 var2
#&amp;gt; 1    a   &amp;lt;2   &amp;lt;3
#&amp;gt; 2    a   &amp;lt;2   &amp;lt;3
#&amp;gt; 3    a   &amp;lt;2   &amp;lt;3
#&amp;gt; 4    b   &amp;lt;2   &amp;lt;3
#&amp;gt; 5    b   &amp;lt;2   &amp;lt;3
#&amp;gt; 6    b   &amp;lt;2   &amp;lt;3
#&amp;gt; 7    c   &amp;lt;2   &amp;lt;3
#&amp;gt; 8    c   &amp;lt;2   &amp;lt;3
#&amp;gt; 9    c   &amp;lt;2   &amp;lt;3
&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;문제가 있어서 &quot;Not Available(사용 불가)&quot;을 대체해야 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NA&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;data &amp;lt;- sapply(data,function(x) {x &amp;lt;- gsub(&quot;Not Available&quot;,NA,x)})
&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;파티에 늦었습니다. 하지만 리드/트레일링 화이트 스페이스만 제거하고 싶다면, R베이스에 함수가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;trimws&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;data &amp;lt;- apply(X = data, MARGIN = 2, FUN = trimws) %&amp;gt;% as.data.frame()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/29271549/replace-all-occurrences-of-a-string-in-a-data-frame&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>DataFrame</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/928</guid>
      <comments>https://manysource.tistory.com/928#entry928comment</comments>
      <pubDate>Fri, 27 Oct 2023 22:01:16 +0900</pubDate>
    </item>
    <item>
      <title>입력 버튼에서 외곽선 테두리를 제거하는 방법</title>
      <link>https://manysource.tistory.com/927</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;onfocus: none&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 도움이 안 됐어요&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 못생긴 단추 테두리를 클릭하면 사라지는 방법은?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;input[type=button] {
  width: 120px;
  height: 60px;
  margin-left: 35px;
  display: block;
  background-color: gray;
  color: white;
  border: none;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;input type=&quot;button&quot; value=&quot;Example Button&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;outline: 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;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
input[type=button] {
    width: 120px;
    height: 60px;
    margin-left: 35px;
    display: block;
    background-color: gray;
    color: white;
    border: none;
    outline: none;
}
&amp;lt;/style&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;Chrome 및 FF에서 개요 집중:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/l0226.jpg&quot; alt=&quot;Remove Chrome button outline in CSS&quot;&gt; &lt;img src=&quot;https://i.stack.imgur.com/leb47.jpg&quot; alt=&quot;Remove Firefox button outline in CSS&quot;&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;6-0&quot;&gt;제거된 버튼 포커스 윤곽선&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/26EnZ.jpg&quot; alt=&quot;Button without outline in CSS&quot;&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;button,
input[type=button] {
  outline: none;
}
button::-moz-focus-inner,
input[type=button]::-moz-focus-inner {
  border: 0;
}

/*
  Accessibility (A11Y)
  Don't forget! User accessibility is important
*/
button:focus,
input[type=button]:focus {
  /* your custom focused styles here */
} 
&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;*:focus {
    outline: 0 !important;
}
&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;outline&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;box-shadow&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;none&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들을 &lt;strong papago-id=&quot;11-1&quot;&gt;중요&lt;/strong&gt;하게 만들겁니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;input[type=button] {
    outline: none !important;
    box-shadow: none !important;
} 
&lt;/code&gt;&lt;/pre&gt; 
&lt;br&gt; The reason for setting the values to **important** is that, if you are using other CSS libraries or frameworks like Bootstrap, it might get overridden.&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;button:focus {
    border: none;
    outline: none;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;outline&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;ul&gt; 
 &lt;li&gt;&lt;code&gt;outline-style&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;outline-width&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;outline-color&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&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;outline: none;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그것은 수용된 답변에서 제시된 것입니다.&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;button {
    outline-style: none;
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;button:focus{outline:none !important;}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;18-1&quot;&gt;부트스트랩&lt;/strong&gt;에 사용되는 경우&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포커스에서 아웃라인 속성을 변경할 때 발생하는 문제를 방지하려면 사용자가 입력 버튼을 탭하거나 클릭할 때 시각적 효과를 부여합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우는 제출 형식이지만 type=&quot;버튼&quot;에도 신청할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;input[type=submit]:focus {
    outline: none !important;
    background-color: rgb(208, 192, 74);
}&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래의 html을 고려할 때:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;button class=&quot;btn-without-border&quot;&amp;gt; Submit &amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS 스타일에서는 다음을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.btn-without-border:focus {
    border: none;
    outline: none;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드는 단추 테두리를 제거하고 단추를 클릭하면 단추 테두리 초점을 비활성화합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 많은 사람들이 언급했듯이,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;selector:focus {outline: none;}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테두리는 &lt;strong papago-id=&quot;25-1&quot;&gt;제거&lt;/strong&gt;되지만 테두리는 키보드 사용자가 단추를 찾을 수 있는 주요 접근성 기능이므로 제거해서는 안 &lt;em papago-id=&quot;25-3&quot;&gt;됩니다&lt;/em&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고민이 미적인 부분인 것 같기 때문에, 윤곽의 색상, 스타일, 폭을 변경하여 사이트 스타일링에 더 잘 맞을 수 있다는 것을 알아야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;selector:focus {
  outline-width: 1px;
  outline-style: dashed;
  outline-color: red;
}
&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;selector:focus {
  outline: 1px dashed red;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;생각보다 아주 간단합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;버튼이 포커스를 맞추면 다음 버튼을 적용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;outline&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 속성:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;button:focus {
    outline: 0 !important;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 제가 사용할 때는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;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&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;font 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;.btn.focus, .btn:focus {
    outline: 0;
    box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, .25);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하는게 좋을거에요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.remove-border.focus, .remove-border:focus {
        outline: 0;
        box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, .25);
 }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;윤곽을 제거하는 것은 접근성의 악몽입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;키보드로 탭을 하는 사람들은 자신이 어떤 항목에 있는지 절대 알 수 없을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 클릭된 단추는 어디론가 이동하거나 윤곽선을 제거해야 하는 경우 특정 클래스 이름을 분리하기 때문에 그대로 두는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.no-outline {
  outline: none;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 필요할 때 언제든지 그 수업을 신청할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;:focus-visible&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그러나 IE:https://caniuse.com/ ?&lt;a href=&quot;https://caniuse.com/?search=focus-visible&quot; papago-id=&quot;38-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;search&lt;/a&gt;=focus-&lt;a href=&quot;https://caniuse.com/?search=focus-visible&quot; papago-id=&quot;38-1&quot; rel=&quot;nofollow noreferrer&quot;&gt; &lt;/a&gt;visible에서는 작동하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은도 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;outline: none&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;&amp;lt;button&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;input[type=button]&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;클릭 시 브라우저-applied 테두리를 제거합니다.&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;Chrome과 Mozilla가 버튼 주변뿐만 아니라 링크된 텍스트 주변에도 이 줄을 추가했기 때문에 저는 제 사이트에서 다음과 같이 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a:focus {outline: none;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저, 링크 및 버튼 모두에 대해 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그건 그렇고, 이것은 (2021년 4월 27일) 하지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;input[type=button]{
   outline:none;
}
input[type=button]::-moz-focus-inner {
   border: 0;
}
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/19886843/how-to-remove-outline-border-from-input-button&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>css</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/927</guid>
      <comments>https://manysource.tistory.com/927#entry927comment</comments>
      <pubDate>Fri, 27 Oct 2023 22:01:08 +0900</pubDate>
    </item>
    <item>
      <title>우커머스 3 온라인 결제 거래 없는 주문에 대한 구글 분석</title>
      <link>https://manysource.tistory.com/926</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우커머스 3 온라인 결제 거래 없는 주문에 대한 구글 분석&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구글 분석에 주문에 대한 정보를 추가하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 통계에는 주문에 대한 정보의 수신이 나와 있지 않습니다.&lt;/font&gt;&lt;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/52174961/google-analytics-integration-for-a-custom-order-received-page-in-woocommerce-3/52190053?noredirect=1#_=_&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;내 테마 디렉토리에 있는 php.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_action( 'woocommerce_thankyou', 'google_analytics_integration', 20 );
function google_analytics_integration(){
    ?&amp;gt;
    &amp;lt;script&amp;gt;
        ga('require', 'ecommerce');
        &amp;lt;?php

        // GET the WC_Order object instance from, the Order ID
        $order = wc_get_order( $order_id );

        $order_key = $order-&amp;gt;get_order_key();

        $transaction_id = $order-&amp;gt;get_transaction_id(); // Doesn't always exist

        $transaction_id = $order_id; // (Or the order key or the transaction ID if it exist)

        ?&amp;gt;
        ga('ecommerce:addTransaction', {
            'id':          '&amp;lt;?php echo $transaction_id; // To be checked ?&amp;gt;',
            'affiliation': '&amp;lt;?php echo 'UA-130000602-1'; // replace by yours ?&amp;gt;',
            'revenue':     '&amp;lt;?php echo $order-&amp;gt;get_total(); ?&amp;gt;',
            'shipping':    '&amp;lt;?php echo $order-&amp;gt;get_shipping_total(); ?&amp;gt;',
            'tax':         '&amp;lt;?php echo $order-&amp;gt;get_total_tax(); ?&amp;gt;',
            'currency':    '&amp;lt;?php echo get_woocommerce_currency(); // Optional ?&amp;gt;'
        }); &amp;lt;?php

        // LOOP START: Iterate through order items
        foreach( $order-&amp;gt;get_items() as $item_id =&amp;gt; $item ) :
        // Get an instance of the WC_Product object
        $product = $item-&amp;gt;get_product();

        // Get the product categories for the product
        $categories = wp_get_post_terms( $item-&amp;gt;get_product_id(), 'product_cat', array( 'fields' =&amp;gt; 'names' ) );
        $category = reset($categories); // Keep only the first product category
        ?&amp;gt;
        ga('ecommerce:addItem', {
            'id':       '&amp;lt;?php echo $transaction_id; ?&amp;gt;',
            'name':     '&amp;lt;?php echo $item-&amp;gt;get_name(); ?&amp;gt;',
            'sku':      '&amp;lt;?php echo $product-&amp;gt;get_sku(); ?&amp;gt;',
            'category': '&amp;lt;?php echo $category; ?&amp;gt;',
            'price':    '&amp;lt;?php echo wc_get_price_excluding_tax($product);  // OR wc_get_price_including_tax($product) ?&amp;gt;',
            'quantity': '&amp;lt;?php echo $item-&amp;gt;get_quantity(); ?&amp;gt;',
            'currency': '&amp;lt;?php echo get_woocommerce_currency(); // Optional ?&amp;gt;'
        });
        &amp;lt;?php
        endforeach; // LOOP END
        ?&amp;gt;
        ga('ecommerce:send');
    &amp;lt;/script&amp;gt;
    &amp;lt;?php
}
&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;header.php에 카운터 코드를 추가했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- Global site tag (gtag.js) - Google Analytics --&amp;gt;
&amp;lt;script async src=&quot;https://www.googletagmanager.com/gtag/js?id=UA-130000602-1&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script&amp;gt;
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());

    gtag('config', 'UA-130000602-1');
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 계정 Google 분석 설정:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트에서 확인된 충돌입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;바닥이 사라집니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더미 데이터의 첫 번째 점검은 정상 작동 여부입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  add_action('wp_head','add_gscript_trans');

        function add_gscript_trans(){?&amp;gt;

        &amp;lt;!-- Google Analytics --&amp;gt;
        &amp;lt;script&amp;gt;
        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

        ga('create', 'UA-130000602-1', 'auto');
        /* To load the ecommerce plugin, use the following command: */
        ga('require', 'ecommerce');
    /* You add transaction data to the shopping cart using the ecommerce:addTransaction command:*/

    ga('ecommerce:addTransaction', {
      'id': '1234',                     // Transaction ID. Required.
      'affiliation': 'Acme Clothing',   // Affiliation or store name.
      'revenue': '11.99',               // Grand Total.
      'shipping': '5',                  // Shipping.
      'tax': '1.29'                     // Tax.
    });

    /* Next, to add items to the shopping cart, you use the ecommerce:addItem command: */

    ga('ecommerce:addItem', {
      'id': '1234',                     // Transaction ID. Required.
      'name': 'Fluffy Pink Bunnies',    // Product name. Required.
      'sku': 'DD23444',                 // SKU/code.
      'category': 'Party Toys',         // Category or variation.
      'price': '11.99',                 // Unit price.
      'quantity': '1'                   // Quantity.
    });
   /* Finally, once you have configured all your ecommerce data in the shopping cart, you send the data to Google Analytics using the ecommerce:send command: */

   ga('ecommerce:send');

    &amp;lt;/script&amp;gt;
    &amp;lt;!-- End Google Analytics --&amp;gt;
    &amp;lt;?php }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 다음 링크를 참조하십시오: 전자 &lt;a href=&quot;https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;7-1&quot;&gt;상거래 트랙&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 페이지가 도움이 될 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/a/54111464/7118098&quot; papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://stackoverflow.com/a/54111464/7118098&lt;/font&gt;&lt;/a&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;owl&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정의되어 있지만 jQuery에서 정의된 것처럼 보입니다.&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;요소 ID에서.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;부엉이 Carousel()이 호출되기 전에 참조하는 요소에 실제로 연결되어 있는지 확인하십시오.부엉이 Carousel()이 호출되기 전에 부엉이 Carousel()이(가) 호출되기 전에 해당 부엉이 Carousel이 지연되지 않았는지 확인하십시오.&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;a href=&quot;https://wordpress.org/plugins/woocommerce-google-analytics-integration/&quot; papago-id=&quot;13-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;WooCommerce Google Analytics&lt;/a&gt; &lt;a href=&quot;https://wordpress.org/plugins/duracelltomi-google-tag-manager/&quot; papago-id=&quot;13-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;통합&lt;/a&gt; &lt;a href=&quot;https://wordpress.org/plugins/woocommerce-google-analytics-integration/&quot; papago-id=&quot;13-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;by&lt;/a&gt; WooCommerce 또는 Duracell을 사용해 보는 것은 어떨까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://wordpress.org/plugins/duracelltomi-google-tag-manager/&quot; papago-id=&quot;13-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;토마스&lt;/a&gt; 가이거의 &lt;a href=&quot;https://wordpress.org/plugins/duracelltomi-google-tag-manager/&quot; papago-id=&quot;13-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;워드프레스&lt;/a&gt;를 위한 토미의&lt;a href=&quot;https://wordpress.org/plugins/duracelltomi-google-tag-manager/&quot; papago-id=&quot;13-3&quot; rel=&quot;nofollow noreferrer&quot;&gt; 구글 태그 매니저&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/54130384/google-analytics-integration-for-orders-without-online-payment-transaction-in-wo&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Wordpress</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/926</guid>
      <comments>https://manysource.tistory.com/926#entry926comment</comments>
      <pubDate>Fri, 27 Oct 2023 22:01:00 +0900</pubDate>
    </item>
    <item>
      <title>파이썬에서 한 줄 한 줄로 사전을 인쇄하는 방법은?</title>
      <link>https://manysource.tistory.com/925</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파이썬에서 한 줄 한 줄로 사전을 인쇄하는 방법은?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 사전입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cars = {'A':{'speed':70,
        'color':2},
        'B':{'speed':60,
        'color':3}}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이걸 이용해서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;for loop&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for keys,values in cars.items():
    print(keys)
    print(values)
&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;B
{'color': 3, 'speed': 60}
A
{'color': 2, 'speed': 70}
&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;B
color : 3
speed : 60
A
color : 2
speed : 70
&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;for x in cars:
    print (x)
    for y in cars[x]:
        print (y,':',cars[x][y])
&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;A
color : 2
speed : 70
B
color : 3
speed : 60
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;json&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;dumps&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 모듈의 함수는 JSON 개체를 올바른 형식의 문자열로 변환한 다음 인쇄할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import json

cars = {'A':{'speed':70, 'color':2},
        'B':{'speed':60, 'color':3}}

print(json.dumps(cars, indent = 4))
&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 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;A&quot;: {&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;color&quot;: 2,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;속도&quot;: 70&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;},&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;B&quot;: {&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;color&quot;: 3,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;속도&quot;: 60&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;}&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;}&lt;/font&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.python.org/2/library/json.html#basic-usage&quot; papago-id=&quot;12-1&quot;&gt;설명서&lt;/a&gt;에는 이 메서드에 대한 유용한 옵션도 많이 나와 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;임의로 깊이 중첩된 명령어와 목록을 처리하는 보다 일반화된 솔루션은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def dumpclean(obj):
    if isinstance(obj, dict):
        for k, v in obj.items():
            if hasattr(v, '__iter__'):
                print k
                dumpclean(v)
            else:
                print '%s : %s' % (k, v)
    elif isinstance(obj, list):
        for v in obj:
            if hasattr(v, '__iter__'):
                dumpclean(v)
            else:
                print v
    else:
        print obj
&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;A
color : 2
speed : 70
B
color : 3
speed : 60
&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;nose test를 실행할 때 sys.stderr을 대신 사용할 수 있도록 통화에서 출력 스트림을 지정할 수 있는 것도 도움이 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import sys

def dump(obj, nested_level=0, output=sys.stdout):
    spacing = '   '
    if isinstance(obj, dict):
        print &amp;gt;&amp;gt; output, '%s{' % ((nested_level) * spacing)
        for k, v in obj.items():
            if hasattr(v, '__iter__'):
                print &amp;gt;&amp;gt; output, '%s%s:' % ((nested_level + 1) * spacing, k)
                dump(v, nested_level + 1, output)
            else:
                print &amp;gt;&amp;gt; output, '%s%s: %s' % ((nested_level + 1) * spacing, k, v)
        print &amp;gt;&amp;gt; output, '%s}' % (nested_level * spacing)
    elif isinstance(obj, list):
        print &amp;gt;&amp;gt; output, '%s[' % ((nested_level) * spacing)
        for v in obj:
            if hasattr(v, '__iter__'):
                dump(v, nested_level + 1, output)
            else:
                print &amp;gt;&amp;gt; output, '%s%s' % ((nested_level + 1) * spacing, v)
        print &amp;gt;&amp;gt; output, '%s]' % ((nested_level) * spacing)
    else:
        print &amp;gt;&amp;gt; output, '%s%s' % (nested_level * spacing, obj)
&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;이 기능을 사용하면 OP의 출력은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{
   A:
   {
      color: 2
      speed: 70
   }
   B:
   {
      color: 3
      speed: 60
   }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개인적으로 더 유용하고 설명력이 있다고 생각했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 약간 덜 간단한 예를 고려하면 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{&quot;test&quot;: [{1:3}], &quot;test2&quot;:[(1,2),(3,4)],&quot;test3&quot;: {(1,2):['abc', 'def', 'ghi'],(4,5):'def'}}
&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;OP가 요청한 해결책은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;test
1 : 3
test3
(1, 2)
abc
def
ghi
(4, 5) : def
test2
(1, 2)
(3, 4)
&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;enhanced 버전에서는 다음과 같은 결과를 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{
   test:
   [
      {
         1: 3
      }
   ]
   test3:
   {
      (1, 2):
      [
         abc
         def
         ghi
      ]
      (4, 5): def
   }
   test2:
   [
      (1, 2)
      (3, 4)
   ]
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음에 이런 기능을 찾는 사람에게 가치를 제공했으면 좋겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.python.org/library/pprint.html#pprint.pprint&quot; rel=&quot;noreferrer&quot; papago-id=&quot;22-0&quot;&gt;&lt;code papago-id=&quot;22-0-0&quot;&gt;pprint.pprint()&lt;/code&gt;&lt;/a&gt; 이 작업에 적합한 도구입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import pprint
&amp;gt;&amp;gt;&amp;gt; cars = {'A':{'speed':70,
...         'color':2},
...         'B':{'speed':60,
...         'color':3}}
&amp;gt;&amp;gt;&amp;gt; pprint.pprint(cars, width=1)
{'A': {'color': 2,
       'speed': 70},
 'B': {'color': 3,
       'speed': 60}}
&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;for key, car in cars.items():
    print(key)
    for attribute, value in car.items():
        print('{} : {}'.format(attribute, value))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인쇄 내용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;A
color : 2
speed : 70
B
color : 3
speed : 60
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 깨끗한 포맷을 선호합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;yaml&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import yaml
print(yaml.dump(cars))
&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;A:
  color: 2
  speed: 70
B:
  color: 3
  speed: 60
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;for car,info in cars.items():
    print(car)
    for key,value in info.items():
        print(key, &quot;:&quot;, value)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;트리의 레벨이 두 개뿐이라는 것을 알고 있는 경우 이 방법을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for k1 in cars:
    print(k1)
    d = cars[k1]
    for k2 in d
        print(k2, ':', d[k2])
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 원라이너를 점검합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;print('\n'.join(&quot;%s\n%s&quot; % (key1,('\n'.join(&quot;%s : %r&quot; % (key2,val2) for (key2,val2) in val1.items()))) for (key1,val1) in cars.items()))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;A
speed : 70
color : 2
B
speed : 60
color : 3
&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;font class=&quot;papago-parent&quot;&gt;또한 임의 수의 하위 사전을 허용하며 모든 데이터 유형에서 작동하는 것처럼 보입니다(값으로 기능하는 사전에서도 테스트했습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def pprint(web, level):
    for k,v in web.items():
        if isinstance(v, dict):
            print('\t'*level, f'{k}: ')
            level += 1
            pprint(v, level)
            level -= 1
        else:
            print('\t'*level, k, &quot;: &quot;, v)
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;###newbie exact answer desired (Python v3):
###=================================
&quot;&quot;&quot;
cars = {'A':{'speed':70,
        'color':2},
        'B':{'speed':60,
        'color':3}}
&quot;&quot;&quot;

for keys, values in  reversed(sorted(cars.items())):
    print(keys)
    for keys,values in sorted(values.items()):
        print(keys,&quot; : &quot;, values)

&quot;&quot;&quot;
Output:
B
color  :  3
speed  :  60
A
color  :  2
speed  :  70

##[Finished in 0.073s]
&quot;&quot;&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;# Declare and Initialize Map
map = {}

map [&quot;New&quot;] = 1
map [&quot;to&quot;] = 1
map [&quot;Python&quot;] = 5
map [&quot;or&quot;] = 2

# Print Statement
for i in map:
  print (&quot;&quot;, i, &quot;:&quot;, map[i])

#  New : 1
#  to : 1
#  Python : 5
#  or : 2
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 써요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cars = {'A':{'speed':70,
        'color':2},
        'B':{'speed':60,
        'color':3}}

print(str(cars).replace(&quot;,&quot;, &quot;,\n&quot;))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{'A': {'speed': 70,
 'color': 2},
 'B': {'speed': 60,
 'color': 3}}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록 이해가 이를 위한 가장 깨끗한 방법이라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;mydict = {a:1, b:2, c:3}

[(print(&quot;key:&quot;, key, end='\t'), print('value:', value)) for key, value in mydict.items()]
&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;MrWonderful 코드 수정하기&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import sys

def print_dictionary(obj, ident):
    if type(obj) == dict:
        for k, v in obj.items():
            sys.stdout.write(ident)
            if hasattr(v, '__iter__'):
                print k
                print_dictionary(v, ident + '  ')
            else:
                print '%s : %s' % (k, v)
    elif type(obj) == list:
        for v in obj:
            sys.stdout.write(ident)
            if hasattr(v, '__iter__'):
                print_dictionary(v, ident + '  ')
            else:
                print v
    else:
        print obj
&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/15785719/how-to-print-a-dictionary-line-by-line-in-python&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Python</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/925</guid>
      <comments>https://manysource.tistory.com/925#entry925comment</comments>
      <pubDate>Fri, 27 Oct 2023 22:00:51 +0900</pubDate>
    </item>
    <item>
      <title>XML로 문자열 이스케이프</title>
      <link>https://manysource.tistory.com/924</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML로 문자열 이스케이프&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML 요소의 내용을 채우는 데 사용할 수 있는 문자열을 이스케이프하고 이스케이프 해제하는 데 사용할 수 있는 C# 함수가 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 VSTS 2008 + C# + .Net 3.0을 사용하고 있습니다.&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;편집 1: 단순하고 짧은 XML 파일을 연결하고 있고 직렬화를 사용하지 않기 때문에 손으로 명시적으로 XML 문자를 탈출해야 합니다. 예를 들어 다음을 입력해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&amp;lt;b&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안으로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;foo&amp;gt;&amp;lt;/foo&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그래서 탈출 끈이 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&amp;lt;b&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 그것을 fo 요소에 넣습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.security.securityelement.escape(VS.80).aspx&quot; rel=&quot;noreferrer&quot; 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;/a&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;public static string XmlEscape(string unescaped)
{
    XmlDocument doc = new XmlDocument();
    XmlNode node = doc.CreateElement(&quot;root&quot;);
    node.InnerText = unescaped;
    return node.InnerXml;
}

public static string XmlUnescape(string escaped)
{
    XmlDocument doc = new XmlDocument();
    XmlNode node = doc.CreateElement(&quot;root&quot;);
    node.InnerXml = escaped;
    return node.InnerText;
}
&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;편집: &quot;간단하고 짧은 XML 파일을 연결하고 있고 직렬화를 사용하지 않으므로 손으로 명시적으로 XML 문자를 탈출해야 합니다.&quot;라고 말합니다.&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;em papago-id=&quot;9-1&quot;&gt;강력히&lt;/em&gt; 권하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML API를 사용하여 모든 작업을 수행합니다. 원본 파일을 읽고 필요에 따라 두 문서를 하나의 문서로 병합합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XmlDocument.ImportNode&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;XML 구문 분석기/포맷을 직접 작성하고 싶지는 않을 것입니다.&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;11&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;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 papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;무엇을 의미하는지는 정확히 알 수 없지만, 일반적으로 XML API가 이 작업을 수행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;노드에 텍스트를 설정하면 필요한 모든 것이 자동으로 빠져나갑니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어,&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;LINQ에서 XML로의 예제:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;using System;
using System.Xml.Linq;

class Test
{
    static void Main()
    {
        XElement element = new XElement(&quot;tag&quot;,
                                        &quot;Brackets &amp;amp; stuff &amp;lt;&amp;gt;&quot;);

        Console.WriteLine(element);
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DOM 예제:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;using System;
using System.Xml;

class Test
{
    static void Main()
    {
        XmlDocument doc = new XmlDocument();
        XmlElement element = doc.CreateElement(&quot;tag&quot;);
        element.InnerText = &quot;Brackets &amp;amp; stuff &amp;lt;&amp;gt;&quot;;
        Console.WriteLine(element.OuterXml);
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 예제의 출력:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;tag&amp;gt;Brackets &amp;amp;amp; stuff &amp;amp;lt;&amp;amp;gt;&amp;lt;/tag&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;물론 XML 탈출을 원한다는 가정입니다.&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;한 줄 탈출에 대해 @sehe에게 감사드립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var escaped = new System.Xml.Linq.XText(unescaped).ToString();
&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;var unescapedAgain = System.Xml.XmlReader.Create(new StringReader(&quot;&amp;lt;r&amp;gt;&quot; + escaped + &quot;&amp;lt;/r&amp;gt;&quot;)).ReadElementString();
&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;XML을 처리하려면 항상 XML API를 사용해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들은 당신을 위해 모든 탈출과 탈출을 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열을 추가하여 XML을 만들지 마십시오.&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;그리고 이 질문을 발견했을 때의 나처럼 XML 일련번호를 읽을 때처럼 XML 노드 이름을 피하기 위해서는 가장 쉬운 방법을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;XmlConvert.EncodeName(string nameToEscape)
&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;또한 XML 요소에 대한 공백과 유효하지 않은 문자도 피할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.security.securityelement.escape%28VS.80%29.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://msdn.microsoft.com/en-us/library/system.security.securityelement.escape%28VS.80%29.aspx&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;strong papago-id=&quot;25-1&quot;&gt;태그는 반환되지 않습니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void Main()
{
    XmlString(&quot;Brackets &amp;amp; stuff &amp;lt;&amp;gt; and \&quot;quotes\&quot;&quot;).Dump();
}

public string XmlString(string text)
{
    return new XElement(&quot;t&quot;, text).LastNode.ToString();
} 
&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;이렇게 하면 전달된 값만 XML 인코딩 형식으로 반환됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Brackets &amp;amp;amp; stuff &amp;amp;lt;&amp;amp;gt; and &quot;quotes&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경고: 네크로맨싱&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;여전히 Darin Dimitrov의 답변 + 시스템.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;보안.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;보안 요소.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이스케이프( 문자열)가 완료되지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML 1.1에서 가장 간단하고 안전한 방법은 모든 것을 인코딩하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;맘에 들다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;#09;&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;\t에 대하여&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML 1.0에서는 전혀 지원되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&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;XML 1.0의 경우 한 가지 해결 방법은 문자를 포함하는 텍스트를 기본 64로 인코딩하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//string EncodedXml = SpecialXmlEscape(&quot;привет мир&quot;);
//Console.WriteLine(EncodedXml);
//string DecodedXml = XmlUnescape(EncodedXml);
//Console.WriteLine(DecodedXml);
public static string SpecialXmlEscape(string input)
{
    //string content = System.Xml.XmlConvert.EncodeName(&quot;\t&quot;);
    //string content = System.Security.SecurityElement.Escape(&quot;\t&quot;);
    //string strDelimiter = System.Web.HttpUtility.HtmlEncode(&quot;\t&quot;); // XmlEscape(&quot;\t&quot;); //XmlDecode(&quot;&amp;amp;#09;&quot;);
    //strDelimiter = XmlUnescape(&quot;&amp;amp;#59;&quot;);
    //Console.WriteLine(strDelimiter);
    //Console.WriteLine(string.Format(&quot;&amp;amp;#{0};&quot;, (int)';'));
    //Console.WriteLine(System.Text.Encoding.ASCII.HeaderName);
    //Console.WriteLine(System.Text.Encoding.UTF8.HeaderName);


    string strXmlText = &quot;&quot;;

    if (string.IsNullOrEmpty(input))
        return input;


    System.Text.StringBuilder sb = new StringBuilder();

    for (int i = 0; i &amp;lt; input.Length; ++i)
    {
        sb.AppendFormat(&quot;&amp;amp;#{0};&quot;, (int)input[i]);
    }

    strXmlText = sb.ToString();
    sb.Clear();
    sb = null;

    return strXmlText;
} // End Function SpecialXmlEscape
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML 1.0:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static string Base64Encode(string plainText)
{
    var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
    return System.Convert.ToBase64String(plainTextBytes);
}

public static string Base64Decode(string base64EncodedData)
{
    var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
    return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
}
&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;font class=&quot;papago-parent&quot;&gt;XmlDocument에 대해서는 테스트를 하지 않았지만 훨씬 빠른 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static string XmlEncode(string value)
{
    System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings 
    {
        ConformanceLevel = System.Xml.ConformanceLevel.Fragment
    };

    StringBuilder builder = new StringBuilder();

    using (var writer = System.Xml.XmlWriter.Create(builder, settings))
    {
        writer.WriteString(value);
    }

    return builder.ToString();
}

public static string XmlDecode(string xmlEncodedValue)
{
    System.Xml.XmlReaderSettings settings = new System.Xml.XmlReaderSettings
    {
        ConformanceLevel = System.Xml.ConformanceLevel.Fragment
    };

    using (var stringReader = new System.IO.StringReader(xmlEncodedValue))
    {
        using (var xmlReader = System.Xml.XmlReader.Create(stringReader, settings))
        {
            xmlReader.Read();
            return xmlReader.Value;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타사 라이브러리 사용(&lt;a href=&quot;https://www.nuget.org/packages/Newtonsoft.Json/&quot; papago-id=&quot;36-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Newtonsoft)&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.nuget.org/packages/Newtonsoft.Json/&quot; papago-id=&quot;36-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Json&lt;/a&gt;)을 대안으로:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static string XmlEscape(string unescaped)
{
    if (unescaped == null) return null;
    return JsonConvert.SerializeObject(unescaped); ;
}

public static string XmlUnescape(string escaped)
{
    if (escaped == null) return null;
    return JsonConvert.DeserializeObject(escaped, typeof(string)).ToString();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이스케이프 문자열의 예:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;a&amp;lt;b&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;==&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;a&amp;amp;lt;b&quot;&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;&amp;lt;foo&amp;gt;&amp;lt;/foo&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 class=&quot;papago-parent&quot;&gt;==&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;foo&amp;amp;gt;&amp;amp;lt;/foo&amp;amp;gt;&quot;&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;40-0&quot;&gt;참고:&lt;/strong&gt; 최신 버전에서는 위에 작성된 코드가 이스케이프와 함께 작동하지 않을 수 있으므로 문자열을 이스케이프하는 방법을 지정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static string XmlEscape(string unescaped)
{
    if (unescaped == null) return null;
    return JsonConvert.SerializeObject(unescaped, new JsonSerializerSettings()
    {
        StringEscapeHandling = StringEscapeHandling.EscapeHtml
    });
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이스케이프 문자열의 예:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;a&amp;lt;b&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;==&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;a\u003cb&quot;&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;&amp;lt;foo&amp;gt;&amp;lt;/foo&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;==&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;\u003cfoo\u003e\u003c/foo\u003e&quot;&lt;/code&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;strong papago-id=&quot;44-0&quot;&gt;SecurityElementEscape&lt;/strong&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;SecurityElement에서 문자열을 사용하기 전에 문자열에서 잘못된 문자를 바꾸려면 이 메서드를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SecurityElement에서 잘못된 문자가 이스케이프되지 않고 사용되는 경우 인수&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예외가 적용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 표는 잘못된 XML 문자와 해당 이스케이프된 동치 문자를 보여 줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/c48zp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/c48zp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/api/system.security.securityelement.escape?view=net-5.0&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://learn.microsoft.com/en-us/dotnet/api/system.security.securityelement.escape?view=net-5.0&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1132494/string-escape-into-xml&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>XML</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/924</guid>
      <comments>https://manysource.tistory.com/924#entry924comment</comments>
      <pubDate>Fri, 27 Oct 2023 22:00:40 +0900</pubDate>
    </item>
    <item>
      <title>배열에서 요소를 빠르게 교체하는 방법 - C</title>
      <link>https://manysource.tistory.com/923</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열에서 요소를 빠르게 교체하는 방법 - C&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같은 int가 있다고 가정해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const int size = 100000;
int array[size];
//set some items to 0 and other items to 1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;123456과 같이 1의 값을 가지는 모든 아이템을 다른 값으로 교체하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 다음과 같은 간단한 방법으로 구현할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for(int i = 0; i &amp;lt; size ; i++){
    if(array[i] != 0) 
        array[i] = 123456;
}
&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;호기심 때문에, x86 속임수 같은 것으로 이것을 하는 더 빠른 방법이 있을까요, 아니면 이것이 프로세서에 가장 적합한 코드일까요?&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;처음에 0과 1이 있는 특정한 경우에는 다음이 더 &lt;em papago-id=&quot;4-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;일반적인 C로는 훨씬 더 잘 할 수 없을 것입니다. 존재할 수 있는 &quot;x86 속임수&quot;를 이용하려면 조립 과정에 뛰어들어야 할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for(int i = 0; i &amp;lt; size ; i++){
  array[i] *= 123456;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;5&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;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;#include &amp;lt;time.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;

size_t diff(struct timespec *start, struct timespec *end)
{
  return (end-&amp;gt;tv_sec - start-&amp;gt;tv_sec)*1000000000 + end-&amp;gt;tv_nsec - start-&amp;gt;tv_nsec;
}

int main(void)
{
  const size_t size = 1000000;
  int array[size];

  for(size_t i=0; i&amp;lt;size; ++i) {
    array[i] = rand() &amp;amp; 1;
  }

  struct timespec start, stop;

  clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &amp;amp;start);
  for(size_t i=0; i&amp;lt;size; ++i) {
    array[i] *= 123456;
    //if(array[i]) array[i] = 123456;
  }
  clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &amp;amp;stop);

  printf(&quot;size: %zu\t nsec: %09zu\n&quot;, size, diff(&amp;amp;start, &amp;amp;stop));
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;h2 papago-id=&quot;7&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;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴퓨터: 쿼드코어 AMD 현상 @2.5&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;GHz, Linux, GCC 4.7, 컴파일된&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ gcc arr.c -std=gnu99 -lrt -O3 -march=native
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;if&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; : 전 : ~5-10ms&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&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 class=&quot;papago-parent&quot;&gt; : 전 : ~1.3ms&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신과 같은 작은 배열의 경우 다른 알고리즘을 찾으려 해도 소용이 없고, 값이 특정 패턴에 있지 않으면 간단한 루프만이 가능합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;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;for(int i = 0; i &amp;lt; size ; i++){
  array[i] = (~(array[i]-1) &amp;amp; 123456);
}
&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;저는 SchighShagh와 같은 벤치마크를 통해 실행합니다. 제 설정에 거의 차이가 없거나 전혀 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 당신의 경우에 따라 다를 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기자들을 멈춰라!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;:&quot; 사이의 인수가 상수인 경우 x86이 3항 연산자를 &quot;브랜치 해제&quot;할 수 있다는 것을 방금 기억했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드를 고려합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for(size_t i=0; i&amp;lt;size; ++i) {
    array[i] = array[i] ? 123456 : 0;
}
&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;pre&gt;&lt;code&gt;  for(size_t i=0; i&amp;lt;size; ++i) {
00E3104C  xor         eax,eax  
00E3104E  mov         edi,edi  
        array[i] = array[i] ? 123456 : 0;
00E31050  mov         edx,dword ptr [esi+eax*4]  
00E31053  neg         edx  
00E31055  sbb         edx,edx  
00E31057  and         edx,1E240h  
00E3105D  mov         dword ptr [esi+eax*4],edx  
00E31060  inc         eax  
00E31061  cmp         eax,5F5E100h  
00E31066  jb          wmain+50h (0E31050h)  
    }
&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;성능 면에서는 원래의 Schigh Schagh 솔루션과 동등한 수준이거나 조금 나은 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 그것은 더 읽기 쉽고 더 유연합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 0과 1이 다른 값을 갖는 배열[i]에서 작동할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최종적으로, 벤치마크를 하고 분해 과정을 엿봅니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어레이가 캐시에 들어갈 정도로 작으므로 SIMD를 사용할 가치가 있어야 합니다. (테스트되지 않음)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  mov ecx, size
  lea esi, [array + ecx * 4]
  neg ecx
  pxor xmm0, xmm0
  movdqa xmm1, [_vec4_123456]  ; value of { 123456, 123456, 123456, 123456 }
_replaceloop:
  movdqa xmm2, [esi + ecx * 4] ; assumes the array is 16 aligned, make that true
  add ecx, 4
  pcmpeqd xmm2, xmm0
  pandn xmm2, xmm1
  movdqa [esi + ecx * 4 - 16], xmm2
  jnz _replaceloop
&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;2로 풀면 도움이 될 수 있습니다.&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;SSE 4.1이 있다면 다음과 같이 SchighShagh의 곱셈 트릭을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pmulld&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;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 알고리즘의 다양한 버전을 프로파일링하는 Win32 코드입니다(기본 릴리스 빌드를 사용하여 VS2010 Express를 사용하여 컴파일됨):-&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;windows.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;

const size_t
  size = 0x1D4C00;

_declspec(align(16)) int
  g_array [size];

_declspec(align(16)) int
  _vec4_123456 [] = { 123456, 123456, 123456, 123456 };

void Test (void (*fn) (size_t, int *), char *test)
{
  printf (&quot;Executing test: %s\t&quot;, test);

  for(size_t i=0; i&amp;lt;size; ++i) {
    g_array[i] = rand() &amp;amp; 1;
  }

  LARGE_INTEGER
    start,
    end;

  QueryPerformanceCounter (&amp;amp;start);

  fn (size, g_array);

  QueryPerformanceCounter (&amp;amp;end);

  printf(&quot;size: %u\t count: %09u\n&quot;, size, (int) (end.QuadPart - start.QuadPart));
}

void Test1 (size_t size, int *array)
{
  for(size_t i=0; i&amp;lt;size; ++i) {
    array[i] *= 123456;
  }
}

void Test2 (size_t size, int *array)
{
  for(size_t i=0; i&amp;lt;size; ++i) {
    if(array[i]) array[i] = 123456;
  }
}

void Test3 (size_t array_size, int *array)
{
  __asm
  {
    mov edi,array
    mov ecx, array_size 
    lea esi, [edi + ecx * 4]
    neg ecx
    pxor xmm0, xmm0
    movdqa xmm1, [_vec4_123456]  ; value of { 123456, 123456, 123456, 123456 }
_replaceloop:
    movdqa xmm2, [esi + ecx * 4] ; assumes the array is 16 aligned, make that true
    add ecx, 4
    pcmpeqd xmm2, xmm0
    pandn xmm2, xmm1
    movdqa [esi + ecx * 4 - 16], xmm2
    jnz _replaceloop
  }
}

void Test4 (size_t array_size, int *array)
{
  array_size = array_size * 8 / 12;

  __asm
  {
        mov edi,array
        mov ecx,array_size
        lea esi,[edi+ecx*4]
                                      lea edi,[edi+ecx*4]
        neg ecx
                                      mov edx,[_vec4_123456]
        pxor xmm0,xmm0
        movdqa xmm1,[_vec4_123456]
replaceloop:
        movdqa xmm2,[esi+ecx*4]
                                      mov eax,[edi]
                                      mov ebx,[edi+4]
        movdqa xmm3,[esi+ecx*4+16]
                                      add edi,16
        add ecx,9
                                      imul eax,edx    
        pcmpeqd xmm2,xmm0
                                      imul ebx,edx
        pcmpeqd xmm3,xmm0
                                      mov [edi-16],eax
                                      mov [edi-12],ebx
        pandn xmm2,xmm1
                                      mov eax,[edi-8]
                                      mov ebx,[edi-4]
        pandn xmm3,xmm1
                                      imul eax,edx    
        movdqa [esi+ecx*4-36],xmm2
                                      imul ebx,edx
        movdqa [esi+ecx*4-20],xmm3
                                      mov [edi-8],eax
                                      mov [edi-4],ebx
        loop replaceloop
  }
}

int main()
{
    Test (Test1, &quot;Test1 - mul&quot;);
    Test (Test2, &quot;Test2 - branch&quot;);
    Test (Test3, &quot;Test3 - simd&quot;);
    Test (Test4, &quot;Test4 - simdv2&quot;);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트용으로 준비되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if()...&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 곱하기를 사용하는 C, 해럴드의 심드 버전과 내 심드 버전.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 번 실행하면(프로파일을 생성할 때는 여러 번 실행하여 결과를 평균해야 함) 분기 버전을 제외한 모든 버전 간에는 현저하게 느린 차이가 거의 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 그다지 놀라운 일이 아닙니다. 왜냐하면 알고리즘은 각 메모리 항목에 대해 거의 작업을 하지 않기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 CPU와 메모리 사이의 대역폭이 실제 제한 요소라는 것을 의미합니다. CPU가 데이터를 프리페칭하는 데 도움을 주지만(ia32의 데이터 검출 및 프리페칭 선형) CPU가 메모리를 따라잡기 위해 끊임없이 대기하고 있음을 의미합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 배열이나 다른 데이터 구조를 사용하여 하나로 설정한 요소의 인덱스를 추적한 다음 해당 요소만 방문할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나로 설정된 요소가 거의 없는 경우 가장 효과적입니다.&lt;/font&gt;&lt;/p&gt;&lt;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;for(int i = 0; i &amp;lt; size ; i++){
  array[i] = ((123456 &amp;lt;&amp;lt; array[i]) - 123456);
}
&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;EDIT: 비트 와이즈 연산을 왼쪽 시프트로 변경했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인라인 어셈블리를 사용하여 배열 할당 속도를 높이는 한 가지 방법이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래와 같이.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;string.h&amp;gt;
#include&amp;lt;stdlib.h&amp;gt;

const int size = 100000; 
void main(void) {
  int array[size];
  int value = 1000;

  __asm__ __volatile__(&quot;cld\n\t&quot;
          &quot;rep\n\t&quot;
          &quot;stosl\n\t&quot;
          :
          :&quot;c&quot;(size*4), &quot;a&quot;(value), &quot;D&quot;(array)
          :
         );

  printf(&quot;Array[0] : %d \n&quot;, array[0]);
}
&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;이것은 배열 값을 할당하기 위해 평 c 프로그램과 비교했을 때 속도가 되어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 &lt;strong papago-id=&quot;33-1&quot;&gt;스토스&lt;/strong&gt; 명령어도 4클럭이 소요됩니다.&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/16231110/fast-way-to-replace-elements-in-array-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/923</guid>
      <comments>https://manysource.tistory.com/923#entry923comment</comments>
      <pubDate>Fri, 27 Oct 2023 22:00:30 +0900</pubDate>
    </item>
    <item>
      <title>브루로 PHP를 7.4 macOS Catalina로 업데이트</title>
      <link>https://manysource.tistory.com/922</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브루로 PHP를 7.4 macOS Catalina로 업데이트&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;PHP 버전을 다음으로 업데이트하려고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;7.4&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;맥OS 카탈리나에서 브루와 함께.&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;brew install php@7.4&lt;/code&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;php -v&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;PHP 7.3.11&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 어떻게 해야 합니까?&lt;/font&gt;&lt;/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&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;brew doctor&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;blockquote&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;홈브루의 sbin을 PATH에서 찾을 수 없지만 /usr/local/sbin에 실행 파일을 넣는 수식을 설치했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 echo 'export PATH=&quot;/usr/local/sbin:$PATH' &amp;gt; ~/.profile과 같은 경로 설정을 고려해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/59150210/791609&quot; papago-id=&quot;12-1&quot;&gt;php@7.2&lt;/a&gt;에 대한 저의 비슷한 답변을 보실 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;brew install php@7.4&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;brew link --force --overwrite php@7.4&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;brew services start php@7.4&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;export PATH=&quot;/usr/local/opt/php@7.4/bin:$PATH&quot;&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;export PATH=&quot;/usr/local/opt/php@7.4/sbin:$PATH&quot;&lt;/code&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;시도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;brew update
brew upgrade php
php -v
brew services start php
&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;brew services restart php
&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;Apache 서버를 사용하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo apachectl restart
&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;sudo nginx -s reload
&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;brew unlink php@7.3
brew link php@7.4
&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;시스템 요구에 따라 php를 최신 8.1.2에서 7.4로 다운그레이드하려는 사람이 있다면 홈브루와 함께 아래 명령을 사용해 보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHP 7.4 설치 중:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;brew install php@7.4
brew services restart php
brew unlink php@8.1
brew link php@7.4
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;echo 'export PATH=&quot;/usr/local/opt/php@7.4/bin:$PATH&quot;' &amp;gt;&amp;gt; ~/.zshrc
echo 'export PATH=&quot;/usr/local/opt/php@7.4/sbin:$PATH&quot;' &amp;gt;&amp;gt; ~/.zshrc
&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;export PATH=&quot;/usr/local/opt/php@7.4/bin:$PATH&quot;
export PATH=&quot;/usr/local/opt/php@7.4/sbin:$PATH&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;MacOS 단말기를 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;vScode에서 터미널을 사용하지 마십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 최근 이 문제에 직면했습니다. 여기 있는 모든 제안은 실행할 때까지 작동하지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;xcode-select --install
&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;그리고 전에 시도하던 명령어를 실행하니 오류가 멈췄습니다. 제 경우는 php였습니다.&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;dyld: 라이브러리가 로드되지 않았습니다. /usr/local/opt/opt/opt/opt/lib/libldap-2.4.2.dylib 참조: /usr/local/opt/php@7.4/bin/php 이유: image not found zsh: abort php -v&lt;/font&gt;&lt;/p&gt;&lt;ol&gt; 
 &lt;li papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디렉토리로 이동: cd/usr/local&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 위치 찾기: /usr/local/ -name libphp7.so 에서 파일 위치를 찾습니다. ( 그런 다음 /usr/local//Cellar/php@7.4/7.4.23/lib/httpd/modules/libphp7.so 에서 파일 위치를 가져옵니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;알겠습니다.)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sudovim /etc/apache2/httpd.conf를 사용하여 파일을 엽니다.&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;다음으로 줄을 찾습니다: /libphp7.so&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라인의 코멘트를 해제하고 다음을 기준으로 라인을 업데이트합니다: LoadModule php7_module /usr/local//Cellar/php@7.4/7.4.23/lib/httpd/modules/libphp7.so&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 기준으로 아파치 재시작: sudo apachectl 재시작&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;http://localhost/phpinfo.php에 액세스하여 PHP 확인&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/64684713/update-php-to-7-4-macos-catalina-with-brew&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>php</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/922</guid>
      <comments>https://manysource.tistory.com/922#entry922comment</comments>
      <pubDate>Fri, 27 Oct 2023 22:00:20 +0900</pubDate>
    </item>
    <item>
      <title>Karaf - 최대 절전 모드 - MariaDB &amp;quot; 스키마 업데이트를 완료할 수 없습니다&amp;quot; 오류</title>
      <link>https://manysource.tistory.com/921</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Karaf - 최대 절전 모드 - MariaDB &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;&lt;strong papago-id=&quot;1-1&quot;&gt;Karaf 4.0.4&lt;/strong&gt; + &lt;strong papago-id=&quot;1-3&quot;&gt;Hibernate 4.3.6&lt;/strong&gt;으로 프로젝트를 설정하려고 합니다&lt;strong papago-id=&quot;1-3&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;Final&lt;/strong&gt; 그리고 &lt;strong papago-id=&quot;1-5&quot;&gt;MariaDB 10.0.23&lt;/strong&gt;을 데이터베이스로 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/cschneider/Karaf-Tutorial/tree/master/db/examplejpa&quot; rel=&quot;nofollow&quot; papago-id=&quot;2-1&quot;&gt;이 자습서&lt;/a&gt;를 따라 해 보았지만 다음과 같습니다.&lt;/font&gt;&lt;/p&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;datasource blue.xml을 사용하는 대신 pax-jdbc-config를 사용하여 DataSource를 생성하고자 합니다(데이터 소스 Blueprint가 더 이상 사용되지 않으므로).&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;MySQL 대신 MariaDB를 사용해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 MariaDB 드라이버를 사용하기 위해 일부 구성 파일을 변경해야 했다고 생각합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과적으로 제 구성은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;6-0&quot;&gt;organ.ops4j.&lt;/strong&gt; &lt;strong papago-id=&quot;6-0&quot;&gt;datas&lt;/strong&gt;ource-sample&lt;strong papago-id=&quot;6-0&quot;&gt; prj&lt;/strong&gt;.cfg:&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;osgi.jdbc.driver.name=mariadb
osgi.jdbc.driver.class=org.mariadb.jdbc.Driver
url=jdbc:mysql://DB_SERVER:3306/sampleprjdb
dataSourceName=sampleprj
databaseName=sampleprjdb
user=myuser
password=mypassword
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 데이터베이스 자격 증명과 데이터베이스 이름이 정확하다고 확신합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sample-prj bundle &amp;gt; &lt;strong papago-id=&quot;8-1&quot;&gt;persistence.xml&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt; 
&amp;lt;persistence version=&quot;2.0&quot;
    xmlns=&quot;http://java.sun.com/xml/ns/persistence&quot;    xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
    xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd&quot;&amp;gt;
    &amp;lt;persistence-unit name=&quot;sampleprj&quot; transaction-type=&quot;JTA&quot;&amp;gt;
        &amp;lt;provider&amp;gt;org.hibernate.jpa.HibernatePersistenceProvider&amp;lt;/provider&amp;gt;
        &amp;lt;jta-data-source&amp;gt;
            osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/sampleprj)      
        &amp;lt;/jta-data-source&amp;gt;
        &amp;lt;properties&amp;gt;
            &amp;lt;property name=&quot;hibernate.dialect&quot;     value=&quot;org.hibernate.dialect.MySQL5Dialect&quot; /&amp;gt;
            &amp;lt;property name=&quot;hibernate.hbm2ddl.auto&quot; value=&quot;update&quot; /&amp;gt;
            &amp;lt;property name=&quot;hibernate.show_sql&quot; value=&quot;true&quot; /&amp;gt;
            &amp;lt;property name=&quot;hibernate.format_sql&quot; value=&quot;true&quot; /&amp;gt;
        &amp;lt;/properties&amp;gt;
    &amp;lt;/persistence-unit&amp;gt;
&amp;lt;/persistence&amp;gt;
&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;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;jta-data-source&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소, 나는 위의 값과 위의 값 둘다 시도해보았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;osgi:service/sampleprj&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 그들은 작동하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 다른 시도를 해보았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;hibernate.dialect&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;s 대부분의 스키마 업데이트 오류는 잘못된 방언으로 인해 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sample-prj bundle &amp;gt; &lt;strong papago-id=&quot;13-1&quot;&gt;Blueprint.xml:&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;blueprint default-activation=&quot;eager&quot;
    xmlns=&quot;http://www.osgi.org/xmlns/blueprint/v1.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
    xmlns:jpa=&quot;http://aries.apache.org/xmlns/jpa/v1.0.0&quot; xmlns:tx=&quot;http://aries.apache.org/xmlns/transactions/v1.0.0&quot;

    xsi:schemaLocation=&quot;
            http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0 
            http://www.w3.org/2001/XMLSchema-instance     http://www.w3.org/2001/XMLSchema-instance 
            http://aries.apache.org/xmlns/jpa/v1.0.0 http://aries.apache.org/xmlns/jpa/v1.0.0 
            http://aries.apache.org/xmlns/transactions/v1.0.0 http://aries.apache.org/xmlns/transactions/v1.0.0 &quot;&amp;gt;

    &amp;lt;bean id=&quot;dbService&quot;
        class=&quot;org.sample.project.persistence.mariadb.impl.DbServiceImpl&quot;&amp;gt;
        &amp;lt;jpa:context unitname=&quot;sampleprj&quot; property=&quot;em&quot;/&amp;gt;
        &amp;lt;tx:transaction method=&quot;*&quot; value=&quot;Required&quot; /&amp;gt;
    &amp;lt;/bean&amp;gt;

    &amp;lt;service ref=&quot;dbService&quot; interface=&quot;org.sample.project.IDbService&quot; /&amp;gt;

&amp;lt;/blueprint&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sample-prj bundle &amp;gt; &lt;strong papago-id=&quot;14-1&quot;&gt;pom.xml&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;&amp;lt;project&amp;gt;

...

&amp;lt;build&amp;gt;
    &amp;lt;plugins&amp;gt;
        &amp;lt;plugin&amp;gt;
            &amp;lt;groupId&amp;gt;org.apache.felix&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;maven-bundle-plugin&amp;lt;/artifactId&amp;gt;
            &amp;lt;extensions&amp;gt;true&amp;lt;/extensions&amp;gt;
            &amp;lt;configuration&amp;gt;
                &amp;lt;instructions&amp;gt;
                    &amp;lt;Bundle-SymbolicName&amp;gt;${project.artifactId}&amp;lt;/Bundle-SymbolicName&amp;gt;
                    &amp;lt;Meta-Persistence&amp;gt;META-INF/persistence.xml&amp;lt;/Meta-Persistence&amp;gt;
                    &amp;lt;Bundle-Version&amp;gt;1.0.0&amp;lt;/Bundle-Version&amp;gt;
                    &amp;lt;Bundle-ManifestVersion&amp;gt;2&amp;lt;/Bundle-ManifestVersion&amp;gt;
                    &amp;lt;Manifest-Version&amp;gt;1&amp;lt;/Manifest-Version&amp;gt;
                    &amp;lt;Import-Package&amp;gt;
                    org.apache.felix.service.command;version=&quot;[0.6,1)&quot;,
                    org.apache.felix.gogo.commands;version=&quot;[0.6,1)&quot;,
                    org.apache.karaf.shell.console;version=&quot;[2.2,4)&quot;,
                    org.hibernate.proxy,
                    javassist.util.proxy,
                    *
                    &amp;lt;/Import-Package&amp;gt;
                &amp;lt;/instructions&amp;gt;
            &amp;lt;/configuration&amp;gt;
        &amp;lt;/plugin&amp;gt;
    &amp;lt;/plugins&amp;gt;
&amp;lt;/build&amp;gt;

...

&amp;lt;/project&amp;gt;
&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;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과 매니페스트도 확인할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MF포함&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Meta-Persistence&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기여하다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;5&quot;&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;17-1&quot;&gt;Karaf (clean) start&lt;/strong&gt;에서는 다음 명령을 사용하여 종속 번들을 설치합니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;feature:repo-add mvn:org.ops4j.pax.jdbc/pax-jdbc-features/0.5.0/xml/features
feature:install transaction jndi pax-jdbc-mariadb pax-jdbc-config pax-jdbc-pool-dbcp2 jpa hibernate
&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;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;bundle:list&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;strong papago-id=&quot;7-1&quot;&gt;지금&lt;/strong&gt;까지 활성화되어 있는 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;6&quot;&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 다음 명령을 사용하여 샘플 번들을 설치합니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;bundle:install mvn:org.sample.prj/sample-prj/1.0
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 다음과 같은 로그 메시지를 인쇄합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;2016-02-22 15:38:44,035 | ERROR | pool-36-thread-1 | SchemaUpdate                     | 199 - org.jboss.logging.jboss-logging - 3.1.4.GA | HHH000299: Could not complete schema update
java.lang.NullPointerException
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:227)[188:org.hibernate.core:4.3.6.Final]
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:178)[188:org.hibernate.core:4.3.6.Final]
    at org.hibernate.internal.SessionFactoryImpl.&amp;lt;init&amp;gt;(SessionFactoryImpl.java:522)[188:org.hibernate.core:4.3.6.Final]
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1857)[188:org.hibernate.core:4.3.6.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)[189:org.hibernate.entitymanager:4.3.6.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843)[189:org.hibernate.entitymanager:4.3.6.Final]
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)[188:org.hibernate.core:4.3.6.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842)[189:org.hibernate.entitymanager:4.3.6.Final]
    at org.hibernate.osgi.OsgiPersistenceProvider.createContainerEntityManagerFactory(OsgiPersistenceProvider.java:112)[190:org.hibernate.osgi:4.3.6.Final]
    at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.createAndCloseDummyEMF(PersistenceProviderTracker.java:105)[79:org.apache.aries.jpa.container:2.3.0]
    at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:85)[79:org.apache.aries.jpa.container:2.3.0]
    at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:44)[79:org.apache.aries.jpa.container:2.3.0]
    at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)[org.osgi.core-6.0.0.jar:]
    at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.trackProvider(PersistenceBundleTracker.java:106)[79:org.apache.aries.jpa.container:2.3.0]
    at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.findPersistenceUnits(PersistenceBundleTracker.java:90)[79:org.apache.aries.jpa.container:2.3.0]
    at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:69)[79:org.apache.aries.jpa.container:2.3.0]
    at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:40)[79:org.apache.aries.jpa.container:2.3.0]
    at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:469)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:415)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.BundleTracker.open(BundleTracker.java:156)[org.osgi.core-6.0.0.jar:]
    at org.apache.aries.jpa.container.impl.Activator.start(Activator.java:43)[79:org.apache.aries.jpa.container:2.3.0]
    at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)[org.apache.felix.framework-5.4.0.jar:]
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:2226)[org.apache.felix.framework-5.4.0.jar:]
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2144)[org.apache.felix.framework-5.4.0.jar:]
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)[org.apache.felix.framework-5.4.0.jar:]
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984)[org.apache.felix.framework-5.4.0.jar:]
    at org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1199)[9:org.apache.karaf.features.core:4.0.4]
    at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:840)[9:org.apache.karaf.features.core:4.0.4]
    at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1089)[9:org.apache.karaf.features.core:4.0.4]
    at org.apache.karaf.features.internal.service.FeaturesServiceImpl$1.call(FeaturesServiceImpl.java:985)[9:org.apache.karaf.features.core:4.0.4]
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)[:1.7.0_45]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[:1.7.0_45]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)[:1.7.0_45]
    at java.lang.Thread.run(Thread.java:744)[:1.7.0_45]
&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;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고마워, 엠레.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 양자리 JPA 2에서 문제가 될 수 있습니다. 찰리 모던트는 오늘 양자리 JPA 2에서 실시한 몇 가지 테스트 결과를 저에게 메일로 보냈습니다.&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;Aries JPA의 테스트에서 이슈를 재현하도록 노력하겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://issues.apache.org/jira/browse/ARIES&quot; rel=&quot;nofollow&quot; papago-id=&quot;25-1&quot;&gt;아파치 양자리 지라&lt;/a&gt;에서 이것에 대한 이슈를 열어줄 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/35555255/karaf-hibernate-mariadb-could-not-complete-schema-update-error&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>mariadb</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/921</guid>
      <comments>https://manysource.tistory.com/921#entry921comment</comments>
      <pubDate>Fri, 27 Oct 2023 22:00:13 +0900</pubDate>
    </item>
    <item>
      <title>make로 여러 C 파일을 컴파일합니다.</title>
      <link>https://manysource.tistory.com/920</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;make로 여러 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;(저는 리눅스 Ubuntu 9.10을 실행하고 있으므로 실행 파일의 확장자는 executablefile.out입니다.) 저는 C에서 모듈식 프로그래밍(여러 파일로 프로그래밍)을 막 시작하고 있는데 하나의 makefile에서 여러 파일을 컴파일하는 방법을 알고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 main.c, dbAdapter.c, dbAdapter.h 파일을 컴파일할 makefile은 무엇입니까? (그런데 아직 파악하지 못하셨다면 메인 기능이 main.c입니다.) 또한 누군가 makefile의 문서에 대한 링크를 올려주실 수 있나요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;게시된 링크는 모두 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정한 경우에는 이것을 시도해 볼 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 모든 파일 만들기가 이 패턴을 따릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 밖의 모든 것은 단축키와 매크로입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;program: main.o dbAdapter.o
   gcc -o program main.o dbAdapter.o

main.o: main.c dbAdapter.h
   gcc -c main.c

dbAdapter.o dbAdapter.c dbAdapter.h
   gcc -c dbAdapter.c
&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;여기서 중요한 것은 Makefile이 규칙을 순차적으로 살펴보고 특정 항목이 필요할 때 빌드한다는 것입니다.&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;먼저 프로그램을 살펴보고 프로그램을 구축하려면 main.o와 dbAdapter.o라는 것이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 메인을 찾을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 main.o를 빌드하려면 main.c와 dbAdapter.h가 필요합니다(dbAdapter.h가 main.c에 포함되어 있다고 가정합니다).&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;그것은 gcc를 사용하여 main.o를 컴파일하여 main.o를 구축하는 데 이러한 소스를 사용할 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;-c는 컴파일만 하고자 하는 것을 나타냅니다.&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;dbAdapter.o에서도 마찬가지입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 개의 개체 파일이 있으면 연결할 준비가 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 단계에서도 gcc 컴파일러를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;-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;&lt;a href=&quot;http://www.gnu.org/software/make/manual/make.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;8-0&quot;&gt;GNU make&lt;/a&gt;가 당신이 찾고 있는 것이어야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2604398/compile-multiple-c-files-with-make&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/920</guid>
      <comments>https://manysource.tistory.com/920#entry920comment</comments>
      <pubDate>Fri, 27 Oct 2023 22:00:04 +0900</pubDate>
    </item>
    <item>
      <title>스타일시트로 해석되지만 MIME 형식의 텍스트/html로 전송된 리소스(웹 서버와 관련이 없는 것으로 보임)</title>
      <link>https://manysource.tistory.com/919</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스타일시트로 해석되지만 MIME 형식의 텍스트/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;Chrome이 계속해서 이 오류를 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스타일시트로 해석되지만 MIME 유형 텍스트/html을 사용하여 전송된 리소스&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류의 영향을 받는 파일은 Style, choosed 및 jquery-gentlese(같은 방식으로 인덱스로 가져온 다른 CSS 파일)뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 MIME 타입을 이미 확인했고 텍스트/CSS는 이미 CSS에 있습니다.&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;blockquote&gt; 
 &lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그 문제를 이해하는 것부터 시작하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저는 서버에 HTTP 요청을 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 서버는 HTTP 응답을 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요청과 응답 모두 머리글과 일부 내용이 포함된 (때로는 선택적인) 본문으로 구성됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 본체가 있다면, 헤더들 중 하나입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Content-Type&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;본문이 무엇인지 설명합니다. (HTML 문서입니까?&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지?&lt;/font&gt; 양식 제출 내용&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;양식 제출 내용은?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;스타일시트를 요청하면 서버가 브라우저에 HTML 문서임을 알려줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Content-Type: text/html&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;Content-Type: text/css&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;blockquote&gt; 
 &lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이미 myme.type을 확인했고 text/css는 이미 css에 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 서버의 다른 점이 해당 스타일시트에 잘못된 콘텐츠 유형이 포함되도록 만들고 있는 것입니다.&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;브라우저의 개발자 도구의 Net(넷) 탭을 사용하여 요청 및 응답을 검토합니다.&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;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;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 태그를 머리에 잘못 입력했습니다. URL 요청이 있는 태그보다 먼저 와야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 제목 밑에 두 번째 태그로 배치하면 해결됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;base href=&quot;/&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://powdertothepeople.tv/2016/11/20/Resource-interpreted-as-stylesheet-but-transferred-with-MIME-type-text-html/&quot; papago-id=&quot;20-1&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;저도 이 오류로 문제가 생겨 해결책을 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 오류가 발생한 이유를 설명하지는 않지만 경우에 따라 수정되는 것으로 보입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 css 파일 경로 전에 forward slash &lt;strong papago-id=&quot;22-1&quot;&gt;/&lt;/strong&gt;를 포함합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;/css/bootstrap.min.css&quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 문제는 이 게시물의 모든 답변보다 간단했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정적인 내용을 포함하도록 IIS를 설정해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RVg0G.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RVg0G.png&quot; alt=&quot;enter image description here&quot;&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;strong papago-id=&quot;25-1&quot;&gt;응용&lt;/strong&gt; 프로그램 풀 &lt;strong papago-id=&quot;25-1&quot;&gt;ID&lt;/strong&gt;로 설정하면 효과가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JSZg6.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JSZg6.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 먹어봐요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;../##/yourcss.css&quot;&amp;gt;&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;어디에&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;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&gt;&lt;code&gt;..&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(두 개의 점).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저 역시 같은 문제에 직면해 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 R&amp;amp;D를 좀 해본 결과 파일명에 문제가 있다는 것을 알게 되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 파일의 이름은&lt;strong papago-id=&quot;31-1&quot;&gt; lightgallery.css&lt;/strong&gt;였는데 링크를 하면서 &lt;strong papago-id=&quot;31-3&quot;&gt;lightgallery.css&lt;/strong&gt;라고 입력했습니다&lt;strong papago-id=&quot;31-3&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가 정보:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬 호스트(OS: Windows 8.1 및 서버: Apache)에서 잘 작동했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 원격 서버(로컬 호스트와 다른 OS &amp;amp; 웹 서버)에 애플리케이션을 업로드했을 때 작동하지 않아 귀하의 것과 동일한 오류가 발생했습니다.&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;정적 CSS를 nginx와 함께 제공하는 경우 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;location ~ \.css {
    add_header  Content-Type    text/css;
}
location ~ \.js {
    add_header  Content-Type    application/x-javascript;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;location ~ \.css{
    default_type text/css;
}
location ~ \.js{
    default_type application/x-javascript;
}
&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;tonginxconf&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 답변들로 미루어 볼 때, 이 메시지는 많은 원인이 있는 것 같습니다. 저는 나중에 누군가가 제 정확한 문제를 가지고 있을 경우를 대비하여 제 개인의 해결책을 공유하려고 생각했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;우리 사이트는 S3 버킷을 원본으로 사용하는 AWS Cloudfront 배포판에서 CSS 파일을 로드합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 특정 S3 버킷은 Jenkins를 실행하는 Linux 서버에 동기화되어 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sync&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;s3cmd&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;는 OS에서 말하는 내용(아마도 파일 확장명을 기준으로)에 따라 S3 개체에 대한 Content-Type을 자동으로 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 이유에서인지 우리 서버에서는 모든 타입이 정확하게 설정되어 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.css&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;text/plain&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; S3에서는 파일의 속성에서 메타데이터를 확인할 때 원하는 대로 유형을 설정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설정하기&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;text/css&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;우리 사이트가 파일을 CSS로 올바르게 해석하고 올바르게 로드할 수 있도록 했습니다.&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;@Rob Sedgwick의 대답은 나에게 포인터를 주었지만, 나의 경우 내 앱은 &lt;strong papago-id=&quot;45-1&quot;&gt;Spring Boot Application&lt;/strong&gt;이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 방금 보안 구성에 관련 파일의 경로에 대한 제외사항을 추가했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고 - 이 솔루션은 SpringBoot 기반입니다...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 중인 프로그래밍 언어 및/또는 사용 중인 프레임워크에 따라 수행해야 할 작업이 다를 수 있습니다.&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 유의할 점은;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;본질적으로 정적 컨텐츠에 대한 요청을 포함한 모든 요청이 인증될 때 문제가 발생할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 오류를 발생시킨 정적 컨텐츠에 대한 몇 가지 경로를 다음과 같이 가정해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;플러그인&quot; 이라는 경로.&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;http://localhost:8080/plugins/styles/css/file-1.css&quot; rel=&quot;noreferrer&quot; papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://localhost:8080/플러그인/스타일스/css/file-1&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;http://localhost:8080/plugins/styles/css/file-2.css&quot; rel=&quot;noreferrer&quot; papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://localhost:8080/플러그인/스타일스/css/file-2&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;http://localhost:8080/plugins/js/script-file.js&quot; rel=&quot;noreferrer&quot; papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://localhost:8080/plugins/js/script-file.js&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 '페이지'라고 불리는 경로.&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;http://localhost:8080/pages/styles/css/style-1.css&quot; rel=&quot;noreferrer&quot; papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://localhost:8080/페이지/스타일/css/style-1&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;http://localhost:8080/pages/styles/css/style-2.css&quot; rel=&quot;noreferrer&quot; papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://localhost:8080/페이지/스타일/css/style-2&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;http://localhost:8080/pages/js/scripts.js&quot; rel=&quot;noreferrer&quot; papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://localhost:8080/pages/js/scripts.js&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 Spring Boot Security Config에 다음과 같이 제외 사항을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers(&amp;lt;comma separated list of other permitted paths&amp;gt;, &quot;/plugins/**&quot;, &quot;/pages/**&quot;).permitAll()
            // other antMatchers can follow here
    }

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;hr&gt; 
&lt;strong&gt;&lt;em&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;&quot;/plugins/**&quot;&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;&quot;/pages/**&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인증으로 인해 오류가 사라졌습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;건배!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;63&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;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 경우는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng-href&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;href&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결해 줬습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;67&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;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 라라벨을 백엔드로 작업하고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JSP를 사용하는 경우 이 문제는 서블릿 매핑에서 발생할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;매핑이 다음과 같이 기본값으로 url을 사용하는 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@WebServlet(&quot;/&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 컨테이너가 당신의 cs url을 해석하고 cs 파일로 가지 않고 servlet으로 갑니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 같은 문제가 있었습니다. 나는 지도를 바꿨고 지금은 모든 것이 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 몇 시간 동안 주위를 둘러보고 실험한 후에 예쁜 URL을 만들기 위한 같은 .htaccess 파일과 같은 것에 직면했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 비교적 링크해서 오류가 났다는 것을 알게 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저는 내가 몇 단계 깊이 서버를 탐색할 때 모든 CSS, js 및 이미지 파일에 대해 동일한 소스 html 파일을 가져오기 시작할 것입니다.&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;base&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;html 소스에 태그를 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;base href=&quot;http://localhost/assets/&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일로 연결할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/style.css&quot; /&amp;gt;
&amp;lt;script src=&quot;js/script.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 모든 파일에 절대 링크를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;http://localhost/assets/css/style.css&quot; /&amp;gt;
&amp;lt;script src=&quot;http://localhost/assets/js/script.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;img src=&quot;http://localhost/assets/images/logo.png&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;양식 인증을 이용한 MVC4에서도 비슷한 문제가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 web.config의 이 행이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;modules runAllManagedModulesForAllRequests=&quot;true&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 정적 컨텐츠에 대한 요청을 포함한 모든 요청이 인증됨을 의미합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 줄을 다음으로 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;modules runAllManagedModulesForAllRequests=&quot;false&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://i.stack.imgur.com/nfxaV.png&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;81-0&quot;&gt;&lt;img alt=&quot;enter image description here&quot; papago-id=&quot;81-0-0&quot; src=&quot;https://i.stack.imgur.com/nfxaV.png&quot;&gt;&lt;/a&gt; 저도 최근 &lt;strong papago-id=&quot;81-2&quot;&gt;크롬&lt;/strong&gt;에서 이 문제에 직면했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 단지 내 CSS 파일 문제 해결에 절대적인 경로를 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;&amp;lt;?=SS_URL?&amp;gt;arica/style.css&quot; type=&quot;text/css&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 가지고 있을 수 있는 모든 사람들에게.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHP에서 커스텀 MVC를 만들고 있을 때 이 문제가 발생했습니다.&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;제 자산(css/js/images) 파일을 절대 경로로 설정하여 이 문제를 해결할 수 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;href=&quot; css/style. css&quot;과 같은 URL을 사용하지 않고 현재 전체 URL을 사용하여 로드합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, http://example.com/user/5, 에 있는 경우 http://example.com/user/5/css/style.css 에&lt;a href=&quot;http://example.com/user/5/css/style.css&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;83-3&quot;&gt; 로드&lt;/a&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;이를 수정하려면 자산의 URL 시작 부분에 /를 추가할 수 있습니다(예: href=&quot;/ css/style. css&quot;).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 브라우저가 url의 루트에서 로드하도록 지시합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 예에서는 http://example.com/css/style.css 을 로드하려고 합니다.&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;서버 페이지(php, node.js 등)에 대해 text/css가 아닌 text/html로 컨텐츠 유형을 설정해야 하기 때문입니다.&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 OP에서 Todd R의 요점을 확대하고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;t 에서,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;web.config&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;우리의 경우 CSS 파일의 폴더가 권한이 없는 사용자의 접근을 허용하지 않아 사용자가 권한을 부여받기 전 로그인 페이지에서 장애가 발생했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서 필요한 권한 변경&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;web.config&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;허가받지 않은 사용자가 CSS 파일에 접근할 수 있도록 허용하고 이 문제를 해결했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;90&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 똑같은 문제를 가지고 있는데 몇 분 동안 빈둥거리다가 파일 확장자를 헤더에 추가하는 것을 놓쳤다는 것을 이해했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 다음 줄을 바꿨습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;link uic-remove rel=&quot;stylesheet&quot; href=&quot;css/bahblahblah&quot;&amp;gt;
&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;link uic-remove rel=&quot;stylesheet&quot; href=&quot;css/bahblahblah.css&quot;&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;92&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;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;제 앱은 존재하지 않는 URL을 참조하려는 것처럼 행동했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이것이 웹팩이 어떻게 행동하는지와 관련이 있다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공용 폴더의 파일을 연결하는 경우 다음과 같은 리소스를 사용하기 전에 %PUBLIC_URL%를 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;link type=&quot;text/css&quot; rel=&quot;stylesheet&quot; href=&quot;%PUBLIC_URL%/bootstrap.min.css&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;95&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 누군가 이 게시물에 와서 비슷한 문제가 있을 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;방금 비슷한 문제를 겪었지만 해결 방법은 꽤 간단했습니다.&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;한 개발자가 실수로 web.config의 복사본을 CSS 디렉토리에 빠뜨렸습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;삭제하면 모든 오류가 해결되고 페이지가 올바르게 표시됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;예전 MEAN 스택 프로젝트 작업을 재개하던 중에 같은 문제를 발견했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하고 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nodemon&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;Resource interpreted as stylesheet but transferred with MIME type text/html&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;nodemon&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;http-server&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;a href=&quot;https://www.npmjs.com/package/http-server&quot; rel=&quot;nofollow&quot; papago-id=&quot;31-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;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 내가 구글 CDN에서 제공하는 CSS 스타일시트에 대한 css 링크에서 프로토콜을 제거했을 때 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;103&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 오류가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;//fonts.googleapis.com/css?family=Architects+Daughter&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;104&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이렇게 되면 &lt;em papago-id=&quot;104-1&quot;&gt;리소스가 Stylesheet로 해석되지만 MIME type text/html로 전송&lt;/em&gt;됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;fonts.googleapis.com/css?family=Architects+Daughter&quot;&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;저도 비슷한 문제에 직면해 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 이 환상적인 스택 오버플로 페이지에서 솔루션을 탐색합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;106&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;user54861의 응답(대개 민감도의 경우 이름이 일치하지 않음)으로 인해 코드를 다시 검사하는 것이 궁금해지고 &quot;&lt;strong papago-id=&quot;106-1&quot;&gt;헤드태그에 로드한 js 파일 2개를 업로드&lt;/strong&gt;하지 않았습니다. :-)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;107&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 업로드 했을 때 이슈가 사라집니다! 그리고 코드 실행과 페이지 렌더링이 다른 오류 없이 진행됩니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;108&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서, 이 이야기의 도덕성은 페이지가 찾는 곳에 모든 js 파일이 업로드되도록 하는 것을 잊지 말아야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;109&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 문제를 발견했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MojoPortal이라는 CMS 오픈 소스인 NET 어플리케이션입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&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;제 문제는 CSS에 대한 &quot;유형&quot; 속성이 아니라 &quot;다른 것&quot;이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 정확한 변화는 &lt;strong papago-id=&quot;110-1&quot;&gt;웹&lt;/strong&gt;에 있었습니다&lt;strong papago-id=&quot;110-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;110-1&quot;&gt;구성&lt;/strong&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Minify를 위해 모든 값을 FALSE로 변경했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저의 CSS, CacheCssOn서버 및 CacheCSS.&lt;/font&gt;&lt;/p&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;처음에 정확한 헤더를 보내는 것을 잊어버려서 같은 오류가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;header(&quot;Content-type: text/css; charset: UTF-8&quot;);
print 'body { text-align: justify; font-size: 2em; }';
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;113&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;npm으로 설치한 리액트 레이아웃 모듈용 CSS를 로드할 때 이 문제가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 모듈을 실행하려면 .css 파일을 두 개 가져와야 하므로 처음에는 다음과 같이 가져왔습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@import &quot;../../../../node_modules/react-grid-layout/css/styles.css&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;114&quot; papago-translate=&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 &quot;../../../../node_modules/react-grid-layout/css/styles&quot;;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;115&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;115-1&quot;&gt;nodejs&lt;/strong&gt;와 &lt;strong papago-id=&quot;115-3&quot;&gt;express&lt;/strong&gt;를 사용하는 것이 아래 코드에서 작동한다면...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;res.set('Content-Type', 'text/css');
&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;오늘부터 크롬에서만 문제가 발생하기 시작했고, 내 goomide 컨테이너(node.js)에 대해 동일한 프로젝트/url에 대해 사파리가 발생하지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;117&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작동하지 않는 것처럼 보이는 위의 몇 가지 제안을 시도하고 어제부터 오늘까지 제가 한 일부 코드 변경 사항을 역추적한 결과, 저는 크롬 설정을 클릭하게 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;118&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1.설정;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;119&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2. 아래쪽으로 스크롤하여 &quot;Advanced&quot;(고급)을 선택합니다.&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;3.아래로 스크롤하여 &quot;설정을 원래 기본값으로 복원&quot;을 선택합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;121&quot; papago-translate=&quot;translated&quot;&gt;&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;122&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;prod에서 앱을 제공하는 경우 서비스 작업자와 함께 정적 파일을 제공하는지 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&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;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/22631158/resource-interpreted-as-stylesheet-but-transferred-with-mime-type-text-html-see&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>css</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/919</guid>
      <comments>https://manysource.tistory.com/919#entry919comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:59:58 +0900</pubDate>
    </item>
    <item>
      <title>WCF Test Client 사용과 동일하게 SOAP를 사용하여 javascript AJAX에서 하나의 프록시를 사용하는 방법</title>
      <link>https://manysource.tistory.com/918</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WCF Test Client 사용과 동일하게 SOAP를 사용하여 javascript AJAX에서 하나의 프록시를 사용하는 방법&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;저는 SOAP 1.2를 사용하여 AJAX를 통해 이 서비스에 연결되는 WCF 웹 서비스와 자바스크립트 클라이언트가 있습니다. 제가 원하는 것은 &quot;새로운 프록시 시작&quot;을 선택 취소하여 AJAX SOAP 호출에 WCF 테스트 클라이언트에서 하는 것과 동일한 &lt;strong papago-id=&quot;0-1&quot;&gt;하나의 프록시만 사용&lt;/strong&gt;하도록 지시하는 파라미터를 전달하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;img src=&quot;https://i.stack.imgur.com/RXYLX.png&quot; alt=&quot;image&quot;&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;그리고 이건 SOAP AJAX의 전화입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DoSoapAjax: function (soapMethodName, data, successHandler, errorHandler, isAsync, currentInstance) {
    var service = this;
    var soapResult    = soapMethodName + &quot;Result&quot;;
    var soap12WithWsHttpBindRequest ='&amp;lt;s:Envelope xmlns:a=&quot;http://www.w3.org/2005/08/addressing&quot; xmlns:s=&quot;http://www.w3.org/2003/05/soap-envelope&quot;&amp;gt;' +
                      '&amp;lt;s:Header&amp;gt;' +
                      '&amp;lt;a:Action s:mustUnderstand=&quot;1&quot;&amp;gt;' + this.serviceContractNamespace + '/' + this.interfaceName + '/' + soapMethodName + '&amp;lt;/a:Action&amp;gt;' +
                      '&amp;lt;a:MessageID&amp;gt;urn:uuid:605ea0c6-d09b-46bf-b61d-e61b377a135b&amp;lt;/a:MessageID&amp;gt;' +
                      '&amp;lt;a:ReplyTo&amp;gt;' +
                      '&amp;lt;a:Address&amp;gt;http://www.w3.org/2005/08/addressing/anonymous&amp;lt;/a:Address&amp;gt;' +
                      '&amp;lt;/a:ReplyTo&amp;gt;' +
                      '&amp;lt;a:To s:mustUnderstand=&quot;1&quot;&amp;gt;' + this.tenantAdminService + '&amp;lt;/a:To&amp;gt;' +
                      '&amp;lt;/s:Header&amp;gt;' +
                      '&amp;lt;s:Body&amp;gt;';
                      if (data == emptyString)
                      {
                        soap12WithWsHttpBindRequest +=
                      '&amp;lt;' + soapMethodName + ' xmlns=&quot;' + this.serviceContractNamespace + '&quot; /&amp;gt;';
                      }
                      else
                      {
                        soap12WithWsHttpBindRequest +=
                      '&amp;lt;' + soapMethodName + ' xmlns=&quot;' + this.serviceContractNamespace + '&quot;&amp;gt;' +
                      data +
                      '&amp;lt;/' + soapMethodName + '&amp;gt;';
                      }
                       soap12WithWsHttpBindRequest +=
                      '&amp;lt;/s:Body&amp;gt;' +
                      '&amp;lt;/s:Envelope&amp;gt;';
    // in order for ajax to work on jQuery 1.8.2 we need to enable the following.
    // found this answer on the link : http://stackoverflow.com/questions/9160123/no-transport-error-w-jquery-ajax-call-in-ie
    $.support.cors = true;
    // variable to save successData
    var responseData = null;
    // SOAP 1.2 query
    var response = $.ajax({
              type: &quot;POST&quot;,
              url: this.tenantAdminService,
              data: soap12WithWsHttpBindRequest,
              contentType: &quot;application/soap+xml&quot;,
              dataType: &quot;xml&quot;,
              processData: false,
              async: isAsync,
              success: function (data, status, xmlHttpRequest) {
                responseData = data;
                // inserting all data results into dictionary
                var responseResults = {};
                // delegating success function
                if (successHandler != null)
                {
                    responseResults = service.ParseResponse(soapMethodName, data);
                    successHandler(responseResults, currentInstance);
                }                
              },
              error: function (xmlHttpRequest, textStatus, errorThrown) {
                  if (errorHandler != null)
                  {
                    errorHandler(xmlHttpRequest, textStatus, errorThrown, currentInstance);
                  }
                  else if (!isAsync)
                  {
                    alert(&quot;Error : &quot; + errorThrown);
                    alert(&quot;Error Description : &quot; + xmlHttpRequest.responseText);
                  }

                  return;
              }
          });

        if (!isAsync)
        {   
            return service.ParseResponse(soapMethodName, response.responseXML);
        }
    }  
&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;우선 이에 대한 구체적인 답변은 모르지만, 제 접근 방식은 WFC Test Client에서 트래픽을 스니핑하여 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;대부분 브라우저에 맞추어져 있는 http 트래픽을 모두 잡을 수 있을지는 모르겠지만 &lt;strong papago-id=&quot;4-0&quot;&gt;fiddler&lt;/strong&gt;가 그 일을 할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;4-2&quot;&gt;와이어샤크&lt;/strong&gt;, &lt;strong papago-id=&quot;4-4&quot;&gt;에테르&lt;/strong&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;SOAP 봉투 본체 외부에 테스트 클라이언트에서 전송되는 다른 요청 파라미터가 있을 것으로 예상됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 제가 상상할 수 있는 유일한 방법입니다. SOAP 메시지를 수정하지 않고도 테스트 클라이언트가 이것을 전달할 수 있을 것입니다.&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;이름과 값을 찾을 수 있으면 다른 이름-값 JSON 개체로 데이터: 매개 변수에 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리오라파:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 브라우저에서 자바스크립트를 호스트로 실행하고 있다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 브라우저가 보안 위험으로 식별하는 모든 실행에 대해 클라이언트와 함께 있는 호스트의 일부 동작을 변경하도록 javascript를 허용하지 않는 한 불가능합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 사항을 고려하십시오. 1) 자바스크립트는 연결 구성을 제어하지 않으며, 실행 중인 호스트가 제공하는 환경만 사용하며, 이 경우 브라우저가 서버 측에 있을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;2) 만약 당신이 &quot;좋아, 강제로 이것을 하자&quot;라고 말하는 경우, 내 머릿속에 떠오르는 유일한 방법은 당신의 호스트나 클라이언트 호스트의 어떤 개체의 인스턴스를 만들어서 강제로 연결을 변경하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 그 순간 브라우저는 당신의 자바스크립트를 보안 위험으로 감지할 것이고 당신은 시장의 모든 브라우저에 대해 스크립트를 만들어야 할 것입니다. 왜냐하면 모든 사람들은 이것을 처리할 수 있는 방법을 가지고 있기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이에 대한 유일한 좋은 소식은 IE를 사용하면 Chrome의 구성도 변경할 수 있다는 것입니다!!&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;이 문제를 해결하기 위해 IT 담당자에게 브라우저의 프록시에 대한 몇 가지 예외 규칙을 적용하여 브라우저를 구성하도록 요청하는 것입니다(회사에 가입한 경우).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게든 도움이 되었으면 좋겠습니다!!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가브리엘&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비누 요청을 Fiddler에 입력하면 응답을 받을 수 있습니다.&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;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/13628365/how-to-use-one-proxy-in-javascript-ajax-using-soap-the-same-as-wcf-test-client-u&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>ajax</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/918</guid>
      <comments>https://manysource.tistory.com/918#entry918comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:59:48 +0900</pubDate>
    </item>
    <item>
      <title>워드 프레스로 기본 날짜 형식 가져오기</title>
      <link>https://manysource.tistory.com/917</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;워드프레스 플러그인의 경우 options-&amp;gt;general에 설정된 기본 날짜 형식이 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Carbon 라이브러리에서 사용하기 위해 서식 문자열('Y-m-d H:i:s' 등)이 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서에서 나는 이것과 관련된 것을 발견하지 못했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜 및 시간 형식은 옵션으로 별도로 저장됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;get_option()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값을 회수할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$date_format = get_option( 'date_format' ); // e.g. &quot;F j, Y&quot;
$time_format = get_option( 'time_format' ); // e.g. &quot;H:i:s&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/28251972/get-default-date-format-in-wordpress&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Wordpress</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/917</guid>
      <comments>https://manysource.tistory.com/917#entry917comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:59:39 +0900</pubDate>
    </item>
    <item>
      <title>Oracle에서 열 값 스와핑</title>
      <link>https://manysource.tistory.com/916</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;퍼즐 중 하나를 풀다가 우연히 DML 쿼리를 사용하여 열 값을 교환했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT * FROM TEMP_TABLE;
ID1, ID2
--------
20, 15
20, 15
20, 15
&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;UPDATE TEMP_TABLE SET ID1=ID1+ID2;
UPDATE TEMP_TABLE SET ID2=ID1-ID2;
UPDATE TEMP_TABLE SET ID1=ID1-ID2;
&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;이것이 Strings에 적용될 수 있는지에 대해 알아보고 있는 중입니다, 제안 부탁드립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT * FROM TEMP_TABLE_NEW;
ID1, ID2
--------
ABC, XYZ
ABC, XYZ
ABC, XYZ
&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;UPDATE temp_table_new 
SET    id1 = id2, 
       id2 = id1; 
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;CREATE TABLE Names
(
F_NAME VARCHAR(22),
L_NAME VARCHAR(22)
);

INSERT INTO Names VALUES('Ashutosh', 'Singh'),('Anshuman','Singh'),('Manu', 'Singh');

UPDATE Names N1 , Names N2 SET N1.F_NAME = N2.L_NAME , N1.L_NAME = N2.F_NAME 
WHERE N1.F_NAME = N2.F_NAME;

SELECT * FROM Names;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전:&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;select * from employ;

EMPNO FNAME      LNAME
----- ---------- ----------
 1001 kiran      kumar

 1002 santosh    reddy


update employ e set fname=(select lname from employ where empno=e.empno),
                    lname=(select fname from employ where empno=e.empno);
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이후:&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt; select * from employ;

 EMPNO FNAME      LNAME
------ ---------- ----------
  1001 kumar      kiran

  1002 reddy      santosh
&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;URL : https://stackoverflow.com/questions/21827804/swapping-column-values-in-oracle&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Oracle</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/916</guid>
      <comments>https://manysource.tistory.com/916#entry916comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:59:33 +0900</pubDate>
    </item>
    <item>
      <title>complex C 구문의 의미</title>
      <link>https://manysource.tistory.com/915</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;complex C 구문의 의미&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b papago-id=&quot;1-1&quot;&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;닫힘&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;2-1&quot; title=&quot;2012-03-22 16:44:10Z&quot; papago-attr-id=&quot;1&quot;&gt;11년 전&lt;/span&gt;에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중복 가능:&lt;/font&gt;&lt;/strong&gt;&lt;br&gt; &lt;a href=&quot;https://stackoverflow.com/questions/8249483/what-does-this-c-statement-mean&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 C 문장은 무엇을 의미합니까?&lt;/font&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 표현은 무슨 뜻입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *(*c[10])(int **p);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;c&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 a를 반환하는 10개의 함수 포인터의 배열입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 a를 가져갑니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int**&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;(*c[10])
   ^^^^ = array of 10

(*c[10])
 ^ = function pointer
&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;그래서 지금 우리는 10개의 함수 포인터 배열을 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *(*c[10])
^^^^^^ = returns a char*

char *(*c[10])(int** p)
               ^^^^^ = takes a int** as an argument
&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;a를 반환하는 10개 함수 포인터 배열&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 a를 가져갑니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int**&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;논변으로&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;sub papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 이런 식으로 코드를 쓰면 뺨을 맞을 만합니다.&lt;/font&gt;&lt;/sub&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;a href=&quot;http://cdecl.org/&quot; papago-id=&quot;14-0&quot;&gt;cdecl&lt;/a&gt;은 번역하기 좋은 도구입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;횡설수설하며 영어로 말하다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ cdecl explain 'char * (*c[10]) (int **)'
declare c as array 10 of pointer to function (pointer to pointer to int) returning pointer to char
&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;몇 가지 예와 decl을 사용하는 끝의 &lt;em papago-id=&quot;16-1&quot;&gt;토막글&lt;/em&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1. 함수에 대한 포인터:&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;void (*foo)(void);&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신에게 함수 포인터를 줄 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개변수를 사용하지 않고 아무것도 반환하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ex. A:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void fun_1(void)
{
    ...
}

foo = fun_1;
foo(); /* this would call fun_1() */
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예: B:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;char (*bar)(int);&lt;/code&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;bar&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1개의 매개변수를 정수로 취하고 a를 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char fun_2(int x)
{
    if (x == 50)
        return 'a';
    return 'Z';
}

char v;
bar = fun_2;
v = bar(50); /* this would call fun_2() with 50 as parameter and return 'a' */
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2. 포인터를 가리킵니다.&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;int **p;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 int 유형의 포인터를 가리키는 포인터입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&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;Ex. C:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int y[3] = {4, 3, 6};
int *w = &amp;amp;y[0];
int **z = &amp;amp;w;

printf(&quot;print: %d &quot;, **z);
printf(&quot;%d &quot;, *++(*z));
printf(&quot;%d\n&quot;, *(*z+1));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;print: 4 3 6&lt;/code&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3. 포인터를 반환하는 함수&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *zez(char *s)
{
    s = &quot;def&quot;;
    return s;
}


char *str = &quot;abc&quot;;

printf(&quot;%s - &quot;, str);
printf(&quot;%s\n&quot;, zez(str));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;abc - def&lt;/code&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;4. 포인터를 반환하는 함수에 대한 함수 포인터&lt;/font&gt;&lt;/h2&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;zez()&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *(*ptr_zez)(char *);

ptr_zez = zez;

printf(&quot;ptr: %s - &quot;, str);
printf(&quot;%s\n&quot;, ptr_zez(str));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;ptr: abc - def&lt;/code&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;5. 함수 포인터 배열, 함수가 문자 포인터를 반환하고 문자 포인터를 사용합니다.&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예: F:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *(*c[10])(char *);

c[0] = zez;

printf(&quot;c[0]: %s - &quot;, str);
printf(&quot;%s\n&quot;, c[0](str));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;c[0]: abc - def&lt;/code&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;6. &quot;함수에 대한 포인터(int에 대한 포인터)의 cas 배열 10을 문자로 선언합니다.&quot;&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;char *cumlade(int **p)
{
    char *c;
    int i;

    if ((c = malloc(sizeof(char) * 7)) == NULL) {
        fprintf(stderr, &quot;Unable to reserve 7 bytes\n&quot;);
        exit(0);
    }

    for (i = 0; i &amp;lt; 6; ++i) {
        c[i] = (unsigned char)*(*p+i);
    }
    c[6] = '\0';

    return c;
}

int main(void)
{
    int t[3][3] = {{97 ,98, 99}, {100, 101, 102}};
    int *u = &amp;amp;t[0][0];
    int **v = &amp;amp;u;
    char *ex;
    char *(*c[10])(int **p); /* &amp;lt;-- the fun */

    c[0] = cumlade;
    c[1] = cumlade;    

    ex = c[0](v);
    printf(&quot;EX: %s\n&quot;, ex);
    free(ex);

    ex = c[1](v);
    printf(&quot;AX: %s\n&quot;, ex);
    free(ex);

    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;EX: abcdef&lt;/code&gt;&lt;br&gt; &lt;code&gt;AX: abcdef&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;c&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 의 배열입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;10&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;int&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;char&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&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;[SIZE]&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;*&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;(type1 param1, type2 param2, ...)&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;strong papago-id=&quot;43-1&quot;&gt;세 연산자 모두가 연관성이 있다는&lt;/strong&gt; 것을 기억하세요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *(*c[10])(int **p);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;연관성을 보다 명확하게 하기 위해 괄호를 더 추가해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *((*(c[10]))(int *(*p)))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시작부터&lt;/font&gt;&lt;/font&gt;&lt;code&gt;c&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 변수&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;c[10]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;c는 10개 원소의 배열이지만, 각 원소는...&quot;을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 다음을 보세요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 옆에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;*(c[10])&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;c는 10개의 원소의 배열이고, 각 원소는 ...을 가리키는 포인터입니다.&quot;를 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고나서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(*(c[10]))(int *(*p))&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;c는 10개 요소의 배열이고, 각 요소는 함수에 대한 포인터이며, 이것은...을 반환한다&quot;는 의미입니다. 비슷한 방법을 사용하면 함수가 &quot;인트에 대한 포인터&quot;인 하나의 파라미터를 취한다는 것을 알 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고나서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;*((*(c[10]))(int *(*p)))&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 &quot;c는 10개의 요소의 배열이고, 각 요소는 함수에 대한 포인터이며, 포인터를 ...로 반환합니다.&quot;를 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마침내.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *((*(c[10]))(int *(*p)))&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;는 &quot;c는 10개 요소의 배열이고, 각 요소는 함수에 대한 포인터이며, 이는 char에 대한 포인터를 반환한다.&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&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;em papago-id=&quot;57-1&quot;&gt;나는 &lt;/em&gt;시계방향/&lt;em papago-id=&quot;57-1&quot;&gt;나선&lt;/em&gt; 규칙이 매우 유용하다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://c-faq.com/decl/spiral.anderson.html 참조&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 나는 나선형을 사용하는 것보다 괄호를 더 많이 추가하고 싶습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋아요, 이제 당신이 가지고 있는 답은 함수 포인터의 배열입니다. 하지만 이런 코드를 쓸 수 있는 깨끗한 방법이 있나요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;네, 있습니다. 이 코드는 언뜻 이해할 수 있을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;typedef char *(*weirdFuncPtr)(int **p);
weirdFuncPtr funcPtrArray[10];
&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;그건 그렇고 나는 보통 typedefs를 피합니다 - 함수 포인터를 선언할 때 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 이런 종류의 C 코드를 이해하기 쉽게 만듭니다. (C는 Cryptic의 줄임말이죠?)&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;font class=&quot;papago-parent&quot;&gt;배열에는 10개의 요소가 있습니다(선언문의 c[10] 부분부터).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 포인터들이 가리키는 함수는 char*를 반환하고 오직 하나의 매개변수, 즉 정수(int **p)에 대한 포인터를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문에 대한 첫 번째 답변 기능 &lt;a href=&quot;https://stackoverflow.com/questions/252748/how-to-use-array-of-function-pointers&quot; papago-id=&quot;62-1&quot;&gt;포인터 배열&lt;/a&gt;을 사용하려면 &lt;a href=&quot;https://stackoverflow.com/questions/252748/how-to-use-array-of-function-pointers&quot; papago-id=&quot;62-1&quot;&gt;어떻게&lt;/a&gt; 해야 &lt;a href=&quot;https://stackoverflow.com/questions/252748/how-to-use-array-of-function-pointers&quot; papago-id=&quot;62-1&quot;&gt;합니까?&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 pointer 배열을 선언하는 또 다른 예를 찾을 수 있으며 혼란을 끝낼 수도 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 이에 대한 직관적인 설명을 원한다면, http://www.geeksforgeeks.org/archives/16841 .&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;/p&gt;&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/9817734/meaning-of-complex-c-syntax&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/915</guid>
      <comments>https://manysource.tistory.com/915#entry915comment</comments>
      <pubDate>Sun, 22 Oct 2023 20:11:48 +0900</pubDate>
    </item>
    <item>
      <title>헤더 파일을 포함하여 external과 #를 사용하는 것의 차이점은 무엇입니까?</title>
      <link>https://manysource.tistory.com/914</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;헤더 파일을 포함하여 external과 #를 사용하는 것의 차이점은 무엇입니까?&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;외부&quot; 키워드의 유용성에 의문을 제기하기 시작했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수/함수 프로토타입 또는 함수/변수 정의가 포함된 헤더 파일을 가져오기 위해 #include preprocessor를 사용할 때도 동일한 작업을 수행하고 있지 않습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;extern&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기호가 존재하며 특정 유형이라고 선언하고 해당 기호에 대한 저장소를 할당하지 않기 때문에 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int foo;
&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;여러 소스 파일 간에 공유되는 헤더 파일의 경우 각 소스에 고유한 foo 복사본이 생성되고 링커가 기호를 해결할 수 없으므로 링커 오류가 발생합니다.&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;extern int foo;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;헤더에서는 각 소스 파일의 다른 곳에 정의된 기호를 선언합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스 파일 하나(단 하나)에 포함됨&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int foo;
&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;이것은 링커가 해결할 단일 foo 인스턴스를 만듭니다.&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;아니요. #include는 &quot;이 다른 파일의 모든 텍스트를 여기에 입력합니다.&quot;라는 전처리기 명령어입니다.&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;#include preprocessor 명령어는 포함된 파일의 텍스트를 현재 파일의 현재 위치에 복사/붙여넣기만 하면 됩니다.&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;external은 변수 또는 함수가 이 소스 파일의 외부에 존재함을 표시합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업은 발신자가 수행하고(&quot;이 데이터를 외부에서 사용할 수 있도록 합니다&quot;), 수신자가 수행합니다(&quot;필요한 외부 데이터가 있음을 표시합니다&quot;).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부가 만족스럽지 않은 수신자는 정의되지 않은 기호 오류를 발생시킵니다.&lt;/font&gt;&lt;/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;인크루드 가드 패턴과 함께 #include를 사용하는 것을 선호합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#ifndef HEADER_NAME_H
#define HEADER_NAME_H
&amp;lt;write your header code here&amp;gt;
#endif
&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;사용 가능한 외부를 찾기 위해 .c 파일을 열어야 할 때마다 명확한 인터페이스가 없으면 영혼의 보석에 금이 가게 됩니다.&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;실제로 번역 단위 간에 함수/변수를 사용하는 두 가지 방법이 있습니다(번역 단위는 일반적으로 *.c/*.cc 파일임).&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&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;extern&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;extern&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;extern&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;), 그러나 변수에 대해서는 그렇지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;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;/p&gt; 
&lt;ul&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;extern&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;헤더 파일(*.h/*.hhh)에 입력합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여전히,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;extern&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수의 경우에는 선택 사항이지만 변수의 경우에는 선택 사항이 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 당신은 평소에 볼 수 없는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;extern&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;헤더 파일의 함수 앞에.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;호출 *.c/*.cc 파일에서 #는 헤더를 포함하고 필요에 따라 함수/변수를 호출합니다.&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;구현 *.c/*.cc 파일에서 #는 헤더를 포함하고 함수/변수를 구현합니다.&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;구글 C++ 스타일 가이드는 두 접근법의 장단점에 대해 좋은 &lt;a href=&quot;https://google.github.io/styleguide/cppguide.html#Forward_Declarations&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;28-1&quot;&gt;논의&lt;/a&gt;를 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개인적으로, 저는 헤더 파일 접근 방식을 선호합니다. 함수 서명이 정의된 단일 장소(헤더 파일)이기 때문에, 호출 및 구현은 모두 이 한 가지 정의에 부합하기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서, 전방 신고 방식에서 발생할 수 있는 불필요한 불일치가 발생하지 않을 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1330114/whats-the-difference-between-using-extern-and-including-header-files&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/914</guid>
      <comments>https://manysource.tistory.com/914#entry914comment</comments>
      <pubDate>Sun, 22 Oct 2023 20:11:39 +0900</pubDate>
    </item>
    <item>
      <title>Symfony 2 / Dectrine에서 ENUM을 활성화하는 방법</title>
      <link>https://manysource.tistory.com/913</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Symfony 2 / Dectrine에서 ENUM을 활성화하는 방법&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;doctrine:mapping:import&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;blockquote&gt; 
 &lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;알 수 없는 데이터베이스 유형 열거를 요청했습니다. Distrine\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DBAL\Platforms\MySqlPlatform이 지원하지 않을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 설정을 해야 할 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;use_native_enum&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;true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게든.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 모든 문서 및 블로그 게시물은 Symfony &amp;lt; 1.4를 참조하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Symfony 2의 해결책은 무엇입니까?&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;Symfony 2 프로젝트의 경우 이를 의 교리적 구성에 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;app/config.yml&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;doctrine:
    dbal:
        mapping_types: 
            enum:       string 
&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;# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        charset:  UTF8
        mapping_types:
            enum: string
            set: string
            varbinary: string
            tinyblob: text

    orm:
        auto_generate_proxy_classes: %kernel.debug%
        auto_mapping: true
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://blog.alterphp.com/2011/09/deal-with-mysql-types-natively.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-1&quot;&gt;여기&lt;/a&gt;서 가져온 코드&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 실행:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;app/console doctrine:schema:update --force --dump-sql --ansi&lt;/code&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&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;Doctrine\DBAL\Platforms\MySqlPlatform&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.php - 거기에 기본 목록이 함수에 내장되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;initializeDoctrineTypeMappings&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 class=&quot;lang-php prettyprint-override&quot;&gt;&lt;code&gt;$this-&amp;gt;doctrineTypeMapping = array(
            'tinyint'       =&amp;gt; 'boolean',
            'smallint'      =&amp;gt; 'smallint',
            'mediumint'     =&amp;gt; 'integer',
            'int'           =&amp;gt; 'integer',
            (...)
&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;'enum' =&amp;gt; 'string'
&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/8312271/how-to-enable-enums-in-symfony-2-doctrine&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MySQL</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/913</guid>
      <comments>https://manysource.tistory.com/913#entry913comment</comments>
      <pubDate>Sun, 22 Oct 2023 20:11:33 +0900</pubDate>
    </item>
    <item>
      <title>ID가 짝수인 행을 선택</title>
      <link>https://manysource.tistory.com/912</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ID가 짝수인 행을 선택&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;OrderID&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;SELECT * 
FROM Orders 
WHERE mod(OrderID,2) = 0;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리 식 'mod(OrderID,2) = 0'의 구문 오류(missing 연산자)입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle을 사용하지 않으므로 모듈러스 연산자를 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT * FROM Orders where OrderID % 2 = 0;
&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;MOD()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수는 Oracle에 존재하며, 이것이 당신의 혼란의 원인입니다.&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/questions/3756928/select-row-if-the-value-2-1-mod&quot; papago-id=&quot;8-1&quot;&gt;SO 질문&lt;/a&gt;을 살펴봅니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;SELECT * FROM Orders where OrderID % 2 = 0;///this is for even numbers

SELECT * FROM Orders where OrderID % 2 != 0;///this is for odd numbers
&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;사용 가능한 SQL Server %&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select * from orders where ID % 2 = 0;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 Mysql과 oracle에서 모두 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;%의 mod 기능을 사용하는 것이 더 애정이 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select * from orders where mod(ID,2) = 0
&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;MOD() 함수는 &lt;strong papago-id=&quot;11-1&quot;&gt;Oracle과 MySQL&lt;/strong&gt; 모두에 존재하지만 SQL Server에는 존재하지 않습니다.&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;SQL Server에서 다음을 시도합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; SELECT * FROM Orders where OrderID % 2 = 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;SELECT DISTINCT City FROM Station WHERE MOD(Id,2) = 0 ORDER BY City;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도해 보기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT DISTINCT city FROM STATION WHERE ID%2=0 ORDER BY CITY;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL Server의 경우:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;SELECT * FROM Orders where OrderID % 2 = 0;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;//짝수일 경우&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;SELECT * FROM Orders where OrderID % 2 != 0;&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;strong papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle 및 MySQL의 경우 MOD 기능을 사용해야 합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;select * from orders where mod(ID,2) = 0&lt;/code&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;SELECT * FROM ( SELECT *, Row_Number() 
OVER(ORDER BY country_gid) AS sdfg  FROM eka_mst_tcountry ) t 
WHERE t.country_gid % 2 = 0 
&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;SQL에서 이 모든 옵션을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MOD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;SELECT * FROM CITY WHERE MOD(ID,2) = 0 ORDER BY CITY;&lt;/code&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;code&gt;SELECT * FROM CITY WHERE ID % 2 = 0 ORDER BY CITY;&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오어&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;SELECT * FROM CITY WHERE ID MOD 2 = 0 ORDER BY CITY;&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다!&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;;With MYCTE(Empid)
As 
(
  SELECT * FROM employeeodd 
)
Select *
From MYCTE
where empid % 2 = 0;

;With MYCTE(Empid)
As 
(
  SELECT * FROM employeeodd 
)
Select *
From MYCTE
where empid % 2! = 0;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/35111002/select-rows-with-id-having-even-number&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>sql-server</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/912</guid>
      <comments>https://manysource.tistory.com/912#entry912comment</comments>
      <pubDate>Sun, 22 Oct 2023 20:11:26 +0900</pubDate>
    </item>
    <item>
      <title>파일 대신 문자열에 쓰기 XmlWriter</title>
      <link>https://manysource.tistory.com/911</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 대신 문자열에 쓰기 XmlWriter&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;XML 문자열을 반환해야 하는 WCF 서비스가 있습니다. 그런데 작성자가 문자열이 아닌 파일만 만들고 싶어하는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;노력했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string nextXMLstring = &quot;&quot;;
using (XmlWriter writer = XmlWriter.Create(nextXMLstring))
&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;nextXML 문자열에 파일 경로가 없다는 오류가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 것은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;using (XmlWriter writer = XmlWriter.Create(&quot;nextXMLstring.xml&quot;))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML을 빌드한 다음 문자열로 반환하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사합니다!!&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;StringWriter를 생성하여 XmlWriter에게 전달해야 합니다.&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;XmlWriter의 문자열 오버로드입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Create는 파일 이름에 대한 것입니다.&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;using (var sw = new StringWriter()) {
  using (var xw = XmlWriter.Create(sw)) {
    // Build Xml with xw.


  }
  return sw.ToString();
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리처드가 말했듯이,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;StringWriter&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;StringWriter&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UTF-16에 있다고 광고할 겁니다&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;2-1&quot;&gt;일반적&lt;/em&gt;으로 XML은 UTF-8에 있습니다. StringWriter를 서브클래싱하여 이 문제를 해결할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class Utf8StringWriter : StringWriter
{
    public override Encoding Encoding
    {
         get { return Encoding.UTF8; }
    }
}
&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;XmlWriter&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;StringWriter&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. (위의 코드는 항상 UTF-8을 가정하고 있으며, 컨스트럭터에서 인코딩을 수용하는 더 일반적인 버전을 만드는 것은 사소한 일입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 다음을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;using (TextWriter writer = new Utf8StringWriter())
{
    using (XmlWriter xmlWriter = XmlWriter.Create(writer))
    {
        ...
    }
    return writer.ToString();
}
&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;특히 문자열 시작 부분에 UTF8 BOM을 사용하지 않고 텍스트를 들여쓰기를 원하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;using (var ms = new MemoryStream())
using (var x = new XmlTextWriter(ms, new UTF8Encoding(false)) 
                   { Formatting = Formatting.Indented })
{
     // ...
     return Encoding.UTF8.GetString(ms.ToArray());
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;StringBuilder&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;var sb = new StringBuilder();
    using (XmlWriter xmlWriter = XmlWriter.Create(sb))
    {
        ...
    }
return sb.ToString();
&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;남자들은 xmlWriter에게 전화하는 것을 잊지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;close() 및 xmlWriter를 누릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;폐기()하지 않으면 문자열 생성이 완료되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;빈 문자열일 뿐입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 가장 간단하고 빠른 해결책은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;StringBuilder sb = new StringBuilder();

using (var writer = XmlWriter.Create(sb, settings))
{
    ... // Whatever code you have/need :)

    sb = sb.Replace(&quot;encoding=\&quot;utf-16\&quot;&quot;, &quot;encoding=\&quot;utf-8\&quot;&quot;); //Or whatever uft you want/use.
    //Before you finally save it:
    File.WriteAllText(&quot;path\\dataName.xml&quot;, sb.ToString());
}
&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/955611/xmlwriter-to-write-to-a-string-instead-of-to-a-file&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>XML</category>
      <author>manysource</author>
      <guid isPermaLink="true">https://manysource.tistory.com/911</guid>
      <comments>https://manysource.tistory.com/911#entry911comment</comments>
      <pubDate>Sun, 22 Oct 2023 20:11:20 +0900</pubDate>
    </item>
  </channel>
</rss>