<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>factcode</title>
    <link>https://factcode.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 15 May 2026 23:37:32 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>factcode</managingEditor>
    <item>
      <title>AttributeError: 'DataFrame' 개체에 'ix' 속성이 없습니다.</title>
      <link>https://factcode.tistory.com/1602</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;AttributeError: 'DataFrame' 개체에 'ix' 속성이 없습니다.&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;팬더 데이터 프레임의 .ix 속성을 사용하여 열을 끄집어 내려고 하면 이 오류가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df.ix[:, 'col_header']&lt;/code&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;AttributeError: 'DataFrame' object has no attribute 'ix'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스크립트는 오늘 아침에 작동했지만, 오늘 오후에 팬더를 새로 설치한 새로운 Linux 환경에서 실행했습니다.&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;해라&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df.iloc[:, integer]&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;.ix&lt;/code&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;df.loc[:,'col_header']&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;str 또는 boolean 인덱싱에 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.ix를 .loc로 변경하면 올바르게 작동합니다.&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;오늘(2020년 1월 30일) 새로 설치될 예정입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pd.__version__ == '1.0.0'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 이와 함께 &lt;a href=&quot;https://pandas.pydata.org/pandas-docs/version/1.0.0/whatsnew/v1.0.0.html#removal-of-prior-version-deprecations-changes&quot; rel=&quot;noreferrer&quot;&gt;사용&lt;/a&gt;되지 않는 &lt;a href=&quot;https://pandas.pydata.org/pandas-docs/version/1.0.0/whatsnew/v1.0.0.html#removal-of-prior-version-deprecations-changes&quot; rel=&quot;noreferrer&quot;&gt;많은 기능이 제거&lt;/a&gt;됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시리즈를 제거했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ix 및 DataFrame.ix (GH26438)&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 단계를 수행합니다. 1) 새 버전의 Panda 설치 2) .ix 대신 .loc를 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;팬더 1.0.0과 같은 문제가 있었는데, 이것은 나에게 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;관리자로 Anaconda 프롬프트(cmd)를 연 다음&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;conda install panda==0.25.1&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;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ix[] 대신 df.loc[]를 사용합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;6을 제거하면&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ix 대신 iloc 또는 loc를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열 또는 사용자 정의 색인이 있는 경우 .loc를 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.ix() 대신 .loc()를 사용했는데 잘 되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.ix를 .iloc로 교체한 후에 나도 작업을 잘했습니다.&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;ARIMA_log = pd.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;영상 시리즈(ts_log.iloc[0], 인덱스=ts_log.index)&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;.ix[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 팬더 버전을 0.20.0으로 다운그레이드해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최신 버전에서는 다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.loc[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.iloc[]&lt;/code&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;df[['sepal width']]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 열:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df[['sepal width','petal width']]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특수 열('길이' 포함 선택 열):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df[[c for c in df.columns if 'length' in c]]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;Wes McKinney&lt;/em&gt;의 '데이터 &lt;strong&gt;분석을 위한 Python'&lt;/strong&gt;이라는 책을 읽고 있는데 Dataframe이라는 같은 문제를 만나게 되었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인덱스가 있는 행을 검색하는 동안 ix[].&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ix를 iloc로 대체하고 완벽하게 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;색인, 레이블 및 정수가 혼재되어 있기 때문에 .ix를 사용하고 있습니다. .loc()는 .iloc뿐만 아니라 문제를 해결하지 못합니다. 둘 다 오류로 끝납니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인덱스가 정수와 레이블이 섞여 있을 때 빠른 차선이기 때문에 의도적으로 .ix를 사용하고 있었습니다.&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://i.stack.imgur.com/s9fBG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/s9fBG.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;열과 색인을 백업하고 정수로 대체한 다음 .iat를 사용한 다음 df를 처음처럼 복원하는 것이 제 방법입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 다음과 같은 것이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# Save the df and replace indec and columns with integers
lista_colonne = list(df.columns)  
df.columns = range(0,len(lista_colonne))    
nome_indice = df.index.name
lista_indice = list(df.index)
df['Indice'] = range(0,len(lista_indice))
df.index = df['Indice']
del df['Indice']

  ... indexing here with .iat in place of .ix


# Now back as it was
df.columns = lista_colonne
df['Indice'] = lista_indice
df.index = df['Indice']
del df['Indice']
df.index.name = nome_indice
&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;returns.ix['2015-01-01':'2015-12-31'].std()
&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;returns.xs(key='2015',axis=0).std()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;적어도 이 경우에는 2015년을 핵심으로 단면과 필터를 사용할 수 있을 것으로 생각합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;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;df.ix[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df.iloc[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df.loc[]&lt;/code&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;.ix를 .iloc로 교체한 후에 작업을 잘 진행합니다. 자세한 내용은 문서를 참조하십시오.&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;URL : https://stackoverflow.com/questions/59991397/attributeerror-dataframe-object-has-no-attribute-ix&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>dataframe</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1602</guid>
      <comments>https://factcode.tistory.com/1602#entry1602comment</comments>
      <pubDate>Sun, 5 Nov 2023 15:01:33 +0900</pubDate>
    </item>
    <item>
      <title>MAC phphmyadmin:mariadb로 데이터베이스 서버를 실행하는 방법?</title>
      <link>https://factcode.tistory.com/1601</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MAC phphmyadmin:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;mariadb로 데이터베이스 서버를 실행하는 방법?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 저는 홈브루를 이용하여 mariadb를 설치하였습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 mysql&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;/opt/homebrew/bin/mysql&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 현재 제 mariadb는 포트 3306에서 자동으로 실행되고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이미 실행 중인 mariadb를 사용하도록 php myadmin을 구성하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;mariadb 소켓 위치가 어디입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;port=3306
socket      =/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
&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/74685560/mac-phpmyadmin-how-to-run-the-database-server-with-mariadb&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MariaDB</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1601</guid>
      <comments>https://factcode.tistory.com/1601#entry1601comment</comments>
      <pubDate>Sun, 5 Nov 2023 15:01:25 +0900</pubDate>
    </item>
    <item>
      <title>객체의 JavaScript 배열을 최소/최대 값으로 비교</title>
      <link>https://factcode.tistory.com/1600</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;객체의 JavaScript 배열을 최소/최대 값으로 비교&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;객체 배열을 가지고 있는데 특정 객체 속성에서 이 객체들을 비교하려고 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 제 배열이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var myArray = [
    {&quot;ID&quot;: 1, &quot;Cost&quot;: 200},
    {&quot;ID&quot;: 2, &quot;Cost&quot;: 1000},
    {&quot;ID&quot;: 3, &quot;Cost&quot;: 50},
    {&quot;ID&quot;: 4, &quot;Cost&quot;: 500}
]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 구체적으로 &quot;비용&quot;을 제로로 하고 최소값과 최대값을 얻고 싶습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비용 값을 잡아 자바스크립트 배열에 밀어 넣은 다음 &lt;a href=&quot;http://ejohn.org/blog/fast-javascript-maxmin/&quot; rel=&quot;noreferrer&quot; title=&quot;빠른 자바스크립트 최대/분&quot; papago-attr-id=&quot;2&quot;&gt;빠른 자바스크립트 Max/Min&lt;/a&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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;Array.prototype.reduce()&lt;/code&gt;&lt;/a&gt; 어레이에서 집계 작업(min, max, avg 등)을 수행하고 단일 결과를 반환하는 것은 다음과 같은 경우에 적합합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;myArray.reduce(function(prev, curr) {
    return prev.Cost &amp;lt; curr.Cost ? prev : curr;
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;...또는 ES6 함수 구문을 사용하여 내부 함수를 정의할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;myArray.reduce((prev, curr) =&amp;gt; prev.Cost &amp;lt; curr.Cost ? prev : curr);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;귀여운 모습을 보여주고 싶다면 Array 프로토타입에 다음을 첨부하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Array.prototype.hasMin = function(attrib) {
    return (this.length &amp;amp;&amp;amp; this.reduce(function(prev, curr){ 
        return prev[attrib] &amp;lt; curr[attrib] ? prev : curr; 
    })) || 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;myArray.hasMin('ID')  // result:  {&quot;ID&quot;: 1, &quot;Cost&quot;: 200}
myArray.hasMin('Cost')    // result: {&quot;ID&quot;: 3, &quot;Cost&quot;: 50}
myEmptyArray.hasMin('ID')   // result: null
&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;font papago-translate=&quot;translated&quot;&gt;이 버전은 좀 더 부피가 크지만 다음과 같은 체크가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Array.prototype.hasMin = function(attrib) {
    const checker = (o, i) =&amp;gt; typeof(o) === 'object' &amp;amp;&amp;amp; o[i]
    return (this.length &amp;amp;&amp;amp; this.reduce(function(prev, curr){
        const prevOk = checker(prev, attrib);
        const currOk = checker(curr, attrib);
        if (!prevOk &amp;amp;&amp;amp; !currOk) return {};
        if (!prevOk) return curr;
        if (!currOk) return prev;
        return prev[attrib] &amp;lt; curr[attrib] ? prev : curr; 
    })) || 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;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; // There's no real number bigger than plus Infinity
var lowest = Number.POSITIVE_INFINITY;
var highest = Number.NEGATIVE_INFINITY;
var tmp;
for (var i=myArray.length-1; i&amp;gt;=0; i--) {
    tmp = myArray[i].Cost;
    if (tmp &amp;lt; lowest) lowest = tmp;
    if (tmp &amp;gt; highest) highest = tmp;
}
console.log(highest, lowest);
&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;Math.min&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Math.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;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var myArray = [
    { id: 1, cost: 200},
    { id: 2, cost: 1000},
    { id: 3, cost: 50},
    { id: 4, cost: 500}
]


var min = Math.min(...myArray.map(item =&amp;gt; item.cost));
var max = Math.max(...myArray.map(item =&amp;gt; item.cost));

console.log(&quot;min: &quot; + min);
console.log(&quot;max: &quot; + max);&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;배열을 수정해도 상관없는 경우 를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;myArray.sort(function (a, b) {
    return a.Cost - b.Cost
})

var min = myArray[0],
    max = myArray[myArray.length - 1]
&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;Math&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수를 사용하고 원하는 값을 선택합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;map&lt;/code&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;여기 jsbin이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://jsbin.com/necosu/1/edit?js,console&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://jsbin.com/necosu/1/edit?js,console&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var myArray = [{
    &quot;ID&quot;: 1,
    &quot;Cost&quot;: 200
  }, {
    &quot;ID&quot;: 2,
    &quot;Cost&quot;: 1000
  }, {
    &quot;ID&quot;: 3,
    &quot;Cost&quot;: 50
  }, {
    &quot;ID&quot;: 4,
    &quot;Cost&quot;: 500
  }],

  min = Math.min.apply(null, myArray.map(function(item) {
    return item.Cost;
  })),
  max = Math.max.apply(null, myArray.map(function(item) {
    return item.Cost;
  }));

console.log('min', min);//50
console.log('max', max);//1000
&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;ES6를 사용하려는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var min = Math.min.apply(null, myArray.map(item =&amp;gt; item.Cost)),
    max = Math.max.apply(null, myArray.map(item =&amp;gt; item.Cost));
&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&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;is 배열,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;f&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비교할 필드)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let max= (a,f)=&amp;gt; a.reduce((m,x)=&amp;gt; m[f]&amp;gt;x[f] ? m:x);
let min= (a,f)=&amp;gt; a.reduce((m,x)=&amp;gt; m[f]&amp;lt;x[f] ? m:x);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;true&quot; data-console=&quot;true&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;let max= (a,f)=&amp;gt; a.reduce((m,x)=&amp;gt; m[f]&amp;gt;x[f] ? m:x);
let min= (a,f)=&amp;gt; a.reduce((m,x)=&amp;gt; m[f]&amp;lt;x[f] ? m:x);

// TEST

var myArray = [
    {&quot;ID&quot;: 1, &quot;Cost&quot;: 200},
    {&quot;ID&quot;: 2, &quot;Cost&quot;: 1000},
    {&quot;ID&quot;: 3, &quot;Cost&quot;: 50},
    {&quot;ID&quot;: 4, &quot;Cost&quot;: 500}
]

console.log('Max Cost', max(myArray, 'Cost'));
console.log('Min Cost', min(myArray, 'Cost'));

console.log('Max ID', max(myArray, 'ID'));
console.log('Min ID', min(myArray, 'ID'));&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;&lt;a href=&quot;https://stackoverflow.com/a/8864464/3303195&quot;&gt;Rob W의 대답&lt;/a&gt;이 정말 맞는 것 같습니다. (+1) 하지만 재미로: &quot;똑똑해지길 원한다면&quot; 다음과 같은 것을 할 수 &lt;em&gt;있습니다&lt;/em&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var myArray = 
[
    {&quot;ID&quot;: 1, &quot;Cost&quot;: 200},
    {&quot;ID&quot;: 2, &quot;Cost&quot;: 1000},
    {&quot;ID&quot;: 3, &quot;Cost&quot;: 50},
    {&quot;ID&quot;: 4, &quot;Cost&quot;: 500}
]

function finder(cmp, arr, attr) {
    var val = arr[0][attr];
    for(var i=1;i&amp;lt;arr.length;i++) {
        val = cmp(val, arr[i][attr])
    }
    return val;
}

alert(finder(Math.max, myArray, &quot;Cost&quot;));
alert(finder(Math.min, myArray, &quot;Cost&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;var myArray = 
[
    {&quot;ID&quot;: 1, &quot;Cost&quot;: { &quot;Wholesale&quot;:200, Retail: 250 }},
    {&quot;ID&quot;: 2, &quot;Cost&quot;: { &quot;Wholesale&quot;:1000, Retail: 1010 }},
    {&quot;ID&quot;: 3, &quot;Cost&quot;: { &quot;Wholesale&quot;:50, Retail: 300 }},
    {&quot;ID&quot;: 4, &quot;Cost&quot;: { &quot;Wholesale&quot;:500, Retail: 1050 }}
]

function finder(cmp, arr, getter) {
    var val = getter(arr[0]);
    for(var i=1;i&amp;lt;arr.length;i++) {
        val = cmp(val, getter(arr[i]))
    }
    return val;
}

alert(finder(Math.max, myArray, function(x) { return x.Cost.Wholesale; }));
alert(finder(Math.min, myArray, function(x) { return x.Cost.Retail; }));
&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;Math.max.apply(Math, myArray.map(a =&amp;gt; a.Cost));
&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;Math.min.apply(Math, myArray.map(a =&amp;gt; a.Cost));
&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;이는 Lodash's를 통해 달성할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;minBy&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;maxBy&lt;/code&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로다시스&lt;/font&gt;&lt;/font&gt;&lt;code&gt;minBy&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;maxBy&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문서화&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;code&gt;_.minBy(array, [iteratee=_.identity])&lt;/code&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;code&gt;_.maxBy(array, [iteratee=_.identity])&lt;/code&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 메서드는 배열의 각 요소에 대해 호출되는 반복을 허용하여 값의 순위가 매겨지는 기준을 생성합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반복은 (value)라는 하나의 인수로 호출됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h1&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해결책&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;true&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var myArray = [
    {&quot;ID&quot;: 1, &quot;Cost&quot;: 200},
    {&quot;ID&quot;: 2, &quot;Cost&quot;: 1000},
    {&quot;ID&quot;: 3, &quot;Cost&quot;: 50},
    {&quot;ID&quot;: 4, &quot;Cost&quot;: 500}
]

const minimumCostItem = _.minBy(myArray, &quot;Cost&quot;);

console.log(&quot;Minimum cost item: &quot;, minimumCostItem);

// Getting the maximum using a functional iteratee
const maximumCostItem = _.maxBy(myArray, function(entry) {
  return entry[&quot;Cost&quot;];
});

console.log(&quot;Maximum cost item: &quot;, maximumCostItem);&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js&quot;&amp;gt;&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;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce&quot; rel=&quot;noreferrer&quot;&gt;Array.prototype.reduce()&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;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var items = [
  { name : 'Apple',  count : 3  },
  { name : 'Banana', count : 10 },
  { name : 'Orange', count : 2  },
  { name : 'Mango',  count : 8  }
];

function findBy(arr, key, comparatorFn) {
  return arr.reduce(function(prev, curr, index, arr) { 
    return comparatorFn.call(arr, prev[key], curr[key]) ? prev : curr; 
  });
}

function minComp(prev, curr) {
  return prev &amp;lt; curr;
}

function maxComp(prev, curr) {
  return prev &amp;gt; curr;
}

document.body.innerHTML  = 'Min: ' + findBy(items, 'count', minComp).name + '&amp;lt;br /&amp;gt;';
document.body.innerHTML += 'Max: ' + findBy(items, 'count', maxComp).name;&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;간결하고 현대적인 솔루션을 위해서는 현재 최소값과 최대값을 추적하여 어레이에 대한 연산을 수행할 수 있으므로 어레이를 한 번만 반복할 수 있습니다(최적입니다).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let [min, max] = myArray.reduce(([prevMin,prevMax], {Cost})=&amp;gt;
   [Math.min(prevMin, Cost), Math.max(prevMax, Cost)], [Infinity, -Infinity]);
&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;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;true&quot; data-console=&quot;true&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;var myArray = [
    {&quot;ID&quot;: 1, &quot;Cost&quot;: 200},
    {&quot;ID&quot;: 2, &quot;Cost&quot;: 1000},
    {&quot;ID&quot;: 3, &quot;Cost&quot;: 50},
    {&quot;ID&quot;: 4, &quot;Cost&quot;: 500}
]
let [min, max] = myArray.reduce(([prevMin,prevMax], {Cost})=&amp;gt;
   [Math.min(prevMin, Cost), Math.max(prevMax, Cost)], [Infinity, -Infinity]);
console.log(&quot;Min cost:&quot;, min);
console.log(&quot;Max cost:&quot;, max);&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;이것이 더 나은 해결책입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    var myArray = [
    {&quot;ID&quot;: 1, &quot;Cost&quot;: 200},
    {&quot;ID&quot;: 2, &quot;Cost&quot;: 1000},
    {&quot;ID&quot;: 3, &quot;Cost&quot;: 50},
    {&quot;ID&quot;: 4, &quot;Cost&quot;: 500}
    ]
    var lowestNumber = myArray[0].Cost;
    var highestNumber = myArray[0].Cost;

    myArray.forEach(function (keyValue, index, myArray) {
      if(index &amp;gt; 0) {
        if(keyValue.Cost &amp;lt; lowestNumber){
          lowestNumber = keyValue.Cost;
        }
        if(keyValue.Cost &amp;gt; highestNumber) {
          highestNumber = keyValue.Cost;
        }
      }
    });
    console.log('lowest number' , lowestNumber);
    console.log('highest Number' , highestNumber);
&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;트리스탄 리드의 답변(+ es6 사용)에 추가하여 콜백을 수락하는 함수를 만들 수 있습니다. 여기에는 적용할 연산자가 포함됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;prev&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;curr&lt;/code&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;const compare = (arr, key, callback) =&amp;gt; arr.reduce((prev, curr) =&amp;gt;
    (callback(prev[key], curr[key]) ? prev : curr), {})[key];

    // remove `[key]` to return the whole object
&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;const costMin = compare(myArray, 'Cost', (a, b) =&amp;gt; a &amp;lt; b);
const costMax = compare(myArray, 'Cost', (a, b) =&amp;gt; a &amp;gt; b);
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우리는 두가지 방법으로 문제를 해결할 수 있습니다. 두 방법 모두 위에서 이미 설명했지만 성능 테스트가 누락되어 하나를 완성했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1, 네이티브 자바 스크립트 방식&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;2, 먼저 정렬된 개체를 정렬한 다음 정렬된 개체에서 min max를 쉽게 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 또한 양쪽 토우 접근법의 성능을 테스트합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;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;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;//first approach 

var myArray = [
    {&quot;ID&quot;: 1, &quot;Cost&quot;: 200},
    {&quot;ID&quot;: 2, &quot;Cost&quot;: 1000},
    {&quot;ID&quot;: 3, &quot;Cost&quot;: 50},
    {&quot;ID&quot;: 4, &quot;Cost&quot;: 500}
]

var t1 = performance.now();;

let max=Math.max.apply(Math, myArray.map(i=&amp;gt;i.Cost))

let min=Math.min.apply(Math, myArray.map(i=&amp;gt;i.Cost))

var t2   = performance.now();;

console.log(&quot;native fuction took &quot; + (t2 - t1) + &quot; milliseconds.&quot;);

console.log(&quot;max Val:&quot;+max)
console.log(&quot;min Val:&quot;+min)

//  Second approach:


function sortFunc (a, b) {
    return a.Cost - b.Cost
} 

var s1 = performance.now();;
sortedArray=myArray.sort(sortFunc)


var minBySortArray = sortedArray[0],
    maxBySortArray = sortedArray[myArray.length - 1]
    
var s2   = performance.now();;
 console.log(&quot;sort funciton took  &quot; + (s2 - s1) + &quot; milliseconds.&quot;);  
console.log(&quot;max ValBySortArray :&quot;+max)
console.log(&quot;min Val BySortArray:&quot;+min)&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;max = totalAVG.reduce(function (a, b) { return Math.max(a, b)}, -Infinity);

min = totalAVG.reduce(function (a, b) {return Math.min(a, b)}, Infinity);
&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;maxsort = myArray.slice(0).sort(function (a, b) { return b.ID - a.ID })[0].ID; 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내장된 배열 개체를 사용하여 Math.max/Math.min을 대신 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var arr = [1,4,2,6,88,22,344];

var max = Math.max.apply(Math, arr);// return 344
var min = Math.min.apply(Math, arr);// return 1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/8864430/compare-javascript-array-of-objects-to-get-min-max&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>JavaScript</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1600</guid>
      <comments>https://factcode.tistory.com/1600#entry1600comment</comments>
      <pubDate>Sun, 5 Nov 2023 15:01:20 +0900</pubDate>
    </item>
    <item>
      <title>pandas를 만듭니다.사전에서 데이터프레임</title>
      <link>https://factcode.tistory.com/1599</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;pandas를 만듭니다.사전에서 데이터프레임&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;{'user':{movie:rating} }
&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;{Jill': {'Avenger: Age of Ultron': 7.0,
                            'Django Unchained': 6.5,
                            'Gone Girl': 9.0,
                            'Kill the Messenger': 8.0}
'Toby': {'Avenger: Age of Ultron': 8.5,
                                'Django Unchained': 9.0,
                                'Zoolander': 2.0}}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 이 dict를 사용자 이름 열 1과 다른 열 영화 등급 열이 있는 팬더 데이터 프레임으로 변환하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;user  Gone_Girl  Horrible_Bosses_2  Django_Unchained  Zoolander etc. \
&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;이런 경우에는 그냥 NaN으로 엔트리를 채우는 것이 좋을 것 같습니다.&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;data=[] 
for i,key in enumerate(movie_user_preferences.keys() ):
    try:            
        data.append((key
                    ,movie_user_preferences[key]['Gone Girl']
                    ,movie_user_preferences[key]['Horrible Bosses 2']
                    ,movie_user_preferences[key]['Django Unchained']
                    ,movie_user_preferences[key]['Zoolander']
                    ,movie_user_preferences[key]['Avenger: Age of Ultron']
                    ,movie_user_preferences[key]['Kill the Messenger']))
    # if no entry, skip
    except:
        pass 
df=pd.DataFrame(data=data,columns=['user','Gone_Girl','Horrible_Bosses_2','Django_Unchained','Zoolander','Avenger_Age_of_Ultron','Kill_the_Messenger'])
&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;제 목표는 (위에서 보여준 무차별 대입 방식이 아닌) 영화 레이블을 반복하여 데이터 목록에 추가하고, 둘째로 모든 사용자를 포함하고 영화 등급이 없는 요소에 null 값을 배치하는 데이터 프레임을 만드는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;dict 명령을 DataFrame 생성자에게 전달할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [11]: d = {'Jill': {'Django Unchained': 6.5, 'Gone Girl': 9.0, 'Kill the Messenger': 8.0, 'Avenger: Age of Ultron': 7.0}, 'Toby': {'Django Unchained': 9.0, 'Zoolander': 2.0, 'Avenger: Age of Ultron': 8.5}}

In [12]: pd.DataFrame(d)
Out[12]:
                        Jill  Toby
Avenger: Age of Ultron   7.0   8.5
Django Unchained         6.5   9.0
Gone Girl                9.0   NaN
Kill the Messenger       8.0   NaN
Zoolander                NaN   2.0
&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;from_dict&lt;/code&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;In [13]: pd.DataFrame.from_dict(d)
Out[13]:
                        Jill  Toby
Avenger: Age of Ultron   7.0   8.5
Django Unchained         6.5   9.0
Gone Girl                9.0   NaN
Kill the Messenger       8.0   NaN
Zoolander                NaN   2.0

In [14]: pd.DataFrame.from_dict(d, orient='index')
Out[14]:
      Django Unchained  Gone Girl  Kill the Messenger  Avenger: Age of Ultron  Zoolander
Jill               6.5          9                   8                     7.0        NaN
Toby               9.0        NaN                 NaN                     8.5          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;data=[] 
for i,key in enumerate(movie_user_preferences.keys() ):
    try:            
        data.append((key
                    ,movie_user_preferences[key]['Gone Girl'] if 'Gone Girl' in movie_user_preferences[key] else 'NaN'
                    ,movie_user_preferences[key]['Horrible Bosses 2'] if 'Horrible Bosses 2' in movie_user_preferences[key] else 'NaN'
                    ,movie_user_preferences[key]['Django Unchained'] if 'Django Unchained' in movie_user_preferences[key] else 'NaN'
                    ,movie_user_preferences[key]['Zoolander'] if 'Zoolander' in movie_user_preferences[key] else 'NaN'
                    ,movie_user_preferences[key]['Avenger: Age of Ultron'] if 'Avenger: Age of Ultron' in movie_user_preferences[key] else 'NaN'
                    ,movie_user_preferences[key]['Kill the Messenger'] if 'Kill the Messenger' in movie_user_preferences[key] else 'NaN' ))

    # if no entry, skip
    except:
        pass


 user Gone_Girl Horrible_Bosses_2  Django_Unchained Zoolander  \
 0      Sam         6                 3               7.5         7   
 1      Max        10                 6               7.0        10   
 2   Robert       NaN                 5               7.0         9   
 3     Toby       NaN               NaN               9.0         2   
 4    Julia       6.5               NaN               6.0       6.5   
 5  William         7                 4               8.0         4   
 6     Jill         9               NaN               6.5       NaN   

 Avenger_Age_of_Ultron Kill_the_Messenger  
 0                   10.0                5.5  
 1                    7.0                  5  
 2                    8.0                  9  
 3                    8.5                NaN  
 4                   10.0                  6  
 5                    6.0                6.5  
 6                    7.0                  8  
&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/33157522/create-pandas-dataframe-from-dictionary-of-dictionaries&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>dataframe</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1599</guid>
      <comments>https://factcode.tistory.com/1599#entry1599comment</comments>
      <pubDate>Sun, 5 Nov 2023 15:01:08 +0900</pubDate>
    </item>
    <item>
      <title>ORA-04036: 인스턴스에서 사용하는 PGA 메모리가 PGA_AGGRATE_LIMIT를 초과합니다.</title>
      <link>https://factcode.tistory.com/1598</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ORA-04036: 인스턴스에서 사용하는 PGA 메모리가 PGA_AGGRATE_LIMIT를 초과합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;팀원 중 한 명이 오라클 텍스트 인덱스를 만드는 중에 ORA-04036(12c)을 우연히 발견했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
ORA-00039: error during periodic action
ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT
ORA-06512: at &quot;CTXSYS.DRUE&quot;, line 160
ORA-06512: at &quot;CTXSYS.TEXTINDEXMETHODS&quot;, line 366
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저의 경우 지수(또는 다른 병렬 연산)를 생성하는 동안 매우 높은 병렬도 48(너무 많은 세션과 PGA 증가가 필요함)로 인해 실패했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우리는 이것을 피하기 위해 평행성을 줄이려고 노력해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DOP 8 스크립트를 성공적으로 실행했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle Database 12c에서 PGA_AGGRATE_LIMIT라는 새로운 매개 변수는 인스턴스가 차지하는 PGA의 양에 대해 엄격한 제한을 설정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 경우 모든 세션이 차지하는 전체 PGA가 제한을 초과하면 오라클은 가장 불안정한 PGA 메모리를 보유한 세션을 삭제하고 해당 세션이 보유한 PGA 메모리를 모두 해제합니다.&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 오류 ORA-4036을 기록합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 조정되지 않은 쿼리를 발행하는 세션을 통해 폭주하는 PGA 소비를 제어하는 데 매우 유용한 기능입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매개 변수 pga_aggregate_limit는 명시적으로 정의되지 않은 경우 이 세 가지 숫자 중 큰 값으로 기본 설정됩니다. 2GB 3MB 프로세스 매개 변수 값의 2배 매개 변수 pga_aggregate_target. 그러나 이 제한은 총 SGA 크기를 제거한 후 총 물리적 메모리의 1.2배를 초과하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 새로운 기능이 마음에 들지 않고 이전(12c 이전)의 동작으로 돌아가고 싶으십니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론입니다. pga_aggregate_limit 값을 0으로 설정하면 매개 변수가 아무런 영향을 주지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SO에서 아직 찾을 수 없어서 커뮤니티 독자들에게 도움이 되는 답변을 게시합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자세한 내용은 이 &lt;a href=&quot;http://www.oracle.com/technetwork/articles/database/oracle-database-12c-manageability-2194094.html&quot; rel=&quot;noreferrer&quot; title=&quot;이것.&quot; papago-attr-id=&quot;2&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;translated&quot;&gt;다음을 사용하여 현재 pga_aggregate_limit가 무엇인지 확인합니다(변경 사항을 되돌리려는 경우).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;show parameter pga_aggregate_limit;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음을 사용하여 pga_aggregate_limit를 0으로 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;alter system set pga_aggregate_limit = 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;p&gt;&lt;a href=&quot;http://www.dba-oracle.com/t_pga_aggregate_limit.htm&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://www.dba-oracle.com/t_pga_aggregate_limit.htm&lt;/font&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://docs.oracle.com/database/121/REFRN/GUID-E364D0E5-19F2-4081-B55E-131DF09CFDB3.htm#REFRN10328&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://docs.oracle.com/database/121/REFRN/GUID-E364D0E5-19F2-4081-B55E-131DF09CFDB3.htm#REFRN10328&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/42855051/ora-04036-pga-memory-used-by-the-instance-exceeds-pga-aggregate-limit&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>oracle</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1598</guid>
      <comments>https://factcode.tistory.com/1598#entry1598comment</comments>
      <pubDate>Sun, 5 Nov 2023 15:01:01 +0900</pubDate>
    </item>
    <item>
      <title>오라클 개체 종속성 루프</title>
      <link>https://factcode.tistory.com/1597</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;Oracle Database에서 프로젝트를 컴파일하려고 하면 문제가 발생합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;좀 더 쉽게 설명하자면, 패키지 2개(유틸과 유형)와 뷰 1개(VIEW), 이렇게 3개의 객체가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;패키지 UTILS가 패키지 유형에 정의된 유형을 사용하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;패키지 유형은 해당 유형 중 하나에 VIEW를 기본으로 사용하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 VIEW는 패키지 UTILS의 기능을 스크립트에 사용하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 개체 중 하나를 변경하려고 하면 모든 것이 잘못된 상태이므로 컴파일할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 일종의 객체 의존성 루프가 생성됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 문제를 해결할 수 있도록 도와주시기 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 아래 코드를 컴파일 할 방법은 없습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각각의 개체는 개별적으로 구문적으로 정확하지만, 어떻게 그것들이 모두 함께 컴파일될 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;create or replace package my_types is
   type type1 is table of number;
   type type2 is table of my_view%rowtype;
end;
/

create or replace package my_utils is
   function get_1 return number;
   procedure do_something(parameter my_types.type2);
end;
/

create or replace package body my_utils is
   function get_1 return number is
   begin
       return 1;
   end;

   procedure do_something(parameter my_types.type2) is
   begin
       null;
   end;
end;
/

create or replace force view my_view as
select * from dual
where 1 = my_utils.get_1();

exec dbms_utility.compile_schema(user, false);

select object_name from user_objects where status &amp;lt;&amp;gt; 'VALID';
&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;create or replace view my_view_1
as select * from dual; 

create or replace package my_types is
   type type1 is table of number;
   type type2 is table of my_view_1%rowtype;
end;
/

create or replace package my_utils is
   function get_1 return number;
   procedure do_something(parameter my_types.type2);
end;
/

create or replace package body my_utils is
   function get_1 return number is
   begin
       return 1;
   end;

   procedure do_something(parameter my_types.type2) is
   begin
       null;
   end;
end;
/

create or replace view my_view as
select * from my_view_1
where 1 = my_utils.get_1();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편집: 패키지 my_utils를 두 개로 분할하는 것도 가능합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;create or replace package my_utils_1 is
   function get_1 return number;
end;
/
create or replace package body my_utils_1 is
   function get_1 return number is
   begin
       return 1;
   end;
end;
/

create or replace view my_view as
select * from dual
where 1 = my_utils_1.get_1();

create or replace package my_types is
   type type1 is table of number;
   type type2 is table of my_view%rowtype;
end;
/

create or replace package my_utils_2 is
   procedure do_something(parameter my_types.type2);
end;
/
create or replace package body my_utils_2 is
   procedure do_something(parameter my_types.type2) is
   begin
       null;
   end;
end;
/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;포장형과 %ROWTYPE은 사용을 자제하겠습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표준 SQL이 아니므로 &lt;a href=&quot;http://en.wikipedia.org/wiki/Structured_type&quot; rel=&quot;nofollow&quot;&gt;Structured Type&lt;/a&gt;으로 대체할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;create or replace view my_view_1
as select * from dual; 

create or replace type type1 as table of number;
create or replace type type2 as object (DUMMY VARCHAR2(1 byte));
create or replace type table_type2 as table of type2;

create or replace package my_utils is
   function get_1 return number;
   procedure do_something(parameter table_type2);
end;
/

create or replace package body my_utils is
   function get_1 return number is
   begin
       return 1;
   end;

   procedure do_something(parameter table_type2) is
   begin
       null;
   end;
end;
/

create or replace view my_view as
select * from my_view_1
where 1 = my_utils.get_1();
&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;pre&gt;&lt;code&gt;create or replace package my_types is
   type type1 is table of number;
   type type2 is table of my_view%rowtype;
end;
/

create or replace package my_utils is
   function get_1 return number;
   procedure do_something(parameter my_types.type2);
end;
/

create or replace package body my_utils is
   function get_1 return number is
   begin
       return 1;
   end;

   procedure do_something(parameter my_types.type2) is
   begin
       null;
   end;
end;
/

create or replace force view my_view as
select * from dual;

exec dbms_utility.compile_schema(user, false);

create or replace force view my_view as
select * from dual
where 1 = my_utils.get_1();

select object_name from user_objects where status &amp;lt;&amp;gt; 'VALID';
&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/18630962/oracle-object-dependency-loop&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>oracle</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1597</guid>
      <comments>https://factcode.tistory.com/1597#entry1597comment</comments>
      <pubDate>Sun, 5 Nov 2023 15:00:54 +0900</pubDate>
    </item>
    <item>
      <title>MySQL GUID/UUID 저장</title>
      <link>https://factcode.tistory.com/1596</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL GUID/UUID 저장&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 UUID()에 의해 생성된 MySQL GUID/UUID를 이진(16)으로 변환하기 위해 생각해 낼 수 있는 최선의 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UNHEX(REPLACE(UUID(),'-',''))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 나서 그것을 BINORY(16)에 저장합니다.&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 8.0 이상부터는 &lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_uuid-to-bin&quot; rel=&quot;noreferrer&quot;&gt;UUID_&lt;/a&gt;를 사용할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_uuid-to-bin&quot; rel=&quot;noreferrer&quot;&gt;TO_BIN&lt;/a&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;UUID_TO_BIN(string_uuid)&lt;/strong&gt;, UUID_&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;TO_BIN(string_uuid, swap_flag)&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열 UUID를 이진 UUID로 변환하고 결과를 반환합니다. (IS_UUID() 함수 설명에는 허용되는 문자열 UUID 형식이 나열됩니다.)&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반환 이진 UUID는 VARB입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;INARY(16) 값.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;CREATE TABLE t (id binary(16) PRIMARY KEY);
 
INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));
INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));
INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));

SELECT *, BIN_TO_UUID(id) FROM t;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.db-fiddle.com/f/qGbAKZpuGHAGd62sMvFQVZ/0&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DB-Fiddle.com 데모&lt;/font&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시사하는 바가 많지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 쿼리 속도가 조금 느려지지만 거의 눈치채지 못할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;UNIQUEIDENTIFIER&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로 저장됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;16-byte binary&lt;/code&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;bit order&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 이니셜이 아닌 다른 문자열 표현이 있을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NEWID()&lt;/code&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;Oracle&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SYS_GUID()&lt;/code&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/547118/storing-mysql-guid-uuids&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MySQL</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1596</guid>
      <comments>https://factcode.tistory.com/1596#entry1596comment</comments>
      <pubDate>Sun, 5 Nov 2023 15:00:46 +0900</pubDate>
    </item>
    <item>
      <title>다른 필드의 COUNT가 SQL인 열을 업데이트하시겠습니까?</title>
      <link>https://factcode.tistory.com/1595</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 필드의 COUNT가 SQL인 열을 업데이트하시겠습니까?&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;Articles:
ID | TITLE | CONTENT | USER | NUM_COMMENTS

COMMENTS
ID | ARTICLE_ID | TEXT
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 기사 테이블의 NUM_Comments 필드를 기사에 대한 코멘트의 개수로 업데이트하는 sql 문이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;update articles a, comments f 
set a.num_comments =  COUNT(f.`id`)
where f.article_id = a.id
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위 sql이 작동하지 않아 Invalid Use for Group 함수 오류가 발생합니다.&lt;/font&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;업데이트 문에 가입할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그럴 것 같네요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;update articles
set num_comments =
(select count (*) from comments
where comments.article_id = articles.id)
&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;하나의 기사만 업데이트하려는 경우 하위 쿼리 뒤에 'where' 절을 추가합니다.&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;UPDATE articles a SET num_comments = 
(SELECT COUNT(*) FROM comments c WHERE c.article_id = a.id)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 저는 댓글이 달렸을 때 한 개의 레코드만 업데이트하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UPDATE articles a SET num_comments = 
(SELECT COUNT(*) FROM comments c WHERE c.article_id = 100) WHERE a.id = 100
&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;sqlite, pgsql에서 sql을 작업하는 것은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;update articles 
  set num_comments = 
    (select count(id) from comments 
     where comments.article_id = articles.id)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열 수만 기준으로 업데이트하려면 다음과 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;update articles,
 (select count (*) 
  from comments
  where comments.article_id = articles.id) as newtotals
set articles.num_comments = newtotals.count;
&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;update articles,
 (select (count (*)) + (articles.num_comments) as count 
  from comments
  join articles on 
    comments.article_id = articles.id
  group by articles.id) as newtotals
set articles.num_comments = newtotals.count;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적인 내부 조인 방식으로는 할 수 없지만 다음과 같은 다른 방식으로 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1 - article table에서 ids를 모두 선택합니다.&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;기사 업데이트 NUM_COMMENTs set NUM_COMMENTs = (댓글에서 count(id) 선택, id = $id), id = $id&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것을 더 향상시키기 위해, 첫번째 선택에서 모든 값을 선택하지 마세요, 특히 그 표가 너무 클 때, 당신은 기사들을 반복하고 반복 당 1000개의 레코드를 얻어야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 DB 풀에서 정상적인 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/6135226/update-a-column-with-a-count-of-other-fields-is-sql&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MySQL</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1595</guid>
      <comments>https://factcode.tistory.com/1595#entry1595comment</comments>
      <pubDate>Sun, 5 Nov 2023 15:00:39 +0900</pubDate>
    </item>
    <item>
      <title>도커 구성품 단일 컨테이너 구축</title>
      <link>https://factcode.tistory.com/1594</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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Composition(작곡) 사용, 실행하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker-compose build&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;pre&gt;&lt;code&gt;&amp;gt; docker-compose build
Building elasticsearch
Step 1 : FROM elasticsearch:2.1
 ---&amp;gt; a05cc7ed3f32
Step 2 : RUN /usr/share/elasticsearch/bin/plugin install analysis-phonetic
 ---&amp;gt; Using cache
 ---&amp;gt; ec07bbdb8a18
Successfully built ec07bbdb8a18
Building search
Step 1 : FROM php:5.5.28-fpm
 ---&amp;gt; fcd24d1058c0
...
&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;strong&gt;컨테이너 하나만 리빌드할&lt;/strong&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;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker-compose build elasticsearch
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;docker-compose up -d --no-deps --build &amp;lt;service_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://staxmanade.com/2016/09/how-to-update-a-single-running-docker-compose-container/&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;translated&quot;&gt;만약 당신이 당신의 도커 compose 파일 안에서 특정 서비스를 &lt;strong&gt;실행&lt;/strong&gt;하고 다시 &lt;strong&gt;만들고&lt;/strong&gt; 싶다면, 당신은 @dnephin이 제안한 것과 같은 방식으로 그것을 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ docker-compose up -d --force-recreate --no-deps --build service_name
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도커-컴포지트.yml 파일이 다음과 같다고 가정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;version: '3'
services:
  service_1:
      .....
  service_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;추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--no-start&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;플래그를 도커- compose로 보내고, 서비스를 하나만 구축하므로 나중에 시작합니다.&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/35228970/docker-compose-build-single-container&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Docker</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1594</guid>
      <comments>https://factcode.tistory.com/1594#entry1594comment</comments>
      <pubDate>Sun, 5 Nov 2023 15:00:33 +0900</pubDate>
    </item>
    <item>
      <title>angular js에서 $parse 사용</title>
      <link>https://factcode.tistory.com/1593</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;angular js에서 $parse 사용&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;/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;/help/closed-questions&quot;&gt;집중력&lt;/a&gt;이 있는&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 답변을 받지 않고 있습니다.&lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;hr class=&quot;my12 outline-none baw0 bb bc-powder-400&quot;&gt; 
  &lt;div class=&quot;fw-nowrap fc-black-600&quot;&gt; 
   &lt;div class=&quot;d-flex fd-column lh-md&quot;&gt; 
    &lt;div class=&quot;mb0 d-flex&quot;&gt; 
     &lt;div class=&quot;flex--item mr8&quot;&gt; 
      &lt;svg aria-hidden=&quot;true&quot; class=&quot;svg-icon iconLightbulb&quot; width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 18 18&quot;&gt;
       &lt;path d=&quot;M15 6.38A6.48 6.48 0 0 0 7.78.04h-.02A6.49 6.49 0 0 0 2.05 5.6a6.31 6.31 0 0 0 2.39 5.75c.49.39.76.93.76 1.5v.24c0 1.07.89 1.9 1.92 1.9h2.75c1.04 0 1.92-.83 1.92-1.9v-.2c0-.6.26-1.15.7-1.48A6.32 6.32 0 0 0 15 6.37ZM4.03 5.85A4.49 4.49 0 0 1 8 2.02a4.48 4.48 0 0 1 5 4.36 4.3 4.3 0 0 1-1.72 3.44c-.98.74-1.5 1.9-1.5 3.08v.1H7.2v-.14c0-1.23-.6-2.34-1.53-3.07a4.32 4.32 0 0 1-1.64-3.94ZM10 18a1 1 0 0 0 0-2H7a1 1 0 1 0 0 2h3Z&quot;&gt;&lt;/path&gt;
      &lt;/svg&gt; 
     &lt;/div&gt; 
     &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;이 질문을 개선하고 싶으십니까?&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;/posts/20896870/edit&quot;&gt;이 게시물을 편집&lt;/a&gt;하여 한 가지 문제에만 초점을 맞추도록 질문을 업데이트합니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;mb0 mt6 d-flex&quot;&gt; 
     &lt;p class=&quot;ml24 pl2&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;span class=&quot;relativetime&quot; title=&quot;2014-01-03 06:08:00Z&quot; papago-attr-id=&quot;1&quot;&gt;9년전&lt;/span&gt;에 문을 닫았습니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;ml24 pl2&quot;&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;mt24 d-flex gsx gs8&quot;&gt; 
   &lt;a class=&quot;s-btn s-btn__outlined flex--item js-post-notice-edit-post&quot; href=&quot;/posts/20896870/edit&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 질문을 개선합니다.&lt;/font&gt;&lt;/a&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&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;$parse&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 papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;JS&lt;/strong&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;Angular는 $digest 루프를 실행할 때 $parse를 자동으로 실행합니다. 기본적으로 $parse는 Angular가 식을 평가하는 방식입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;식을 수동으로 구문 분석하려면 $parse 서비스를 컨트롤러에 주입하고 서비스를 호출하여 구문 분석을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ng-book에서 가져온 코드가 있습니다. 그 다음에 표현을 파싱합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ng-controller=&quot;MyCtrl&quot;&amp;gt;
  &amp;lt;input ng-model=&quot;expr&quot; type=&quot;text&quot; placeholder=&quot;Enter an expression&quot; /&amp;gt;
    &amp;lt;h2&amp;gt;{{ parsedValue }}&amp;lt;/h2&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;angular.module(&quot;myApp&quot;, [])
 .controller('MyCtrl',['$scope', '$parse', function($scope, $parse) {
    $scope.$watch('expr', function(newVal, oldVal, scope) {
      if (newVal !== oldVal) {
        // Let's set up our parseFun with the expression
        var parseFun = $parse(newVal);
        // Get the value of the parsed expression
         $scope.parsedValue = parseFun(scope);
      }
    });
 }]);
&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;$parse를 직접 사용하지는 않겠지만, 그것이 각도 &lt;a href=&quot;http://docs.angularjs.org/guide/expression&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;{{ expression }}&lt;/code&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/20896870/use-of-parse-in-angular-js&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>AngularJS</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1593</guid>
      <comments>https://factcode.tistory.com/1593#entry1593comment</comments>
      <pubDate>Sun, 5 Nov 2023 15:00:26 +0900</pubDate>
    </item>
    <item>
      <title>HTML/CSS/JavaScript를 이용한 데스크톱 앱 개발 방법?</title>
      <link>https://factcode.tistory.com/1592</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML/CSS/JavaScript를 이용한 데스크톱 앱 개발 방법?&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;문&lt;/b&gt; 닫았습니다.&lt;/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;/help/closed-questions&quot;&gt;집중력&lt;/a&gt;이 있는&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 답변을 받지 않고 있습니다.&lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;hr class=&quot;my12 outline-none baw0 bb bc-powder-400&quot;&gt; 
  &lt;div class=&quot;fw-nowrap fc-black-600&quot;&gt; 
   &lt;div class=&quot;d-flex fd-column lh-md&quot;&gt; 
    &lt;div class=&quot;mb0 d-flex&quot;&gt; 
     &lt;div class=&quot;flex--item mr8&quot;&gt; 
      &lt;svg aria-hidden=&quot;true&quot; class=&quot;svg-icon iconLightbulb&quot; width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 18 18&quot;&gt;
       &lt;path d=&quot;M15 6.38A6.48 6.48 0 0 0 7.78.04h-.02A6.49 6.49 0 0 0 2.05 5.6a6.31 6.31 0 0 0 2.39 5.75c.49.39.76.93.76 1.5v.24c0 1.07.89 1.9 1.92 1.9h2.75c1.04 0 1.92-.83 1.92-1.9v-.2c0-.6.26-1.15.7-1.48A6.32 6.32 0 0 0 15 6.37ZM4.03 5.85A4.49 4.49 0 0 1 8 2.02a4.48 4.48 0 0 1 5 4.36 4.3 4.3 0 0 1-1.72 3.44c-.98.74-1.5 1.9-1.5 3.08v.1H7.2v-.14c0-1.23-.6-2.34-1.53-3.07a4.32 4.32 0 0 1-1.64-3.94ZM10 18a1 1 0 0 0 0-2H7a1 1 0 1 0 0 2h3Z&quot;&gt;&lt;/path&gt;
      &lt;/svg&gt; 
     &lt;/div&gt; 
     &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;이 질문을 개선하고 싶으십니까?&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;/posts/12232784/edit&quot;&gt;이 게시물을 편집&lt;/a&gt;하여 한 가지 문제에만 초점을 맞추도록 질문을 업데이트합니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;mb0 mt6 d-flex&quot;&gt; 
     &lt;p class=&quot;ml24 pl2&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;span class=&quot;relativetime&quot; title=&quot;2014-07-16 19:12:02Z&quot; papago-attr-id=&quot;1&quot;&gt;9년전&lt;/span&gt;에 문을 닫았습니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;ml24 pl2&quot;&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;mt24 d-flex gsx gs8&quot;&gt; 
   &lt;a class=&quot;s-btn s-btn__outlined flex--item js-post-notice-edit-post&quot; href=&quot;/posts/12232784/edit&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 질문을 개선합니다.&lt;/font&gt;&lt;/a&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫째, 저는 이것을 전문적으로 하는 것에 관심이 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 웹 개발자이며, 제 동료는 최근에 스포티파이로 떠났고 스포티파이 데스크톱 앱의 자바스크립트에서 주로 일할 것이라고 말했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;'크롬 프레임'을 사용하고 내부의 모든 것이 웹 앱(HTML/JS/CSS)처럼 이루어진다고 합니다.&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;만약 제가 이미 알고 있는 기술들을 사용하고 그것들을 일종의 &quot;프레임&quot; 안에 구현할 수 있다면, 여전히 윈도우나 더 나은, 그러나 크로스 플랫폼 앱을 구축할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터베이스에 대해 아무런 언급을 하지 않았다는 것을 알고 있지만 웹 기술이 적용된 간단한 hello world 데스크톱 앱이라도 시작하면 좋을 것입니다.&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;Titanium for Desktop Dev부터 시작할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://bitbucket.org/chromiumembedded/cef&quot; rel=&quot;noreferrer&quot;&gt;Crome Embedded Framework&lt;/a&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;C++로 작성되어 있어 컨테이너 앱에서 원하는 하위 OS를 모두 수행할 수 있으며(으르렁, 트레이 아이콘, 로컬 파일 액세스, 컴포트 등), HTML/자바스크립트에서 모든 애플리케이션 로직과 gui를 수행할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로컬 리소스를 제공하거나 사용자 지정 작업을 수행하기 위해 http 요청을 차단할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 http://localapp.com/SetTrayIconState?state=active 에 대한 요청을 컨테이너가 가로챈 다음 C++ 기능을 호출하여 트레이 아이콘을 업데이트할 수 있습니다.&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;CEF에서 자바스크립트를 직접 디버그하는 것은 매우 어렵습니다.&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;AppJS.com (데스크톱 애플리케이션을 구축하는 데 도움이 됨)을 사용해 볼 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML, CSS 및 자바스크립트를 사용하는 Linux, Windows 및 Mac용)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 @Clint가 지적한 바와 같이, brackets.io (Adobe)의 팀은 Chrome Embedded Framework(크롬 임베디드 프레임워크)를 사용하여 훨씬 더 쉽게 시작할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 괄호 껍질이라고 불립니다: github.com/adobe/brackets-shell 그것에 대해 더 &lt;a href=&quot;http://clintberry.com/2013/html5-desktop-apps-with-brackets-shell&quot; rel=&quot;noreferrer&quot;&gt;많이&lt;/a&gt; 여기서 알아보세요: clintberry.com/2013/html5-desktop-apps-with-brackets-shell&lt;/font&gt;&lt;/p&gt;&lt;h1&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NW.js&lt;/font&gt;&lt;/h1&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;a href=&quot;http://nwjs.io/&quot; rel=&quot;noreferrer&quot;&gt;NW.js&lt;/a&gt;&lt;/strong&gt;는 Node를 잘 알고 있거나 자바스크립트를 사용해본 경험이 있다면 추천하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NW.js는 크롬과 node.js를 기반으로 하는 앱 런타임입니다.&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;현대 HTML5, CSS3, JS 및 WebGL로 작성된 앱&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Node.js API 및 모든 타사 모듈을 완벽하게 지원합니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;좋은 성능:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;노드와 웹킷은 동일한 스레드에서 실행됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수 호출은 단순하게 이루어집니다. 개체가 동일한 힙에 있고 서로 참조만 할 수 있습니다.&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;Linux, Mac OS X 및 Windows에서 사용 가능&lt;/font&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NW.js repo는 &lt;a href=&quot;https://github.com/rogerwang/node-webkit&quot; rel=&quot;noreferrer&quot;&gt;여기&lt;/a&gt;에서 찾을 수 있고 NW.js에 대한 좋은 소개는 &lt;a href=&quot;http://code.tutsplus.com/tutorials/introduction-to-html5-desktop-apps-with-node-webkit--net-36296&quot; rel=&quot;noreferrer&quot;&gt;여기&lt;/a&gt;에서 찾을 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://nodejs.org/&quot; rel=&quot;noreferrer&quot;&gt;Node.js&lt;/a&gt;를 배우고 싶다면 좋은 링크가 많은 &lt;a href=&quot;https://stackoverflow.com/a/5511507/1724097&quot;&gt;SO&lt;/a&gt; 게시물을 추천합니다.&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p&gt;
  &lt;strike&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://www.awesomium.com/&quot; rel=&quot;noreferrer&quot;&gt;Awesomium&lt;/a&gt;을 사용하면 C++ 또는 C+에서 HTML UI를 쉽게 사용할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NET 앱&lt;/font&gt;&lt;/strike&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h1&gt;&lt;font papago-translate=&quot;translated&quot;&gt;갱신하다&lt;/font&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;a href=&quot;http://electron.atom.io/&quot; rel=&quot;noreferrer&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;참고: &lt;a href=&quot;https://github.com/appjs/appjs&quot; rel=&quot;noreferrer&quot;&gt;AppJS&lt;/a&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/nwjs/nw.js/&quot; rel=&quot;noreferrer&quot;&gt;NW.js&lt;/a&gt;를 보세요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML/JS/CSS 데스크톱 앱을 위한 솔루션이 부족하지 않은 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 방금 발견한 한가지 해결책은 Tide입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SDK: http://www.tidesdk.org/, 문서를 보니 매우 유망해 보입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Python, PHP 또는 Ruby로 개발하여 Mac, Windows 또는 Linux용으로 패키지화할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;거품을 터뜨려서 미안하지만 &lt;em&gt;스포티파이 데스크톱 클라이언트&lt;/em&gt;는 웹킷 &lt;a href=&quot;https://developer.spotify.com/technologies/apps/guidelines/#webbrowserengine&quot; rel=&quot;nofollow&quot;&gt;기반 브라우저일 뿐&lt;/a&gt;입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론 구체적인 추가 기능을 제공하지만, JS 엔진과 크롬 렌더링 엔진이 있기 때문에 JS와 HTML/CSS만 실행할 수 있습니다.&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;사용자가 찾고 있는 것은 HTML5 앱을 iOS, Android 및 Blackberry 장치에 기본적으로 배포할 수 있는 프레임워크인 &lt;a href=&quot;http://www.sencha.com/products/touch/&quot; rel=&quot;nofollow&quot;&gt;Senscha Touch&lt;/a&gt;와 유사합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 특정 API 호출과 사용 가능한 장치별 기능 사이의 중개 역할을 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://www.appcelerator.com/&quot; rel=&quot;nofollow&quot;&gt;저&lt;/a&gt;는 앱셀러레이터에 대한 경험이 전혀 없지만, 정확히 그렇게 하고 있는 것 같습니다. 그리고 온라인에서 매우 호의적인 평가를 받습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(1999년으로 돌아가서 &lt;a href=&quot;http://en.wikipedia.org/wiki/HTML_Application&quot; rel=&quot;nofollow&quot;&gt;MS HTA&lt;/a&gt;를 사용하고 싶지 않았다면;)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 독립형 앱처럼 보이는 곳에 웹사이트를 로드할 수 &lt;a href=&quot;http://fluidapp.com/&quot; rel=&quot;nofollow&quot;&gt;있는&lt;/a&gt; Fluid &lt;a href=&quot;https://wiki.mozilla.org/Prism&quot; rel=&quot;nofollow&quot;&gt;and&lt;/a&gt; Prism(다른 것들도 있고, 제가 사용하던 것도 있습니다)이 있다는 것을 알고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Chrome에서는 웹 사이트의 바탕 화면 바로 가기를 만들 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(Chrome 내에서 이와 같은 작업을 수행하므로 앱으로 패키지를 구성할 수 없습니다.) Chrome Frame은 다릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구글 크롬 프레임(Google Chrome Frame)은 오픈 소스 크롬 프로젝트를 기반으로 한 인터넷 익스플로러용 플러그인으로, 구글 크롬의 오픈 웹 기술을 인터넷 익스플로러에 적용합니다.&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;앱이 오프라인 상태일 때 HTML5 &lt;a href=&quot;http://diveintohtml5.info/storage.html&quot; rel=&quot;nofollow&quot;&gt;로컬 스토리지&lt;/a&gt;를 사용하여 데이터를 저장할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SQLite와 함께 작업할 수도 있을 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Adobe AIR로 자바스크립트 앱을 만들 수 있습니다… http://www.adobe.com/products/air.html&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CEF는 사용자 정의를 위한 많은 유연성과 옵션을 제공합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 노드-웹킷을 신속하게 개발하는 것이 목적이라면 좋은 선택이기도 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;노드-웹 키트는 노드 모듈을 DOM에서 직접 호출할 수 있는 기능도 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Node-Webkit을 통합할 네이티브 모듈이 없다면 더 나은 마일리지를 제공할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네이티브 모듈 C/C++ 또는 C#을 사용하면 CEF와 함께 더 좋습니다.&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/12232784/how-to-develop-desktop-apps-using-html-css-javascript&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>JavaScript</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1592</guid>
      <comments>https://factcode.tistory.com/1592#entry1592comment</comments>
      <pubDate>Sun, 5 Nov 2023 15:00:20 +0900</pubDate>
    </item>
    <item>
      <title>MySQL Workbench: 쿼리 오류(1064):1행의 'VISIBLE' 근처에서 구문 오류가 발생했습니다.</title>
      <link>https://factcode.tistory.com/1591</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL Workbench: 쿼리 오류(1064):&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1행의 'VISIBLE' 근처에서 구문 오류가 발생했습니다.&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;VISIBLE&lt;/code&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;CREATE TABLE IF NOT EXISTS `setting` (
  `uuid` INT(10) NOT NULL,
  `type` VARCHAR(255) NOT NULL,
  `code` VARCHAR(255) NOT NULL COMMENT 'An unique name.',
  `value` MEDIUMTEXT NULL DEFAULT NULL,
  `comment` LONGTEXT NULL DEFAULT NULL,
  `created_on` INT UNSIGNED NOT NULL,
  `updated_on` INT UNSIGNED NOT NULL,
  PRIMARY KEY (`uuid`))
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8;

CREATE UNIQUE INDEX `name_UNIQUE` ON `setting` (`code` ASC) VISIBLE;

CREATE UNIQUE INDEX `uuid_UNIQUE` ON `setting` (`uuid` ASC) VISIBLE;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오류:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;고유 인덱스 생성&lt;/font&gt;&lt;/font&gt;&lt;code&gt;name_UNIQUE&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ON&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setting&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;code&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ASC) 쿼리에서 보이는 오류(1064):&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1행의 'VISIBLE' 근처에서 구문 오류가 발생했습니다.&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;uuid_UNIQUE&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ON&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setting&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;uuid&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ASC) 쿼리에서 보이는 오류(1064):&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1행의 'VISIBLE' 근처에서 구문 오류가 발생했습니다.&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;VISIBLE&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;MySQL Workbench 8.0.12&lt;/strong&gt; 자동으로 생성됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL Workbench에서 이 작업을 중지하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Ubuntu 18.04의 MySQL 정보:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 버전: 5.7.23-0ubuntu0&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;18.04.1 PHP 확장을 통한 MySQLi&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;여기서 문제는 MySQL 서버 버전 간의 구문 차이입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;MySQL Workbench 8.0.12가&lt;/strong&gt; 자동 생성되는 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CREATE UNIQUE INDEX&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 서버 &lt;strong&gt;버전 8.0&lt;/strong&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;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/create-index.html&quot; rel=&quot;noreferrer&quot;&gt;MySQL Server 8.0 Docs&lt;/a&gt;에서 다음에 대한 구문&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CREATE INDEX&lt;/code&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;CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (key_part,...)
    [index_option]
    [algorithm_option | lock_option] ...

key_part: {col_name [(length)] | (expr)} [ASC | DESC]

index_option:
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT 'string'
  | {VISIBLE | INVISIBLE}  /* Notice the option of VISIBLE / INVISIBLE */

index_type:
  USING {BTREE | HASH}
&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;{VISIBLE | INVISIBLE}&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;MySQL Server 5.7&lt;/strong&gt;에서는 사용할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/create-index.html&quot; rel=&quot;noreferrer&quot;&gt;문서&lt;/a&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (key_part,...)
    [index_option]
    [algorithm_option | lock_option] ...

key_part:
    col_name [(length)] [ASC | DESC]

index_option:
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT 'string'   /* No option of VISIBLE / INVISIBLE */

index_type:
    USING {BTREE | HASH}
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL의 최신 버전으로 업그레이드하지 않으려는 경우 다음을 사용하여 자동 생성 기능을 사용하지 않도록 설정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;VISIBLE / INVISIBLE&lt;/code&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;MySQL Workbench에서:&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; Preferences &amp;gt; Modeling &amp;gt; MySQL 입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 &quot;Default Target MySQL Version&quot;을 &lt;strong&gt;5.7&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;img src=&quot;https://i.stack.imgur.com/raIxn.png&quot; alt=&quot;MySQL WorkBench Modeling&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Workbench에서 : Model &amp;gt; Model Options...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;gt; MySQL =&amp;gt; &quot;글로벌 설정의 기본값 사용&quot; 선택 취소&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;5.7 또는 6.3의 대체 버전.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;6.3을 썼어요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모델&amp;gt;모델 옵션에서..&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;gt;MySql&amp;gt;6.3&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/52785125/mysql-workbench-error-in-query-1064-syntax-error-near-visible-at-line-1&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MySQL</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1591</guid>
      <comments>https://factcode.tistory.com/1591#entry1591comment</comments>
      <pubDate>Sun, 5 Nov 2023 15:00:13 +0900</pubDate>
    </item>
    <item>
      <title>jQuery로 &amp;quot;바쁜&amp;quot; 표시기를 표시하는 방법?</title>
      <link>https://factcode.tistory.com/1590</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery로 &quot;바쁜&quot; 표시기를 표시하는 방법?&lt;/font&gt;&lt;/h2&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;Ajax 요청이 시작/완료되면 인디케이터를 시작/정지하고 싶습니다.&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;gif를 표시하거나 숨길 수 있지만, axSetup에 내장할 수도 있기 때문에 axis 요청 시마다 호출됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajaxSetup({
    beforeSend:function(){
        // show gif here, eg:
        $(&quot;#loading&quot;).show();
    },
    complete:function(){
        // hide gif here, eg:
        $(&quot;#loading&quot;).hide();
    }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한 가지 주의할 점은 로딩 스피너 없이 특정 axis 요청을 수행하려면 다음과 같이 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
   global: false,
   // stuff
});
&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;그러면 이전 $.ajaxSetup에서 우리가 하지 않았던 $.ajaxSet은 요청에 영향을 주지 않을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;global: 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;자세한 내용은 http://api.jquery.com/jQuery.ajaxSetup 에서 확인할 수 있습니다.&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;$( document ).ajaxStart(function() {
  $( &quot;#loading&quot; ).show();
}).ajaxStop(function() {
  $( &quot;#loading&quot; ).hide();
});
&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;#loading&lt;/code&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;a href=&quot;http://api.jquery.com/ajaxStart/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://api.jquery.com/ajaxStart/&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://api.jquery.com/ajaxStop/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://api.jquery.com/ajaxStop/&lt;/font&gt;&lt;/a&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;a href=&quot;http://api.jquery.com/jQuery.ajaxSetup/&quot; rel=&quot;noreferrer&quot;&gt;API&lt;/a&gt;는 명시적으로 회피할 것을 권장합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jQuery.ajaxSetup&lt;/code&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;참고: 글로벌 콜백 함수는 해당 글로벌 Ajax 이벤트 핸들러 방식으로 설정해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.ajaxStart()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.ajaxStop()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.ajaxComplete()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.ajaxError()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.ajaxSuccess()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.ajaxSend()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;--내부보다는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;options&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;을 반대하는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$.ajaxSetup()&lt;/code&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;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 다른 사람들이 말한 것처럼 IMG를 보여주고 숨기는 경향이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;gif 로드하기 좋은 웹사이트를 찾았습니다.&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://www.ajaxload.info/&quot; rel=&quot;noreferrer&quot;&gt;링크&lt;/a&gt; 나는 그냥 그것을 a안에 넣었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;div&lt;/code&gt;&lt;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;(css) 그런 다음 함수를 호출하면 이미지를 표시하고, 한 번 완료되면 다시 숨깁니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네, 정말로 애니메이션 짤을 보여주고 hiding하는 것뿐입니다.&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;배경 URL을 gif로 하는 div를 만듭니다. 그것은 애니메이션 gif에 지나지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;busyindicatorClass&quot;&amp;gt; &amp;lt;/div&amp;gt;

.busyindicatorClass
{
background-url///give animation here
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ajax 호출에서 이 클래스를 div에 추가하고 ajax success에서 클래스를 제거합니다.&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;ajax success에서 클래스 제거&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;success: function(data) {
    remove class using jquery
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Rodrigo의 솔루션을 약간 확장하기 위해 - 자주 실행되는 요청의 경우, 요청이 최소 시간 간격 이상 걸릴 경우에만 로딩 이미지를 표시할 수 있습니다. 그렇지 않으면 이미지가 계속 팝업되고 빠르게 사라집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var loading = false;

$.ajaxSetup({
    beforeSend: function () {
        // Display loading icon if AJAX call takes &amp;gt;1 second
        loading = true;
        setTimeout(function () {
            if (loading) {
                // show loading image
            }
        }, 1000);            
    },
    complete: function () {
        loading = false;
        // hide loading image
    }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트에서 해냈습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;응용 프로그램에 전역 이벤트가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;js:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).bind(&quot;ajaxSend&quot;, function(){
   $(&quot;#loading&quot;).show();
 }).bind(&quot;ajaxComplete&quot;, function(){
   $(&quot;#loading&quot;).hide();
 });
&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;참고문헌: http://api.jquery.com/Ajax_Events/&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;HTML:
   &amp;lt;img id=&quot;loading&quot; src=&quot;~/Images/spinner.gif&quot; alt=&quot;Updating ...&quot; style=&quot;display: none;&quot; /&amp;gt;

In script file:
  // invoked when sending ajax request
  $(document).ajaxSend(function () {
      $(&quot;#loading&quot;).show();
  });

  // invoked when sending ajax completed
  $(document).ajaxComplete(function () {
      $(&quot;#loading&quot;).hide();
  });
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오래된 스레드, 하지만 오늘 이 문제를 해결했기 때문에 업데이트하고 싶었습니다. 프로젝트에 jquery가 없었기 때문에 일반적인 오래된 자바스크립트 방식으로 수행했습니다. 또한 화면의 내용을 차단해야 했기 때문에 xhtml에 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;img id=&quot;loading&quot; src=&quot;#{request.contextPath}/images/spinner.gif&quot; style=&quot;display: none;&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;    document.getElementsByClassName('myclass').style.opacity = '0.7'
    document.getElementById('loading').style.display = &quot;block&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/4355268/how-to-display-a-busy-indicator-with-jquery&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>jQuery</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1590</guid>
      <comments>https://factcode.tistory.com/1590#entry1590comment</comments>
      <pubDate>Sun, 5 Nov 2023 15:00:05 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트 라이브러리의 선두 세미콜론은 무엇을 합니까?</title>
      <link>https://factcode.tistory.com/1589</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;/**
 * Library XYZ
 */
;(function () {
  // ... and so on
&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;pre&gt;&lt;code&gt;(function(){...})()
&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;즉, 라이브러리가 버그가 있는 다른 코드에 내장되어 있는 경우에는 &quot;최후의 마지막 문장은 여기서 끝납니다&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;이를 통해 여러 개의 자바스크립트 파일을 하나로 안전하게 연결하여 하나의 HTTP 요청으로 보다 신속하게 처리할 수 있습니다.&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;;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉시 invoked 기능 표현식 앞에는 적절히 종료되지 않은 표현식을 포함하는 파일에 연결하는 동안 파일을 첨부할 때 오류를 방지하기 위해 있습니다.&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;표현식을 세미콜론으로 종료하는 것이 가장 바람직하지만 선두 세미콜론을 보호 수단으로 사용하는 것도 좋습니다.&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;font papago-translate=&quot;translated&quot;&gt;어떤 프로그래머들은 이러한 문장의 시작에 방어적 세미콜론을 넣는 것을 좋아해서 문장이 수정되기 전에 문장이 수정되고 이전에 종결된 세미콜론이 제거되어도 계속 올바르게 작동할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;var x = 0 // Semicolon omitted here
;[x,x+1,x+2].forEach(console.log) // Defensive ; keeps this statement separate
&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;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0596805527&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바스크립트:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;The Definitive Guide, 6판&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 선행 세미콜론이라고 합니다.&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것의 주된 목적은 문제를 일으킬 수 있는 부적절하게 닫혔던 이전 코드로부터 스스로를 보호하는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;세미콜론을 사용하면 이런 일이 발생하지 않습니다.&lt;/font&gt;&lt;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;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IIFE 1&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(function(){
  // The rest of the code
})(); // Note it is an IIFE
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IIFE 2&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(function(){
   // The rest of the code
})(); // Note it is also an IIFE
&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(){})()(function(){})()
&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(){})();(function(){})()
&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;;&lt;/code&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;예제2&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같은 변수가 있는 JavaScript 파일이 있다고 가정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var someVar = &quot;myVar&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;(function(){})()
&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 someVar = &quot;myVar&quot;(function(){})() // It may give rise to an error
&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 someVar = &quot;myVar&quot;;(function(){})()
&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/1873983/what-does-the-leading-semicolon-in-javascript-libraries-do&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>JavaScript</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1589</guid>
      <comments>https://factcode.tistory.com/1589#entry1589comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:59:58 +0900</pubDate>
    </item>
    <item>
      <title>원본을 참조하는 동안 자바스크립트 함수 덮어쓰기</title>
      <link>https://factcode.tistory.com/1588</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;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;a()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;상황에 따라 순서대로 행해집니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 페이지를 생성할 때 다음과 같이 재정의할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function a() {
    new_code();
    original_a();
}
&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 a() {
    original_a();
    other_new_code();
}
&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;original_a()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내부에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;? 그게 가능하긴 해요?&lt;/font&gt;&lt;/font&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;var a = (function() {
    var original_a = a;

    if (condition) {
        return function() {
            new_code();
            original_a();
        }
    } else {
        return function() {
            original_a();
            other_new_code();
        }
    }
})();
&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;original_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;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Nerdmaster가 댓글에 언급된 것처럼, 반드시 다음 내용을 포함해야 합니다.&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;em&gt;결과&lt;/em&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;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;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://docs.jquery.com/Types#Proxy_Pattern&quot; rel=&quot;noreferrer&quot;&gt;Proxy 패턴&lt;/a&gt;은 다음과 같은 도움을 줄 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(function() {
    // log all calls to setArray
    var proxied = jQuery.fn.setArray;
    jQuery.fn.setArray = function() {
        console.log( this, arguments );
        return proxied.apply( this, arguments );
    };
})();
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위에서 코드를 &quot;프록시드&quot; 변수를 숨기기 위한 함수로 래핑합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery의 setArray-method를 클로저에 저장하고 덮어씁니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 프록시가 모든 호출을 메서드에 기록하고 호출을 원본에 위임합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;apply(이것, 인수)를 사용하면 호출자가 원래 메서드와 프록시 메서드의 차이점을 알아채지 못할 수 있습니다.&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;사실 글로벌 기능을 foo라고 부르고 싶었습니다.&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;//Saving the original func
var org_foo = window.foo;

//Assigning proxy fucnc
window.foo = function(args){
    //Performing checks
    if(checkCondition(args)){
        //Calling original funcs
        org_foo(args);
    }
};
&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;function override(f, g) {
    return function() {
        return g(f);
    };
}
&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; a = override(a, function(original_a) {
      if (condition) { new_code(); original_a(); }
      else { original_a(); other_new_code(); }
 });
&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;a = override(a, function(original_a) {
    if (condition) { new_code(); original_a.apply(this, arguments) ; }
    else { original_a.apply(this, arguments); other_new_code(); }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;@Matthew Crumley가 제공하는 대답은 즉시 호출된 함수 표현을 사용하여 이전의 'a' 함수를 반환된 함수의 실행 컨텍스트로 닫는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 가장 좋은 답이었다고 생각하지만, 개인적으로는 IIFE에 논쟁거리로 'a'라는 함수를 전달하는 것이 더 좋습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 그것이 더 이해할 수 있다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   var a = (function(original_a) {
        if (condition) {
            return function() {
                new_code();
                original_a();
            }
        } else {
            return function() {
                original_a();
                other_new_code();
            }
        }
    })(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&gt;&lt;code&gt;this&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면 패스&lt;/font&gt;&lt;/font&gt;&lt;code&gt;arguments&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;언더스코어 _.wrap() 기존 함수 랩, 적용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;통과.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;arguments&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://underscorejs.org/#wrap&quot; rel=&quot;nofollow&quot;&gt;참조&lt;/a&gt;: http://underscorejs.org/ #&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;이 두 가지 문제를 모두 해결하기 위해 ES6 구문을 사용하여 읽을 수 있는 솔루션을 소개합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const orginial = someObject.foo;
someObject.foo = function() {
  if (condition) orginial.bind(this)(...arguments);
};
&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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 제 사례에서 작동한 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (typeof originalFunction === &quot;undefined&quot;) {
    originalFunction = targetFunction;
    targetFunction = function(x, y) {
        //Your code
        originalFunction(a, b);
        //Your Code
    };  
}
&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;이 도우미는 &quot;namespace&quot;(기능 컨테이너), 기능 이름 및 재정의 기능을 수락합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참조된 네임스페이스의 원래 함수를 새 함수로 대체합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새로운 함수는 원래 함수를 첫 번째 인수로 받아들이고, 원래 함수 인수를 나머지 인수로 받아들입니다.&lt;/font&gt;&lt;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;function overrideFunction(namespace, baseFuncName, func) {
    var originalFn = namespace[baseFuncName];
    namespace[baseFuncName] = function () {
        return func.apply(this, [originalFn.bind(this)].concat(Array.prototype.slice.call(arguments, 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;overrideFunction($.fn.popover.Constructor.prototype, 'leave', function(baseFn, obj) {
    // ... do stuff before base call
    baseFn(obj);
    // ... do stuff after base call
});
&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;저는 &quot;스퀘어&quot;의 새로운 인스턴스를 만들지만, &quot;스퀘어&quot;가 크기를 생성하는 방식이 싫었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 그것이 저의 구체적인 요구에 따라야 한다고 생각했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 그러기 위해서는 광장에 이미 존재하는 다른 함수들을 호출하는 해당 함수의 내부와 함께 업데이트된 &quot;GetSize&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;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;다른 Object initializer 또는 도우미 기능.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;this.viewer = new Autodesk.Viewing.Private.GuiViewer3D(
  this.viewerContainer)
var viewer = this.viewer;
viewer.updateToolbarButtons =  this.updateToolbarButtons(viewer);
&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;updateToolbarButtons = function(viewer) {
  var _viewer = viewer;
  return function(width, height){ 
blah blah black sheep I can refer to this.anything();
}
};
&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;describe&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이름을 파싱하고 전체를 건너뛸 수 있도록 Jest에서 기능합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;describe&lt;/code&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;function describe( name, callback ) {
  if ( name.includes( &quot;skip&quot; ) )
    return this.describe.skip( name, callback );
  else
    return this.describe( name, callback );
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 중요한 두 가지 사항:&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;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;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;this&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 우리는 그것이 파일의 것이 되기 위해 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this&lt;/code&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;this.describe&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this.describe.skip&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만이 아니라&lt;/font&gt;&lt;/font&gt;&lt;code&gt;describe&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;describe.skip&lt;/code&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;font papago-translate=&quot;translated&quot;&gt;다시 말하지만, 그것이 누구에게도 가치가 있는지는 확실하지 않지만, 우리는 &lt;a href=&quot;https://stackoverflow.com/users/2214/matthew-crumley&quot;&gt;원래&lt;/a&gt; 매튜 &lt;a href=&quot;https://stackoverflow.com/users/2214/matthew-crumley&quot;&gt;크럼리의 &lt;/a&gt;&lt;a href=&quot;https://stackoverflow.com/a/296706/293280&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/296667/overriding-a-javascript-function-while-referencing-the-original&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>JavaScript</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1588</guid>
      <comments>https://factcode.tistory.com/1588#entry1588comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:59:51 +0900</pubDate>
    </item>
    <item>
      <title>Git: 기록 커밋에서 파일을 제거하는 방법?</title>
      <link>https://factcode.tistory.com/1587</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Git: 기록 커밋에서 파일을 제거하는 방법?&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;ID에 대한 커밋이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;56f06019&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,예를들면.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 커밋에서 실수로 대용량 파일(50MB)을 커밋했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 커밋에서 같은 파일을 올바른 크기(작은)로 추가했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금은 복제할 때 레포가 너무 무겁습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 레포 크기를 줄이기 위해 레포 히스토리에서 그 큰 파일을 제거하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://git-scm.com/book&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-1&quot;&gt;Pro Git&lt;/a&gt; book 9장에는 객체 &lt;a href=&quot;http://git-scm.com/book/en/Git-Internals-Maintenance-and-Data-Recovery#Removing-Objects&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-3&quot;&gt;제거&lt;/a&gt;에 대한 부분이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 단계의 개요를 간단히 설명하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git filter-branch --index-filter \
    'git rm --cached --ignore-unmatch path/to/mylarge_50mb_file' \
    --tag-name-filter cat -- --all
&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;filter-branch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 쓰기 작업 중입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 역사를 출판했다면, 당신은 다음과 같이 해야 할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--force&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 심판을 푸쉬합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;filter-branch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;접근 방식은 훨씬 더 강력합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rebase&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;ul&gt; 
 &lt;li papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 분기/참조 작업을 한 번에 수행할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그의 이름을 바꿉니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 추가한 후 병합 커밋이 여러 번 발생한 경우에도 정상적으로 작동합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일이 (a) 분기 기록에서 여러 번 추가(재)되거나 removed되어도 정상적으로 작동함&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 관련 없는 새로운 커밋을 만들지 않고, 관련된 트리를 수정하면서 커밋을 복사합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 서명된 커밋, 커밋 노트 등이 보존됨을 의미합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;code&gt;filter-branch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;백업도 유지하므로 reflog 및 가비지 컬렉션을 만료하지 않는 한 repo의 크기가 즉시 줄어들지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;rm -Rf .git/refs/original       # careful
git gc --aggressive --prune=now # danger
&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;strong papago-id=&quot;17-1&quot;&gt;추가&lt;/strong&gt; 도구를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;17-3&quot;&gt;삭제&lt;/strong&gt; 명령은 저장소에서 과거 커밋 및 태그를 포함한 파일을 완전히 제거합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/tj/git-extras/blob/master/Commands.md&quot; rel=&quot;noreferrer&quot; papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/tj/git-extras/blob/master/Commands.md&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 윈도우 https://stackoverflow.com/a/8741530/8461756 에서 다음 답변을 사용해 보았습니다.&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;한 개의 따옴표는 윈도우에서 작동하지 않으며, 두 개의 따옴표가 필요합니다.&lt;/font&gt;&lt;/strong&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 class=&quot;lang-sh prettyprint-override&quot;&gt;&lt;code&gt;git filter-branch --force --index-filter &quot;git rm --cached --ignore-unmatch PathRelativeRepositoryRoot/bigfile.csv&quot; -- --all
&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;빅 파일을 제거한 후, GitHub 마스터로 변경 사항을 푸시할 수 있었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대화형 모드에서 &lt;a href=&quot;http://gitmanual.org/git-rebase.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;23-1&quot;&gt;gitbase&lt;/a&gt;를 사용해야 합니다. 여기 예를 참조하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/448919/how-can-i-remove-a-commit-on-github&quot; papago-id=&quot;23-3&quot;&gt;GitHub에서 커밋을 제거하려면 어떻게&lt;/a&gt; 해야 합니까&lt;a href=&quot;https://stackoverflow.com/questions/448919/how-can-i-remove-a-commit-on-github&quot; papago-id=&quot;23-3&quot;&gt;?&lt;/a&gt; &lt;a href=&quot;http://www-cs-students.stanford.edu/~blynn/gitmagic/ch05.html#_8230_and_then_some&quot; papago-id=&quot;23-5&quot; rel=&quot;nofollow noreferrer&quot;&gt;그리고 이전&lt;/a&gt; 커밋을 &lt;a href=&quot;http://www-cs-students.stanford.edu/~blynn/gitmagic/ch05.html#_8230_and_then_some&quot; papago-id=&quot;23-5&quot; rel=&quot;nofollow noreferrer&quot;&gt;제거하는 방법&lt;/a&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;커밋이 HEAD에서 10 커밋을 뺀 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ git rebase -i HEAD~10
&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;당신의 역사의 판본이 끝나면, 당신은 &quot;새로운&quot; 역사를 추진해야 하고, 당신은 그것을 추가해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;+&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;강제(&lt;a href=&quot;http://gitmanual.org/git-push.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;10-1&quot;&gt;푸시 옵션&lt;/a&gt;의 refspec 참조):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ git push origin +master
&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;간단한 명령을 사용하여 삭제할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; git rm -r -f app/unused.txt 
 git rm -r -f yourfilepath
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/8740187/git-how-to-remove-file-from-historical-commit&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>git</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1587</guid>
      <comments>https://factcode.tistory.com/1587#entry1587comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:56:39 +0900</pubDate>
    </item>
    <item>
      <title>24-48시간 전의 mysql 행을 어떻게 얻습니까?</title>
      <link>https://factcode.tistory.com/1586</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;24-48시간 전의 mysql 행을 어떻게 얻습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜 시간 열이 있는 mysql 테이블이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;24시간보다 오래되긴 하지만 48시간보다 짧은 줄들을 가져오려고 합니다.&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;SELECT *
  FROM YOUR_TABLE t
 WHERE t.datetime_column &amp;lt; DATE_SUB(NOW(), INTERVAL 24 HOUR)
   AND t.datetime_column &amp;gt; DATE_SUB(NOW(), INTERVAL 48 HOUR)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3869036/how-do-i-get-mysql-rows-from-24-48-hours-ago&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MySQL</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1586</guid>
      <comments>https://factcode.tistory.com/1586#entry1586comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:56:33 +0900</pubDate>
    </item>
    <item>
      <title>Google 스프레드시트에서 SUMIF 올바르게 사용</title>
      <link>https://factcode.tistory.com/1585</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Google 스프레드시트에서 SUMIF 올바르게 사용&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;예를 들어, 나는 B5가 B1:B4를 합하기를 원하는데, C1:C4도 값을 가질 때만, C 셀이 값을 가지지 않는다면, 나는 합하는 동안 해당 B 셀을 0으로 카운트하기를 원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SumIf와 FILTER에 대한 정보를 찾아보고 있는데 어떤 숫자를 받아들이게 하기 위한 기준에 무엇을 넣어야 할지, 어떤 숫자가 나오지 않을 때 어떻게 0을 보고해야 할지 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 도움이라도 주시면 감사하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금까지 시도한 것: =FILTER(B1:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;B4;C1:C4=value()를 입력하면 오류가 발생합니다.&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;SUMIF&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;=SUMIF(C1:C4, &quot;&amp;lt;&amp;gt;&quot;, B1:B4)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저한테 효과가 있어요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=SUMIF(C1:C4; &quot;&amp;lt;&amp;gt;&quot;; B1:B4)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 제리가 제안한 것처럼.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=SUMIF(C1:C4, &quot;&amp;lt;&amp;gt;&quot;, B1:B4)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;세미콜론 분리기는 모든 로케일에서 지원되므로 일반적으로 선호됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/19066659/using-sumif-correctly-on-google-spreadsheet&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Excel</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1585</guid>
      <comments>https://factcode.tistory.com/1585#entry1585comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:56:27 +0900</pubDate>
    </item>
    <item>
      <title>WooCommerce 구독 &amp;quot;잘못된 반복 배송 방법&amp;quot;</title>
      <link>https://factcode.tistory.com/1584</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WooCommerce 구독 &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;제 웹사이트에서는 플러그인 우커머스 구독을 이용하는데, 여기서 가입비(10달러)를 받고 7일간 무료 체험을 할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 제품은 고객에게 55달러 정도 청구합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 덴마크 항공사의 로지스틱 플러그인인 Smart Send라는 플러그인을 사용합니다.&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;blockquote&gt; 
 &lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;invalid 반복 배송 방법&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템에 모든 것이 완벽하게 설정되어 있는 것처럼 보이지만 말입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;55달러의 주문으로 프린터에 라벨을 출력할 수 있지만, 10달러의 가입비로는 이 알림을 받기 때문에 출력할 수 없습니다.&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;$recurring_shipping_package_key = WC_Subscriptions_Cart::get_recurring_shipping_package_key( $recurring_cart_key, $package_index );

if ( ! isset( $package['rates'][ $shipping_methods[ $recurring_shipping_package_key ] ] ) ) {

        if ( ! $added_invalid_notice ) {
                wc_add_notice( __( 'Invalid recurring shipping method.', 'woocommerce-subscriptions' ), 'error' );
                $added_invalid_notice = true;
        }

        $shipping_methods[ $recurring_shipping_package_key ] = '';
}
&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;위는 WooCommerce Subscription과 함께 이 메시지가 발송되는 코드의 섹션입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;woocommerce-subscriptions/includes/class-wc-subscriptions-cart.php Line 1168
&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;특정배송방법 recurring_shipping_package_key의 배송비가 설정되지 않아 오류가 발생합니다.&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/44077784/woocommerce-subscriptions-invalid-recurring-shipping-method&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Wordpress</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1584</guid>
      <comments>https://factcode.tistory.com/1584#entry1584comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:56:21 +0900</pubDate>
    </item>
    <item>
      <title>데이터베이스에 대해 수평 및 수직 스케일의 차이</title>
      <link>https://factcode.tistory.com/1583</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;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;문&lt;/b&gt; 닫았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문은 더 많아야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;/help/closed-questions&quot; papago-id=&quot;1-3&quot;&gt;집중력&lt;/a&gt;이 있는&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 답변을 받지 않고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;hr class=&quot;my12 outline-none baw0 bb bc-powder-400&quot;&gt; 
  &lt;div class=&quot;fw-nowrap fc-black-600&quot;&gt; 
   &lt;div class=&quot;d-flex fd-column lh-md&quot;&gt; 
    &lt;div class=&quot;mb0 d-flex&quot;&gt; 
     &lt;div class=&quot;flex--item mr8&quot;&gt; 
      &lt;svg aria-hidden=&quot;true&quot; class=&quot;svg-icon iconLightbulb&quot; width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 18 18&quot;&gt;
       &lt;path d=&quot;M15 6.38A6.48 6.48 0 0 0 7.78.04h-.02A6.49 6.49 0 0 0 2.05 5.6a6.31 6.31 0 0 0 2.39 5.75c.49.39.76.93.76 1.5v.24c0 1.07.89 1.9 1.92 1.9h2.75c1.04 0 1.92-.83 1.92-1.9v-.2c0-.6.26-1.15.7-1.48A6.32 6.32 0 0 0 15 6.37ZM4.03 5.85A4.49 4.49 0 0 1 8 2.02a4.48 4.48 0 0 1 5 4.36 4.3 4.3 0 0 1-1.72 3.44c-.98.74-1.5 1.9-1.5 3.08v.1H7.2v-.14c0-1.23-.6-2.34-1.53-3.07a4.32 4.32 0 0 1-1.64-3.94ZM10 18a1 1 0 0 0 0-2H7a1 1 0 1 0 0 2h3Z&quot;&gt;&lt;/path&gt;
      &lt;/svg&gt; 
     &lt;/div&gt; 
     &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;2-0&quot;&gt;이 질문을 개선하고 싶으십니까?&lt;/b&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;/posts/11707879/edit&quot; papago-id=&quot;2-2&quot;&gt;이 게시물을 편집&lt;/a&gt;하여 한 가지 문제에만 초점을 맞추도록 질문을 업데이트합니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;mb0 mt6 d-flex&quot;&gt; 
     &lt;p class=&quot;ml24 pl2&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;3-1&quot; title=&quot;2020-02-170 04:52:56Z&quot; papago-attr-id=&quot;1&quot;&gt;3년전&lt;/span&gt;에 문을 닫았습니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;ml24 pl2&quot;&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;mt24 d-flex gsx gs8&quot;&gt; 
   &lt;a class=&quot;s-btn s-btn__outlined flex--item js-post-notice-edit-post&quot; href=&quot;/posts/11707879/edit&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문을 개선합니다.&lt;/font&gt;&lt;/a&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 많은 NoSQL 데이터베이스와 SQL 데이터베이스를 발견했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 데이터베이스의 강점과 약점을 측정하기 위한 다양한 매개변수가 있으며 그 중 하나가 확장성입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 데이터베이스를 수평적으로 확장하는 것과 수직적으로 확장하는 것의 차이점은 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;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;strong papago-id=&quot;6-0&quot;&gt;많은 시스템을 추가하여 확장&lt;/strong&gt;하는 것을 &lt;strong papago-id=&quot;6-0&quot;&gt;의미&lt;/strong&gt;하며 &lt;strong papago-id=&quot;6-2&quot;&gt;수직 확장은 기존 시스템&lt;/strong&gt;에 더 &lt;strong papago-id=&quot;6-2&quot;&gt;많은 전력(CPU, RAM)&lt;/strong&gt;을 &lt;strong papago-id=&quot;6-2&quot;&gt;추가하여 확장&lt;/strong&gt;하는 것을 &lt;strong papago-id=&quot;6-2&quot;&gt;의미&lt;/strong&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;strong papago-id=&quot;7-1&quot;&gt;수평&lt;/strong&gt; 방향으로 더 많은 시스템을 추가하고 &lt;strong papago-id=&quot;7-3&quot;&gt;수직&lt;/strong&gt; 방향으로 더 많은 리소스를 시스템에 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;https://i.stack.imgur.com/On3tO.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/On3tO.png&quot; alt=&quot;Horizontal Scaling/Vertical Scaling Visualisation&quot;&gt;&lt;/a&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;데이터베이스 세계에서 수평 스케일링은 종종 데이터의 분할(partitioning)을 기반으로 합니다. 즉, 각 노드는 데이터의 일부만을 포함하고 수직 스케일링의 경우 데이터는 단일 노드에 존재하며 스케일링은 멀티 코어(multi-core)를 통해 수행됩니다. 즉, 해당 머신의 CPU와 RAM 리소스 간에 부하를 분산시키는 것입니다.&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;수평 스케일링의 좋은 예로는 Cassandra, &lt;a href=&quot;https://cloud.google.com/spanner&quot; papago-id=&quot;10-1&quot; rel=&quot;noreferrer&quot;&gt;MongoDB&lt;/a&gt;, Google &lt;a href=&quot;https://cloud.google.com/spanner&quot; papago-id=&quot;10-1&quot; rel=&quot;noreferrer&quot;&gt;Cloud&lt;/a&gt; Spanner 등이 있으며 수직 스케일링의 좋은 예로는 MySQL - Amazon RDS(MySQL의 클라우드 버전)가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;작은 기계에서 큰 기계로 전환하여 수직으로 쉽게 확장할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 프로세스는 종종 다운타임을 수반합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.gigaspaces.com/datagrid&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-1&quot;&gt;기가스페이스 XAP&lt;/a&gt;, &lt;a href=&quot;http://www.oracle.com/technetwork/middleware/coherence/overview/index.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-3&quot;&gt;코히어런스&lt;/a&gt; 등 인메모리 데이터 그리드.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단순히 디스크에 구속되지 않기 때문에 수평 및 수직 스케일링에 모두 최적화되는 경우가 많습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파티션 분할을 통한 수평 확장 및 멀티 코어 지원을 통한 수직 확장.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://ht.ly/cAhPe&quot; papago-id=&quot;12-1&quot; rel=&quot;noreferrer&quot;&gt;이전&lt;/a&gt; 게시물인 스케일 아웃 대 &lt;a href=&quot;http://ht.ly/cAhPe&quot; papago-id=&quot;12-1&quot; rel=&quot;noreferrer&quot;&gt;스케일 업&lt;/a&gt; 및 &lt;a href=&quot;http://ht.ly/cAhY6&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12-3&quot;&gt;NOSQL 대안 뒤의 공통 원칙&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;strong papago-id=&quot;13-0&quot;&gt;수평 스케일&lt;/strong&gt; 조정 &lt;strong papago-id=&quot;13-0&quot;&gt;===&lt;/strong&gt;&amp;gt; 수천 명의 미니언이 함께 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;14-0&quot;&gt;세로&lt;/strong&gt;로 스케일링하기&lt;strong papago-id=&quot;14-0&quot;&gt;===&lt;/strong&gt;&amp;gt; 큰 헐크 하나면 모든 작업이 가능합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XJMka.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XJMka.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 리소스를 증가시키는 확장의 필요성부터 시작하여 시스템이 이전보다 더 많은 요청을 처리할 수 있도록 하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템 속도가 느려져서 현재 요청 수를 처리할 수 없다는 것을 알게 되면 시스템을 확장해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 두 가지 옵션이 제공됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 사용 중인 서버의 리소스를 늘리거나, 즉 RAM, CPU, GPU 및 기타 리소스의 양을 늘립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 수직 스케일링이라고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수직 스케일링은 일반적으로 비용이 많이 듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단일 서버로 실행되는 응용프로그램을 확장하는 경우, 해당 서버가 다운되면 시스템이 다운되는 등 시스템 장애에 장애가 발생하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 수직 스케일링에서 스레드의 양은 동일하게 유지됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;수직 스케일링은 프로세스가 진행될 때 시스템이 잠시 중단되어야 할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버에서 리소스를 늘리려면 시스템을 다시 시작해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제에 대한 또 다른 해결책은 시스템에 존재하는 서버의 양을 늘리는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 솔루션은 기술 산업에서 많이 사용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 결국 각 서버의 초당 요청 속도가 줄어듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템을 확장해야 할 경우 다른 서버를 추가하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템을 다시 시작할 필요가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 시스템의 스레드 수가 감소하여 처리량이 높아집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 응용 프로그램 서버에 동일하게 요청을 분리하려면 웹 서버에 역방향 프록시 역할을 하는 로드 밸런서를 추가해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 전체 시스템을 하나의 클러스터라고 부를 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템에 이와 같은 클러스터가 더 많이 필요한 요청이 많을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템에 확장을 도입하는 개념을 모두 이해하시기 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급하지 않은 추가 아키텍처도 있습니다. 즉 수동 공유의 복잡성 없이 수평적 확장이 가능한 SQL 기반 데이터베이스 서비스입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 서비스는 백그라운드에서 샤딩을 수행하므로 기존 SQL 데이터베이스를 실행하고 MongoDB 또는 CouchDB와 같은 NoSQL 엔진처럼 스케일아웃할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 잘 아는 두가지 서비스는 &lt;a href=&quot;http://www.enterprisedb.com&quot; papago-id=&quot;21-1&quot; rel=&quot;noreferrer&quot;&gt;Enterprise&lt;/a&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Postgre용 &lt;a href=&quot;http://www.enterprisedb.com&quot; papago-id=&quot;21-1&quot; rel=&quot;noreferrer&quot;&gt;DB&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL용 SQL 및 &lt;a href=&quot;http://www.xeround.com&quot; rel=&quot;noreferrer&quot; papago-id=&quot;21-3&quot;&gt;Xeround&lt;/a&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 데이터베이스에서 스케일 아웃이 어려운 이유와 이를 다르게 수행하는 방법을 설명하는 Xeround의 심층 &lt;a href=&quot;http://xeround.com/blog/2011/07/scaling-mysql-database-in-the-cloud&quot; rel=&quot;noreferrer&quot; papago-id=&quot;21-5&quot;&gt;게시물&lt;/a&gt;을 보았습니다. 공급업체 게시물인 만큼 이를 좀 더 신중하게 다루십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Wikipedia의 &lt;a href=&quot;http://en.wikipedia.org/wiki/Cloud_database&quot; rel=&quot;noreferrer&quot; papago-id=&quot;21-7&quot;&gt;Cloud Database 항목&lt;/a&gt;도 확인하십시오. SQL vs.에 대한 멋진 설명이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 및 서비스 없음 대 자체 호스팅, 벤더 목록 및 각 조합에 대한 확장 옵션. ;)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예, 수평으로 스케일링한다는 것은 더 많은 시스템을 추가한다는 것을 의미하지만, 이는 또한 시스템이 클러스터에서 동일하다는 것을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL은 복제본을 사용하여 데이터 읽기 측면에서 수평으로 확장할 수 있지만, 서버 메모리/디스크 용량에 도달하면 서버 간에 데이터 공유를 시작해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제는 점점 더 복잡해집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;복제 속도가 데이터 변경 속도를 따라가지 못하는 경우가 많기 때문에 복제본 간에 데이터 일관성을 유지하는 것이 문제가 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 Couchbase는 환상적인 NoSQL 수평 스케일링 데이터베이스로, 많은 상용 고가용성 애플리케이션과 게임에 사용되며 이 범주에서 가장 높은 성능을 자랑합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;클러스터 간에 데이터를 자동으로 파티셔닝하여 노드를 쉽게 추가할 수 있으며 상용 하드웨어, 저렴한 VM 인스턴스(예: AWS에서 High Mem 대신 Large를 사용)를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;멤피스(Memcached)를 기반으로 구축되지만 지속성이 추가됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 Couchbase의 경우 모든 노드가 읽기 및 쓰기를 수행할 수 있으며 클러스터에서 동일하며 페일오버 복제만 수행할 수 있습니다(MySQL에서와 같이 모든 서버에서 전체 데이터셋 복제는 아님).&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;성능 측면에서 탁월한 Cisco 벤치마크를 확인할 수 있습니다. http://blog.couchbase.com/understanding-performance-benchmark-published-cisco-and-solarflare-using-couchbase-server&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;다음은 Couchbase Architecture에 대한 훌륭한 블로그 게시물입니다. http://horicky.blogspot.com/2012/07/couchbase-architecture.html&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;수평으로 확장할 수 있지만, 확장하는 프로세스가 복잡하고 오류가 발생하기 쉽습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NuoDB와 같은 새로운 SQL 데이터베이스는 기존 RDBMS의 SQL/ACID 특성을 유지하면서 수평적으로 확장할 수 있도록 설계된 메모리 중심의 분산형 데이터베이스 시스템입니다.&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;NuoDB에 대한 자세한 내용은 &lt;a href=&quot;http://go.nuodb.com/rs/nuodb/images/Technical-Whitepaper.pdf&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;27-1&quot;&gt;기술 백서&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle, db2와 같은 SQL 데이터베이스도 Shared Disk 클러스터를 통한 수평 확장을 지원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 Oracle RAC, IBM DB2 Purescale 또는 Sybase ASE Cluster 버전이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 노드를 Oracle RAC 시스템 또는 DB2 Purescale 시스템에 추가하여 수평적 확장을 달성할 수 있습니다.&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;그러나 데이터 공유가 수평 확장의 일부가 아니라는 점에서 mongodb, CouchDB 또는 IBM Cloudant와 같은 noSQL 데이터베이스와는 접근 방식이 다릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;noSQL 데이터베이스에서는 수평 스케일링 중에 데이터가 쉐이딩됩니다.&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;그러나 데이터베이스의 수평 확장은 Cassandra, MongoDB 등을 통해서만 가능하다는 일반적인 통념과는 달리, 기존의 RDMS를 통해서도 수평 확장이 가능하며, 타사 솔루션을 사용하지 않아도 가능하다는 점을 덧붙이고 싶습니다.&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;저는 많은 회사들을 알고 있는데, 특히 SaaS 기반으로 이런 일을 하는 회사들을 알고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업은 간단한 응용프로그램 로직을 사용하여 수행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 사용자 집합을 가져다가 여러 DB 서버에 걸쳐 분할합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 일반적으로 클라이언트, DB 서버/연결 문자열 등을 저장하는 &quot;메타&quot; 데이터베이스/테이블과 클라이언트/서버 매핑을 저장하는 테이블이 있습니다.&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;그런 다음 각 클라이언트의 요청을 매핑된 DB 서버로 직접 전송하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 어떤 사람들은 이것이 수평 분할과 비슷하고 &quot;진정한&quot; 수평 확장이 아니라고 말할지도 모릅니다. 어떤 면에서는 그들이 옳을 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 결국 여러 Db 서버에 걸쳐 DB 규모를 조정하게 됩니다.&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;수평 확장에 대한 두 접근법의 유일한 차이점은 하나의 접근법(MongoDB 등)이 DB 소프트웨어 자체에 의해 확장이 이루어진다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 의미에서 당신은 스케일링을 &quot;구매&quot;하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 접근 방식(RDBMS 수평 스케일링의 경우)에서, 스케일링은 애플리케이션 코드/논리에 의해 구축됩니다.&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;로드 밸런서를 많이 추가하면 오버헤드와 지연 시간이 추가되므로 nosql 데이터베이스에서 수평적으로 스케일아웃할 수 있다는 단점이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;RPC가 강하지 않은데 왜 RPC를 추천하지 않느냐는 질문과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 시스템에서는 sql과 nosql 데이터베이스를 모두 사용하여 오늘날의 시스템의 멀티코어 및 클라우드 컴퓨팅 기능을 모두 활용해야 한다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반면 복잡한 트랜잭션 쿼리는 오라클과 같은 sql 데이터베이스를 사용하는 경우 성능이 높습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;공유를 통해 빅데이터와 수평적 확장성을 위해 어떤 Sql도 사용할 수 없었습니다.&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;회사가 있고 근로자는 1명뿐인데 신규 지원자를 채용할 때 1개의 신규 프로젝트를 받았습니다. 수평적 확장입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 새로운 후보는 새로운 기계이고 프로젝트는 당신의 API에 대한 새로운 트래픽/calls입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IIT/NIT 담당자가 당신의 api/traffic에 대한 모든 요청을 처리하는 프로젝트가 하나인 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;api에 더 요청하면 해고하고 IQ가 높은 NIT/IIT 담당자로 대체합니다. 수직 스케일링입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/11707879/difference-between-scaling-horizontally-and-vertically-for-databases&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Database</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1583</guid>
      <comments>https://factcode.tistory.com/1583#entry1583comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:56:14 +0900</pubDate>
    </item>
    <item>
      <title>Oracle SQL - 열 값의 &amp;quot;이전&amp;quot; 상태를 반환할 수 있습니까?</title>
      <link>https://factcode.tistory.com/1582</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle SQL - 열 값의 &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;myTable에서 다음 행을 가정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;id     =  1
letter = 'a'
&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;Oracle에서는 다음을 쉽게 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;update myTable set
  letter = 'b'
where id   = 1
returning letter 
into myVariable;
&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;그러면 myVariable이 'b' 값을 보유하게 됩니다.&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;제가 찾고 있는 것은 편지의 &quot;이전&quot; 값을 반환하는 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 이전 업데이트를 다음과 같이 바꿉니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;update myTable set
  letter = 'b'
where id   = 1
returning letter &quot;before the update&quot;
into myVariable;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 myVariable은 'a' 값을 유지해야 합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 OUTPUT 조항을 통해 T-SQL이 이를 달성할 수 있다고 알고 있습니다.&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;이전 값을 얻기 위해 먼저 &quot;선택&quot;할 필요가 없도록 Oracle과 동등한 방법이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;update
  (
   select T.*, (select letter from DUAL) old_letter
     from myTable T
    where id=1
  )
   set letter = 'b'
returning old_letter into myVariable;
&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;Oracle 11.2에서 테스트 완료&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트가 많지 않은 경우 루프에서 업데이트를 수행하여 이전 값을 가져올 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;declare
CURSOR c IS SELECT letter, id FROM myTable 
  FOR UPDATE OF letter;
begin
  open c;
  for x in c loop
     -- old value is in x.letter. You can assign it here
     update myTable set letter = 'b' where id = x.id;      
  end loop;
  commit;
  close c;
end;
/
&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;간단한 SQL문으로 할 수 없다고 생각합니다. (그리고 마이크의 대답을 보니 틀렸습니다 :-)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 가지 방법은 다른 열과 트리거를 사용하는 것일 수 있습니다. 예를 들어, 열이 있는 표가 있다고 가정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 다른 열을 추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;old_a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옛 가치를 저장하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;트리거로 채웁니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;create table testUpdate(a number, old_a number);
create or replace trigger trgUpdate 
before update on testUpdate
for each row
begin
    if :new.a != :old.a then /* assuming not null values for simplicity */
        :new.old_a := :old.a;
    end if;
end; 
insert into testUpdate values (1, null);
&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;old_a&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;returning&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;절을&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; declare
  2      vA number;
  3  begin
  4      update testUpdate
  5      set a = 9
  6      returning old_a
  7      into vA;
  8      --
  9      dbms_output.put_line(vA);
 10  end;
 11  /
1
&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;하지만, 당신의 테이블에 열과 트리거를 추가해야 한다는 점을 감안할 때, 저는 이 솔루션이 프로덕션 DB에서 제가 원하는 것 이상의 연습이라고 생각합니다.&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/40522950/oracle-sql-can-i-return-the-before-state-of-a-column-value&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>oracle</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1582</guid>
      <comments>https://factcode.tistory.com/1582#entry1582comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:56:06 +0900</pubDate>
    </item>
    <item>
      <title>PHP는 테마 및 플러그인에 대한 주석/헤더를 구문 분석하는 데 어떻게 사용됩니까?</title>
      <link>https://factcode.tistory.com/1581</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHP는 테마 및 플러그인에 대한 주석/헤더를 구문 분석하는 데 어떻게 사용됩니까?&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;/**
 * @package Akismet
 */
/*
Plugin Name: Akismet
Plugin URI: http://akismet.com/?return=true
Description: Used by millions, Akismet is quite possibly the best way in the world to &amp;lt;strong&amp;gt;protect your blog from comment and trackback spam&amp;lt;/strong&amp;gt;. It keeps your site protected from spam even while you sleep. To get started: 1) Click the &quot;Activate&quot; link to the left of this description, 2) &amp;lt;a href=&quot;http://akismet.com/get/?return=true&quot;&amp;gt;Sign up for an Akismet API key&amp;lt;/a&amp;gt;, and 3) Go to your &amp;lt;a href=&quot;admin.php?page=akismet-key-config&quot;&amp;gt;Akismet configuration&amp;lt;/a&amp;gt; page, and save your API key.
Version: 2.5.6
Author: Automattic
Author URI: http://automattic.com/wordpress-plugins/
License: GPLv2 or later
*/
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;관리 인터페이스의 플러그인 페이지를 방문하면 다음과 같이 플러그인이 나열됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://img854.imageshack.us/img854/4526/screenshotwithshadow.png&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크린샷- shadow.png http://img854.imageshack.us/img854/4526/screenshotwithshadow.png&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 문서화를 위한 표준 구문입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각에는 그게 할 수 있는 일인 것 같아요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;file_get_contents&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플러그인 파일에서 읽을 수 있습니다. 그러나 워드프레스는 PHP에서 사용될 조작 가능하고 표준화된 정보로 어떻게 파싱합니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wp-admin/includes/plugin.php&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WordPress 파서의 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;좀 더 구체적으로 말하면, 추출은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wp-includes/functions.php&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;function get_file_data( $file, $default_headers, $context = '' ) {
        // We don't need to write to the file, so just open for reading.
        $fp = fopen( $file, 'r' );

        // Pull only the first 8kiB of the file in.
        $file_data = fread( $fp, 8192 );

        // PHP will close file handle, but we are good citizens.
        fclose( $fp );

        // Make sure we catch CR-only line endings.
        $file_data = str_replace( &quot;\r&quot;, &quot;\n&quot;, $file_data );

        if ( $context &amp;amp;&amp;amp; $extra_headers = apply_filters( &quot;extra_{$context}_headers&quot;, array() ) ) {
                $extra_headers = array_combine( $extra_headers, $extra_headers ); // keys equal values
                $all_headers = array_merge( $extra_headers, (array) $default_headers );
        } else {
                $all_headers = $default_headers;
        }

        foreach ( $all_headers as $field =&amp;gt; $regex ) {
                if ( preg_match( '/^[ \t\/*#@]*' . preg_quote( $regex, '/' ) . ':(.*)$/mi', $file_data, $match ) &amp;amp;&amp;amp; $ma
                        $all_headers[ $field ] = _cleanup_header_comment( $match[1] );
                else
                        $all_headers[ $field ] = '';
        }
&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;WP 이외에도 유사한 구현이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/8954773/how-can-plugin-systems-be-designed-so-they-dont-waste-so-many-resources/8958463#8958463&quot; papago-id=&quot;9-1&quot;&gt;플러그인 시스템이 이렇게&lt;/a&gt; 많은 &lt;a href=&quot;https://stackoverflow.com/questions/8954773/how-can-plugin-systems-be-designed-so-they-dont-waste-so-many-resources/8958463#8958463&quot; papago-id=&quot;9-1&quot;&gt;리소스를 낭비하지 않도록&lt;/a&gt; 설계하려면 &lt;a href=&quot;https://stackoverflow.com/questions/8954773/how-can-plugin-systems-be-designed-so-they-dont-waste-so-many-resources/8958463#8958463&quot; papago-id=&quot;9-1&quot;&gt;어떻게 해야 합니까?&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들면&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/13391556/how-is-php-used-to-parse-comments-headers-for-themes-and-plugins&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Wordpress</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1581</guid>
      <comments>https://factcode.tistory.com/1581#entry1581comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:55:59 +0900</pubDate>
    </item>
    <item>
      <title>Android Room - simple select query - 기본 스레드에서 데이터베이스에 접근할 수 없음</title>
      <link>https://factcode.tistory.com/1580</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android Room - simple select query - 기본 스레드에서 데이터베이스에 접근할 수 없음&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.android.com/topic/libraries/architecture/room.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;Room Persistence Library&lt;/a&gt;로 샘플을 시도하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;엔티티를 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Entity
public class Agent {
    @PrimaryKey
    public String guid;
    public String name;
    public String email;
    public String password;
    public String phone;
    public String licence;
}
&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;DAO 클래스 생성:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Dao
public interface AgentDao {
    @Query(&quot;SELECT COUNT(*) FROM Agent where email = :email OR phone = :phone OR licence = :licence&quot;)
    int agentsCount(String email, String phone, String licence);

    @Insert
    void insertAgent(Agent agent);
}
&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;@Database(entities = {Agent.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract AgentDao agentDao();
}
&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;Kotlin의 하위 클래스 아래를 사용하여 노출된 데이터베이스:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class MyApp : Application() {

    companion object DatabaseSetup {
        var database: AppDatabase? = null
    }

    override fun onCreate() {
        super.onCreate()
        MyApp.database =  Room.databaseBuilder(this, AppDatabase::class.java, &quot;MyDatabase&quot;).build()
    }
}
&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;void signUpAction(View view) {
        String email = editTextEmail.getText().toString();
        String phone = editTextPhone.getText().toString();
        String license = editTextLicence.getText().toString();

        AgentDao agentDao = MyApp.DatabaseSetup.getDatabase().agentDao();
        //1: Check if agent already exists
        int agentsCount = agentDao.agentsCount(email, phone, license);
        if (agentsCount &amp;gt; 0) {
            //2: If it already exists then prompt user
            Toast.makeText(this, &quot;Agent already exists!&quot;, Toast.LENGTH_LONG).show();
        }
        else {
            Toast.makeText(this, &quot;Agent does not exist! Hurray :)&quot;, Toast.LENGTH_LONG).show();
            onBackPressed();
        }
    }
&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;    FATAL EXCEPTION: main
 Process: com.example.me.MyApp, PID: 31592
java.lang.IllegalStateException: Could not execute method for android:onClick
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
    at android.view.View.performClick(View.java:5612)
    at android.view.View$PerformClick.run(View.java:22288)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6123)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
    at android.view.View.performClick(View.java:5612)&amp;nbsp;
    at android.view.View$PerformClick.run(View.java:22288)&amp;nbsp;
    at android.os.Handler.handleCallback(Handler.java:751)&amp;nbsp;
    at android.os.Handler.dispatchMessage(Handler.java:95)&amp;nbsp;
    at android.os.Looper.loop(Looper.java:154)&amp;nbsp;
    at android.app.ActivityThread.main(ActivityThread.java:6123)&amp;nbsp;
    at java.lang.reflect.Method.invoke(Native Method)&amp;nbsp;
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)&amp;nbsp;
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)&amp;nbsp;
 Caused by: java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long periods of time.
    at android.arch.persistence.room.RoomDatabase.assertNotMainThread(RoomDatabase.java:137)
    at android.arch.persistence.room.RoomDatabase.query(RoomDatabase.java:165)
    at com.example.me.MyApp.RoomDb.Dao.AgentDao_Impl.agentsCount(AgentDao_Impl.java:94)
    at com.example.me.MyApp.View.SignUpActivity.signUpAction(SignUpActivity.java:58)
    at java.lang.reflect.Method.invoke(Native Method)&amp;nbsp;
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)&amp;nbsp;
    at android.view.View.performClick(View.java:5612)&amp;nbsp;
    at android.view.View$PerformClick.run(View.java:22288)&amp;nbsp;
    at android.os.Handler.handleCallback(Handler.java:751)&amp;nbsp;
    at android.os.Handler.dispatchMessage(Handler.java:95)&amp;nbsp;
    at android.os.Looper.loop(Looper.java:154)&amp;nbsp;
    at android.app.ActivityThread.main(ActivityThread.java:6123)&amp;nbsp;
    at java.lang.reflect.Method.invoke(Native Method)&amp;nbsp;
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)&amp;nbsp;
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)&amp;nbsp;
&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;그 문제는 메인 스레드에서 db 작업을 실행하는 것과 관련이 있는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 위 링크에 제공된 샘플 테스트 코드는 별도의 스레드에서 실행되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Test
    public void writeUserAndReadInList() throws Exception {
        User user = TestUtil.createUser(3);
        user.setName(&quot;george&quot;);
        mUserDao.insert(user);
        List&amp;lt;User&amp;gt; byName = mUserDao.findUsersByName(&quot;george&quot;);
        assertThat(byName.get(0), equalTo(user));
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 뭘 놓쳤나요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 하면 충돌 없이 실행할 수 있을까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제안 좀 해주세요.&lt;/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;allowMainThreadQueries()&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;MyApp.database =  Room.databaseBuilder(this, AppDatabase::class.java, &quot;MyDatabase&quot;).allowMainThreadQueries().build()
&lt;/code&gt;&lt;/pre&gt;&lt;h1 papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코틀린 코루틴 (맑음 &amp;amp; 간결함)&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AsyncTask는 정말 투박합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;코루틴은 더 깨끗한 대안입니다. 몇 개의 키워드를 뿌리면 동기화 코드가 비동기화됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Step 1: add `suspend` to your fun
suspend fun roomFun(...): Int
suspend fun notRoomFun(...) = withContext(Dispatchers.IO) { ... }

// Step 2: launch from coroutine scope
private fun myFun() {
    lifecycleScope.launch { // coroutine on Main
        val queryResult = roomFun(...) // coroutine on IO
        doStuff() // ...back on Main
    }
}
&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;// lifecycleScope:
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0-alpha04'

// viewModelScope:
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0-alpha04'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-- 업데이트:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;  &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;14-0&quot;&gt;08-2019년 5월:&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.android.com/jetpack/androidx/releases/room#2.1.0&quot; papago-id=&quot;14-1&quot; rel=&quot;noreferrer&quot;&gt;이제&lt;/a&gt; 2&lt;a href=&quot;https://developer.android.com/jetpack/androidx/releases/room#2.1.0&quot; papago-id=&quot;14-1&quot; rel=&quot;noreferrer&quot;&gt;.1호실&lt;/a&gt;에서 지원됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;suspend&lt;/code&gt;&lt;br&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;15-0&quot;&gt;13-Sep-2019:&lt;/em&gt; &lt;a href=&quot;https://developer.android.com/topic/libraries/architecture/coroutines&quot; papago-id=&quot;15-2&quot; rel=&quot;noreferrer&quot;&gt;Architecture&lt;/a&gt; 구성 요소 &lt;a href=&quot;https://developer.android.com/topic/libraries/architecture/coroutines&quot; papago-id=&quot;15-2&quot; rel=&quot;noreferrer&quot;&gt;범위&lt;/a&gt;를 사용하도록 업데이트됨&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메인 스레드에서 UI를 잠그는 데이터베이스 액세스는 데일이 말했듯이 오류입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;--EDIT 2--&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 사람들이 이 대답을 접하게 될 것이기 때문에...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;요즘 가장 좋은 선택지는 코틀린 코루틴스입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;룸에서 직접 지원합니다(현재 베타 버전).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://kotlinlang.org/docs/reference/coroutines-overview.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;18-1&quot;&gt;https://kotlinlang.org/docs/reference/coroutines-overview.html&lt;/a&gt; &lt;a href=&quot;https://developer.android.com/jetpack/androidx/releases/room#2.1.0-beta01&quot; rel=&quot;noreferrer&quot; papago-id=&quot;18-3&quot;&gt;https://developer.android.com/jetpack/androidx/releases/room#2.1.0-beta01&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;--EDIT 1--&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;궁금하신 분들을 위해...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 선택지가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 ViewModel 및 LiveData 구성요소를 살펴보는 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Live Data는 Room과 잘 어울립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.android.com/topic/libraries/architecture/livedata.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;20-1&quot;&gt;https://developer.android.com/topic/libraries/architecture/livedata.html&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;또 다른 옵션은 RxJava/RxAndroid입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LiveData보다 강력하지만 복잡합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/ReactiveX/RxJava&quot; rel=&quot;noreferrer&quot; papago-id=&quot;21-1&quot;&gt;https://github.com/ReactiveX/RxJava&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;--원래 대답은..&lt;/font&gt;&lt;/strong&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;private static class AgentAsyncTask extends AsyncTask&amp;lt;Void, Void, Integer&amp;gt; {

    //Prevent leak
    private WeakReference&amp;lt;Activity&amp;gt; weakActivity;
    private String email;
    private String phone;
    private String license;

    public AgentAsyncTask(Activity activity, String email, String phone, String license) {
        weakActivity = new WeakReference&amp;lt;&amp;gt;(activity);
        this.email = email;
        this.phone = phone;
        this.license = license;
    }

    @Override
    protected Integer doInBackground(Void... params) {
        AgentDao agentDao = MyApp.DatabaseSetup.getDatabase().agentDao();
        return agentDao.agentsCount(email, phone, license);
    }

    @Override
    protected void onPostExecute(Integer agentsCount) {
        Activity activity = weakActivity.get();
        if(activity == null) {
            return;
        }

        if (agentsCount &amp;gt; 0) {
            //2: If it already exists then prompt user
            Toast.makeText(activity, &quot;Agent already exists!&quot;, Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(activity, &quot;Agent does not exist! Hurray :)&quot;, Toast.LENGTH_LONG).show();
            activity.onBackPressed();
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 자신의 파일에 최종 클래스를 작성할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 signUpAction(View view) 메서드로 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;new AgentAsyncTask(this, email, phone, license).execute();
&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;경우에 따라 활동에서 AgentAsyncTask에 대한 참조를 보유하여 활동이 삭제되었을 때 취소할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 모든 거래를 스스로 중단해야 할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 구글의 테스트 예시에 대한 당신의 질문은...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 웹 페이지에 다음과 같이 명시되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스 구현을 테스트하기 위해 권장되는 방법은 Android 장치에서 실행되는 Junit 테스트를 작성하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 테스트는 작업을 생성할 필요가 없기 때문에 UI 테스트보다 실행 속도가 빨라야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;활동 없음, UI 없음.&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;a href=&quot;https://github.com/ReactiveX/RxJava&quot; rel=&quot;noreferrer&quot; papago-id=&quot;30-1&quot;&gt;RxJava&lt;/a&gt;, &lt;a href=&quot;https://github.com/ReactiveX/RxAndroid&quot; rel=&quot;noreferrer&quot; papago-id=&quot;30-3&quot;&gt;RxAndroid&lt;/a&gt;, &lt;a href=&quot;https://github.com/ReactiveX/RxKotlin&quot; rel=&quot;noreferrer&quot; papago-id=&quot;30-5&quot;&gt;RxKotlin&lt;/a&gt; 애호가들을 위하여&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Observable.just(db)
          .subscribeOn(Schedulers.io())
          .subscribe { db -&amp;gt; // database operation }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;핸들러, 비동기 또는 작업 스레드를 사용하는 대신 메인 스레드에서 실행할 수 없습니다. 샘플 코드는 여기서 사용할 수 있으며 여기서 룸 &lt;a href=&quot;https://medium.com/@rizvan/androids-new-room-3dff78ede2fb&quot; papago-id=&quot;31-1&quot; rel=&quot;noreferrer&quot;&gt;라이브러리&lt;/a&gt;를 통해 기사를 읽을 수 있습니다: &lt;a href=&quot;https://medium.com/@rizvan/androids-new-room-3dff78ede2fb&quot; papago-id=&quot;31-1&quot; rel=&quot;noreferrer&quot;&gt;Android's&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/**
 *  Insert and get data using Database Async way
 */
AsyncTask.execute(new Runnable() {
    @Override
    public void run() {
        // Insert Data
        AppDatabase.getInstance(context).userDao().insert(new User(1,&quot;James&quot;,&quot;Mathew&quot;));

        // Get Data
        AppDatabase.getInstance(context).userDao().getAllUsers();
    }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 스레드에서 실행하려면 선호하지 않는 방법으로 실행해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메인 스레드에서 이 방법을 사용하여 달성할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Room.inMemoryDatabaseBuilder()&lt;/code&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;pre&gt;&lt;code&gt; AsyncTask.execute(() -&amp;gt; //run your query here );
&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;이렇게(Kotlin):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Thread {
   //Do your database´s operations here
}.start()
&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;Executors.newSingleThreadExecutor().execute(new Runnable() {
                    @Override
                    public void run() {
                        appDb.daoAccess().someJobes();//replace with your code
                    }
                });
&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;pre&gt;&lt;code&gt;Executors.newSingleThreadExecutor().execute(() -&amp;gt; appDb.daoAccess().someJobes());
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대체가능합니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;appDb.daoAccess().someJobes()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자신의 코드를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Jetbrains Anko 라이브러리를 사용하면 DoAsync{..&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;} 데이터베이스 호출을 자동으로 실행하는 메소드입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 당신이 mcastro의 답변에 대해 가지고 있었던 것처럼 보였던 장황함 문제를 해결합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 예시:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    doAsync { 
        Application.database.myDAO().insertUser(user) 
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;삽입 및 업데이트를 위해 자주 사용하지만, 선택된 쿼리의 경우 RX 워크플로우를 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비동기 작업이 더 이상 사용되지 않으므로 실행자 서비스를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 다른 답변에서 설명하는 것처럼 ViewModel with &lt;a href=&quot;https://developer.android.com/training/data-storage/room/accessing-data#query-observable&quot; rel=&quot;noreferrer&quot; papago-id=&quot;43-1&quot;&gt;LiveData&lt;/a&gt;(라이브 데이터)를 사용할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행자 서비스 이용 시 아래와 같은 것을 이용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class DbHelper {

    private final Executor executor = Executors.newSingleThreadExecutor();

    public void fetchData(DataFetchListener dataListener){
        executor.execute(() -&amp;gt; {
                Object object = retrieveAgent(agentId);
                new Handler(Looper.getMainLooper()).post(() -&amp;gt; {
                        dataListener.onFetchDataSuccess(object);
                });
        });
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메인 루퍼(Main Looper)를 사용하여 다음에서 UI 요소에 액세스할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;onFetchDataSuccess&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;백그라운드에서 요청을 실행해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 방법으로 &lt;a href=&quot;https://developer.android.com/reference/java/util/concurrent/Executors&quot; rel=&quot;noreferrer&quot; papago-id=&quot;47-1&quot;&gt;실행자&lt;/a&gt;를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Executors.newSingleThreadExecutor().execute { 
   yourDb.yourDao.yourRequest() //Replace this by your request
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;룸 데이터베이스는 사용자가 사용하지 않는 한 기본 스레드에서 데이터베이스 IO 작업(백그라운드 작업)을 실행할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;allowMainThreadQueries()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스 작성자와 함께.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 그것은 나쁜 접근입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;권장 접근 방식:&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 현재 진행 중인 프로젝트의 코드를 사용하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더하다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;suspend&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;Repository에서 메서드 앞에 키워드를 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class FavRepository @Inject constructor(private val dao: WallpaperDao) {
    suspend fun getWallpapers(): List&amp;lt;Wallpaper&amp;gt; =  dao.getWallpapers()
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;viewmodel&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;class 먼저 룸 데이터베이스에서 데이터를 가져오기 위해 Coroutine Dispature IO로 데이터베이스 작업을 실행해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 Coroutine Dispature MAIN으로 값을 업데이트합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@HiltViewModel
class FavViewModel @Inject constructor(repo: FavRepository, @ApplicationContext context: Context) : ViewModel() {
    var favData = MutableLiveData&amp;lt;List&amp;lt;Wallpaper&amp;gt;&amp;gt;()
    init {
        viewModelScope.launch(Dispatchers.IO){
            val favTmpData: List&amp;lt;Wallpaper&amp;gt; = repo.getWallpapers()
            withContext(Dispatchers.Main){
                favData.value = favTmpData
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 활동/조각에서 관찰하여 보기 모델의 데이터를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 당신에게 도움이 되기를 바랍니다 :).&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;빠른 쿼리의 경우 UI 스레드에서 실행할 공간을 확보할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;AppDatabase db = Room.databaseBuilder(context.getApplicationContext(),
        AppDatabase.class, DATABASE_NAME).allowMainThreadQueries().build();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우 클릭한 사용자가 데이터베이스에 존재하는지 여부를 확인해야 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 사용자를 생성하고 다른 활동을 시작합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;       @Override
        public void onClick(View view) {



            int position = getAdapterPosition();

            User user = new User();
            String name = getName(position);
            user.setName(name);

            AppDatabase appDatabase = DatabaseCreator.getInstance(mContext).getDatabase();
            UserDao userDao = appDatabase.getUserDao();
            ArrayList&amp;lt;User&amp;gt; users = new ArrayList&amp;lt;User&amp;gt;();
            users.add(user);
            List&amp;lt;Long&amp;gt; ids = userDao.insertAll(users);

            Long id = ids.get(0);
            if(id == -1)
            {
                user = userDao.getUser(name);
                user.setId(user.getId());
            }
            else
            {
                user.setId(id);
            }

            Intent intent = new Intent(mContext, ChatActivity.class);
            intent.putExtra(ChatActivity.EXTRAS_USER, Parcels.wrap(user));
            mContext.startActivity(intent);
        }
    }
&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;우아한 RxJava/Kotlin 솔루션을 사용하면 값을 반환하지 않지만 다른 스레드에서 관찰하고 구독할 수 있는 Observable을 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-java prettyprint-override&quot;&gt;&lt;code&gt;public Completable insert(Event event) {
    return Completable.fromCallable(new Callable&amp;lt;Void&amp;gt;() {
        @Override
        public Void call() throws Exception {
            return database.eventDao().insert(event)
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 코틀린에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;fun insert(event: Event) : Completable = Completable.fromCallable {
    database.eventDao().insert(event)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 다음과 같이 관찰하고 구독할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dataManager.insert(event)
    .subscribeOn(scheduler)
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(...)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 스레드에서 데이터베이스 액세스를 허용할 수 있지만 디버깅을 위해서만 프로덕션에서 데이터베이스 액세스를 허용해서는 안 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://developer.android.com/training/data-storage/room/accessing-data.html#convenience&quot; rel=&quot;noreferrer&quot; papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이유는 이렇습니다.&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 빌드에서 allowMainThreadQueries()를 호출하지 않은 경우 UI가 장시간 잠길 수 있기 때문에 기본 스레드에서 데이터베이스 액세스를 지원하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LiveData 또는 Flowable의 인스턴스를 반환하는 쿼리인 비동기 쿼리는 필요할 때 백그라운드 스레드에서 쿼리를 비동기적으로 실행하므로 이 규칙에서 제외됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 메시지,&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UI가 장시간 잠길 수 있으므로 기본 스레드의 데이터베이스에 액세스할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;꽤 설명적이고 정확합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 기본 스레드에서 데이터베이스에 액세스하는 것을 어떻게 피해야 하느냐는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;엄청난 주제이지만 시작하려면 &lt;a href=&quot;https://developer.android.com/reference/android/os/AsyncTask.html&quot; papago-id=&quot;68-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;AsyncTask(비동기식&lt;/a&gt; 작업)에 대해 읽어 보십시오&lt;a href=&quot;https://developer.android.com/reference/android/os/AsyncTask.html&quot; papago-id=&quot;68-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;.&lt;/a&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;------ED--------------------&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유닛 테스트를 할 때 문제가 생기셨군요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결할 수 있는 몇 가지 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android 기기(또는 에뮬레이터)가 아닌 개발 기기에서 직접 테스트를 실행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능은 데이터베이스 중심의 테스트에 적용되며 장치에서 실행되는지 여부는 크게 신경 쓰지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주석 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@RunWith(AndroidJUnit4.class)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안드로이드 장치에서 테스트를 실행하지만 UI가 있는 활동에서는 실행되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이에 대한 자세한 내용은 이&lt;a href=&quot;http://evgenii.com/blog/testing-activity-in-android-studio-tutorial-part-2/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;18-1&quot;&gt; 자습서&lt;/a&gt;에서 확인할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;74-1&quot;&gt;비동기 작업&lt;/strong&gt;이 더 편하다면 다음을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  new AsyncTask&amp;lt;Void, Void, Integer&amp;gt;() {
                @Override
                protected Integer doInBackground(Void... voids) {
                    return Room.databaseBuilder(getApplicationContext(),
                            AppDatabase.class, DATABASE_NAME)
                            .fallbackToDestructiveMigration()
                            .build()
                            .getRecordingDAO()
                            .getAll()
                            .size();
                }

                @Override
                protected void onPostExecute(Integer integer) {
                    super.onPostExecute(integer);
                    Toast.makeText(HomeActivity.this, &quot;Found &quot; + integer, Toast.LENGTH_LONG).show();
                }
            }.execute();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Future와 Callable을 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 긴 비동기 작업을 작성할 필요가 없으며 allowMainThreadQuery()를 추가하지 않고도 쿼리를 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 dao 쿼리:-&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Query(&quot;SELECT * from user_data_table where SNO = 1&quot;)
UserData getDefaultData();
&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;public UserData getDefaultData() throws ExecutionException, InterruptedException {

    Callable&amp;lt;UserData&amp;gt; callable = new Callable&amp;lt;UserData&amp;gt;() {
        @Override
        public UserData call() throws Exception {
            return userDao.getDefaultData();
        }
    };

    Future&amp;lt;UserData&amp;gt; future = Executors.newSingleThreadExecutor().submit(callable);

    return future.get();
}
&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;업데이트: @RawQuery and Support를 사용하여 쿼리를 작성하려고 할 때에도 이 메시지가 표시되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DAO 내부의 SQLiteQuery.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Transaction
public LiveData&amp;lt;List&amp;lt;MyEntity&amp;gt;&amp;gt; getList(MySettings mySettings) {
    //return getMyList(); --&amp;gt;this is ok

    return getMyList(new SimpleSQLiteQuery(&quot;select * from mytable&quot;)); --&amp;gt; this is an error
&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;해결책: ViewModel 내부에 쿼리를 구축하고 DAO에 전달합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public MyViewModel(Application application) {
...
        list = Transformations.switchMap(searchParams, params -&amp;gt; {

            StringBuilder sql;
            sql = new StringBuilder(&quot;select  ... &quot;);

            return appDatabase.rawDao().getList(new SimpleSQLiteQuery(sql.toString()));

        });
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면...&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 기본 스레드에서 데이터베이스에 직접 액세스해서는 안 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; public void add(MyEntity item) {
     appDatabase.myDao().add(item); 
 }
&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;작업을 업데이트, 추가 및 삭제하려면 AsyncTask를 사용해야 합니다.&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;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class MyViewModel extends AndroidViewModel {

    private LiveData&amp;lt;List&amp;lt;MyEntity&amp;gt;&amp;gt; list;

    private AppDatabase appDatabase;

    public MyViewModel(Application application) {
        super(application);

        appDatabase = AppDatabase.getDatabase(this.getApplication());
        list = appDatabase.myDao().getItems();
    }

    public LiveData&amp;lt;List&amp;lt;MyEntity&amp;gt;&amp;gt; getItems() {
        return list;
    }

    public void delete(Obj item) {
        new deleteAsyncTask(appDatabase).execute(item);
    }

    private static class deleteAsyncTask extends AsyncTask&amp;lt;MyEntity, Void, Void&amp;gt; {

        private AppDatabase db;

        deleteAsyncTask(AppDatabase appDatabase) {
            db = appDatabase;
        }

        @Override
        protected Void doInBackground(final MyEntity... params) {
            db.myDao().delete((params[0]));
            return null;
        }
    }

    public void add(final MyEntity item) {
        new addAsyncTask(appDatabase).execute(item);
    }

    private static class addAsyncTask extends AsyncTask&amp;lt;MyEntity, Void, Void&amp;gt; {

        private AppDatabase db;

        addAsyncTask(AppDatabase appDatabase) {
            db = appDatabase;
        }

        @Override
        protected Void doInBackground(final MyEntity... params) {
            db.myDao().add((params[0]));
            return null;
        }

    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택한 작업에 LiveData를 사용하는 경우에는 AsyncTask가 필요 없습니다.&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;제 생각에 옳은 일은 RxJava를 사용하여 쿼리를 IO 스레드에 위임하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 제가 방금 직면한 동등한 문제에 대한 해결책의 예를 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;((ProgressBar) view.findViewById(R.id.progressBar_home)).setVisibility(View.VISIBLE);//Always good to set some good feedback
        Completable.fromAction(() -&amp;gt; {
            //Creating view model requires DB access
            homeViewModel = new ViewModelProvider(this, factory).get(HomeViewModel.class);
        }).subscribeOn(Schedulers.io())//The DB access executes on a non-main-thread thread
        .observeOn(AndroidSchedulers.mainThread())//Upon completion of the DB-involved execution, the continuation runs on the main thread
        .subscribe(
                () -&amp;gt;
                {
                    mAdapter = new MyAdapter(homeViewModel.getExams());
                    recyclerView.setAdapter(mAdapter);
                    ((ProgressBar) view.findViewById(R.id.progressBar_home)).setVisibility(View.INVISIBLE);
                },
                error -&amp;gt; error.printStackTrace()
        );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;솔루션을 일반화하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;((ProgressBar) view.findViewById(R.id.progressBar_home)).setVisibility(View.VISIBLE);//Always good to set some good feedback
        Completable.fromAction(() -&amp;gt; {
            someTaskThatTakesTooMuchTime();
        }).subscribeOn(Schedulers.io())//The long task executes on a non-main-thread thread
        .observeOn(AndroidSchedulers.mainThread())//Upon completion of the DB-involved execution, the continuation runs on the main thread
        .subscribe(
                () -&amp;gt;
                {
                    taskIWantToDoOnTheMainThreadWhenTheLongTaskIsDone();
                },
                error -&amp;gt; error.printStackTrace()
        );
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더하다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.allowMainThreadQueries()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스 파일로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Database(entities = [Country::class], version = 1)
abstract class CountryDatabase: RoomDatabase() {
    abstract fun getCountryDao(): CountryDao
    companion object {
        @Volatile
        private var instance: CountryDatabase? = null
        private val LOCK = Any()

        operator fun invoke(context: Context) = instance ?:
        synchronized(LOCK) {
            instance ?:
            createDatabase(context).also { instance = it }
        }
        private fun createDatabase(context: Context) =
            Room.databaseBuilder(
                context.applicationContext,
                CountryDatabase::class.java,
                &quot;country_db&quot;
            ).allowMainThreadQueries()
             .build()
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더하다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Dispatchers.IO&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 같은 흐름의 끝에서:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;flow { ... }.flowOn(Dispatchers.IO)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;92&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;룸 데이터베이스에서는 기본 스레드에서 데이터베이스 IO 작업을 실행할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 인코틀린은 코루틴 스코프(IO) 내부에서 쿼리 호출을 수행했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;suspend fun executrQuery(){
     CoroutineScope(IO).launch {
         // Write your code inside.
         }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;93&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 또 다른 방법은 &lt;strong papago-id=&quot;93-1&quot;&gt;allowMainThreadQuery&lt;/strong&gt;를 아래와 같이 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;AppDatabase db =Room.databaseBuilder(context.getApplicationContext(),
AppDatabase.class, DATABASE_NAME).allowMainThreadQueries().build();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 쿼리를 와의 코루틴으로 호출합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(Dispatchers.IO)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 백그라운드에서 db 작업을 해야하기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;96&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래에 첨부된 스크린샷을 확인해주시기 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;97&quot; papago-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/44167111/android-room-simple-select-query-cannot-access-database-on-the-main-thread&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Android</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1580</guid>
      <comments>https://factcode.tistory.com/1580#entry1580comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:55:52 +0900</pubDate>
    </item>
    <item>
      <title>함수는 내부 angularjs controller에서 두번 호출됩니다.</title>
      <link>https://factcode.tistory.com/1579</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수는 내부 angularjs controller에서 두번 호출됩니다.&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;저는 앵글 js를 처음 접하며 현재 매우 유선적인 종류의 버그를 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨트롤러의 함수는 경로에 대해 로드된 뷰로 호출될 때 두 번 실행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/4gwG3/5/&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://jsfiddle.net/4gwG3/5/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 두번이나 경고를 보게 될 것입니다!!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 견해는 단순합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&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;var IB = angular.module('IB', []);    

//channel controller
IB.controller('channelsController', function ($scope, $routeParams) {
    $scope.greet = function () {
        alert('hi');
    };
});


IB.config(function ($routeProvider) {
    $routeProvider
    .when('/channels', {
        controller: 'channelsController',
        template: '{{greet()}}'
    })

    .otherwise({ redirectTo: '/channels' });

});
&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;먼저 Angular app을 두 번(&lt;strong papago-id=&quot;6-1&quot;&gt;ng-app&lt;/strong&gt;으로 자동 초기화함으로써) 초기화하지 않는지 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 번은 ng-app으로 html 페이지 2개(로그인.html용과 main.html용)를 가지고 있었는데 나중에 깨달은 문제였습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘째, 그리고 가장 중요한 것은 컨트롤러를 여러 요소에 부착했는지 확인하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-1&quot;&gt;라우팅&lt;/strong&gt;을 사용하는 경우 일반적인 경우입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우 Dashboard Controller로 이동하는 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.config(function($routeProvider){
    $routeProvider
    .when('/', {
        controller: 'DashboardController',
        templateUrl: 'pages/dashboard.html'
    })
});
&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;하지만 dashboard.html:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;section class=&quot;content&quot; ng-controller=&quot;DashboardController&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앵귤러를 가르친 것은&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS는 내 컨트롤러를 두 번 소화합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 해결하기 위해서는 두 가지 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;html 파일에서 &lt;strong papago-id=&quot;13-1&quot;&gt;ng-controller&lt;/strong&gt;를 제거하는 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;section class=&quot;content&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 라우팅에서 &lt;strong papago-id=&quot;14-1&quot;&gt;컨트롤러&lt;/strong&gt;를 제거합니다(일반적으로 app.js에 위치).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.config(function($routeProvider){
$routeProvider
        .when('/', {
            templateUrl: 'pages/dashboard.html'
        })
    });
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 생각엔 보간법을 만들어서,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;{{greet()}}&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;greet&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 이 기능은 다이제스트 사이클을 실행하는 횟수만큼 호출을 받을 수 있으므로 1회 또는 2회 실행하는 것은 문제가 되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 함수가 호출되는 시간에 의존해서는 안 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 당신이 여기서 무엇을 이루고자 하는지 모릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;경고 1에는 두 가지가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;언제.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;controller&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라고 합니다. 2.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;언제.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;template&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;평가를 받습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;template&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뷰 부분을 제공하기 위한 것이지만, 이 경우 템플릿은 뷰를 생성하지 않는 함수를 평가하는 것에 불과합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 문제가 있어서 이렇게 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.init=function()
{
    if ($rootScope.shopInit==true) return;
    $rootScope.shopInit=true;
    ...
}
$scope.init();
&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 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/19608978/function-called-twice-inside-angularjs-controller&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>AngularJS</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1579</guid>
      <comments>https://factcode.tistory.com/1579#entry1579comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:55:36 +0900</pubDate>
    </item>
    <item>
      <title>이달의 마지막 날을 찾기 위한 SQL 쿼리</title>
      <link>https://factcode.tistory.com/1578</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이달의 마지막 날을 찾기 위한 SQL 쿼리&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 형식으로 한 달의 마지막 날을 찾아야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;2013-05-31 00:00:00:000&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아무나 도와주세요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 먹어봐요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE FUNCTION [dbo].[udf_GetLastDayOfMonth] 
(
    @Date DATETIME
)
RETURNS DATETIME
AS
BEGIN

    RETURN DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @Date) + 1, 0))

END
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DECLARE @date DATETIME
SELECT @date = '2013-05-31 15:04:10.027'

SELECT DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @date) + 1, 0))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-----------------------
2013-05-31 00:00:00.000
&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;이 질문은 SQL Server 2005에 대한 질문인 것으로 알고 있습니다. 하지만 언급하고 싶은 것은 SQL 2012의 경우 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;EOMONTH()&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;datetime&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;SELECT CAST(eomonth(GETDATE()) AS datetime)
&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 2012에는 다음과 같은 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/hh213020.aspx&quot; papago-id=&quot;9-1&quot;&gt;기능&lt;/a&gt;이 도입되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select eomonth('2013-05-31 00:00:00:000')
--&amp;gt;
2013-05-31
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;declare @date datetime;
set @date = getdate(); -- or some date
select dateadd(month,1+datediff(month,0,@date),-1);
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;dateadd(month,1+datediff(month,0,getdate()),-1)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;런 체크하기&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;print dateadd(month,1+datediff(month,0,@date),-1)
&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;Snowflake(및 다른 SQL 엔진)에서는 을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-sql prettyprint-override&quot;&gt;&lt;code&gt;select to_date('2015-05-08T23:39:20.123-07:00') as &quot;DATE&quot;,
       last_day(&quot;DATE&quot;, 'MONTH') as &quot;LAST DAY OF MONTH&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DATE         LAST DAY OF MONTH
2015-05-08          2015-05-31
&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 CONVERT(DATE,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))) AS lastDayOfMonth
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;Declare @GivenDate datetime 
Declare @ResultDate datetime 
DEclare @EOMDate datetime 
Declare @Day int 
set @GivenDate=getdate() 
set @GivenDate= (dateadd(mm,1,@GivenDate)) 
set @Day =day(@GivenDate) 
set @ResultDate=dateadd(dd,-@Day+1,@GivenDate) 
select @EOMDate =dateadd(dd,-1 ,@ResultDate) 
select @EOMDate 
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보고서 작성을 위해 한 달을 더하고 하루를 뺀 다른 버전:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ex: 월 시작은 '2019-10-01'&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;dateadd(day,-1,dateadd(month,1,StartofMonth))&lt;/code&gt; &lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;월말은 '2019-10-31'이 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Select DATEADD(DAY, -(DAY(DATEADD(MONTH, 1, GETDATE()))),DATEADD(MONTH, 1, GETDATE()))
&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;이것은 T-sql에서 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;교체&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GETDATE()&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;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 달의 마지막 날짜를 계산하는 것은 꽤 간단한 계산입니다 -&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 - DATEIFF 기능을 이용하여 오늘 날짜까지의 총 개월 수 찾기 -&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Select DATEDIFF(MM,0,GETDATE())
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력 - 1374, getdate() 출력이 &quot;2014-07-23 19:33:46.850&quot;인 경우&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2 - 1씩 증가하여 총 개월 수 -&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Select DATEDIFF(MM,0,GETDATE())+1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력 - 1375, Getdate() 출력이 &quot;2014-07-23 19:33:46.850&quot;인 경우&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3 - 다음 달 첫 날짜를 맞춥니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Select DATEADD(MM,DATEDIFF(MM,0,GETDATE())+1,0)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력 - '2014-08-01 00:00:00.000', Getdate() 출력이 '2014-07-23 19:33:46.850'인 경우&lt;/font&gt;&lt;/em&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;4 - 다음 달의 첫 번째 날짜에 -1을 빼면 해당 달의 마지막 날짜가 반환됩니다. -&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Select DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,0,GETDATE())+1,0))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력 - '2014-07-31 00:00:00.000', Getdate() 출력이 '2014-07-23 19:33:46.850'인 경우&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 계산 방법으로 다음을 달성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음달마지막날짜&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전월의 마지막 날짜 등입니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;pre&gt;&lt;code&gt;TO FIND 1ST and Last day of the Previous, Current and Next Month in Oracle SQL
-----------------------------------------------------------------------------
SELECT 
SYSDATE,
LAST_DAY(ADD_MONTHS(SYSDATE,-2))+1 FDPM,
LAST_DAY(ADD_MONTHS(SYSDATE,-1)) LDPM,
LAST_DAY(ADD_MONTHS(SYSDATE,-1))+1 FDCM,
LAST_DAY(SYSDATE)LDCM,
LAST_DAY(SYSDATE)+1 FDNM,
LAST_DAY(LAST_DAY(SYSDATE)+1) LDNM
FROM DUAL
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;declare @date date=getdate()
declare @st_date date,@end_dt date
set @st_date=convert(varchar(5),year(@date))+'-'+convert(varchar(5),month(@date))+'-01'
set @end_dt=DATEADD(day,-1, DATEADD(month,1,@st_date))
---------**************--------------
select @st_date as [START DATE],@end_dt AS [END DATE]
&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;DATEADD(MONTH, DATEIFF(MONTH, -1, GETDATE())-0, -1) LastDate를 선택합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 훌륭한 접근법.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;안부 전해요&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DECLARE @MAXDATE INT=(SELECT MAX(DATEPART(YEAR,ORDERDATE)) FROM Orders)
DECLARE @MINDATE INT=(SELECT MIN(DATEPART(YEAR,ORDERDATE)) FROM Orders)
DECLARE @HORA INT=(SELECT MIN( DATEPART(HOUR,ORDERDATE)) FROM ORDERS)
DECLARE @DIA INT = 28

SELECT Employees.EmployeeID , Orders. OrderID , OrderDate  FROM Employees
INNER JOIN Orders 
ON Employees.EmployeeID = Orders.EmployeeID
Where  (DATEPART(YEAR,ORDERDATE)) &amp;gt;=@mindate and  (DATEPART(YEAR,ORDERDATE))&amp;lt;= @maxdate
and DATEPART(HOUR,ORDERDATE)=@HORA   and DATEPART(DAY,ORDERDATE) IN (30,31) OR DATEADD(DAY,0,DATEPART(DAY,ORDERDATE))=28 AND
DATEADD(MONTH,0,DATEPART(MONTH,ORDERDATE))=2
ORDER BY 1 ASC
&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;URL : https://stackoverflow.com/questions/16646585/sql-query-to-find-the-last-day-of-the-month&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>sql-server</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1578</guid>
      <comments>https://factcode.tistory.com/1578#entry1578comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:55:29 +0900</pubDate>
    </item>
    <item>
      <title>구성 관리자.앱 설정 캐싱</title>
      <link>https://factcode.tistory.com/1577</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성 관리자.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱 설정 캐싱&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IIS가 Configuration Manager를 캐시한다는 것을 알고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;web.config가 변경될 때까지 디스크를 한 번만 읽도록 AppSettings.&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;a href=&quot;http://forums.asp.net/p/1080926/1598469.aspx#1598469&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://forums.asp.net/p/1080926/1598469.aspx#1598469&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라고 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET Framework는 app.config에 대해서는 동일한 작업을 수행하지 않지만 모든 요청에 대해 디스크에서 읽습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 믿기가 힘들어요 왜냐면 더 느려질 테니까요&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 제가 작성한 콘솔/Windows 양식/Windows 서비스를 모두 수정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;5-0&quot;&gt;업데이트&lt;/strong&gt; 상기 링크된 포럼에서 사람들이 한 말을 잘못 이해한 것에 대해 유감스럽게 생각합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;빠른 테스트를 통해 이러한 설정은 응용 프로그램 시작 시에만 로드되는 것으로 보입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//edit the config file now.
Console.ReadLine();

Console.WriteLine(ConfigurationManager.AppSettings[&quot;ApplicationName&quot;].ToString());
Console.WriteLine(&quot;Press enter to redisplay&quot;);

//edit the config file again now.
Console.ReadLine();
Console.WriteLine(ConfigurationManager.AppSettings[&quot;ApplicationName&quot;].ToString());
Console.ReadLine();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 출력이 동일하게 유지됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먹어봐.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;ConfigurationManager.RefreshSection(&quot;appSettings&quot;)&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 이름 주의(빈 &lt;strong papago-id=&quot;9-1&quot;&gt;폴더&lt;/strong&gt;)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반 파일 이름: appname.&lt;strong papago-id=&quot;10-1&quot;&gt;exe.config&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;if debug mode : appname.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;11-1&quot;&gt;vshost.exe.&lt;/strong&gt;&lt;/font&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;/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;앱이 실행되는 동안 파일을 변경하면 쉽게 확인할 수 있듯이, 애플리케이션 시작 시 애플리케이션 구성 파일(MyApp.exe.config)을 한 번 읽어줍니다.&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;OP가 언급한 포럼 게시물의 논평은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.config에 대한 값은 응용 프로그램이 시작될 때 캐시/메모리에 저장되므로 Web.config에 변경 사항이 있을 때 응용 프로그램이 다시 시작됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 Web.config에만 적용되며, &lt;em papago-id=&quot;15-1&quot;&gt;사용&lt;/em&gt;할 수 있는 &lt;em papago-id=&quot;15-1&quot;&gt;다른 모든 .config&lt;/em&gt; 파일은 &lt;em papago-id=&quot;15-1&quot;&gt;기본적으로 디스크&lt;/em&gt;에서 액세스됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코멘트는 &lt;strong papago-id=&quot;16-1&quot;&gt;ASP&lt;/strong&gt;에서 web.config 이외의 config 파일을 의미하는 것으로 해석하겠습니다&lt;strong papago-id=&quot;16-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;16-1&quot;&gt;NET 응용프로그램&lt;/strong&gt;은 기본적으로 디스크에서 액세스합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마찬가지로 WinForms/Console 응용 프로그램의 MyApp.exe.config 이외의 구성 파일도 기본적으로 디스크에서 액세스합니다.&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;이 설명은 MyApp.exe.config가 기본적으로 디스크에서 읽혀진다는 것을 의미하지 않습니다.&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;AppSettings가 캐시됩니다.&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;a href=&quot;http://www.dotnetperls.com/appsettings-cache&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;19-1&quot;&gt;DotNetPearls 정적 구성 패턴&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;John의 말처럼 실제로 공연이 히트하는 것을 보고 있는 경우에만 이 작업에 더 많은 시간을 할애할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 이러한 응용 프로그램은 &lt;strong papago-id=&quot;21-1&quot;&gt;구성을 메모리&lt;/strong&gt;에 저장하고 구성 내에서 변경 사항을 확인하려면 응용 프로그램을 다시 &lt;strong papago-id=&quot;21-3&quot;&gt;시작해&lt;/strong&gt;야 할 것이라고 확신합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;남은 미스터리에 대한 &lt;a href=&quot;http://www.codeproject.com/KB/dotnet/mysteriesofconfiguration.aspx&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;22-1&quot;&gt;추가적&lt;/a&gt;인 읽기를 위해.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/389361/configurationmanager-appsettings-caching&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>asp.net</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1577</guid>
      <comments>https://factcode.tistory.com/1577#entry1577comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:55:22 +0900</pubDate>
    </item>
    <item>
      <title>이름을 기준으로 도커 이미지를 제거하는 방법은?</title>
      <link>https://factcode.tistory.com/1576</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;imagename&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;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래를 시도해 보았지만 작동하지 않는 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;docker images | grep 'imagename' | xargs -I {} docker rmi&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 시도해 봅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker rmi $(docker images | grep 'imagename')
&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;docker rmi $(docker images 'completeimagename' -a -q)
&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;Windows PowerShell에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker rmi $(docker images --format &quot;{{.Repository}}:{{.Tag}}&quot;|findstr &quot;imagename&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조금 더 정확한 버전 - 저장소 이름에 대한 grepping only:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;docker images&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로 필터링할 이미지 이름/id로 첫 번째 위치 인수를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;grep과 awk는 필요없어요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-q&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션은 다음으로 공급할 수 있는 일치하는 이미지 ID만 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker rmi&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker rmi --force $(docker images -q 'imagename' | uniq)
&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;uniq&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;docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
&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;--force&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령의 끝에&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋아요:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;sudo docker rmi &amp;lt;docker_image_id&amp;gt; --force&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보다 &lt;strong papago-id=&quot;15-1&quot;&gt;지능적&lt;/strong&gt;으로 만들기 위해 이미지를 제거하기 전에 실행 중인 컨테이너를 중지할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo docker stop $(docker ps | grep &amp;lt;your_container_name&amp;gt; | awk '{print $1}')

sudo docker rm $(docker ps | grep &amp;lt;your_container_name&amp;gt; | awk '{print $1}')

sudo docker rmi $(docker images | grep &amp;lt;your_image_name&amp;gt; | awk '{print $3}') --force
&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;docker ps&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;strong papago-id=&quot;17-1&quot;&gt;&lt;em papago-id=&quot;17-1-0&quot;&gt;1&lt;/em&gt;&lt;/strong&gt;은 첫 번째 열(즉, 도커 컨테이너 ID)이고 &lt;strong papago-id=&quot;17-3&quot;&gt;$3&lt;/strong&gt;은 세 번째 열(즉, 도커 이미지 ID)입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 제 대답이 더 간단하다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 이미지 이름은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;python_image&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;21-0&quot;&gt;그렇다면 코드는 다음과 같습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;docker rmi $(docker images --filter=reference='python_image' --format &quot;{{.ID}}&quot;)&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 papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업한 경우(&lt;strong papago-id=&quot;23-1&quot;&gt;Docker 버전 19.03.5&lt;/strong&gt;):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker rmi $(docker images 'imagename' -q)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;&lt;strong papago-id=&quot;24-1&quot;&gt;docker images 'imagename' -q&lt;/strong&gt;&quot; 명령은 따옴표로 묶은 단일 인수의 모든 이미지 ID를 나열하므로 &lt;strong papago-id=&quot;24-3&quot;&gt;docker rmi&lt;/strong&gt;(또는 강제로 사용하는 경우 &lt;strong papago-id=&quot;24-5&quot;&gt;docker rmi -f&lt;/strong&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 class=&quot;papago-parent&quot;&gt;유일한 변화는 불필요한 것들을 제거하는 것이었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-I {}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;깃발을 올리다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;docker images | grep 'imagename' | xargs docker rmi&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;docker rmi $(docker images --filter=reference=&quot;IMAGENAME:TAG&quot;)&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음 이미지를 가지고 있는 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
abcdefg/hij                   7.0.0-beta-4.0      3128835950cd        7 days ago          51.4MB
abcdefg/hij-action            7.0.0-beta-4.0      42a7255beb74        7 days ago          97.4MB
abcdefg/hij-test              7.0.0-beta-4.0      17246aed35d0        7 days ago          97.4MB
abcdefg/hij-server            7.0.0-beta-4.0      42c45e561f2c        7 days ago          335MB
abcdefg/hij-init              7.0.0-beta-3.0      f648bb622933        7 days ago          55.2MB
abcdefg/hij-dir               7.0.0-beta-3.0      0db07d3aaccf        7 days ago          97.4MB
abcdefg/hij-mount             7.0.0-beta-3.0      18d1c0e1502c        4 weeks ago         33.7MB
&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;docker rmi $(docker images --filter=reference=&quot;abcd*:*4.0&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;처음 4개의 이미지가 제거됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 정보는 https://docs.docker.com/engine/reference/commandline/images/ 를 참조하시기 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;docker rmi `docker images | awk '$1 ~ /imageName/ {print $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;이렇게 하면 &quot;imageName&quot;이라는 이름으로 모든 이미지가 제거됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;경우에 따라 &quot;이미지가 하나 이상의 리포지토리에서 참조됨&quot;과 같은 오류가 발생할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 경우 강제 삭제를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker rmi -f `docker images | awk '$1 ~ /imageName/ {print $3}'`
&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;docker images | awk '{ OFS = &quot;:&quot; }$1 ~ /imageName/ {print $1,$2}'
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 이유에서인지 저는 여기에 주어진 답을 사용할 수 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저한테 효과가 있었던 건 이렇습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;docker images | grep \&quot;gcr.io/kubernetes-learn-197422/last-week-weather-service\&quot; | awk '{print $3}' | xargs docker rmi&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;awk '{print $3}'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중요한 부분입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;세 번째 열에서 id를 추출합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;docker rmi $(docker image ls repo/image_name* | awk {'print $1&quot;:&quot;$2'} )
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전에 게시되지 않은 이 질문에 대한 해결책을 제시해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;library/myapp&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;myrepo.org/library/myapp&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 일단 그들이 밀리면, 나는 그 지역 도커 레그를 치우고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아무것도 발견되지 않거나 명령이 오류를 내던져도 상관없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 추가된&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;|| true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트에 포함시키기 위해 마지막에.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 시도해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker images | grep 'DOCKER_IMAGE_NAME' | xargs -l bash -c 'docker rmi $0:$1' | xargs
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;docker image ls | grep 'repository-name' |  awk '{ print $3 }'  | while read -r line ; do docker image rm $line; done
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 현재 저에게 효과가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker rmi $(docker images |  awk '{if ($1 ~ &quot;^image_prefix&quot;) print $1&quot;:&quot;$2}')
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사소한 언급: 우리가 경험한 바로는, 당신은 도커 18.03 이후로 더 이상 이름만으로 태그가 지정되지 않은 이미지를 제거할 수 없는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위와 같이 name+tag를 사용하시거나 ID를 사용하셔야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2&amp;gt;&amp;amp;1'
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Aditya의 답변을 바탕으로 이미지를 쉽게 삭제할 수 있는 bash 기능도 만들 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능을 사용자의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;~/.profile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 새 셸 세션을 만들거나 새 셸 세션을 생성합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;source ~/.profile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function drmi() {
    docker images | grep $1 |  xargs docker rmi
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;drmi golang
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정보:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker rmi $(docker images --format &quot;{{.Repository}}:{{.Tag}}&quot; |grep imagename |grep none)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데몬의 오류 응답: 참조 형식이 잘못되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마도 내 이미지가 이렇게 생겼기 때문일 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;hostname:5000/imagename:&amp;lt;none&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;image id를 사용하고 다음 명령을 수행해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker rmi `docker images --format &quot;{{.Repository}}:{{.Tag}} {{.ID}}&quot; |grep imagename |grep none |cut -d ' ' -f2`
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;종료된 컨테이너를 제거하려면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker container rm `docker container ls -a --format &quot;{{.ID}} {{.Image}} {{.Status}}&quot; |grep Exited |grep imagename|cut -d ' ' -f1`
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/44676380/5362795&quot; papago-id=&quot;54-1&quot;&gt;선호하는 답변&lt;/a&gt;에 따라 대신 변수를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker rmi --force &quot;$(docker images -q $repository | uniq)&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 이것은 젠킨스 파이프라인에 사용될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sh(script: 'docker rmi --force &quot;$(docker images -q $repository | uniq)&quot;', returnStdout: true)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그를 통해 제거하는 대신 이 옵션을 선호했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ docker rmi test:latest
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 &lt;a href=&quot;https://docs.docker.com/engine/reference/commandline/rmi/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;57-1&quot;&gt;문서가 말하고&lt;/a&gt; 제가 확인한 바와 같이, &quot;&lt;em papago-id=&quot;57-3&quot;&gt;태그와 함께&lt;/em&gt; 이 &lt;em papago-id=&quot;57-3&quot;&gt;명령을 매개 변수로 사용하면 태그만 제거됩니다.&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;57-3&quot;&gt; 이미지에 대한 태그만 있는 경우 이미지와 태그가 모두 제거됩니다.&quot;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마침내, 이것은 나에게 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;셸: 도커 이미지 --형식 {% raw %}'{{.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이디}} - {{.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;리포지토리}}'{%endraw%} | grep {{app_name}} | cut -d'- -f1 | xargs docker rmi -f&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;{{ app_name}}은(는) 도커 이미지 이름의 정규 표현입니다.&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;저는 윈도우 사용자입니다, Jenkins 안에 bat로 위 솔루션을 수정해 보았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 나서 도움이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;cmd 안에서 수동으로 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for /F &quot;tokens=3&quot; %a in ('docker images ^| findstr &quot;my_image&quot; ') do docker rmi %a
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 IMAGE_NAME = my_image로 Jenkins 파일 안에 구현했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;bat &quot; for /f \&quot;tokens=3\&quot; %%a in ('docker images ^^^| findstr \&quot;${IMAGE_NAME}\&quot; ') do docker rmi %%a &quot;&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 젠킨스 노드 안에서 그것은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;C:\Program Files\jenkins\workspace\my_image&amp;gt;for /F &quot;tokens=3&quot; %a in ('docker images ^| findstr &quot;my_image&quot; ') do docker rmi %a
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;번역은 매뉴얼 타입과 동일해서 괜찮아 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 젠킨스의 결과는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;docker images&quot; requires at most 1 argument.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'docker images --help'를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;젠킨스 파일에서는 작동하지 않으면서 수동으로 작동하는 이유를 알고 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;젠킨스가 findstr을 실행하지 않았다는 느낌이 듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가가 무엇이 문제인지 지적해주면 좋을 것 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬에서 이미지를 제거하기 위해 follow 명령을 사용했습니다. 작동했습니다!!&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker rmi imagename
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지 이름을 하나의 인용문으로 사용했을 때는 효과가 없었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/40084044/how-to-remove-docker-images-based-on-name&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Docker</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1576</guid>
      <comments>https://factcode.tistory.com/1576#entry1576comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:55:15 +0900</pubDate>
    </item>
    <item>
      <title>argparse store false(지정되지 않은 경우)</title>
      <link>https://factcode.tistory.com/1575</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;argparse store false(지정되지 않은 경우)&lt;/font&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;parser.add_argument('-auto', action='store_true')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약에 거짓을 저장하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-auto&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;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;store_true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션을 사용하면 기본값인 &lt;em papago-id=&quot;4-1&quot;&gt;False&lt;/em&gt;가 자동으로 생성됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 마찬가지예요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;store_false&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;em papago-id=&quot;6-1&quot;&gt;True&lt;/em&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;이 동작의 출처는 간결하고 명확합니다. http://hg.python.org/cpython/file/2.7/Lib/argparse.py#l861&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;argparse 문서가 주제에 대해 명확하지 않으므로 지금 업데이트하겠습니다: http://hg.python.org/cpython/rev/49677cc6d83a&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-flag', action='store_true')
args = parser.parse_args()

print(args.flag)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유동 수익률&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;False
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 저장하고 있는 것 같네요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;False&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Raymond Hettinger는 OP의 질문에 이미 답을 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 저희 그룹은 &quot;store_false&quot;를 사용하여 가독성에 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;특히 새로운 멤버들이 합류할 때.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 인수를 지정하면 해당 인수에 해당하는 값이 True 또는 1이 된다는 것이 가장 직관적으로 생각할 수 있기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 코드가 -인 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;parser.add_argument('--stop_logging', action='store_false')
&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;stop_logging의 값이 참일 경우 코드 판독기에서 로깅 문이 꺼질 것으로 예상할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 다음과 같은 코드는 원하는 행동의 &lt;strong papago-id=&quot;16-1&quot;&gt;반대&lt;/strong&gt;를 초래할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if not stop_logging:
    #log
&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;반면, 인터페이스가 다음과 같이 정의되면, &quot;if-statement&quot;가 작동하고 읽기에 더 직관적입니다 -&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;parser.add_argument('--stop_logging', action='store_true')
if not stop_logging:
    #log
&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;지정되지 않은 경우 OSX와 Linux 간에 기본값이 달라지는 것을 발견했습니다.&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&gt;&lt;code&gt;parser.add_argument('-auto', action='store_true')&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mac 명령행에서 -auto를 생략하면 예상대로 False 값이 자동으로 할당되는 반면 Ubuntu Linux auto에서는 기본적으로 True가 할당됩니다.&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;store_false은(는) 실제로 다음으로 기본 설정됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 (검증을 위해 테스트할 수 있음).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본값을 변경하려면 추가하기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;default=True&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 선언에 따라&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 이 경우:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;parser.add_argument('-auto', action='store_true', default=True)&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/8203622/argparse-store-false-if-unspecified&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Python</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1575</guid>
      <comments>https://factcode.tistory.com/1575#entry1575comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:55:07 +0900</pubDate>
    </item>
    <item>
      <title>WPML: wp_query()는 현재 게시물이 아닌 모든 언어의 게시물을 반환합니다.</title>
      <link>https://factcode.tistory.com/1574</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPML: wp_query()는 현재 게시물이 아닌 모든 언어의 게시물을 반환합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프랑스어 버전의 페이지에서 사용하든 영어 버전의 페이지에서 사용하든 wp_query()는 사용자 지정 게시물 유형을 현재 언어뿐만 아니라 모든 언어로 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Get_posts()도 같은 작업을 수행합니다.&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;프랑스어로 내 페이지를 방문할 때, 나는 그들이 현재 언어로만 CPT를 돌려주길 원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 어떻게 할 것인가요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;3-1&quot;&gt;get_posts()&lt;/strong&gt;를 사용하는 경우 &lt;strong papago-id=&quot;3-3&quot;&gt;suppress_filters&lt;/strong&gt;를 &lt;strong papago-id=&quot;3-5&quot;&gt;false&lt;/strong&gt;로 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$myPosts = get_posts(array(
    'suppress_filters' =&amp;gt; false
));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://codex.wordpress.org/Function_Reference/get_posts#Parameters&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://codex.wordpress.org/Function_Reference/get_posts#Parameters&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 내가 WPML을 사용해서 특정 언어에 대한 게시물을 가져오는 가장 좋은 방법입니다.&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;제 경우에는 특정 언어의 제목으로 게시물을 찾고 게시물의 ID를 반환해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$lang='en';
$title='The title you are searching!';

    function getWpIdByTitle($title, $lang){
        global $sitepress;
        // WPML Super power language switcher...
        $sitepress-&amp;gt;switch_lang( $lang );
        $args = array(
          'title'        =&amp;gt; $title,
          'post_type'   =&amp;gt; 'your-post-type', // Default: post
          'post_status' =&amp;gt; 'publish',
          'suppress_filters' =&amp;gt; false,
          'numberposts' =&amp;gt; 1
        );
        $wp_query = new WP_Query( $args );
        return $wp_query-&amp;gt;post-&amp;gt;ID;
    }
&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;페치 결과로 $wp_query-&amp;gt;post를 사용하고 제목, 내용 등의 에코를 수행할 수 있습니다.&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;code&gt;do_action( 'wpml_set_element_language_details', $set_language_args );&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 언어 게시물을 연결하기 위해, 둘 다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;icl_object_id(1,'post',false,ICL_LANGUAGE_CODE);&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 언어로 된 게시물의 ID를 얻는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/28844195/wpml-wp-query-returns-posts-in-all-languages-rather-than-just-current-one&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Wordpress</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1574</guid>
      <comments>https://factcode.tistory.com/1574#entry1574comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:55:01 +0900</pubDate>
    </item>
    <item>
      <title>PowerShell 및 C#의 BigInt 불일치</title>
      <link>https://factcode.tistory.com/1573</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell 및 C#의 BigInt 불일치&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/api/system.numerics.biginteger?redirectedfrom=MSDN&amp;amp;view=netcore-3.1&quot; papago-id=&quot;1-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;마이크로소프트 문서&lt;/a&gt;에 따르면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[BigInt]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 유형은 정의된 최대값이 없는 것 같고 이론적으로는 무한히 큰 숫자를 유지할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 하지만 28자리 이후에는 이상한 일들이 발생하기 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-powershell prettyprint-override&quot;&gt;&lt;code&gt;PS C:\Users\Neko&amp;gt; [BigInt]9999999999999999999999999999
9999999999999999999999999999
PS C:\Users\Neko&amp;gt; [BigInt]99999999999999999999999999999
99999999999999991433150857216
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보시다시피 첫번째 명령에서&lt;sup papago-id=&quot;3-1&quot;&gt;1&lt;/sup&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BigInt&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;99999999999999999999999999999&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;99999999999999991433150857216&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 프롬프트가 표시되면 오류가 발생하지 않으며 310번째 숫자까지 계속 숫자를 추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-powershell prettyprint-override&quot;&gt;&lt;code&gt;PS C:\Users\Neko&amp;gt; [BigInt]99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
100000000000000001097906362944045541740492309677311846336810682903157585404911491537163328978494688899061249669721172515611590283743140088328307009198146046031271664502933027185697489699588559043338384466165001178426897626212945177628091195786707458122783970171784415105291802893207873272974885715430223118336
PS C:\Users\Neko\&amp;gt; [BigInt]999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
&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 class=&quot;lang-powershell prettyprint-override&quot;&gt;&lt;code&gt;At line:1 char:318
+ ... 999999999999999999999999999999999999999999999999999999999999999999999
+                                                                          ~
The numeric constant 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 is not valid.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : BadNumericConstant
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 생각하기에 그것은 콘솔 문제입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BigInt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 언급되지 않았기 때문에 문제가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[BigInt]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 유형은 다른 데이터 유형에 비해 너무 큰 숫자와는 다릅니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-powershell prettyprint-override&quot;&gt;&lt;code&gt;PS C:\Users\Neko&amp;gt; [UInt64]18446744073709551615
18446744073709551615
PS C:\Users\Neko&amp;gt; [UInt64]18446744073709551616
Cannot convert value &quot;18446744073709551616&quot; to type &quot;System.UInt64&quot;. Error: &quot;Value was either too large or too small
for a UInt64.&quot;
At line:1 char:1
+ [UInt64]18446744073709551616
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastIConvertible
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C#에 관해서는,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Numerics.BigInt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;20번째 자리에서 오류를 던지기 시작할 겁니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;99999999999999999999&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하드 코딩된 경우:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-C# prettyprint-override&quot;&gt;&lt;code&gt;namespace Test
{
    class Test
    {
        static void Main()
        {
            System.Numerics.BigInteger TestInput;
            System.Numerics.BigInteger Test = 99999999999999999999;
            System.Console.WriteLine(Test);
        }
    }
}
&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;Visual Studio에서 빌드하려고 하면 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Integral constant is too large
&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 class=&quot;papago-parent&quot;&gt;하지만 더 많은 숫자를 입력할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ReadLine&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;착오 없이&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-C# prettyprint-override&quot;&gt;&lt;code&gt;namespace Test
{
    class Test
    {
        static void Main()
        {
            System.Numerics.BigInteger TestInput;
            TestInput = System.Numerics.BigInteger.Parse(System.Console.ReadLine());
            System.Console.WriteLine(TestInput);
        }
    }
}
&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;99999999999...
&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;(총 24720자) 정상&lt;sup papago-id=&quot;18-1&quot;&gt;2&lt;/sup&gt; 작동&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 이 이상한 활동의 원인은 무엇일까요?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[BigInt]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; &lt;sub&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;28자리의 숫자를 기준으로 했을때&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;([Char[]]&quot;$([BigInt]9999999999999999999999999999)&quot;).count&lt;/code&gt;&lt;/sub&gt;&lt;/p&gt; 
&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; &lt;sub papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;숫자를 세는 데 너무 게을러서 PowerShell에 숫자를 파싱하려고 하면 오류가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.lettercount.com/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;22-1&quot;&gt;이것&lt;/a&gt;에 의하면 24720자입니다.&lt;/font&gt;&lt;/sub&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;23-0&quot;&gt;TLDR&lt;/strong&gt;: 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[BigInt]::Parse&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'literal'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Powershell Core 7.0 이전의 구문; 그렇지 않으면 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;n&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;접미사&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h1&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; -  -&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;double&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문학의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/h1&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;고정되지 않은 리터럴의 경우 Powershell은 값이 적합한 첫 번째 유형을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;29-1&quot;&gt;적분&lt;/em&gt; 리터럴의 순서는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;long&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;decimal&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 나서.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;double&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. Powershell 5.1에 대한 &lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_numeric_literals?view=powershell-5.1&quot; papago-id=&quot;33-1&quot; rel=&quot;noreferrer&quot;&gt;설명서&lt;/a&gt;(bolding mine; 이 단락은 Powershell Core의 경우 동일):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유형 접미사가 없는 정수 리터럴의 경우:&lt;/font&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값을 유형별로 나타낼 수 있는지 여부&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[int]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 유형별로 값을 나타낼 수 있는지 여부&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[long]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그것이 그 유형입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 유형별로 값을 나타낼 수 있는지 여부&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[decimal]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그것이 그 유형입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
  &lt;li papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;41-0&quot;&gt;그렇지 않으면 유형별로 표시됩니다.&lt;/strong&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 경우 그 값은 다음 값을 초과합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;decimal.MaxValue&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 당신의 리터럴은 기본적으로 a.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;double&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자 그대로의&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그거&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;double&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값은 정확하게 표현할 수 없으며 가장 가까운 &lt;em papago-id=&quot;45-1&quot;&gt;표현&lt;/em&gt; 가능한 두 배에 &quot;converted&quot;입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$h = [double]99999999999999999999999999999
&quot;{0:G29}&quot; -f $h
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;산출물&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;99999999999999991000000000000
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분명히 그건 &lt;em papago-id=&quot;47-1&quot;&gt;정확&lt;/em&gt;한 숫자가 아니라 문자열 형태의 표현일 뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 무슨 일이 일어나고 있는지 알 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 우리는 이것을 &lt;em papago-id=&quot;47-3&quot;&gt;정확&lt;/em&gt;하지 않게 받아들입니다.&lt;/font&gt;&lt;/font&gt; &lt;code&gt;double&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가치와 우리는 그것을 &lt;em papago-id=&quot;48-1&quot;&gt;하기&lt;/em&gt; 위해 던집니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BigInt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 원래의 정밀도 손실은 &lt;em papago-id=&quot;49-1&quot;&gt;변환 연산자&lt;/em&gt;에 의해 이전되고 복합화됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 &lt;em papago-id=&quot;49-3&quot;&gt;실제로&lt;/em&gt; 파워셸에서 일어나고 있는 일입니다. (출연진이 주목할 것은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BigInt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;):&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$h = [BigInt][double]99999999999999999999999999999
&quot;{0:G}&quot; -f $h
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;산출물&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;99999999999999991433150857216
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 사실 가장 가까운 대표적인 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;double&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;value. 만약 &lt;a href=&quot;https://jonskeet.uk/csharp/DoubleConverter.cs&quot; papago-id=&quot;53-1&quot; rel=&quot;noreferrer&quot;&gt;당신&lt;/a&gt;이 정확한 &lt;a href=&quot;https://jonskeet.uk/csharp/DoubleConverter.cs&quot; papago-id=&quot;53-1&quot; rel=&quot;noreferrer&quot;&gt;값을 인쇄&lt;/a&gt;할 수 있다면.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;double&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫번째 예시에서, 이것은 인쇄될 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가 숫자를 추가하면 &lt;strong papago-id=&quot;54-1&quot;&gt;숫자 리터럴&lt;/strong&gt;의 가장 큰 값을 초과하므로 받은 다른 예외도 있습니다&lt;strong papago-id=&quot;54-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C# 불일치&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파워셸과 달리 C#은 기본적으로 &lt;strong papago-id=&quot;56-1&quot;&gt;적분 리터럴&lt;/strong&gt;을 사용하므로 훨씬 적은 숫자에 대해 예외를 적용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가하기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;D&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C#의 접미사는 더 큰 범위를 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 잘 작동하며 다음과 같이 될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;double&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var h = 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999D;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 자리를 더 추가하면 다음 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 CS0594: 부동 소수점 상수가 'double' 유형의 범위를 벗어났습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고로 파워셸에서는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;D&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;접미사는 다음에 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;decimal&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;63-1&quot;&gt;문학적&lt;/em&gt;인 것과 그렇지 않은&lt;/font&gt;&lt;/font&gt; &lt;code&gt;double&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 에 대한 명시적 접미사가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;double&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;--기본값으로 가정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원래 문제로 돌아가서, Powershell 버전에 따라 솔루션이 달라질 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;code&gt;[BigInt]::Parse&lt;/code&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows Powershell 또는 Powershell Core &amp;lt;= v6.2를 사용하는 경우 다음과 같은 방법을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BigInteger.Parse&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[bigint]::Parse(&quot;99999999999999999999999999999&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;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;99999999999999999999999999999
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Large Value Literals&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주석에서 지적한 바와 같이, 리터럴을 따옴표로 묶는 것도 효과적인 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[bigint]'99999999999999999999999999999' 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;산출물&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;99999999999999999999999999999
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;74&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;겉보기에 상관없이, 이것은 의 약자가 &lt;strong papago-id=&quot;74-1&quot;&gt;아닙니다&lt;/strong&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[bigint]::new([string])&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(아래 참조).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 대신에 리터럴이 a로 취급되지 않도록 보장하는 방법입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;double&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;76&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 많은 숫자를 가진 통합 리터럴, 소위 &quot;큰 값 리터럴&quot;로서.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서의 이&lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_numeric_literals?view=powershell-7#parsing-large-value-literals&quot; papago-id=&quot;76-1&quot; rel=&quot;noreferrer&quot;&gt; 절&lt;/a&gt;을 참조하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;code&gt;N&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사(v7.0+)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파워셸 코어 6.2는 서명되지 않은 것과 같은 적분형을 위한 많은 새로운 문자 접미사들을 소개했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;short&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;byte&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 한 개를 소개하지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;bigint&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그것은 파워셸 코어 7.0을 통해 출시되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;n&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;접미사&lt;/font&gt;&lt;font 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;pre&gt;&lt;code&gt;99999999999999999999999999999n 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;99999999999999999999999999999
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Powershell Core에서 사용할 수 있는 접미사에 대한 자세한 내용은 &lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_numeric_literals?view=powershell-7&quot; rel=&quot;noreferrer&quot; papago-id=&quot;84-1&quot;&gt;설명서&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;h1&gt;&lt;code&gt;[BigInt]::new&lt;/code&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;64&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 시도해본다면.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[bigint]::new('literal')&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;86&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Powershell은 &lt;em papago-id=&quot;86-1&quot;&gt;값&lt;/em&gt;을 리터럴로 사용하려는 것을 인식합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위한 시공자가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BigInt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;A를 받아들이는.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(우리는 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Parse&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;68&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 위해) 또한 다른 건설자를 받아들이는 건설자가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BigInt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;69&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그러나 다음을 수행하는 시공자가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;double&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;70&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 우리의 대용량 리터럴은 다음과 같이 시작할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BigInt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그러면 파워셸은 그것을 암시적으로 a로 전환할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;double&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;72&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(losing 정밀도) 다음에 전달&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[bigint]::new([double])&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 한 번 잘못된 결과를 제공하는 것이 가장 좋은 경기입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[bigint]::new('99999999999999999999999999999') 
&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;99999999999999991433150857216
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;96&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;불행하게도 C#은 BigInteger를 위한 리터럴을 가지고 있지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;BigInteger를 인스턴스화하는 두 가지 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;97&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;int, long(캐스트 또는 생성자 사용)과 같은 프리미티브 유형에서 변환&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;BigInteger.Parse를 사용하여 문자열에서 구문 분석&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;hr&gt; 
&lt;pre&gt;&lt;code&gt;BigInteger test = BigInteger.Parse(&quot;32439845934875938475398457938457389475983475893475389457839475&quot;);
Console.WriteLine(test.ToString());
// output: 32439845934875938475398457938457389475983475893475389457839475
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;99&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_numeric_literals?view=powershell-7#how-powershell-parses-numeric-literals&quot; papago-id=&quot;99-1&quot; rel=&quot;noreferrer&quot;&gt;PowerShell이 숫자 리터럴을 구문&lt;/a&gt; 분석하는 &lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_numeric_literals?view=powershell-7#how-powershell-parses-numeric-literals&quot; papago-id=&quot;99-1&quot; rel=&quot;noreferrer&quot;&gt;방법&lt;/a&gt; 보기&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;100&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기존의 유용한 답변 - 특히 핑크 플로이드 &lt;a href=&quot;https://stackoverflow.com/a/62974358/45375&quot; papago-id=&quot;100-1&quot;&gt;x33의 답변 &lt;/a&gt;- 을 &lt;strong papago-id=&quot;100-3&quot;&gt;간결한 요약&lt;/strong&gt;으로 보완합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 v7.0 이상의 모든 PowerShell 버전은 &lt;strong papago-id=&quot;101-1&quot;&gt;&lt;em papago-id=&quot;101-1-4&quot;&gt;보다&lt;/em&gt;&lt;/strong&gt; 큰 &lt;strong papago-id=&quot;101-1&quot;&gt;&lt;em papago-id=&quot;101-1-4&quot;&gt;숫자&lt;/em&gt;&lt;/strong&gt; &lt;strong papago-id=&quot;101-1&quot;&gt;&lt;em papago-id=&quot;101-1-2&quot;&gt;리터럴&lt;/em&gt;&lt;/strong&gt;의 &lt;strong papago-id=&quot;101-1&quot;&gt;데이터 유형&lt;/strong&gt;으로 사용되므로 &lt;strong papago-id=&quot;101-3&quot;&gt;항상&lt;/strong&gt; &lt;strong papago-id=&quot;101-3&quot;&gt;&lt;em papago-id=&quot;101-3-1&quot;&gt;정확도&lt;/em&gt;&lt;/strong&gt;가 &lt;strong papago-id=&quot;101-3&quot;&gt;&lt;em papago-id=&quot;101-3-1&quot;&gt;떨어집니다&lt;/em&gt;&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;102-0&quot;&gt;v6.x&lt;/strong&gt;(&lt;em papago-id=&quot;102-2&quot;&gt;Windows PowerShell&lt;/em&gt; 포함)까지 이를 방지할 수 있는 유일한 방법은 &lt;strong papago-id=&quot;102-4&quot;&gt;&lt;em papago-id=&quot;102-4-3&quot;&gt;문자열&lt;/em&gt;&lt;/strong&gt;로&lt;strong papago-id=&quot;102-4&quot;&gt; 표시되는 숫자와 함께 사용&lt;/strong&gt;하는 것입니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code&gt;[bigint]::Parse('99999999999999999999999999999')

# A *cast* works too, as also shown in pinkfloydx33's answer:
[bigint] '99999999999999999999999999999'
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;74&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;74-0&quot;&gt;v7+&lt;/strong&gt;에서는 &lt;strong papago-id=&quot;74-2&quot;&gt;접미사&lt;/strong&gt;를 사용하여 숫자 리터럴을 a로 지정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[bigint]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;75&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code&gt;99999999999999999999999999999n  # v7+; parses as a [bigint], due to suffix 'n'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;76&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: PowerShell이 일반적으로 적절한 숫자 유형을 &lt;em papago-id=&quot;76-1&quot;&gt;자동&lt;/em&gt;으로 선택한다는 점을 고려할 때, &lt;em papago-id=&quot;76-3&quot;&gt;다음&lt;/em&gt;과 같이 가정해야 합니다.&lt;/font&gt;&lt;/font&gt; &lt;code&gt;n&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;77&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우, 즉 그것은 고정되지 않은 것을 파싱해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;99999999999999999999999999999&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;78&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[bigint]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;79&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 로는 아닌&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[double]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;80&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;- &lt;a href=&quot;https://github.com/PowerShell/PowerShell/issues/13212&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;80-1&quot;&gt;이 GitHub 제안서&lt;/a&gt;를 보세요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;110&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가 읽기:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;111&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 PowerShell 버전에 도입되었는지를 비롯하여 모든 숫자 유형 접미사를 보여주는 &lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_numeric_literals&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;111-1&quot;&gt;_Numeric_Literals&lt;/a&gt;에 대해 참조하십시오.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;112&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;a href=&quot;https://stackoverflow.com/a/41091259/45375&quot; papago-id=&quot;112-0&quot;&gt;답변&lt;/a&gt;은 PowerShell에서 리터럴 수를 어떻게 해석하는지 요약한 것입니다.&lt;/font&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;81&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단히 말해서, &lt;em papago-id=&quot;81-1&quot;&gt;정수&lt;/em&gt; 리터럴의 경우,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[int]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;82&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택된 유형 중 가장 작은 유형입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[long]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;83&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[decimal]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;84&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 큰 값을 수용하기 위해 필요에 따라 선택됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[double]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;85&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 이상의 가치를 위해 사용되는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[decimal]::MaxValue&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;86&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;119&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;87&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell과 C#은 둘 다 동일한 모듈을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.NET Core&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;88&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BigInt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;89&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 유형 및 데이터 유형을 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BigInteger&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;90&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;짜맞추다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\3.1.0\ref\netcoreapp3.1\System.Runtime.Numerics.dll
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;124&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에는 다음에 대한 컨스트럭터가 포함됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public BigInteger(byte[] value);
public BigInteger(decimal value);
public BigInteger(double value);
public BigInteger(int value);
public BigInteger(long value);
public BigInteger(float value);
public BigInteger(uint value);
public BigInteger(ulong value);
public BigInteger(ReadOnlySpan&amp;lt;byte&amp;gt; value, bool isUnsigned = false, bool isBigEndian = false);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;125&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 말은 베이스가&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;System.Numerics.BigInteger test = 12345;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;91&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;생성자에게 전달된 값을 사용할 수 있는 가장 높은 값, 즉 최대값 중 하나로 변환하려고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;double&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;92&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그러나 C#은 &lt;strong papago-id=&quot;92-1&quot;&gt;접미사가 필요&lt;/strong&gt; 없는 최대값이 다음과 같이 되도록 접미사와 함께 &lt;strong papago-id=&quot;92-1&quot;&gt;지정되지 않는&lt;/strong&gt; 한 &lt;strong papago-id=&quot;92-1&quot;&gt;숫자를 더블로 변환하려고 시도&lt;/strong&gt;하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ULong&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;93&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최대 값을 가지는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;18446744073709551615&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;94&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;면)에 의거)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ULong.MaxValue&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;95&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 이보다 더 적습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;99999999999999999999&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;96&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 적분 상수 오차를 발생시켰지만 다음보다 큰 수&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;9999999999999999999&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;97&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 한 글자를 뺀&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 단지 하는 이유입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;System.Numerics.BigInteger test = 99999999999999999999;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;98&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만, 그&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Parse()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;99&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메소드 인&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BigInteger&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;100&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 생성자에서 정수 타입 &lt;em papago-id=&quot;100-1&quot;&gt;이외&lt;/em&gt;의 값을 가져올 수 있으며 문자열을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static BigInteger Parse(ReadOnlySpan&amp;lt;char&amp;gt; value, NumberStyles style = NumberStyles.Integer, IFormatProvider provider = null);
public static BigInteger Parse(string value);
public static BigInteger Parse(string value, NumberStyles style);
public static BigInteger Parse(string value, NumberStyles style, IFormatProvider provider);
public static BigInteger Parse(string value, IFormatProvider provider);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;101&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보시다시피.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Parse()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;102&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 방법&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Numerics.BigInteger&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;103&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 정수가 아닌 단어이므로 제한이 없는 &lt;em papago-id=&quot;103-1&quot;&gt;문자열&lt;/em&gt; 인수를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 그 이유입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Parse()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;104&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;method는 당신에게 무한한 가치공간을 제공할 &lt;strong papago-id=&quot;104-1&quot;&gt;것&lt;/strong&gt;입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;105&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell의 경우, 다른 답변에서와 마찬가지로, &lt;em papago-id=&quot;105-1&quot;&gt;&lt;strong papago-id=&quot;105-1-0&quot;&gt;최대값을 초과하는 것은 부정확성&lt;/strong&gt;&lt;/em&gt;이 &lt;em papago-id=&quot;105-1&quot;&gt;&lt;strong papago-id=&quot;105-1-0&quot;&gt;많은 데이터 유형으로 변환을 시도&lt;/strong&gt;&lt;/em&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[double]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;106&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;data type의 &lt;em papago-id=&quot;106-1&quot;&gt;최대값&lt;/em&gt;은 309자리이므로 오류는 309자리 뒤에만 나타납니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[double]::MaxValue
1.79769313486232E+308
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;142&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 과학적 표기법이 아닌 정상치로 변환하기 위해 우리는 소수점을 308번 이상 이동시킬 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;179769313486232000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;143&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가능한 최고의 두 배가 될 겁니다&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell의 '[double] data type은 다음과 같이 매우 부정확한 매우 이상한 속성을 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[BigInt][double]9999999999999999999999
10000000000000000000000
[BigInt][double]9999999999999999999999999
10000000000000000905969664
[double]9999999999999999999
1E+19
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;107&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서 PowerShell 를  수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BigInt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;108&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 C#과 같은 구조에서, 방법과 생성자는 같고 그리고&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Parse()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;109&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 C#에서와 마찬가지로 PowerShell에서도 동일한 방식으로 작동할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell 7에 변경 사항이 있어 다음과 같은 작업을 수행할 수 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;N&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;110&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자동으로 바로 변환될 접미사&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BigInt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;111&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;BigInt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;112&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 과학적 표기법을 사용하지 않으므로 사용할 수 있는 정확한 값을 얻기 위해 다른 데이터 유형을 사용하면 항상 정확한 값을 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[BigInt]([double]::MaxValue)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;150&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신을 얻을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;151&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;h3 papago-id=&quot;152&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 명령어&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;153&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell 6.x 이하&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[BigInt]::Parse(&quot;99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;154&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell 7.0 이상&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999N
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;155&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C#&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;System.Numerics.Biginteger test = System.Numerics.BigInteger.Parse(&quot;999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;156&quot; papago-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/62974138/bigint-inconsistencies-in-powershell-and-c-sharp&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>powershell</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1573</guid>
      <comments>https://factcode.tistory.com/1573#entry1573comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:54:55 +0900</pubDate>
    </item>
    <item>
      <title>다른 메서드 내부에서 메서드 호출에 대해 스프링 AOP가 작동하지 않습니다.</title>
      <link>https://factcode.tistory.com/1572</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 메서드 내부에서 메서드 호출에 대해 스프링 AOP가 작동하지 않습니다.&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;ABC.java&lt;/strong&gt;에는 두가지 방법이 정의되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public void method1(){
   .........
   method2();
  ...........
}


public void method2(){
  ...............
  ...............  
}
&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;strong papago-id=&quot;2-1&quot;&gt;method2&lt;/strong&gt;에 AOP를 의뢰하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 반을 하나 만들었는데,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;2-3&quot;&gt;AOPlogger.java&lt;/strong&gt;, 메서드에서 제공되는 측면 &lt;strong papago-id=&quot;2-5&quot;&gt;기능&lt;/strong&gt; 확인Access&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨피규레이션 파일에서 아래와 같은 작업을 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;bean id=&quot;advice&quot; class=&quot;p.AOPLogger&quot; /&amp;gt;
&amp;lt;aop:config&amp;gt;
  &amp;lt;aop:pointcut id=&quot;abc&quot; expression=&quot;execution(*p.ABC.method2(..))&quot; /&amp;gt;
  &amp;lt;aop:aspect id=&quot;service&quot; ref=&quot;advice&quot;&amp;gt;
    &amp;lt;aop:before pointcut-ref=&quot;abc&quot; method=&quot;checkAccess&quot; /&amp;gt;          
  &amp;lt;/aop:aspect&amp;gt;
&amp;lt;/aop:config&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;그러나 method2가 호출되면 AOP 기능이 호출되지 않습니다. 즉, &lt;strong papago-id=&quot;4-1&quot;&gt;checkAccess&lt;/strong&gt; method는 AOPlogger 클래스가 호출되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 놓친게 있나요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 양상은 콩을 &lt;em papago-id=&quot;6-1&quot;&gt;둘러싼&lt;/em&gt; 프락시에 적용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;빈에 대한 참조를 얻을 때마다 실제로는 구성에서 참조되는 클래스가 아니라 실제 클래스에 위임하고 AOP와 같은 기능을 추가하는 관련 인터페이스를 구현하는 합성 클래스입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 예에서 &lt;em papago-id=&quot;7-1&quot;&gt;클래스&lt;/em&gt; 인스턴스가 Spring bean으로 다른 인스턴스에 주입되면 프록시로 주입되므로 메서드 호출이 프록시에서 호출됩니다(그리고 요소가 트리거됩니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 것을 달성하고 싶다면, 당신은 분할할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;method1&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;method2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;별도의 콩으로 만들거나 스프링 방향이 아닌 AOP 프레임워크를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#aop-understanding-aop-proxies&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-1&quot;&gt;Spring 문서(&quot;AOP 프록시 이해&quot; 섹션&lt;/a&gt;)에는 이 내용과 몇 가지 해결 방법이 자세히 나와 있습니다(위의 첫 번째 제안 포함).&lt;/font&gt;&lt;/p&gt;&lt;h2 papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2022년 업데이트:&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 개인적으로 &lt;a href=&quot;https://stackoverflow.com/a/56327004/4035262&quot; papago-id=&quot;13-1&quot;&gt;여기&lt;/a&gt;에 설명된 트랜잭션 처리자 클래스를 훨씬 더 깨끗하고 유연하게 사용하는 것을 선호합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;14&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;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자가 주사로 가능합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;주입된 인스턴스를 통해 내부 메서드를 호출할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Component
public class Foo {
    @Resource
    private Foo foo;
    
    public void method1(){
        ..
        foo.method2();
        ..
    }
    public void method2(){
        ..
    }
}
&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;Spring 4.3부터는 @Autowired를 사용할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;4.3에서 @Autowired는 주입에 대한 자체 참조, 즉 현재 주입된 콩에 대한 참조도 고려합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;봄 AOP 프레임워크는 &quot;프록시&quot; 기반이라고 &lt;a href=&quot;https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-understanding-aop-proxies&quot; rel=&quot;noreferrer&quot; papago-id=&quot;18-1&quot;&gt;이해 AOP 프록시&lt;/a&gt;의 문서에서 잘 설명하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring은 예에서 &quot;ABC&quot;와 같이 측면으로 구성된 빈을 구성할 때 실제 빈과 같은 역할을 하는 &quot;프록시&quot; 객체를 생성합니다.&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;font class=&quot;papago-parent&quot;&gt;이 방식에서, 실제 객체(&quot;method1&quot;)의 메소드가 동일한 객체(예: method2)의 다른 메소드를 호출하는 경우, 그러한 호출은 그림에서 프록시 없이 발생하므로, 그 메소드가 어떠한 조언도 구현할 기회가 없습니다.&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;예를 들어, method1()이 호출되면 프록시는 자신이 해야 할 일을 수행할 수 있는 기회를 얻지만 method1()이 method2()을 호출하면 그림에 측면이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 다른 빈에서 method2를 호출하면 프록시는 조언을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 고민을 겪었고 스프링스를 실행하여 극복하였습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ApplicationContextAware&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BeanNameAware&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;pre&gt;&lt;code&gt;class ABC implements ApplicationContextAware,BeanNameAware{

      @Override
      public void setApplicationContext(ApplicationContext ac) throws BeansException {
          applicationContext=ac;
      }

      @Override
      public void setBeanName(String beanName) {
          this.beanName=beanName;
      }
      private ApplicationContext applicationContext;
      private String beanName;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음에 교체했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this.&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;((ABC) applicationContext.getBean(beanName)).&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 클래스의 메소드를 부르면서 말이죠.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 프록시를 통해서만 같은 클래스의 메서드에 대한 호출이 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;method1()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에의 변경.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; public void method1(){
    .........
    ((ABC) applicationContext.getBean(beanName)).method2();
    ...........
  }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;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;@Autowired&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그건 효과가 있다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내부 방법을 다음과 같이 부르는 대신&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this.method()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Autowired
Foo foo;
&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;foo.method2();
&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;pre&gt;&lt;code&gt;@Component
public class Foo {

    @Lazy
    @Autowired
    private Foo foo;
    
    public void method1(){
        ..
        foo.method2();
        ..
    }
    public void method2(){
        ..
    }
}
&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;&lt;a href=&quot;http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/aop.html#aop-understanding-aop-proxies&quot; papago-id=&quot;35-1&quot; rel=&quot;nofollow&quot;&gt;설명은 스프링&lt;/a&gt; 참조 &lt;a href=&quot;http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/aop.html#aop-understanding-aop-proxies&quot; papago-id=&quot;35-1&quot; rel=&quot;nofollow&quot;&gt;설명서&lt;/a&gt;에 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#aop-understanding-aop-proxies&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;36-1&quot;&gt;Spring 문서&lt;/a&gt; 5.6.1장 AOP 프록시의 이해에 표시된 바와 같이, 다음과 같은 다른 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class SimplePojo implements Pojo {

    public void foo() {
        // this works, but... gah!
        ((Pojo) AopContext.currentProxy()).bar();
    }

    public void bar() {
        // some logic...
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비록 작가가 이런 식으로 추천하지는 않지만요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이유:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 당신의 코드를 Spring AOP에 완전히 결합시키고, 그것은 클래스 자체가 AOP 상황에서 사용되고 있다는 사실을 인식하게 하고, 그것은 AOP에 직면하여 날아갑니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 프록시를 생성할 때 추가 구성이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@EnableAspect로 통화 주석 달기&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JAutoProxy(Proxy = true로 노출) 및 (Class) AopContext.currentProxy()를 사용하여 인스턴스 메서드를 호출합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법 ();&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 커플링으로 증가하므로 엄격하게 권장되지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아무도 이에 대해 언급하지 않아 놀랍지만 Spring에서 제공하는 ControlFlowPointcut을 사용할 수 있을 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ControlFlowPointcut은 스택 트레이스를 보고 스택 트레이스에서 특정 메서드를 찾은 경우에만 포인트 컷을 일치시킵니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 포인트컷은 메소드가 특정 컨텍스트에서 호출될 때만 일치합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우에는 다음과 같은 포인트 컷을 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ControlFlowPointcut cf = new ControlFlowPointcut(MyClass.class, &quot;method1&quot;);
&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;ProxyFactory를 사용하여 MyClass 인스턴스에 프록시를 만들고 method1()을 호출합니다.&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;위의 경우 method1()에서 호출되므로 method2()만 권장됩니다.&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;다른 방법은 메서드 2()를 다른 클래스 파일로 모드화하는 것이며 해당 클래스에는 @Component로 주석이 달립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 필요할 때 @Autowired를 사용하여 주입합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 식으로 AOP가 그걸 가로챌 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;You were doing this...


Class demo{
   method1(){
    -------
    -------
    method2();
    -------
    -------
   }

   method2(){
    ------
    -----
   }
}

Now if possible do this :

@Component
class NewClass{
    method2(){
    ------
    -----
   }
}


Class demo{

 @AutoWired
 NewClass newClass;

   method1(){
    -------
    -------
    newClass.method2();
    -------
    -------
   }

}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 질문을 참조할 수 있습니다: https://stackoverflow.com/a/30611671/7278126&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 해결책이지만 요령을 부릴 것입니다. 여기서 핵심은 이것 대신에 같은 빈(프록시)을 사용하여 'method2'를 호출하는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 연구 끝에 다음과 같이 매력적으로 작용하는 것을 발견했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 ASPECTJ 위빙에는 언제나 더 좋은 방법이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시간의 본질은 자기 기준을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Autowired
private ApplicationContext applicationContext;
private &amp;lt;&amp;lt;BEAN&amp;gt;&amp;gt; self;
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&amp;lt;&amp;gt;은 AOP와 함께 기록하거나 다른 용도로 사용해야 하는 동일한 클래스임을 유의하시기 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;@PostConstruct
private void init() {
    self = applicationContext.getBean(MyBean.class);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 변경을 통해 통화 내용을 이동하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;strong papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;this.methodName(args) -&amp;gt;&lt;/font&gt;&lt;/strong&gt; &lt;strong papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;self.methodName(args)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 애플리케이션에서 성능 로깅만을 위한 솔루션을 사용하고자 하는 모든 사람들에게 도움이 되기를 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Autowired // to make this bean refers to proxy class 

ABC self;

public void method1(){

   .........

   self.method2();

  ...........

}


public void method2(){

  ...............

  ...............  

}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AOP는 호출자가 호출자와 같은 클래스일 경우 함수를 감쌀 수 없도록 합니다.&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;pre&gt;&lt;code&gt;public class Test {


  @Autowire 
  private Test test;


  public void method1(){
     .........
     test.method2();
    ...........
  }


  public void method2(){
    ...............
    ...............  
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 자기 주사를 한 것을 알아차리다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  @Autowire 
  private Test test;
&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;방법 2는 제가 전화를 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;test.method2();&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;this.method2()&lt;/code&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;이 클래스를 Spring 어플리케이션 외부에서 사용할 수 있도록 이 방법으로 자가 주입을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Component
public class ABC {

    @Resource
    private ABC self = this;

    public void method1() {
        self.method2();
    }

    public void method2() {

    }

}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/13564627/spring-aop-not-working-for-method-call-inside-another-method&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>spring</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1572</guid>
      <comments>https://factcode.tistory.com/1572#entry1572comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:53:23 +0900</pubDate>
    </item>
    <item>
      <title>스위프트의 사전에서 키의 값을 얻으려면 어떻게 해야 합니까?</title>
      <link>https://factcode.tistory.com/1571</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트의 사전에서 키의 값을 얻으려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트 사전을 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 제 열쇠 값을 받고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;키 메소드의 개체가 제게 맞지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사전 키 값은 어떻게 구합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 내 사전입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var companies = [&quot;AAPL&quot; : &quot;Apple Inc&quot;, &quot;GOOG&quot; : &quot;Google Inc&quot;, &quot;AMZN&quot; : &quot;Amazon.com, Inc&quot;, &quot;FB&quot; : &quot;Facebook Inc&quot;]

for name in companies.keys { 
    print(companies.objectForKey(&quot;AAPL&quot;))
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사전 키의 값에 액세스하려면 첨자를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 옵션이 반환됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let apple: String? = companies[&quot;AAPL&quot;]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if let apple = companies[&quot;AAPL&quot;] {
    // ...
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 키와 값에 걸쳐 열거할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var companies = [&quot;AAPL&quot; : &quot;Apple Inc&quot;, &quot;GOOG&quot; : &quot;Google Inc&quot;, &quot;AMZN&quot; : &quot;Amazon.com, Inc&quot;, &quot;FB&quot; : &quot;Facebook Inc&quot;]

for (key, value) in companies {
    print(&quot;\(key) -&amp;gt; \(value)&quot;)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 모든 값을 열거합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for value in Array(companies.values) {
    print(&quot;\(value)&quot;)
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Apple Documents에서&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첨자 구문을 사용하여 특정 키에 대한 사전에서 값을 검색할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;값이 없는 키를 요청할 수 있기 때문에 사전의 첨자는 사전의 값 유형 중 선택적 값을 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사전에 요청한 키에 대한 값이 포함된 경우 첨자는 해당 키에 대한 기존 값이 포함된 선택적 값을 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 첨자가 0을 반환합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://developer.apple.com/documentation/swift/dictionary&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://developer.apple.com/documentation/swift/dictionary&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;if let airportName = airports[&quot;DUB&quot;] {
    print(&quot;The name of the airport is \(airportName).&quot;)
} else {
    print(&quot;That airport is not in the airports dictionary.&quot;)
}
// prints &quot;The name of the airport is Dublin Airport.&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값을 찾으려면 아래를 사용하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if let a = companies[&quot;AAPL&quot;] {
   // a is the value
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사전을 횡단하는 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for (key, value) in companies {
    print(key,&quot;---&quot;, value)
}
&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;extension Dictionary where Value: Equatable {
    func findKey(forValue val: Value) -&amp;gt; Key? {
        return first(where: { $1 == val })?.key
    }
}
&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;companies.findKey(val : &quot;Apple Inc&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;var dic=[&quot;Saad&quot;:5000,&quot;Manoj&quot;:2000,&quot;Aditya&quot;:5000,&quot;chintan&quot;:1000]

print(&quot;salary of Saad id \(dic[&quot;Saad&quot;]!)&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사전의 멤버들에게 접근하기 위해서 당신은 반드시 !를 포함해야 합니다. (느낌)&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;!=&amp;gt; 힘에 대한 문서 압축 풀기 세부사항을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/25741114/how-can-i-get-keys-value-from-dictionary-in-swift&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Swift</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1571</guid>
      <comments>https://factcode.tistory.com/1571#entry1571comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:53:12 +0900</pubDate>
    </item>
    <item>
      <title>jQuery - 포스트 데이터로 리디렉션</title>
      <link>https://factcode.tistory.com/1570</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery - 포스트 데이터로 리디렉션&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포스트 데이터로 리디렉션하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/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;$_POST&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 어떻게 해요?&lt;/font&gt;&lt;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;여기 jQuery만 사용하면 어디서나 적용할 수 있는 간단한 작은 기능이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var redirect = 'http://www.website.com/page?id=23231';
$.redirectPost(redirect, {x: 'example', y: 'abc'});

// jquery extend function
$.extend(
{
    redirectPost: function(location, args)
    {
        var form = '';
        $.each( args, function( key, value ) {
            form += '&amp;lt;input type=&quot;hidden&quot; name=&quot;'+key+'&quot; value=&quot;'+value+'&quot;&amp;gt;';
        });
        $('&amp;lt;form action=&quot;'+location+'&quot; method=&quot;POST&quot;&amp;gt;'+form+'&amp;lt;/form&amp;gt;').appendTo('body').submit();
    }
});
&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;// jquery extend function
$.extend(
{
    redirectPost: function(location, args)
    {
        var form = $('&amp;lt;form&amp;gt;&amp;lt;/form&amp;gt;');
        form.attr(&quot;method&quot;, &quot;post&quot;);
        form.attr(&quot;action&quot;, location);

        $.each( args, function( key, value ) {
            var field = $('&amp;lt;input&amp;gt;&amp;lt;/input&amp;gt;');

            field.attr(&quot;type&quot;, &quot;hidden&quot;);
            field.attr(&quot;name&quot;, key);
            field.attr(&quot;value&quot;, value);

            form.append(field);
        });
        $(form).appendTo('body').submit();
    }
});
&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;JQuery 플러그인을 사용하면 https://github.com/mgalante/jquery.redirect/blob/master/jquery.redirect.js 과 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JQuery와 jquery.redirect.min.js 플러그인을 포함한 후에는 다음과 같은 작업을 간단히 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$().redirect('demo.php', {'arg1': 'value1', 'arg2': 'value2'});
&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;새로운 JQuery 버전에서는 대신 다음 코드를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.redirect('demo.php', {'arg1': 'value1', 'arg2': 'value2'});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 숨은 입력이 있는 양식을 만들어서 jQuery를 이용해서 제출하는 것은 어떨까요?&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;$(function() {
       $('&amp;lt;form action=&quot;url.php&quot; method=&quot;post&quot;&amp;gt;&amp;lt;input type=&quot;hidden&quot; name=&quot;name&quot; value=&quot;value1&quot;&amp;gt;&amp;lt;/input&amp;gt;&amp;lt;/form&amp;gt;').appendTo('body').submit().remove();
    });

    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.submit() 함수는 자동으로 URL로 제출합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.remove () 함수는 제출 후 폼을 죽입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서/창이 준비되기 전에 jQuery에 &quot;extend&quot;를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.extend(
{
    redirectPost: function(location, args)
    {
        var form = '';
        $.each( args, function( key, value ) {

            form += '&amp;lt;input type=&quot;hidden&quot; name=&quot;'+value.name+'&quot; value=&quot;'+value.value+'&quot;&amp;gt;';
            form += '&amp;lt;input type=&quot;hidden&quot; name=&quot;'+key+'&quot; value=&quot;'+value.value+'&quot;&amp;gt;';
        });
        $('&amp;lt;form action=&quot;'+location+'&quot; method=&quot;POST&quot;&amp;gt;'+form+'&amp;lt;/form&amp;gt;').submit();
    }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.redirectPost(&quot;someurl.com&quot;, $(&quot;#SomeForm&quot;).serializeArray());
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 이 메서드는 파일을 게시할 수 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이것이 가장 좋은 방법이라고 생각해요!&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;html&amp;gt;
&amp;lt;body onload=&quot;document.getElementById('redirectForm').submit()&quot;&amp;gt;
&amp;lt;form id='redirectForm' method='POST' action='/done.html'&amp;gt;
&amp;lt;input type='hidden' name='status' value='complete'/&amp;gt;
&amp;lt;input type='hidden' name='id' value='0u812'/&amp;gt;
&amp;lt;input type='submit' value='Please Click Here To Continue'/&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 거의 즉각적이고 사용자는 아무것도 볼 수 없을 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 해명이 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버에서 다른 곳으로 리디렉션할 POST를 처리하고 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 규제자 GET 요청을 POST를 예상하는 다른 페이지로 리디렉션하시겠습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어느 경우든 할 수 있는 일은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var f = $('&amp;lt;form&amp;gt;');
$('&amp;lt;input&amp;gt;').attr('name', '...').attr('value', '...');
//after all fields are added
f.submit();
&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;팝업 차단을 처리하려면 &quot;자동으로 리디렉션되지 않으면 여기를 클릭하십시오&quot;라는 링크를 만드는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 답변과 비슷하지만 다르게 적습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.extend(
{
    redirectPost: function (location, args) {
        var form = $('&amp;lt;form&amp;gt;', { action: location, method: 'post' });
        $.each(args,
            function (key, value) {
                $(form).append(
                    $('&amp;lt;input&amp;gt;', { type: 'hidden', name: key, value: value })
                );
            });
        $(form).appendTo('body').submit();
    }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제출하지 말고 버튼만 사용하는 것은 어떨까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;버튼을 클릭하면 브라우저가 리디렉션할 수 있는 적절한 URL을 구성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#button&quot;).click(function() {
   var url = 'site.com/process.php?';
   $('form input').each(function() {
       url += 'key=' + $(this).val() + &quot;&amp;amp;&quot;;
   });
   // handle removal of last &amp;amp;.

   window.location.replace(url);
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터와 함께 제출할 jquery.reedirect.min.js 플러그인을 이 json 솔루션과 함께 헤드 섹션에 포함시켰습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;     
    $(function () {
     $('form').on('submit', function(e) {
       $.ajax({
        type: 'post',
        url: 'your_POST_URL',
        data: $('form').serialize(),
        success: function () {
         // now redirect
         $().redirect('your_POST_URL', {
          'input1': $(&quot;value1&quot;).val(), 
          'input2': $(&quot;value2&quot;).val(),
      'input3': $(&quot;value3&quot;).val()
       });
      }
   });
   e.preventDefault();
 });
 });
 &amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음에 제가 추가한 양식 직후에&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; $(function(){
     $( '#your_form_Id' ).submit();
    });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;숨겨진 메소드 구성 및 작성 =&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;window.location을 전혀 사용하지 않고 POST action=&quot;http://example.com/vote &quot; 양식을 작성하여 제출합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#inset_form').html(
   '&amp;lt;form action=&quot;url&quot; name=&quot;form&quot; method=&quot;post&quot; style=&quot;display:none;&quot;&amp;gt;
    &amp;lt;input type=&quot;text&quot; name=&quot;name&quot; value=&quot;' + value + '&quot; /&amp;gt;&amp;lt;/form&amp;gt;');
document.forms['form'].submit();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 &lt;a href=&quot;https://stackoverflow.com/a/23347795/11128947&quot; papago-id=&quot;28-1&quot;&gt;용액&lt;/a&gt;을 표적으로 &quot;extended&quot;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 이유에서인지 게시물을 _blank 또는 다른 프레임으로 리디렉션할 수 있는 가능성이 필요했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.extend(
   {
       redirectPost: function(location, args, target = &quot;_self&quot;)
       {
           var form = $('&amp;lt;form&amp;gt;&amp;lt;/form&amp;gt;');
           form.attr(&quot;method&quot;, &quot;post&quot;);
           form.attr(&quot;action&quot;, location);
           form.attr(&quot;target&quot;, target);
           $.each( args, function( key, value ) {
               var field = $('&amp;lt;input&amp;gt;&amp;lt;/input&amp;gt;');
               field.attr(&quot;type&quot;, &quot;hidden&quot;);
               field.attr(&quot;name&quot;, key);
               field.attr(&quot;value&quot;, value);
               form.append(field);
           });
           $(form).appendTo('body').submit();
       }
   });
&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;jquery redirect: https://github.com/mgalante/jquery.redirect 라는 jquery 플러그인을 사용할 수 있습니다.&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;$.redirect(&quot;/your_url.php&quot;, {user: &quot;johnDoe&quot;, password: &quot;12345&quot;}, &quot;POST&quot;, &quot;_blank&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/19036684/jquery-redirect-with-post-data&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>jQuery</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1570</guid>
      <comments>https://factcode.tistory.com/1570#entry1570comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:53:05 +0900</pubDate>
    </item>
    <item>
      <title>글로벌 이벤트 설정방법_ scheduler=MySQL이 다시 시작되어도 ON?</title>
      <link>https://factcode.tistory.com/1569</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;글로벌 이벤트 설정방법_ scheduler=&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL이 다시 시작되어도 ON?&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;event_scheduler&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;ON&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL이 재시작되더라도 이를 달성하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SET GLOBAL event_scheduler = ON;
&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;event_scheduler=ON
&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;my.ini&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;my.cnf&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 클릭한 다음 서버를 재시작하여 설정을 적용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1회 세트&lt;/font&gt;&lt;/font&gt;&lt;code&gt;event_scheduler&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;영원히 남을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ON&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버 재시작 여부에 관계없이.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;11-1&quot;&gt;/etc/mysql/my.ini&lt;/strong&gt; 파일을 열고 다음을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;event_scheduler = on
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;12-1&quot;&gt;[mysqld]&lt;/strong&gt; 부분 아래에&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(mysql 5.5.35-0+wheezy1 - Debian에 따라 테스트됨)&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단방향 - 시스템 변수를 설정하고 mysql을 재시작할 가능성이 있는 경우 해당 변수를 사용할 수 있습니다.&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://dev.mysql.com/doc/refman/5.0/en/using-system-variables.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;15-1&quot;&gt;다음은 mysql의 system 변수&lt;/a&gt;를 사용하는 링크입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows Server 2012 시스템에서는 이러한 솔루션이나 다른 솔루션이 전혀 작동하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 시작을 위한 레지스트리 항목을 확인했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;&quot;C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe&quot; --defaults-file=&quot;C:\ProgramData\MySQL\MySQL Server 5.6\my.ini&quot; MySQL56&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속임수는, 악은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ProgramData&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.그런거 아냐.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Program Files&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. Program Files(프로그램 파일)을 검색하면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;my-default.ini&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일, 당신을 망치기 위해 거기에 놔두세요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법은 레지스트리에서 경로를 찾는 것인데, 이것은 저를 위한 것이었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HKEY_LOCAL_MACHINE\SYSTEM\Services\MySQL56&lt;/code&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 끝에 다음 줄을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;event_scheduler=ON
&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 papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql bash에 로그인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql -u &amp;lt;user&amp;gt; -p
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령을 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SHOW PROCESSLIST;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 목록에 이벤트 스케줄러 데몬이 표시됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/20112395/how-to-set-global-event-scheduler-on-even-if-mysql-is-restarted&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MySQL</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1569</guid>
      <comments>https://factcode.tistory.com/1569#entry1569comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:52:56 +0900</pubDate>
    </item>
    <item>
      <title>첫 번째 git 커밋 메시지를 어떻게 다시 쓸 수 있습니까?</title>
      <link>https://factcode.tistory.com/1568</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 git 커밋 메시지를 어떻게 다시 쓸 수 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;h2 papago-id=&quot;1&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;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;➜ ~myproject git:(마스터)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git log&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;commit a99cce8240495de29254b5df8745e41815db5a75
Author: My Name &amp;lt;my@mail.com&amp;gt;
Date:   Thu Aug 16 00:59:05 2012 +0200

    .gitignore edits

commit 5bccda674c7ca51e849741290530a0d48efd69e8
Author: My Name &amp;lt;my@mail.com&amp;gt;
Date:   Mon Aug 13 01:36:39 2012 +0200

    Create .gitignore file

commit 6707a66191c84ec6fbf148f8f1c3e8ac83453ae3
Author: My Name &amp;lt;my@mail.com&amp;gt;
Date:   Mon Aug 13 01:13:05 2012 +0200

    Initial commit (with a misleading message)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 나는 나의 첫 번째 &lt;em papago-id=&quot;3-3&quot;&gt;커밋&lt;/em&gt;의 커밋 메시지를 원합니다 (6707a66)&lt;/font&gt;&lt;/h2&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;➜ ~myproject git:(마스터)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git rebase -i 6707&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(…entering vim)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;pick 5bccda6 Create .gitignore file
pick a99cce8 .gitignore edits

# Rebase 6707a66..a99cce8 onto 6707a66
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like &quot;squash&quot;, but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
&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;reword&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;blockquote&gt; 
 &lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;초기 커밋(잘못된 메시지 포함)&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;…적절한 것으로.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당연히 첫 번째 커밋에는 &lt;em papago-id=&quot;4-1&quot;&gt;부모&lt;/em&gt; 커밋이 없기 때문에 위의 시도는 성공하지 못했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(그리고 당신이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rebase&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, &lt;em papago-id=&quot;5-1&quot;&gt;원하는&lt;/em&gt; 커밋에 앞서 다음으로 오래된 커밋을 참조해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;reword&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 맞습니까?)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 제 질문의 요점은, 당신은 다른 방법으로 이것을 성취할 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;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;git rebase -i --root&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;( 가리키다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;root&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 커밋을 지적하는 대신)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 첫 번째 커밋도 포함되고 그냥&lt;/font&gt;&lt;/font&gt;&lt;code&gt;reword&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;--root&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션이 Git에 도입되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;v1.7.12&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(2012).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 전에는 그 전에 사용할 수 있는 유일한 방법이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;filter-branch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--amend&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 일반적으로 더 어려운 일이죠&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: &lt;a href=&quot;https://stackoverflow.com/a/14630424/1075152&quot; papago-id=&quot;24-1&quot;&gt;이와 유사한 질문과 답변&lt;/a&gt;도 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://gist.github.com/1681580&quot; rel=&quot;noreferrer&quot; papago-id=&quot;25-0&quot;&gt;pcreux의 요지&lt;/a&gt;는 첫 번째 커밋을 다시 표기할 수 있는 좋은 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# You can't use rebase -i here since it takes the parent commit as argument.
# You can do the following though:
git checkout FIRST_COMMIT_SHA &amp;amp;&amp;amp; git commit --amend &amp;amp;&amp;amp; git rebase HEAD master
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언제든지 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git filter-branch --msg-filter&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git filter-branch --msg-filter \
  'test $GIT_COMMIT = '$(git rev-list --reverse master |head -n1)' &amp;amp;&amp;amp;
echo &quot;Nice message&quot; || cat' master
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/11987914/how-do-i-reword-the-very-first-git-commit-message&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>git</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1568</guid>
      <comments>https://factcode.tistory.com/1568#entry1568comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:52:49 +0900</pubDate>
    </item>
    <item>
      <title>봄의 jdbc 템플릿인 이유.batchUpdate() 너무 느리다고요?</title>
      <link>https://factcode.tistory.com/1567</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;봄의 jdbc 템플릿인 이유.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;batchUpdate() 너무 느리다고요?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배치 &lt;strong papago-id=&quot;1-1&quot;&gt;삽입&lt;/strong&gt;을 더 빠르게 할 수 있는 방법을 찾고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;2-1&quot;&gt;jdbcTemplate.update(String sql&lt;/strong&gt;)로 여러 배치를 삽입하려고 했는데,&lt;strong papago-id=&quot;2-1&quot;&gt; &lt;/strong&gt;여기서 sql은 StringBuilder에 의해 빌드되었으며 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;INSERT INTO TABLE(x, y, i) VALUES(1,2,3), (1,2,3), ... , (1,2,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;배치 크기는 정확히 1000이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;거의 100개의 배치를 삽입했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;StopWatch를 사용하여 시간을 확인한 결과 삽입 시간:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;min[38ms], avg[50ms], max[190ms] per batch
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기쁘기도 했지만 코드를 더 잘 만들고 싶었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 후 저는 jdbcTemplate를 사용하려고 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;batchUpdate다음과 같은 방식으로 업데이트:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
        @Override
        public void setValues(PreparedStatement ps, int i) throws SQLException {
                       // ...
        }
        @Override
        public int getBatchSize() {
            return 1000;
        }
    });
&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;sql이 생긴 곳.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;INSERT INTO TABLE(x, y, i) VALUES(1,2,3);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 실망했습니다! jdbcTemplate는 1000라인 배치의 모든 삽입을 분리된 방식으로 실행했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql_log를 살펴보니 수천 개의 삽입물이 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;StopWatch를 사용하여 시간을 확인한 결과 삽입 시간:&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;배치당 min[900ms], avg[1100ms], max[2000ms]&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;그럼 누가 왜 jdbcTemplate가 이 방법으로 분리 삽입을 하는지 설명해 줄 수 있나요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메서드의 이름이 &lt;strong papago-id=&quot;9-1&quot;&gt;batchUpdate&lt;/strong&gt;인 이유는 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 제가 이 방법을 잘못 사용하고 있는 것이 아닐까요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JDBC 연결 URL에 있는 이러한 매개 변수들은 일괄 처리된 문장의 속도에 큰 차이를 만들 수 있습니다. 제 경험으로는, 이 매개 변수들은 일의 속도를 빠르게 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&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;?ServerPrepStmts=false를 사용하여 배치된 문 다시 쓰기=true&lt;/font&gt;&lt;/p&gt; 
 &lt;/blockquote&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/questions/2993251/jdbc-batch-insert-performance&quot; papago-id=&quot;12-1&quot;&gt;JDBC 배치 삽입 성능&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;통화에서 argTypes 배열을 설정하는 것이 &lt;strong papago-id=&quot;13-1&quot;&gt;크게 개선&lt;/strong&gt;되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring 4.1.4 및 Oracle 12c의 경우 35개의 필드로 5000개의 행을 삽입하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jdbcTemplate.batchUpdate(insert, parameters); // Take 7 seconds

jdbcTemplate.batchUpdate(insert, parameters, argTypes); // Take 0.08 seconds!!!
&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;argTypers 매개변수는 다음과 같은 방식으로 각 필드를 설정하는 int 배열입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int[] argTypes = new int[35];
argTypes[0] = Types.VARCHAR;
argTypes[1] = Types.VARCHAR;
argTypes[2] = Types.VARCHAR;
argTypes[3] = Types.DECIMAL;
argTypes[4] = Types.TIMESTAMP;
.....
&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;org\springframework\jdbc\core\JdbcTemplate를 디버깅했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;java를 통해 대부분의 시간이 각 분야의 성격을 알기 위해 소비되었고, 이것은 각 기록마다 만들어졌다는 것을 발견했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring JDBC 템플릿에 대해서도 동일한 문제에 직면했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마도 Spring Batch에서는 모든 삽입자나 청크에 대해 문장이 실행되고 커밋되어 작업 속도가 느려졌을 것입니다.&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;저는 jdbcTemplate를 교체하였습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;원래 JDBC 배치 삽입 코드가 있는 batchUpdate() 코드를 사용하여 &lt;strong papago-id=&quot;19-1&quot;&gt;Major 성능 향상&lt;/strong&gt;을 찾았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DataSource ds = jdbcTemplate.getDataSource();
Connection connection = ds.getConnection();
connection.setAutoCommit(false);
String sql = &quot;insert into employee (name, city, phone) values (?, ?, ?)&quot;;
PreparedStatement ps = connection.prepareStatement(sql);
final int batchSize = 1000;
int count = 0;

for (Employee employee: employees) {

    ps.setString(1, employee.getName());
    ps.setString(2, employee.getCity());
    ps.setString(3, employee.getPhone());
    ps.addBatch();

    ++count;

    if(count % batchSize == 0 || count == employees.size()) {
        ps.executeBatch();
        ps.clearBatch(); 
    }
}

connection.commit();
ps.close();
&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;https://stackoverflow.com/questions/2993251/jdbc-batch-insert-performance&quot; papago-id=&quot;20-1&quot;&gt;링크&lt;/a&gt;도 JDBC &lt;a href=&quot;https://stackoverflow.com/questions/2993251/jdbc-batch-insert-performance&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;@Transactional on 메서드를 추가합니다.&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;여러 데이터 소스 @Transactional(&quot;dsTxManager&quot;)을 사용하는 경우 올바른 TX 관리자를 선언해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 60000개의 레코드를 삽입하는 경우가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;15초 정도 걸립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 조정은 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Transactional(&quot;myDataSourceTxManager&quot;)
public void save(...) {
...
    jdbcTemplate.batchUpdate(query, new BatchPreparedStatementSetter() {

            @Override
            public void setValues(PreparedStatement ps, int i) throws SQLException {
                ...

            }

            @Override
            public int getBatchSize() {
                if(data == null){
                    return 0;
                }
                return data.size();
            }
        });
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sql 삽입을 다음으로 변경합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;INSERT INTO TABLE(x, y, i) VALUES(1,2,3)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 생성합니다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 프레임워크는 사용자에게 루프를 만들어 줍니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public void insertBatch(final List&amp;lt;Customer&amp;gt; customers){

  String sql = &quot;INSERT INTO CUSTOMER &quot; +
    &quot;(CUST_ID, NAME, AGE) VALUES (?, ?, ?)&quot;;

  getJdbcTemplate().batchUpdate(sql, new BatchPreparedStatementSetter() {

    @Override
    public void setValues(PreparedStatement ps, int i) throws SQLException {
        Customer customer = customers.get(i);
        ps.setLong(1, customer.getCustId());
        ps.setString(2, customer.getName());
        ps.setInt(3, customer.getAge() );
    }

    @Override
    public int getBatchSize() {
        return customers.size();
    }
  });
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 거 있으면.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;봄은 다음과 같은 역할을 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for(int i = 0; i &amp;lt; getBatchSize(); i++){
   execute the prepared statement with the parameters for the current iteration
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프레임워크는 먼저 쿼리에서 준비된 상태를 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sql&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;variable) 그런 다음 setValues 메서드를 호출하고 문을 실행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 당신이 지정한 만큼 반복됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getBatchSize()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 삽입문을 작성하는 올바른 방법은 하나의 값 절만 사용하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://docs.spring.io/spring/docs/3.0.x/reference/jdbc.html 을 보실 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 Spring JDBC batch template 로도 조금 안 좋은 시간을 보냈습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우엔 순수한 JDBC를 사용하는 건 미친 짓일 테니까요&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NamedParameterJdbcTemplate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 제 에서 꼭 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이것은 제 프로젝트에서 꼭 필요한 것이었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 데이터베이스에 수천 개의 행을 삽입하는 것은 매우 느렸습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&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;무슨 일이 일어나고 있는지 확인하기 위해 배치 업데이트 중에 VisualVM을 사용하여 샘플을 채취한 후 다음과 voila:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/iDO0t.png&quot; alt=&quot;visualvm showing where it was slow&quot;&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 과정에서 속도가 느려진 것은 파라미터를 설정하는 동안 Spring JDBC가 데이터베이스에 각 &lt;em papago-id=&quot;32-1&quot;&gt;파라미터&lt;/em&gt;의 메타데이터를 쿼리하고 있다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 매번 라인별로 &lt;em papago-id=&quot;32-3&quot;&gt;파라미터별&lt;/em&gt; 데이터베이스를 조회하는 것처럼 보였습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 방금 Spring에게 매개 변수 유형을 무시하라고 가르쳤습니다(&lt;a href=&quot;https://docs.spring.io/spring/docs/current/spring-framework-reference/data-access.html#jdbc-batch-list&quot; rel=&quot;noreferrer&quot; papago-id=&quot;32-5&quot;&gt;개체 목록 배치 작동에 대한 Spring 설명서&lt;/a&gt;에 나와 있듯이).&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-java prettyprint-override&quot;&gt;&lt;code&gt;    @Bean(name = &quot;named-jdbc-tenant&quot;)
    public synchronized NamedParameterJdbcTemplate getNamedJdbcTemplate(@Autowired TenantRoutingDataSource tenantDataSource) {
        System.setProperty(&quot;spring.jdbc.getParameterType.ignore&quot;, &quot;true&quot;);
        return new NamedParameterJdbcTemplate(tenantDataSource);
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&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;참고: JDBC Template 개체를 만들기 &lt;em papago-id=&quot;33-1&quot;&gt;전&lt;/em&gt;에 시스템 속성을 설정해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 셋팅을 하는 것이 가능할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;application.properties&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 하지만 이 일은 해결되었고 난 이 일 이후로 다시는 이 일에 손을 대지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 당신에게 효과가 있을지 모르겠지만, 제가 결국 사용하게 된 스프링 프리 방법이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 시도한 다양한 스프링 방식보다 훨씬 빨랐습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;심지어 다른 답변이 설명하는 JDBC 템플릿 일괄 업데이트 방법을 사용해 보았지만, 그것도 제가 원하는 것보다 느렸습니다.&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;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 접근 방식은 java.sql 패키지와 PreparedStatement의 배치 인터페이스를 사용하는 straight JDBC입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 24M 레코드를 MySQL DB로 가져올 수 있는 가장 빠른 방법이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 &quot;기록&quot; 개체의 컬렉션을 구축한 다음 모든 레코드를 일괄 삽입하는 방식으로 아래 코드를 호출했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컬렉션을 구축한 루프는 배치 크기를 관리하는 역할을 담당했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL DB에 24M 레코드를 삽입하려고 했는데 Spring batch를 사용하여 초당 200개의 레코드를 전송하고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 방식으로 바꾸자 초당 ~2500개의 레코드가 올라갔습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 제 24M 레코드 로드는 이론적으로 1.5일에서 약 2.5시간으로 증가했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 연결 만들기...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Connection conn = null;
try{
    Class.forName(&quot;com.mysql.jdbc.Driver&quot;);
    conn = DriverManager.getConnection(connectionUrl, username, password);
}catch(SQLException e){}catch(ClassNotFoundException e){}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 준비된 문을 만들어 삽입할 값의 배치와 함께 로드한 다음 단일 배치 삽입...으로 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;PreparedStatement ps = null;
try{
    conn.setAutoCommit(false);
    ps = conn.prepareStatement(sql); // INSERT INTO TABLE(x, y, i) VALUES(1,2,3)
    for(MyRecord record : records){
        try{
            ps.setString(1, record.getX());
            ps.setString(2, record.getY());
            ps.setString(3, record.getI());

            ps.addBatch();
        } catch (Exception e){
            ps.clearParameters();
            logger.warn(&quot;Skipping record...&quot;, e);
        }
    }

    ps.executeBatch();
    conn.commit();
} catch (SQLException e){
} finally {
    if(null != ps){
        try {ps.close();} catch (SQLException e){}
    }
}
&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 papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;42-0&quot;&gt;편집:&lt;/strong&gt; 원래 질문은 삽입을 푸바 값(?, ??), (?, ??),...(?, ??) 메서드와 스프링 배치를 비교하는 것이었으므로 이에 대한 보다 직접적인 답변이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;LOAD DATA INFILE&quot; 접근 방식과 같은 것을 사용하지 않고 MySQL로 대량 데이터 로드를 수행할 수 있는 가장 빠른 방법은 원래의 방법인 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MysQL 문서(http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html) 에서 인용한 내용:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 클라이언트에서 여러 행을 동시에 삽입하는 경우 여러 개의 값 목록이 있는 INSERT 문을 사용하여 한 번에 여러 행을 삽입합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 별도의 단일 행 INSERT 문을 사용하는 것보다 상당히 빠릅니다(경우에 따라서는 몇 배나 빠릅니다).&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring JDBC Template batchUpdate 메서드를 수정하여 'setValues' 호출당 지정된 값이 여러 개인 삽입을 수행할 수 있지만 삽입되는 항목 집합에서 반복할 때 인덱스 값을 수동으로 추적해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;삽입되는 총 항목 수가 준비된 보고서에 있는 VALUES 목록의 수보다 많지 않을 경우 마지막에 심술궂은 엣지 케이스에 직면하게 됩니다.&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;개요를 설명하는 접근 방식을 사용하면 동일한 작업을 수행할 수 있습니다(여러 개의 VALUES 목록이 있는 준비된 문을 사용). 마지막에 해당 에지 케이스에 도달하면 정확한 수의 VALUES 목록으로 마지막 문을 만들고 실행할 수 있기 때문에 처리하기가 조금 더 쉽습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;좀 까다롭긴 하지만 대부분의 최적화된 것들은.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Rakesh가 제시한 해결책이 저에게는 통했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;성능이 크게 향상되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전 시간은 8분이었고, 이 솔루션은 2분도 걸리지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DataSource ds = jdbcTemplate.getDataSource();
Connection connection = ds.getConnection();
connection.setAutoCommit(false);
String sql = &quot;insert into employee (name, city, phone) values (?, ?, ?)&quot;;
PreparedStatement ps = connection.prepareStatement(sql);
final int batchSize = 1000;
int count = 0;

for (Employee employee: employees) {

    ps.setString(1, employee.getName());
    ps.setString(2, employee.getCity());
    ps.setString(3, employee.getPhone());
    ps.addBatch();

    ++count;

    if(count % batchSize == 0 || count == employees.size()) {
        ps.executeBatch();
        ps.clearBatch(); 
    }
}

connection.commit();
ps.close();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 심각한 성능 문제가 발생했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JdbcBatchItemWriter.write()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring Batch에서 &lt;a href=&quot;https://docs.spring.io/spring-batch/docs/current/api/org/springframework/batch/item/database/JdbcBatchItemWriter.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;10-1&quot;&gt;제공&lt;/a&gt;하는 (링크) 작성 로직 딜러를 찾아봅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JdbcTemplate.batchUpdate()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결국.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Java 시스템 속성 추가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;spring.jdbc.getParameterType.ignore=true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성능 문제를 완전히 해결했습니다(초당 200개의 레코드에서 ~ 5000개로).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;패치가 Postgresql 및 MsSql에서 모두 작동하는 것으로 테스트되었습니다(사투리에 특정되지 않을 수 있음).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;... 그리고 아이러니하게도 스프링은 이러한 행동을 &quot;노트&quot; &lt;a href=&quot;https://spring.getdocs.org/en-US/spring-framework-docs/docs/spring-data-tier/jdbc/jdbc-advanced-jdbc.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;53-1&quot;&gt;섹션&lt;/a&gt; 링크로 기록했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 시나리오에서는 기본 PreparedStatement에서 값을 자동으로 설정하는 경우 각 값에 해당하는 JDBC 유형을 주어진 Java 유형에서 도출해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 잘 작동하지만 문제가 발생할 가능성이 있습니다(예: 맵에 포함된 null 값).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 Spring은 ParameterMetaData.getParameter를 호출합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JDBC 드라이버의 경우 비용이 많이 들 수 있는 경우를 입력합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle 12c(SPR-16139)에 보고된 것과 같이 성능 문제가 발생할 경우 최신 드라이버 버전을 사용하고 spring.jdbc.getParameterType.ignore 속성을 true(JVM 시스템 속성 또는 클래스 경로 루트의 spring.properties 파일로)로 설정하는 것을 고려해야 합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 'BatchPreparedStatementSetter'(앞에서 보여준 것처럼)를 통해, 'List&amp;lt;Object[]&amp;gt;' 기반 호출에 제공되는 명시적 유형 배열을 통해, 사용자 지정 'MapSqlParameterSource' 인스턴스에서 'registerSqlType' 호출을 통해, 해당 JDBC 유형을 명시적으로 지정하는 것을 고려할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 'BeanPropertySqlParameterSource'를 통해 Java 선언 속성 유형에서 SQL 유형을 도출하여 null 값인 경우에도 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/20360574/why-springs-jdbctemplate-batchupdate-so-slow&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MySQL</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1567</guid>
      <comments>https://factcode.tistory.com/1567#entry1567comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:52:42 +0900</pubDate>
    </item>
    <item>
      <title>TLS가 없는 TLS 지원 데몬에 연결하려고 합니까?</title>
      <link>https://factcode.tistory.com/1566</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TLS가 없는 TLS 지원 데몬에 연결하려고 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.docker.com/&quot; rel=&quot;noreferrer&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ sudo docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
FATA[0000] Get http:///var/run/docker.sock/v1.16/version:
    dial unix /var/run/docker.sock: no such file or directory.
    Are you trying to connect to a TLS-enabled daemon without TLS?
&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;a href=&quot;https://docs.docker.com/userguide/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-1&quot;&gt;사용자 안내서&lt;/a&gt;를 보고 모든 단계를 정확히 따라갔기 때문에 이런 메시지가 나와서 깜짝 놀랐어요...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이제 어떡하죠?&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;sudo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류를 이해할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 이것은 제가 사용해야 할 수도 있기 때문에 해결책이 아닙니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;길 아래 어딘가에...&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;&lt;strong papago-id=&quot;8-3&quot;&gt;OS X를 사용하는 경우&lt;/strong&gt;에는 사용하지 말아야 합니다.&quot;라는 &lt;a href=&quot;http://docs.docker.com/articles/basics/&quot; papago-id=&quot;8-1&quot; rel=&quot;noreferrer&quot;&gt;다른&lt;/a&gt; 페이지를 찾았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인지,  일반적으로&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot; 그것들이 단지 그 예만을 의미하는 것인지 아니면 일반적으로 의미하는 것인지 모르겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;$(boot2docker shellinit 2&amp;gt; /dev/null)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;boot2docker shellinit&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;삼휘))&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;set -x ...&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;line) 현재 터미널 세션에서 다음과 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령은 boot2 docker 가상 시스템을 찾을 위치를 알고 있습니다.&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;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가하기&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(boot2docker shellinit 2&amp;gt; /dev/null)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 진심으로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;~/.bash_profile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 통해 확인할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령은 단말기를 열 때마다 구성됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;피시쉘을 사용하는 사람의 경우:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;boot2docker shellinit ^ /dev/null | source&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;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;2&amp;gt; /dev/null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(및 물고기 등가물)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;^ /dev/null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 사항입니다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 선택 사항입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@pablo-fernandez 가 제안한 것처럼, 이것은 그것을 숨깁니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Writing ..&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;들.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 sudo가 있는 MacOS와 없는 MacOS에서 동일한 오류가 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 통해 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;boot2docker start
$(boot2docker shellinit)
&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;strong papago-id=&quot;28-0&quot;&gt;추신:&lt;/strong&gt; Alan 덕분입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이&lt;a href=&quot;https://docs.docker.com/installation/mac/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;28-2&quot;&gt; 방법&lt;/a&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;strong papago-id=&quot;29-0&quot;&gt;추신:&lt;/strong&gt; 가끔은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;boot2docker init&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 개의 명령을 실행하기 전에 필요할 수 있습니다(감사합니다 Aaron).&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;저의 경우(리눅스 민트 17) 다양한 일을 했는데, 어떤 것이 꼭 필요한지 잘 모르겠습니다.&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;누락된 Ubuntu 패키지 포함:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ sudo apt-get install apparmor lxc cgroup-lite
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 그룹에 추가되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ sudo usermod -aG docker ${USER}
&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;strong papago-id=&quot;35-0&quot;&gt;시작된 데몬&lt;/strong&gt;(openSUSE는 이것만 있으면 됨)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ sudo docker -d
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;h3 papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사합니다\귀인&lt;/font&gt;&lt;/h3&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/users/706727/usman-ismail&quot; papago-id=&quot;37-1&quot;&gt;우스만 이스마일&lt;/a&gt; 고마워요 아마 마지막 일이었을지도...&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바보같은 질문이지만 도커 데몬을 시작했나요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;– 우스만 이스마일 12월 17일 '14일 15:04&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/MichaelJCole&quot; papago-id=&quot;39-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;github@Michael&lt;/a&gt;에게도 감사드립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Usman님의 댓글을 읽었을 때 데몬을 확인하지 않았기 때문에, 저에게 효과가 있었던 솔루션에 대해 &lt;a href=&quot;https://github.com/MichaelJCole&quot; papago-id=&quot;39-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jcole&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/docker/docker/issues/7494#issuecomment-66885741&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;40-0&quot;&gt;GitHub 주석&lt;/a&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo apt-get install apparmor lxc cgroup-lite
sudo apt-get  install docker.io
# If you installed docker.io first, you'll have to start it manually
sudo docker -d
sudo docker run -i -t ubuntu /bin/bash
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누락된 패키지를 알아채고 기본 Ubuntu 설치 지침을 잊어버리고 다른 방법을 &lt;a href=&quot;https://fredjean.net/running-docker-under-linux-mint-16/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;41-1&quot;&gt;검색&lt;/a&gt;해 준 fredjean.net 게시물에 감사드립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리눅스 민트에는 cgroup-lite와 lxc 패키지가 기본적으로 설치되어 있지 않은 것으로 나타났습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 다 설치하면 기본 이미지에서 bash를 실행한 다음 이미지를 빌드하고 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;open SUSE에 대한 86의 &lt;a href=&quot;https://stackoverflow.com/users/903025/brettof86&quot; papago-id=&quot;43-1&quot;&gt;의견&lt;/a&gt;에 감사드립니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;밑줄 친 문제는 간단합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 권한이 없기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/var/run/docker.sock&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유닉스 도메인 소켓.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 1.6.0에 대한 &lt;em papago-id=&quot;46-5&quot;&gt;도커 명령줄&lt;/em&gt; 참조의 &lt;em papago-id=&quot;46-1&quot;&gt;데몬 소켓 옵션&lt;/em&gt; &lt;a href=&quot;http://docs.docker.com/v1.6/reference/commandline/cli/#daemon-socket-option&quot; rel=&quot;noreferrer&quot; papago-id=&quot;46-3&quot;&gt;장&lt;/a&gt;에서:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 유닉스 도메인 소켓(또는 IPC 소켓)은 다음 위치에서 생성됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/var/run/docker.sock&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, &lt;strong papago-id=&quot;48-1&quot;&gt;루트 허가 또는 도커 그룹 멤버 자격이 필요&lt;/strong&gt;합니다.&lt;/font&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;a href=&quot;http://docs.docker.com/installation/fedora/#fedora-21-and-later-installation&quot; papago-id=&quot;49-1&quot; rel=&quot;noreferrer&quot;&gt;Fedora&lt;/a&gt;의 Docker &lt;a href=&quot;http://docs.docker.com/installation/fedora/#fedora-21-and-later-installation&quot; papago-id=&quot;49-1&quot; rel=&quot;noreferrer&quot;&gt;설치 지침&lt;/a&gt;에 자세히 설명되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자에게 도커를 사용할 수 있는 권한 부여&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 명령줄 도구는 소켓 파일을 통해 도커 데몬 프로세스에 연결합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/var/run/docker.sock&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소유의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;root:root&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 도커 명령에는 sudo를 사용하는 것이 좋으나, 사용자가 이를 피하고 싶다면 관리자가 도커 그룹을 생성하여 자신의 것을 가질 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/var/run/docker.sock&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 사용자를 이 그룹에 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;code&gt;$ sudo groupadd docker&lt;/code&gt;&lt;br&gt; &lt;code&gt;$ sudo chown root:docker /var/run/docker.sock&lt;/code&gt;&lt;br&gt; &lt;code&gt;$ sudo usermod -a -G docker $USERNAME&lt;/code&gt; &lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 변경사항을 적용하려면 로그아웃 후 다시 로그인합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 리눅스 배포판(Ubuntu)의 도커 패키지가 이미 설치되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/var/run/docker.sock&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 단계들 중 처음 두 단계를 불필요하게 만드는 그룹.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; X 의 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;boot2docker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 도커 데몬은 VM 내부에서 실행되므로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DOCKER_HOST&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;환경 변수를 이 VM에 설정해야 도커 클라이언트가 도커 데몬을 찾을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업은 실행으로 이루어집니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(boot2docker shellinit)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포탄 속에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 데몬이 실행 중인지 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;service docker start
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그거로 고쳐줬어요!&lt;/font&gt;&lt;/p&gt;&lt;ol&gt; 
 &lt;li papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커는 스스로를 리눅스 컨테이너를 위한 자급자족 런타임이라고 부릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단히 말하면 서버와 클라이언트의 역할을 모두 수행합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$ docker version&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령 쿼리는 실행 중인 데몬/서비스가 아닌 도커 실행 파일 내부에 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;$ docker images or $ docker ps or $ docker pull centos&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 중인 도커 데몬/서비스에 쿼리를 전송하는 명령입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커는 기본적으로 데몬/서비스에 대한 TLS 연결을 지원합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로그인한 사용자가 사용자 그룹의 일부인 경우에만 해당됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용한 적이 있거나&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 명령 앞에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$ sudo docker images&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, TLS 연결이 필요하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 설명서 페이지 &lt;em papago-id=&quot;73-1&quot;&gt;&lt;a href=&quot;https://docs.docker.com/articles/https/#secure-by-default&quot; papago-id=&quot;73-1-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;도커 데몬 소켓&lt;/a&gt;&lt;/em&gt; &lt;em papago-id=&quot;73-1&quot;&gt;&lt;a href=&quot;https://docs.docker.com/articles/https/#secure-by-default&quot; papago-id=&quot;73-1-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;보호&lt;/a&gt;&lt;/em&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;맨 위로 조금 스크롤하여 찾기&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;warning section&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명료하게 하기 위해서&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 작업을 수행해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$boot2docker init
$boot2docker start
&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;$export DOCKER_HOST=tcp://192.168.59.103:2376
$export DOCKER_CERT_PATH=/Users/{profileName}/.boot2docker/certs/boot2docker-vm
$export DOCKER_TLS_VERIFY=1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일에 대한 권한이 아직 없을 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 여기에 몸을 바친 후에 일어난 일입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그룹사용&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo gpasswd -a user docker
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아직 로그아웃하지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결하려면 다시 로그인하거나&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sg docker &quot;docker &amp;lt;subcommand&amp;gt; ...&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 로그아웃하기 전에.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그룹일 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/etc/group&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 비밀번호를 입력하지 않고 실행할 수 있어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://dingyichen.wordpress.com/2015/02/05/docker-dial-unix-varrundocker-sock-no-such-file-or-directory-are-you-trying-to-connect-to-a-tls-enabled-daemon-without-tls/&quot; papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://dingyichen.wordpress.com/2015/02/05/docker-dial-unix-varrundocker-sock-no-such-file-or-directory-are-you-trying-to-connect-to-a-tls-enabled-daemon-without-tls/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ubuntu에서 &lt;strong papago-id=&quot;87-1&quot;&gt;lxc-docker&lt;/strong&gt;를 설치한 후 사용자를 &lt;strong papago-id=&quot;87-3&quot;&gt;도커&lt;/strong&gt; 사용자 그룹에 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo usermod -a -G docker myusername
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;88&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 소켓 파일 권한 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;srw-rw---- 1 root docker 0 Mar 20 07:43 /var/run/docker.sock
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 의견 중 하나에 제시된 &lt;strong papago-id=&quot;89-0&quot;&gt;&quot;-a&quot;&lt;/strong&gt;가 없는 &lt;strong papago-id=&quot;89-0&quot;&gt;사용자&lt;/strong&gt; 모드를 &lt;strong papago-id=&quot;89-0&quot;&gt;실행하지 마십시오&lt;/strong&gt;. 그렇지 않으면 추가 그룹 설정이 삭제되고 &quot;도커&quot; 그룹만 떠납니다.&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;➜  ~  id pawel
uid=1000(pawel) gid=1000(pawel) groups=1000(pawel),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare),998(docker)
➜  ~  usermod -G docker pawel
➜  ~  id pawel               
uid=1000(pawel) gid=1000(pawel) groups=1000(pawel),998(docker)
&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;strong papago-id=&quot;91-0&quot;&gt;TLDR&lt;/strong&gt;: 도커 설치에 대한 클리닉을 실행할 때 대부분의 사용자가 OS X에 있을 때 이 문제를 해결하기 위해 Python Meetup 그룹을 구성했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;boot2docker init
boot2docker up
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;운영을 맡다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;export&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력이 제공하는 명령을 입력합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker info
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;효과가 있다는 걸 말해줘야 합니다&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;95&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상황(우리를 문제에 이르게 한 것)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;96&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 도커 설치에 대한 클리닉을 이끌었고 대부분의 참석자들은 OS X를 가지고 있었고, 우리는 이 문제에 부딪혔고 저는 여러 기계에서 이 문제를 극복했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리가 수행한 단계는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;97&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 홈브루를 설치했습니다(예, 일부 참석자는 홈브루를 사용하지 않았습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ruby -e &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음에는 가상 박스를 설치할 때 사용했던 캐스크(cask)를 사용한 다음 브루를 사용하여 도커(docker)와 부트2도커(boot2docker)를 설치했습니다(OS X에 모두 필요). &lt;a href=&quot;https://github.com/Homebrew/homebrew/issues/9953&quot; rel=&quot;noreferrer&quot; papago-id=&quot;98-1&quot;&gt;브루에는 sudo를 사용하지 마십시오.&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;brew install caskroom/cask/brew-cask
brew cask install virtualbox
brew install docker
brew install boot2docker
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;99&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;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그때 우리는 여기 질문자가 받은 문제에 부딪쳤습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음이 고쳤습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;알겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;init&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 번뿐인 거래였지만, 당신은 아마도 도망쳐야 할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;up&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커를 시작할 때마다:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;boot2docker init
boot2docker up
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 언제&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;up&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;운영이 되었고, 몇 개의 정보를 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;export&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;64&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령들.&lt;/font&gt; 복사 붙여넣기 하고 실행합니다&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;복사 붙여넣고 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;65&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마침내.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker info&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제대로 설치되어 있다고 말씀드릴 겁니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;108&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;109&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나머지 명령어는 데모를 해야 합니다. (Ubuntu linux에서는 sudo가 필요했습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker run hello-world
docker run -it ubuntu bash
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;110&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 컨테이너의 루트 셸에 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;apt-get install nano
exit
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;111&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 사용자 bash로 돌아가기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker ps -l
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;컨테이너 ID) 약 &quot;Container ID&quot;( ID) 에서 12의 16(0-9  a-f) ).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;456789abcdef&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;68&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그런 다음 변경 사항을 적용하고 이름을 설명적인 이름으로 지정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;descriptivename&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;69&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker commit 456789abcdef descriptivename`
&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;Linux Ubuntu/Mint에서 Docker를 실행하는 데 필요한 모든 것:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo apt-get -y install lxc
sudo gpasswd -a ${USER} docker
newgrp docker
sudo service docker restart
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;116&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 위에서 작동하지 않을 경우 두 개의 종속성을 추가로 설치해야 할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo apt-get -y install apparmor cgroup-lite
sudo service docker restart
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;117&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 해결책을 써봤는데 boot2docker가 작동하지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;118&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;118-0&quot;&gt;내 솔루션:&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mac에서 boot2docker를 제거하고 VirtualBox에 Centos 7 VM을 설치한 후 해당 VM 내에서 Docker와 함께 작업합니다.&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;저에게는 다음과 같은 단계가 효과적이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;70&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그가 도망치는 것을 알아챘습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker run hello-world&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문에서와 같이 이 Socked 오류가 발생하여 실패하지만 실행 중입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo docker run hello-world&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;72&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일했다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 사용자를 에 추가했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;74&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;룹.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo adduser user docker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;75&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그런 다음 컴퓨터를 다시 시작해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;su - user&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;76&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(사용여부 확인)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;groups&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;77&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령을 입력합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;78&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모둠).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;79&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음에.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;hello-world&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;80&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일하기 시작했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;131&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 대답은 &lt;em papago-id=&quot;131-1&quot;&gt;&lt;a href=&quot;https://askubuntu.com/questions/477551/how-can-i-use-docker-without-sudo&quot; papago-id=&quot;131-1-0&quot;&gt;어떻게 sudo 없이 도커를 사용&lt;/a&gt;&lt;/em&gt;할 수 &lt;em papago-id=&quot;131-1&quot;&gt;&lt;a href=&quot;https://askubuntu.com/questions/477551/how-can-i-use-docker-without-sudo&quot; papago-id=&quot;131-1-0&quot;&gt;있나요?&lt;/a&gt;&lt;/em&gt;에 기반을 두고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 뭐가 잘못됐는지 설명해주는 거지&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt;&lt;p papago-id=&quot;132&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문과 &lt;a href=&quot;https://stackoverflow.com/q/27528337/1290420&quot; papago-id=&quot;132-1&quot;&gt;관련 질문&lt;/a&gt;의 모든 솔루션을 사용해 보았는데 &lt;a href=&quot;https://www.virtualbox.org/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;132-3&quot;&gt;VirtualBox&lt;/a&gt;를 제거하고 다시 설치하기 전까지는 문제가 해결되지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 프로세스는 VirtualBox를 버전 4.2.16에서 4.3.22로 업그레이드했습니다(이전 버전은 몇 달 동안 시스템에 사용되지 않고 방치되어 있었습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;81&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고나서&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;boot2docker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;82&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;83&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 조정 없이 일했습니다.&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;84&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 문제가 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단순한&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;service docker restart&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;85&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제를 해결했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;138&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 데몬은 TCP 포트 대신 유닉스 소켓에 바인딩됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 유닉스 소켓은 사용자 루트가 소유하며 다른 사용자는 sudo를 사용해서만 액세스할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 데몬은 항상 루트 사용자로 실행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo groupadd docker
sudo usermod -aG docker $USER
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;139&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로그아웃 후 다시 로그인하여 그룹 구성원 자격을 재평가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker run hello-world
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;140&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출처: &lt;a href=&quot;https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user&quot; papago-id=&quot;140-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;도커를 루트&lt;/a&gt;가 아닌 &lt;a href=&quot;https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user&quot; papago-id=&quot;140-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;사용자로 관리&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;141&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 같은 문제가 있어서 운이 없이 .bash_profile 파일을 수정하고 로그인하고 로그아웃하는 등 여러 가지를 시도했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;결국 내 기계를 다시 시작해보니 고쳐졌습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;142&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;꼭 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;127.0.0.1    localhost
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;143&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;`/etc/hosts `
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;144&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;86&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Jenkins에서 Docker 이미지를 만들 때도 같은 문제에 직면했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자를 에 추가하기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;87&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그룹화한 다음 도커 서비스를 다시 시작하고 제 경우에는 젠킨스 서비스를 다시 시작해야 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;147&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 제가 받은 오류입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;http:///var/run/docker.sock/v1.19/build?cgroupparent=&amp;amp;cpuperiod=0&amp;amp;cpuquota=0&amp;amp;cpusetcpus=&amp;amp;cpusetmems=&amp;amp;cpushares=0&amp;amp;dockerfile=Dockerfile&amp;amp;memory=0&amp;amp;memswap=0&amp;amp;rm=1&amp;amp;t=59aec062a8dd8b579ee1b61b299e1d9d340a1340: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
FATAL: Failed to build docker image from project Dockerfile
java.lang.RuntimeException: Failed to build docker image from project Dockerfile

Solution:

[root@Jenkins ssh]# groupadd docker
[root@Jenkins ssh]# gpasswd -a jenkins docker
Adding user jenkins to group docker
[root@Jenkins ssh]# /etc/init.d/docker restart
Stopping docker:                                           [  OK  ]
Starting docker:                                           [  OK  ]
[root@Jenkins ssh]# /etc/init.d/jenkins restart
Shutting down Jenkins                                      [  OK  ]
Starting Jenkins                                           [  OK  ]
[root@Jenkins ssh]#
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;148&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;148-1&quot;&gt;BIOS CPU 시각화&lt;/strong&gt;가 활성화되지 않은 것도 원인일 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 가서 활성화하세요!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;149&quot; papago-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/27528337/am-i-trying-to-connect-to-a-tls-enabled-daemon-without-tls&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Docker</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1566</guid>
      <comments>https://factcode.tistory.com/1566#entry1566comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:52:31 +0900</pubDate>
    </item>
    <item>
      <title>ResponseEntity와 @ResponseBody의 차이점은 무엇입니까?</title>
      <link>https://factcode.tistory.com/1565</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;t papago-id=&quot;0-1&quot;&gt;ResponseEntity와 @ResponseBody&lt;/t&gt;의 차이점은 무엇입니까&lt;t papago-id=&quot;0-1&quot;&gt;?&lt;/t&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;@RequestMapping(value = &quot;/message&quot;)
@ResponseBody
public Message get() {
    return new Message(penguinCounter.incrementAndGet() + &quot; penguin!&quot;);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동시에 나는 이런 것을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@RequestMapping(value = &quot;/message&quot;)
ResponseEntity&amp;lt;Message&amp;gt; get() {
    Message message = new Message(penguinCounter.incrementAndGet() + &quot; penguin!&quot;);
    return new ResponseEntity&amp;lt;Message&amp;gt;(message, HttpStatus.OK);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 두 접근법의 차이는 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;HttpStatus는 고려하지 맙시다 :)&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;ResponseEntity는 임의 HTTP 응답 헤더를 정의할 때 추가된 유연성을 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에서 4번째 생성자를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/http/ResponseEntity.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/http/ResponseEntity.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ResponseEntity(T body, MultiValueMap&amp;lt;String,String&amp;gt; headers, HttpStatus statusCode) 
&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;가능한 HTTP 응답 헤더 목록은 다음에서 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Responses&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Responses&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 사용되는 것은 상태, 내용 유형 및 캐시 제어입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요 없는 경우 @ResponseBody를 사용하는 것이 조금 더 간결합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;10-0&quot;&gt;HttpEntity&lt;/strong&gt;는 HTTP &lt;strong papago-id=&quot;10-2&quot;&gt;요청&lt;/strong&gt;을 나타내거나 &lt;strong papago-id=&quot;10-4&quot;&gt;응답&lt;/strong&gt;이 &lt;strong papago-id=&quot;10-6&quot;&gt;헤더&lt;/strong&gt;와 &lt;strong papago-id=&quot;10-8&quot;&gt;본문&lt;/strong&gt;으로 구성됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Only talks about body &amp;amp; headers, but doesn't talk about status code
public HttpEntity(T body, MultiValueMap&amp;lt;String,String&amp;gt; headers)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;11-0&quot;&gt;ResponseEntity&lt;/strong&gt;는 HttpEntity를 확장하지만 Http 상태 코드도 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// i.e ResponseEntity = HttpEntity + StatusCode
public ResponseEntity(T body, MultiValueMap&amp;lt;String,String&amp;gt; headers, HttpStatus statusCode)
&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;따라서 HTTP 응답을 &lt;strong papago-id=&quot;12-1&quot;&gt;완전히&lt;/strong&gt; &lt;strong papago-id=&quot;12-3&quot;&gt;구성&lt;/strong&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;Ex의 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@ControllerAdvice 
public class JavaWebExeptionHandler {

    @Autowired
    ExceptionErrorCodeMap exceptionErrorCodeMap;

    @ExceptionHandler(RuntimeException.class)
    public final ResponseEntity&amp;lt;ExceptionResponseBody&amp;gt; handleAllExceptions(Exception ex) {
        Integer expCode = exceptionErrorCodeMap.getExpCode(ex.getClass());
        // We have not added headers to response here, If you want you can add by using respective constructor
        return new ResponseEntity&amp;lt;ExceptionResponseBody&amp;gt;(new ExceptionResponseBody(expCode, ex.getMessage()),
                HttpStatus.valueOf(expCode));
    }

}
&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;strong papago-id=&quot;14-0&quot;&gt;@ResponseBody&lt;/strong&gt;는 메서드가 사용된 &lt;strong papago-id=&quot;14-4&quot;&gt;메서드&lt;/strong&gt;의 &lt;strong papago-id=&quot;14-2&quot;&gt;반환&lt;/strong&gt; 값이 응답 &lt;strong papago-id=&quot;14-6&quot;&gt;본문&lt;/strong&gt;에 바인딩되어 있음을 나타냅니다(메소드의 반환 값이 Http 응답 본문으로 처리됨을 의미합니다).&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;15-0&quot;&gt;ResponseEntity&amp;lt;&amp;gt;&lt;/strong&gt;는 유형 매개 변수가 있는 일반 클래스이므로 응답 본문에 직렬화할 개체 유형을 지정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;16-0&quot;&gt;@ResponseBody&lt;/strong&gt;는 주석으로 메서드의 반환 값이 HTTP 응답 본문에 직렬화됨을 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;17-1&quot;&gt;ResponseEntity&lt;/strong&gt;&amp;lt;&amp;gt;를 사용하여 헤더를 설정할 수 있습니다&lt;strong papago-id=&quot;17-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;18-0&quot;&gt;@ResponseEntity&lt;/strong&gt;는 헤더, 본문 및 상태 코드를 포함하는 응답을 나타냅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;18-2&quot;&gt;@ResponseBody&lt;/strong&gt;는 응답 본문만 반환합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/22725143/what-is-the-difference-between-responseentityt-and-responsebody&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>spring</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1565</guid>
      <comments>https://factcode.tistory.com/1565#entry1565comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:52:22 +0900</pubDate>
    </item>
    <item>
      <title>배열에서 요소의 모든 발생에 대한 인덱스를 찾는 방법은?</title>
      <link>https://factcode.tistory.com/1564</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;저는 자바스크립트 배열에서 &quot;나노&quot;와 같은 요소의 모든 인스턴스의 인덱스를 찾으려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var Cars = [&quot;Nano&quot;, &quot;Volvo&quot;, &quot;BMW&quot;, &quot;Nano&quot;, &quot;VW&quot;, &quot;Nano&quot;];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://api.jquery.com/jQuery.inArray/&quot; papago-id=&quot;2-1&quot; rel=&quot;noreferrer&quot;&gt;저&lt;/a&gt;는 jQuery.&lt;a href=&quot;http://api.jquery.com/jQuery.inArray/&quot; papago-id=&quot;2-1&quot; rel=&quot;noreferrer&quot;&gt;inArray,&lt;/a&gt; 또는 유사하게 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-3&quot;&gt;.indexOf()&lt;/a&gt;를 시도했지만 요소의 마지막 인스턴스 인덱스, 즉 이 경우 5만 제공했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 인스턴스에 대해 어떻게 얻습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;메서드&lt;/a&gt;에는 검색을 시작할 인덱스를 지정하는 선택적인 두 번째 매개 변수가 있으므로 루프에서 해당 매개 변수를 호출하여 특정 값의 모든 인스턴스를 찾을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function getAllIndexes(arr, val) {
    var indexes = [], i = -1;
    while ((i = arr.indexOf(val, i+1)) != -1){
        indexes.push(i);
    }
    return indexes;
}

var indexes = getAllIndexes(Cars, &quot;Nano&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인덱스를 어떻게 사용할지 명확하게 하지 않아서, 제 함수는 인덱스를 배열로 반환하지만(값이 발견되지 않으면 빈 배열로 반환합니다), 루프 내의 개별 인덱스 값으로 다른 작업을 수행할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트: VisioN의 의견에 따르면, 간단한 루프를 사용하면 동일한 작업을 보다 효율적으로 수행할 수 있으며, 이해하기 쉬우며, 따라서 유지보수가 보다 용이합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function getAllIndexes(arr, val) {
    var indexes = [], i;
    for(i = 0; i &amp;lt; arr.length; i++)
        if (arr[i] === val)
            indexes.push(i);
    return indexes;
}
&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;[&quot;Nano&quot;,&quot;Volvo&quot;,&quot;BMW&quot;,&quot;Nano&quot;,&quot;VW&quot;,&quot;Nano&quot;].reduce(function(a, e, i) {
    if (e === 'Nano')
        a.push(i);
    return a;
}, []);   // [0, 3, 5]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;0-0&quot;&gt;N.B:&lt;/strong&gt; &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce#Browser_compatibility&quot; papago-id=&quot;0-2&quot;&gt;브라우저 호환성&lt;/a&gt; 확인&lt;/font&gt;&lt;/font&gt;&lt;code&gt;reduce&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법을 사용하고 필요한 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce#Polyfill&quot; papago-id=&quot;1-1&quot;&gt;경우&lt;/a&gt; 폴리필을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Map&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-1&quot;&gt;Array.prototype.map()&lt;/a&gt;과 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Filter&quot; papago-id=&quot;10-3&quot; rel=&quot;noreferrer&quot;&gt;Array.prototype&lt;/a&gt;을 사용하는 또 다른 접근 방식입니다&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Filter&quot; papago-id=&quot;10-3&quot; rel=&quot;noreferrer&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Filter&quot; papago-id=&quot;10-3&quot; rel=&quot;noreferrer&quot;&gt;필터 ()&lt;/a&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var indices = array.map((e, i) =&amp;gt; e === value ? i : '').filter(String)
&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;es6 스타일로 좀 더 심플한 방법.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const indexOfAll = (arr, val) =&amp;gt; arr.reduce((acc, el, i) =&amp;gt; (el === val ? [...acc, i] : acc), []);


//Examples:
var cars = [&quot;Nano&quot;, &quot;Volvo&quot;, &quot;BMW&quot;, &quot;Nano&quot;, &quot;VW&quot;, &quot;Nano&quot;];
indexOfAll(cars, &quot;Nano&quot;); //[0, 3, 5]
indexOfAll([1, 2, 3, 1, 2, 3], 1); // [0,3]
indexOfAll([1, 2, 3], 4); // []
&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;map&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;filter&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const nanoIndexes = Cars
  .map((car, i) =&amp;gt; car === 'Nano' ? i : -1)
  .filter(index =&amp;gt; index !== -1);
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: IE/Edge를 지원할 필요가 없거나 코드를 변환하는 경우 ES2019에서 플랫맵을 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15-1&quot;&gt;제공&lt;/a&gt;했는데, 이를 통해 간단한 One-liner로 작업할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const nanoIndexes = Cars.flatMap((car, i) =&amp;gt; car === 'Nano' ? i : []);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 단지 다른 쉬운 방법으로 업데이트하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 방법에 사용할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var Cars = [&quot;Nano&quot;, &quot;Volvo&quot;, &quot;BMW&quot;, &quot;Nano&quot;, &quot;VW&quot;, &quot;Nano&quot;];

var result = [];

Cars.forEach((car, index) =&amp;gt; car === 'Nano' ? result.push(index) : null)
&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;참고: MDN은 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf&quot; rel=&quot;noreferrer&quot; papago-id=&quot;18-1&quot;&gt;while 루프를 사용하는 방법&lt;/a&gt;을 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var indices = [];
var array = ['a', 'b', 'a', 'c', 'a', 'd'];
var element = 'a';
var idx = array.indexOf(element);
while (idx != -1) {
  indices.push(idx);
  idx = array.indexOf(element, idx + 1);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 다른 대답들보다 더 낫다고 말하지는 않을 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;흥미롭네요.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;const indexes = cars
    .map((car, i) =&amp;gt; car === &quot;Nano&quot; ? i : null)
    .filter(i =&amp;gt; i !== null)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let array1 = [5, 12, 8, 130, 44, 12, 45, 12, 56];
let numToFind = 12
let indexesOf12 = [] // the number whose occurrence in the array we want to find

array1.forEach(function(elem, index, array) {
    if (elem === numToFind) {indexesOf12.push(index)}
    return indexesOf12
})

console.log(indexesOf12) // outputs [1, 5, 7]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*&quot; papago-id=&quot;21-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;다른&lt;/a&gt; 방법을 공유하기 위해서는 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*&quot; papago-id=&quot;21-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;함수&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-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;function findAllIndexOf(target, needle) {
  return [].concat(...(function*(){
    for (var i = 0; i &amp;lt; target.length; i++) if (target[i] === needle) yield [i];
  })());
}

var target = &quot;hellooooo&quot;;
var target2 = ['w','o',1,3,'l','o'];

console.log(findAllIndexOf(target, 'o'));
console.log(findAllIndexOf(target2, 'o'));&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;[&quot;a&quot;, &quot;b&quot;, &quot;a&quot;, &quot;b&quot;]
   .map((val, index) =&amp;gt; ({ val, index }))
   .filter(({val, index}) =&amp;gt; val === &quot;a&quot;)
   .map(({val, index}) =&amp;gt; index)

=&amp;gt; [0, 2]
&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;Polyfill을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (!Array.prototype.filterIndex) 
{
    Array.prototype.filterIndex = function (func, thisArg) {

        'use strict';
        if (!((typeof func === 'Function' || typeof func === 'function') &amp;amp;&amp;amp; this))
            throw new TypeError();

        let len = this.length &amp;gt;&amp;gt;&amp;gt; 0,
            res = new Array(len), // preallocate array
            t = this, c = 0, i = -1;

        let kValue;
        if (thisArg === undefined) {
            while (++i !== len) {
                // checks to see if the key was set
                if (i in this) {
                    kValue = t[i]; // in case t is changed in callback
                    if (func(t[i], i, t)) {
                        res[c++] = i;
                    }
                }
            }
        }
        else {
            while (++i !== len) {
                // checks to see if the key was set
                if (i in this) {
                    kValue = t[i];
                    if (func.call(thisArg, t[i], i, t)) {
                        res[c++] = i;
                    }
                }
            }
        }

        res.length = c; // shrink down array to proper size
        return res;
    };
}
&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;[2,23,1,2,3,4,52,2].filterIndex(element =&amp;gt; element === 2)

result: [0, 3, 7]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스택을 사용하여 &quot;arr[i]==value&quot; 조건이 발생할 때마다 &quot;i&quot;를 스택에 밀어 넣을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확인할 내용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;static void getindex(int arr[], int value)
{
    Stack&amp;lt;Integer&amp;gt;st= new Stack&amp;lt;Integer&amp;gt;();
    int n= arr.length;
    for(int i=n-1; i&amp;gt;=0 ;i--)
    {
        if(arr[i]==value)
        {
            st.push(i);
        }
    }   
    while(!st.isEmpty())
    {
        System.out.println(st.peek()+&quot; &quot;);
        st.pop(); 
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 매개 변수가 모두 배열로 전달된 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;
    function getIndexes(arr, val) {
        var indexes = [], i;
        for(i = 0; i &amp;lt; arr.length; i++){
    for(j =0; j&amp;lt; val.length; j++) {
     if (arr[i] === val[j])
                indexes.push(i);
    }
    }    
        return indexes;
    }

&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;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;27-1&quot;&gt;findIndex()&lt;/a&gt;도 유용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;var cars = ['Nano', 'Volvo', 'BMW', 'Nano', 'VW', 'Nano'];

const indexes = [];
const searchedItem = 'NaNo';

cars.findIndex((value, index) =&amp;gt; {
  if (value.toLowerCase() === searchedItem.toLowerCase()) {
    indexes.push(index);
  }
});

console.log(indexes); //[ 0, 3, 5 ]

&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;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;Object.entries()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;forEach()&lt;/code&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;var cars = ['Nano', 'Volvo', 'BMW', 'Nano', 'VW', 'Nano'];

const indexes = [];
const searchableItem = 'Nano';

Object.entries(cars).forEach((item, index) =&amp;gt; {
  if (item[1].toLowerCase() === searchableItem.toLowerCase())
    indexes.push(index);
});

console.log(indexes);
&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;b papago-id=&quot;31-0&quot;&gt;참고:&lt;/b&gt; 모든 테스트를 실행하지 않았습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;findIndex&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 콜백 출력과 일치하는 첫 번째 인덱스만 검색합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 당신만의 것을 구현할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;findIndexes&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;Array를 확장한 다음, 당신의 배열을 새로운 구조에 캐스팅함.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;class EnhancedArray extends Array {
  findIndexes(where) {
    return this.reduce((a, e, i) =&amp;gt; (where(e, i) ? a.concat(i) : a), []);
  }
}
   /*----Working with simple data structure (array of numbers) ---*/

//existing array
let myArray = [1, 3, 5, 5, 4, 5];

//cast it :
myArray = new EnhancedArray(...myArray);

//run
console.log(
   myArray.findIndexes((e) =&amp;gt; e===5)
)
/*----Working with Array of complex items structure-*/

let arr = [{name: 'Ahmed'}, {name: 'Rami'}, {name: 'Abdennour'}];

arr= new EnhancedArray(...arr);


console.log(
  arr.findIndexes((o) =&amp;gt; o.name.startsWith('A'))
)&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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/20798477/how-to-find-the-indexes-of-all-occurrences-of-an-element-in-array&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>jQuery</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1564</guid>
      <comments>https://factcode.tistory.com/1564#entry1564comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:52:15 +0900</pubDate>
    </item>
    <item>
      <title>쿼리를 밀리초 안에 실행하기 위해 인덱스를 향상시키는 방법은 무엇입니까?</title>
      <link>https://factcode.tistory.com/1563</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;    SELECT COUNT(o.id_offer)
      FROM offer o
      JOIN offer_product op
        ON op.id_offer = o.id_offer    
      JOIN advertiser a
        ON a.id_advertiser = o.id_advertiser 
      LEFT 
      JOIN offer_hidden h
        ON h.id_offer = o.id_offer 
       AND h.id_user = 5064
     WHERE o.finality = 'sale' 
       AND h.id_offer IS NULL;
+-------------------+
| COUNT(o.id_offer) |
+-------------------+
|            248250 |
+-------------------+
1 row in set (2.80 sec)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행에 걸리는 시간은 약 2~4초 정도입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;애플리케이션은 유사한 쿼리를 약 8~10개 수행해야 하므로 밀리초 실행 시간이 필수입니다.&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;+------+-------------+---------------+--------+---------------------------------------------------------+-----------------------------+---------+------------------------------+--------+--------------------------------------+
| id   | select_type | table         | type   | possible_keys                                           | key                         | key_len | ref                          | rows   | Extra                                |
+------+-------------+---------------+--------+---------------------------------------------------------+-----------------------------+---------+------------------------------+--------+--------------------------------------+
|    1 | SIMPLE      | offer         | ref    | PRIMARY,fk_offer_advertiser1_idx,fk_offer_finality1_idx | fk_offer_finality1_idx      | 1       | const                        | 167269 | Using index condition                |
|    1 | SIMPLE      | offer_product | ref    | fk_offer_product_offer1_idx                             | fk_offer_product_offer1_idx | 4       | db.offer.id_offer            |      1 | Using index                          |
|    1 | SIMPLE      | advertiser    | eq_ref | PRIMARY                                                 | PRIMARY                     | 4       | db.offer.id_advertiser       |      1 | Using index                          |
|    1 | SIMPLE      | offer_hidden  | eq_ref | PRIMARY,fk_offer_hidden_user1_idx                       | PRIMARY                     | 8       | db.offer.id_offer,const      |      1 | Using where; Using index; Not exists |
+------+-------------+---------------+--------+---------------------------------------------------------+-----------------------------+---------+------------------------------+--------+--------------------------------------+
4 rows in set (0.00 sec)
&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;offer&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;strong papago-id=&quot;1-1&quot;&gt;높은 카디널리티&lt;/strong&gt;):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SHOW INDEXES FROM offer;
+-------+------------+--------------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name                 | Seq_in_index | Column_name   | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+--------------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| offer |          0 | PRIMARY                  |            1 | id_offer      | A         |      352683 |     NULL | NULL   |      | BTREE      |         |               |
| offer |          1 | fk_offer_advertiser1_idx |            1 | id_advertiser | A         |      352683 |     NULL | NULL   | YES  | BTREE      |         |               |
| offer |          1 | fk_offer_finality1_idx   |            1 | finality      | A         |           6 |     NULL | NULL   |      | BTREE      |         |               |
+-------+------------+--------------------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
3 rows in set (0.04 sec)
&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;제 개발 환경은 현재 약 30만 건의 오퍼와 20만 건의 광고주를 보유하고 있지만, 프로덕션 DB는 각각 약 800만 건과 200만 건(각각)의 오퍼를 보유하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;     SELECT COUNT(*) FROM offer;
+----------+
| COUNT(*) |
+----------+
|   327513 |
+----------+
1 row in set (0.06 sec)


    SELECT COUNT(*) FROM advertiser;
+----------+
| COUNT(*) |
+----------+
|   214885 |
+----------+
1 row in set (0.14 sec)
&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;CREATE TABLE `offer` (
  `id_offer` int(11) NOT NULL AUTO_INCREMENT,
  `id_advertiser` int(11) unsigned NOT NULL,
  `description` text,
  `date_offer` datetime NOT NULL,
  `finality` enum('buy','sale') NOT NULL,
  PRIMARY KEY (`id_offer`),
  KEY `fk_offer_advertiser1_idx` (`id_advertiser`),
  KEY `fk_offer_finality1_idx` (`finality`),
  CONSTRAINT `fk_offer_advertiser1` FOREIGN KEY (`id_advertiser`) REFERENCES `advertiser` (`id_advertiser`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 뭘 빼놓았나요?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집 1 - &lt;a href=&quot;https://stackoverflow.com/questions/28643794/how-to-improve-indexes-in-order-to-get-queries-executed-in-milliseconds#comment45586898_28643794&quot; papago-id=&quot;9-1&quot;&gt;@Strawberry에 대한 응답&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE TABLE `advertiser` (
  `id_advertiser` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,
  `first_name` varchar(100) DEFAULT NULL,
  `last_name` varchar(100) DEFAULT NULL,
  `gender` varchar(10) DEFAULT NULL,
  `locale` varchar(10) DEFAULT NULL,
  `created` datetime NOT NULL,
  PRIMARY KEY (`id_advertiser`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

CREATE TABLE `offer_product` (
  `id_offer_product` int(11) NOT NULL AUTO_INCREMENT,
  `id_offer` int(11) NOT NULL,
  `id_product` int(11) NOT NULL,
  PRIMARY KEY (`id_offer_product`),
  KEY `fk_offer_product_offer1_idx` (`id_offer`),
  KEY `fk_offer_product_product1_idx` (`id_product`),
  KEY `fk_offer_product_offer_product1_idx` (`id_offer`,`id_product`),
  KEY `fk_offer_product_product_offer1_idx` (`id_product`,`id_offer`),
  CONSTRAINT `fk_offer_product_offer1` FOREIGN KEY (`id_offer`) REFERENCES `offer` (`id_offer`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `fk_offer_product_product1` FOREIGN KEY (`id_product`) REFERENCES `product` (`id_product`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

 CREATE TABLE `offer_hidden` (
  `id_offer` int(11) NOT NULL,
  `id_user` int(11) NOT NULL,
  PRIMARY KEY (`id_offer`,`id_user`),
  KEY `fk_offer_hidden_user1_idx` (`id_user`),
  CONSTRAINT `fk_offer_hidden_user1` FOREIGN KEY (`id_user`) REFERENCES `user` (`id_user`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다중 열 인덱스를 설정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 거.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALTER  TABLE offer ADD INDEX(finality, id_offer, id_advertiser);
ALTER  TABLE offer_product ADD INDEX(id_offer);
ALTER  TABLE advertiser ADD INDEX(id_advertiser);
ALTER  TABLE offer_hidden ADD INDEX(id_offer, id_user);
&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;-- covering index access to 'offer'
-- (and, perhaps, better caching for 'offer_product' too)
ALTER TABLE offer ADD INDEX(finality, id_offer, id_advertiser);

SELECT COUNT(o.id_offer)
FROM (
    -- do 'left join' first to minimize number of rows
    -- before scanning 'offer_product' and 'advertiser'
    SELECT offer.id_offer, offer.id_advertiser
    FROM offer
    LEFT JOIN offer_hidden h ON
        h.id_offer = offer.id_offer
        AND h.id_user = 5064
    WHERE
        offer.finality = 'sale'
        AND h.id_offer IS NULL
) o
JOIN offer_product op ON
    op.id_offer = o.id_offer
JOIN advertiser a ON
    a.id_advertiser = o.id_advertiser
;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/28643794/how-to-improve-indexes-in-order-to-get-queries-executed-in-milliseconds&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MariaDB</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1563</guid>
      <comments>https://factcode.tistory.com/1563#entry1563comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:52:04 +0900</pubDate>
    </item>
    <item>
      <title>VBA에서 HTML 컨텐츠 구문 분석</title>
      <link>https://factcode.tistory.com/1562</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;VBA에서 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;HTML 파싱과 관련된 질문이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 제품이 있는 웹 사이트가 있으며 현재 스프레드시트의 페이지 내 텍스트를 파악하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 스프레드시트는 크기는 꽤 크지만 항목 Nbr 세 번째 열에 포함되어 있습니다. 14번째 열에 텍스트가 있고 하나의 행이 하나의 제품(아이템)에 해당하는 것으로 예상합니다.&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;ID 번호는 페이지마다 바뀝니다(가끔씩).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹사이트 구조는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div style=&quot;position:relative;&quot;&amp;gt;
    &amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;table id=&quot;list-table&quot; width=&quot;100%&quot; tabindex=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; role=&quot;grid&quot; aria-multiselectable=&quot;false&quot; aria-labelledby=&quot;gbox_list-table&quot; class=&quot;ui-jqgrid-btable&quot; style=&quot;width: 930px;&quot;&amp;gt;
        &amp;lt;tbody&amp;gt;
            &amp;lt;tr class=&quot;jqgfirstrow&quot; role=&quot;row&quot; style=&quot;height:auto&quot;&amp;gt;
                &amp;lt;td ...&amp;lt;/td&amp;gt;
                &amp;lt;td ...&amp;lt;/td&amp;gt;
            &amp;lt;/tr&amp;gt;
            &amp;lt;tr role=&quot;row&quot; id=&quot;1&quot; tabindex=&quot;-1&quot; class=&quot;ui-widget-content jqgrow ui-row-ltr&quot;&amp;gt;
                &amp;lt;td ...&amp;lt;/td&amp;gt;
                &amp;lt;td ...&amp;lt;/td&amp;gt;
            &amp;lt;/tr&amp;gt;
            &amp;lt;tr role=&quot;row&quot; id=&quot;2&quot; tabindex=&quot;-1&quot; class=&quot;ui-widget-content jqgrow ui-row-ltr&quot;&amp;gt;
                &amp;lt;td ...&amp;lt;/td&amp;gt;
                &amp;lt;td ...&amp;lt;/td&amp;gt;
            &amp;lt;/tr&amp;gt;
            &amp;lt;tr role=&quot;row&quot; id=&quot;3&quot; tabindex=&quot;-1&quot; class=&quot;ui-widget-content jqgrow ui-row-ltr&quot;&amp;gt;
                &amp;lt;td ...&amp;lt;/td&amp;gt;
                &amp;lt;td ...&amp;lt;/td&amp;gt;
            &amp;lt;/tr&amp;gt;
            &amp;lt;tr role=&quot;row&quot; id=&quot;4&quot; tabindex=&quot;-1&quot; class=&quot;ui-widget-content jqgrow ui-row-ltr&quot;&amp;gt;
                &amp;lt;td ...&amp;lt;/td&amp;gt;
                &amp;lt;td ...&amp;lt;/td&amp;gt;
            &amp;lt;/tr&amp;gt;
            &amp;lt;tr role=&quot;row&quot; id=&quot;5&quot; tabindex=&quot;-1&quot; class=&quot;ui-widget-content jqgrow ui-row-ltr&quot;&amp;gt;
                &amp;lt;td ...&amp;lt;/td&amp;gt;
                &amp;lt;td ...&amp;lt;/td&amp;gt;
            &amp;lt;/tr&amp;gt;
            &amp;lt;tr role=&quot;row&quot; id=&quot;6&quot; tabindex=&quot;-1&quot; class=&quot;ui-widget-content jqgrow ui-row-ltr&quot;&amp;gt;
                &amp;lt;td ...&amp;lt;/td&amp;gt;
                &amp;lt;td ...&amp;lt;/td&amp;gt;
            &amp;lt;/tr&amp;gt;
            &amp;lt;tr role=&quot;row&quot; id=&quot;7&quot; tabindex=&quot;-1&quot; class=&quot;ui-widget-content jqgrow ui-row-ltr&quot;&amp;gt;
                &amp;lt;td role=&quot;gridcell&quot; style=&quot;padding-left:10px&quot; title=&quot;Material&quot; aria-describedby=&quot;list-table_&quot;&amp;gt;Material&amp;lt;/td&amp;gt;
                &amp;lt;td role=&quot;gridcell&quot; style=&quot;&quot; title=&quot;600D polyester.&quot; aria-describedby=&quot;list-table_&quot;&amp;gt;600D polyester.&amp;lt;/td&amp;gt;
            &amp;lt;/tr&amp;gt;           
            &amp;lt;tr ...&amp;gt;
            &amp;lt;/tr&amp;gt;
        &amp;lt;/tbody&amp;gt;
    &amp;lt;/table&amp;gt; &amp;lt;/div&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;그 결과 &quot;600D 폴리에스터&quot;를 구매하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작동하지 않는 내 코드 조각은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Sub ParseMaterial()

    Dim Cell As Integer
    Dim ItemNbr As String

    Dim AElement As Object
    Dim AElements As IHTMLElementCollection
Dim IE As MSXML2.XMLHTTP60
Set IE = New MSXML2.XMLHTTP60

Dim HTMLDoc As MSHTML.HTMLDocument
Dim HTMLBody As MSHTML.HTMLBody

Set HTMLDoc = New MSHTML.HTMLDocument
Set HTMLBody = HTMLDoc.body

For Cell = 1 To 5                            'I iterate through the file row by row

    ItemNbr = Cells(Cell, 3).Value           'ItemNbr isin the 3rd Column of my spreadsheet

    IE.Open &quot;GET&quot;, &quot;http://www.example.com/?item=&quot; &amp;amp; ItemNbr, False
    IE.send

    While IE.ReadyState &amp;lt;&amp;gt; 4
        DoEvents
    Wend

    HTMLBody.innerHTML = IE.responseText

    Set AElements = HTMLDoc.getElementById(&quot;list-table&quot;).getElementsByTagName(&quot;tr&quot;)
    For Each AElement In AElements
        If AElement.Title = &quot;Material&quot; Then
            Cells(Cell, 14) = AElement.nextNode.value     'I write the material in the 14th column
        End If
    Next AElement

        Application.Wait (Now + TimeValue(&quot;0:00:2&quot;))

Next Cell
&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;ul&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정리: 준비 상태 속성 테스트 루프를 제거합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;readystate 속성에 의해 반환되는 값은 이 컨텍스트에서 변경되지 않습니다. 코드는 전송 지시 후 일시 중지되며, 서버 응답이 수신되거나 수신되지 않은 경우에만 재개됩니다.&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;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;올바른 HTML 요소를 대상으로 합니다. 당신은 트리 요소를 통해 검색하고 있습니다. 코드에서 이러한 요소를 사용하는 논리는 실제로 td 요소를 가리키는 것처럼 보입니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성을 사용 중인 개체에 실제로 사용할 수 있는지 확인합니다. 이 작업을 돕기 위해 모든 변수를 일반 개체가 아닌 특정 개체로 선언합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 지능이 활성화됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;관련 라이브러리에 정의된 개체의 실제 이름을 처음부터 찾기 어렵다면 일반 개체로 선언하고 코드를 실행한 다음 디버그 창에 유형 이름(your_object)을 인쇄하여 개체 유형을 검사합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 당신이 가는 길에&lt;/font&gt;&lt;/p&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;font class=&quot;papago-parent&quot;&gt;그래도 작동이 안 되고 URL을 공유할 수 있다면 그렇게 해주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Sub getInfoWeb()

    Dim cell As Integer
    Dim xhr As MSXML2.XMLHTTP60
    Dim doc As MSHTML.HTMLDocument
    Dim table As MSHTML.HTMLTable
    Dim tableCells As MSHTML.IHTMLElementCollection
    
    Set xhr = New MSXML2.XMLHTTP60
   
    For cell = 1 To 5
        
        ItemNbr = Cells(cell, 3).Value
        
        With xhr
        
            .Open &quot;GET&quot;, &quot;http://www.example.com/?item=&quot; &amp;amp; ItemNbr, False
            .send
            
            If .readyState = 4 And .Status = 200 Then
                Set doc = New MSHTML.HTMLDocument
                doc.body.innerHTML = .responseText
            Else
                MsgBox &quot;Error&quot; &amp;amp; vbNewLine &amp;amp; &quot;Ready state: &quot; &amp;amp; .readyState &amp;amp; _
                vbNewLine &amp;amp; &quot;HTTP request status: &quot; &amp;amp; .Status
            End If
            
        End With
        
        Set table = doc.getElementById(&quot;list-table&quot;)
        Set tableCells = table.getElementsByTagName(&quot;td&quot;)
        
        For Each tableCell In tableCells
            If tableCell.getAttribute(&quot;title&quot;) = &quot;Material&quot; Then
                Cells(cell, 14).Value = tableCell.NextSibling.innerHTML
            End If
        Next tableCell
    
    Next cell
    
End Sub
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;EDIT: 아래 코멘트에 추가적인 정보를 제공해 주신 것과 추가적인 코멘트에 대한 후속 조치로,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;'Determine your product number
    'Open an xhr for your source url, and retrieve the product number from there - search for the tag which
    'text include the &quot;productnummer:&quot; substring, and extract the product number from the outerstring
    'OR
    'if the product number consistently consists of the fctkeywords you are entering in your source url
    'with two &quot;0&quot; appended - just build the product number like that
'Open an new xhr for this url &quot;http://www.pfconcept.com/cgi-bin/wspd_pcdb_cgi.sh/y/y2productspec-ajax.p?itemc=&quot; &amp;amp; product_number &amp;amp; &quot;&amp;amp;_search=false&amp;amp;rows=-1&amp;amp;page=1&amp;amp;sidx=&amp;amp;sord=asc&quot;
'Load the response in an XML document, and retrieve the material information

Sub getInfoWeb()

    Dim xhr As MSXML2.XMLHTTP60
    Dim doc As MSXML2.DOMDocument60
    Dim xmlCell As MSXML2.IXMLDOMElement
    Dim xmlCells As MSXML2.IXMLDOMNodeList
    Dim materialValueElement As MSXML2.IXMLDOMElement
    
    Set xhr = New MSXML2.XMLHTTP60
        
        With xhr
            
            .Open &quot;GET&quot;, &quot;http://www.pfconcept.com/cgi-bin/wspd_pcdb_cgi.sh/y/y2productspec-ajax.p?itemc=10031700&amp;amp;_search=false&amp;amp;rows=-1&amp;amp;page=1&amp;amp;sidx=&amp;amp;sord=asc&quot;, False
            .send
            
            If .readyState = 4 And .Status = 200 Then
                Set doc = New MSXML2.DOMDocument60
                doc.LoadXML .responseText
            Else
                MsgBox &quot;Error&quot; &amp;amp; vbNewLine &amp;amp; &quot;Ready state: &quot; &amp;amp; .readyState &amp;amp; _
                vbNewLine &amp;amp; &quot;HTTP request status: &quot; &amp;amp; .Status
            End If
            
        End With
        
        Set xmlCells = doc.getElementsByTagName(&quot;cell&quot;)

        For Each xmlCell In xmlCells
            If xmlCell.Text = &quot;Materiaal&quot; Then
                Set materialValueElement = xmlCell.NextSibling
            End If
        Next
        
        MsgBox materialValueElement.Text
    
End Sub
&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;EDIT2: 대체 자동화 IE&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Sub searchWebViaIE()
    Dim ie As SHDocVw.InternetExplorer
    Dim doc As MSHTML.HTMLDocument
    Dim anchors As MSHTML.IHTMLElementCollection
    Dim anchor As MSHTML.HTMLAnchorElement
    Dim prodSpec As MSHTML.HTMLAnchorElement
    Dim tableCells As MSHTML.IHTMLElementCollection
    Dim materialValueElement As MSHTML.HTMLTableCell
    Dim tableCell As MSHTML.HTMLTableCell
    
    Set ie = New SHDocVw.InternetExplorer
    
    With ie
        .navigate &quot;http://www.pfconcept.com/cgi-bin/wspd_pcdb_cgi.sh/y/y2facetmain.p?fctkeywords=100317&amp;amp;world=general#tabs-4&quot;
        .Visible = True
        
        Do While .readyState &amp;lt;&amp;gt; READYSTATE_COMPLETE Or .Busy = True
            DoEvents
        Loop
        
        Set doc = .document
        
        Set anchors = doc.getElementsByTagName(&quot;a&quot;)
        
        For Each anchor In anchors
            If InStr(anchor.innerHTML, &quot;Product Specificatie&quot;) &amp;lt;&amp;gt; 0 Then
                anchor.Click
                Exit For
            End If
        Next anchor
        
        Do While .readyState &amp;lt;&amp;gt; READYSTATE_COMPLETE Or .Busy = True
            DoEvents
        Loop
    
    End With
        
    For Each anchor In anchors
        If InStr(anchor.innerHTML, &quot;Product Specificatie&quot;) &amp;lt;&amp;gt; 0 Then
            Set prodSpec = anchor
        End If
    Next anchor
    
    Set tableCells = doc.getElementById(&quot;list-table&quot;).getElementsByTagName(&quot;td&quot;)
    
    If Not tableCells Is Nothing Then
        For Each tableCell In tableCells
            If tableCell.innerHTML = &quot;Materiaal&quot; Then
                Set materialValueElement = tableCell.NextSibling
            End If
        Next tableCell
    End If
    
    MsgBox materialValueElement.innerHTML
    
End Sub
&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;테이블이나 엑셀(MS-Access 2013을 사용합니다)과는 관련이 없고 주제 제목과 직접 관련이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 해결책은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Private Sub Sample(urlSource)
Dim httpRequest As New WinHttpRequest
Dim doc As MSHTML.HTMLDocument
Dim tags As MSHTML.IHTMLElementCollection
Dim tag As MSHTML.HTMLHtmlElement
httpRequest.Option(WinHttpRequestOption_UserAgentString) = &quot;Mozilla/4.0 (compatible;MSIE 7.0; Windows NT 6.0)&quot;
httpRequest.Open &quot;GET&quot;, urlSource
httpRequest.send ' fetching webpage
Set doc = New MSHTML.HTMLDocument
doc.body.innerHTML = httpRequest.responseText
Set tags = doc.getElementsByTagName(&quot;a&quot;)
i = 1
For Each tag In tags
  Debug.Print i
  Debug.Print tag.href
  Debug.Print tag.innerText
  'Debug.Print tag.Attributes(&quot;any other attributes you need&quot;)() ' may return an object
  i = i + 1
  If i Mod 50 = 0 Then Stop
  ' or code to store results in a table
Next
End Sub
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/25488687/parse-html-content-in-vba&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Excel</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1562</guid>
      <comments>https://factcode.tistory.com/1562#entry1562comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:51:56 +0900</pubDate>
    </item>
    <item>
      <title>창을 표시하지 않고 파워셸 스크립트를 백그라운드 작업으로 실행하려면 어떻게 해야 합니까?</title>
      <link>https://factcode.tistory.com/1561</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;성능 카운터를 꺼서 .csv 파일에 저장하고 파일이 너무 커지면 롤오버하는 스크립트를 만드는 중입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;powershell 프롬프트나 ISE(I running v.2/win server 2008)에서 스크립트를 실행하면 정상적으로 작동하며 파일이 올바르게 실행됩니다.&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;그러나 다음 cmd 프롬프트 줄을 사용하여 명령을 실행하려고 하면(cmd에서 /k 스위치를 시도해도) 명령 프롬프트가 즉시 닫히고 파일이 실행되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;powershell.exe -windowstyle hidden {iis_test.ps1}
&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;나는 또한 다음을 시도했는데 파워셸이 멈추지 않는 것을 보지만(나는 태스크 관리자를 통해 모니터링하고, Powershell.exe가 나타나도록 찾기 위해), 파일이 생성되는 것을 보지 못합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;powershell.exe -noexit -windowstyle hidden {iis_test.ps1}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 오류가 발생 가능한 장소(이벤트 뷰어, 명령 프롬프트 창 자체)에서 발견되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;무슨 생각 있어요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;궁극적으로 이러한 스크립트 파일이라고 하는 vb winforms를 만드는 것이 제 목표이고, 자연스럽게 명령 프롬프트 명령어를 파악하는 것이 도움이 될 것이라고 생각했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;5-1&quot;&gt;이&lt;/strong&gt; 스크립트는 휴대용이며 Windows 2008 Server 시스템에서 실행되는 것이 매우 중요합니다(따라서 추가 설치가 필요한 타사 엔티티와 멀리 떨어져 있어야 합니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;6-0&quot;&gt;편집:&lt;/strong&gt; 실행할 파일을 지정하려면 -file 인수를 사용해야 했습니다.&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;DOS/CMD 셸에서 시도해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;powershell.exe -windowstyle hidden -file C:\iis_test.ps1
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;Powershell.exe -windowstyle hidden -file C:\iis_test.ps1
&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;그러나 이 명령을 실행하면 CMD 창이 나타납니다.&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;대신 VBscript를 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Set objShell = CreateObject(&quot;WScript.Shell&quot;)
objShell.Run &quot;CMD /C START /B &quot; &amp;amp; objShell.ExpandEnvironmentStrings(&quot;%SystemRoot%&quot;) &amp;amp; &quot;\System32\WindowsPowerShell\v1.0\powershell.exe -file &quot; &amp;amp; &quot;YourScript.ps1&quot;, 0, False
Set objShell = Nothing
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/16303150/how-can-i-run-a-powershell-script-as-a-background-task-without-displaying-a-wind&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>powershell</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1561</guid>
      <comments>https://factcode.tistory.com/1561#entry1561comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:51:45 +0900</pubDate>
    </item>
    <item>
      <title>XPath를 사용하여 텍스트 내용과 속성 값을 기반으로 노드를 선택하려면 어떻게 해야 합니까?</title>
      <link>https://factcode.tistory.com/1560</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XPath를 사용하여 텍스트 내용과 속성 값을 기반으로 노드를 선택하려면 어떻게 해야 합니까?&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:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;DocText&amp;gt;
&amp;lt;WithQuads&amp;gt;
    &amp;lt;Page pageNumber=&quot;3&quot;&amp;gt;
        &amp;lt;Word&amp;gt;
            July
            &amp;lt;Quad&amp;gt;
                &amp;lt;P1 X=&quot;84&quot; Y=&quot;711.25&quot; /&amp;gt;
                &amp;lt;P2 X=&quot;102.062&quot; Y=&quot;711.25&quot; /&amp;gt;
                &amp;lt;P3 X=&quot;102.062&quot; Y=&quot;723.658&quot; /&amp;gt;
                &amp;lt;P4 X=&quot;84.0&quot; Y=&quot;723.658&quot; /&amp;gt;
            &amp;lt;/Quad&amp;gt;
        &amp;lt;/Word&amp;gt;
        &amp;lt;Word&amp;gt;
        &amp;lt;/Word&amp;gt;
        &amp;lt;Word&amp;gt;
            30,
            &amp;lt;Quad&amp;gt;
                &amp;lt;P1 X=&quot;104.812&quot; Y=&quot;711.25&quot; /&amp;gt;
                &amp;lt;P2 X=&quot;118.562&quot; Y=&quot;711.25&quot; /&amp;gt;
                &amp;lt;P3 X=&quot;118.562&quot; Y=&quot;723.658&quot; /&amp;gt;
                &amp;lt;P4 X=&quot;104.812&quot; Y=&quot;723.658&quot; /&amp;gt;
            &amp;lt;/Quad&amp;gt;
        &amp;lt;/Word&amp;gt;
    &amp;lt;/Page&amp;gt;
&amp;lt;/WithQuads&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'7월' 텍스트와 Quad/P1/X 속성이 90보다 큰 노드를 찾고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서, 이 경우에는 어떠한 매치도 반환하지 않아야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 GT(&amp;gt;) 또는 LT(&amp;lt;)를 사용하면 첫 번째 Word 요소가 일치합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;eq(=)를 사용하면 상대가 되지 않습니다.&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;//Word[text()='July' and //P1[@X &amp;lt; 90]]
&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;//Word[text()='July' and //P1[@X &amp;gt; 90]]
&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;P1@X 속성에서 이를 적절하게 제한하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 다른 페이지 번호에 대해 여러 개의 페이지 요소가 있다고 생각해 보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 노드를 찾기 위해 위 검색을 추가로 제한하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;text()='July', P1@X &amp;lt; 90&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;@pageNumber=3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 저는 XPath에서 고정되지 않은 //를 나쁜 냄새로 사용하는 것을 고려합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한번 해보세요:-&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/DocText/WithQuads/Page/Word[text()='July' and Quad/P1/@X &amp;gt; 90]
&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;//P1[@X &amp;lt; 90]&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;P1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 그것은 언제나 진실일 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유사하게&lt;/font&gt;&lt;/font&gt;&lt;code&gt;//P1[@X &amp;gt; 90]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언제나 진실입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;//&quot; 문제를 제외하고 이 XML은 혼합 콘텐츠를 매우 이상하게 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;술어를&lt;/font&gt;&lt;/font&gt;&lt;code&gt;text()='July'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하위 텍스트 노드가 7월과 정확히 일치하는 경우 요소와 일치합니다. 이는 주변 공백 때문에 예제에서는 사실이 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스 XML의 정확한 정의에 따라, 저는 다음과 같이 할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[text()[normalize-space(.)='July'] and Quad/P1/@X &amp;gt; 90]&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1982624/using-xpath-how-do-i-select-a-node-based-on-its-text-content-and-value-of-an-at&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>XML</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1560</guid>
      <comments>https://factcode.tistory.com/1560#entry1560comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:51:39 +0900</pubDate>
    </item>
    <item>
      <title>소스 및 헤더 디렉토리가 별도인 Make 파일을 작성하는 방법?</title>
      <link>https://factcode.tistory.com/1559</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스 및 헤더 디렉토리가 별도인 Make 파일을 작성하는 방법?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/&quot; rel=&quot;noreferrer&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;저는 소스 파일 2개와 헤더 파일 1개를 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자습서처럼 별도의 디렉토리에 배치하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 이 프로젝트를 설정했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.
├── include
│&amp;nbsp;&amp;nbsp; └── hellomake.h
├── Makefile
└── src
    ├── hellofunc.c
    └── hellomake.c
&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;IDIR =../include
CC=gcc
CFLAGS=-I$(IDIR)

ODIR=obj
LDIR =../lib

_DEPS = hellomake.h
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))

_OBJ = hellomake.o hellofunc.o 
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))

$(ODIR)/%.o: %.c $(DEPS)
    $(CC) -c -o $@ $&amp;lt; $(CFLAGS)

hellomake: $(OBJ)
    gcc -o $@ $^ $(CFLAGS)

.PHONY: clean

clean:
    rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~ 
&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;gcc -o hellomake  -I../include
gcc: fatal error: no input files
compilation terminated.
make: *** [hellomake] Error 4
&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;당신의 튜토리얼은 오래된 관행과 나쁜 관행을 홍보하는 것이므로, 당신은 그것을 피해야 합니다. IMHO.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 규칙에 따라:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(ODIR)/%.o: %.c $(DEPS)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 디렉토리에 있는 소스가 실제로 있는 동안 해당 소스를 찾으라는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;src&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디렉토리, 따라서 이 패턴은 사용되지 않으며 적합한 패턴이 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트 디렉토리를 다음과 같이 구성해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;root
├── include/
│   └── all .h files here
├── lib/
│   └── all third-party library files (.a/.so files) here
├── src/
│   └── all .c files here
└── Makefile
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 좋은 방법을 사용해서 차근차근 과정을 살펴보도록 하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫째, 필요 없다면 아무것도 정의하지 마세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Make에는 수동으로 작업하기 전에 사용해야 할 미리 정의된 변수와 기능이 많이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실, 그는 너무 많아서 디렉터리에 메이크 파일을 아예 두지 않아도 간단한 파일을 컴파일할 수 있습니다!&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스 및 빌드 출력 디렉토리를 나열합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code&gt;SRC_DIR := src
OBJ_DIR := obj
BIN_DIR := bin # or . if you want it in the current directory
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최종 목표, 즉 실행 파일 이름을 지정합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code&gt;EXE := $(BIN_DIR)/hellomake
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원본 파일을 나열합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code&gt;SRC := $(wildcard $(SRC_DIR)/*.c)
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;4&quot;&gt; 
 &lt;li papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원본 파일에서 개체 파일을 나열합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code&gt;OBJ := $(SRC:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
# You can also do it like that
OBJ := $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SRC))
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;5&quot;&gt; 
 &lt;li papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 깃발을 다루겠습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code&gt;CPPFLAGS := -Iinclude -MMD -MP # -I is a preprocessor flag, not a compiler flag
CFLAGS   := -Wall              # some warnings about bad code
LDFLAGS  := -Llib              # -L is a linker flag
LDLIBS   := -lm                # Left empty if no libs are needed
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CPP&lt;/code&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 cpreProcessor의&lt;strong papago-id=&quot;20-1&quot;&gt;&lt;/strong&gt;&lt;strong papago-id=&quot;20-2&quot;&gt;&lt;/strong&gt;&lt;strong papago-id=&quot;20-4&quot;&gt;&lt;/strong&gt; 약자이지, cplusPlus가 아닙니다! Use&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CXXFLAGS&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;및 C++ 플래그의 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CXX&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(C++ 컴파일러의 경우)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플래그는 헤더 종속성을 자동으로 생성하는 데 사용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나중에 헤더만 변경되면 컴파일을 시작하는 데 사용할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋아요, 이제 우리 변수가 정확하게 채워졌으니 요리법을 좀 굴려야겠네요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;all&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;Makefile의 첫번째 타겟이 되어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것의 전제조건은 당신이 글만 쓸 때 구축하고자 하는 목표가 되어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;make&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령 줄에 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;all: $(EXE)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 한가지 문제는 Make가 실제로 이름이 붙은 파일이나 폴더를 만들고 싶다고 생각한다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;all&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그럼 이건 진짜 목표가 아니라고 전해 드리죠&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.PHONY: all
&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;$(EXE): $(OBJ)
    $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CC&lt;/code&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C Compiler의&lt;strong papago-id=&quot;32-1&quot;&gt;&lt;/strong&gt;&lt;strong papago-id=&quot;32-2&quot;&gt;&lt;/strong&gt; 약자입니다.)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고하세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(BIN_DIR)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아직 존재하지 않아 컴파일러에 대한 호출이 실패할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 확인하고 싶다고 말씀드리겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(EXE): $(OBJ) | $(BIN_DIR)
    $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@

$(BIN_DIR):
    mkdir -p $@
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 가지 빠른 추가 참고 사항:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;$(CC)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 C에서 컴파일하고 링크할 때 필요한 것을 이미 포함하고 있는 내장 변수입니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;링커 오류를 방지하기 위해서는 다음과 같이 하는 것이 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(LDFLAGS)&lt;/code&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 오브젝트 &lt;strong papago-id=&quot;38-0&quot;&gt;파일들&lt;/strong&gt;과.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(LDLIBS)&lt;/code&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;끝나고&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;$(CPPFLAGS)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(CFLAGS)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서는 &lt;strong papago-id=&quot;41-1&quot;&gt;쓸모&lt;/strong&gt;가 없고, 컴파일 단계는 이미 끝났고, 여기서는 링크 단계입니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 단계에서는 원본 파일과 개체 파일이 동일한 접두사를 공유하지 않기 때문에 기본 제공 규칙이 사용자의 특정 경우를 포함하지 않으므로 정확히 수행할 작업을 지정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
    $(CC) $(CPPFLAGS) $(CFLAGS) -c $&amp;lt; -o $@
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전과 같은 문제, 당신의.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(OBJ_DIR)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아직 존재하지 않아 컴파일러에 대한 호출이 실패할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;규칙을 업데이트하겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(OBJ_DIR)
    $(CC) $(CPPFLAGS) $(CFLAGS) -c $&amp;lt; -o $@

$(BIN_DIR) $(OBJ_DIR):
    mkdir -p $@
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋아요, 이제 실행 파일이 잘 만들어져야 해요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;빌드 아티팩트를 청소하는 간단한 규칙을 원합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;clean:
    @$(RM) -rv $(BIN_DIR) $(OBJ_DIR) # The @ disables the echoing of the command
&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;(다시 말하지만 clean은 생성할 대상이 아니므로 해당 대상에 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.PHONY&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특수 표적!)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자동 종속성 생성에 대해 기억하십니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;GCC와 Clang이 만들 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.d&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 파일에 해당&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.o&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에는 우리가 사용할 수 있는 Makefile 규칙이 포함되어 있으므로 여기에 다음을 포함시키겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-include $(OBJ:.o=.d) # The dash silences errors when files don't exist (yet)
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최종 결과:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SRC_DIR := src
OBJ_DIR := obj
BIN_DIR := bin

EXE := $(BIN_DIR)/hellomake
SRC := $(wildcard $(SRC_DIR)/*.c)
OBJ := $(SRC:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)

CPPFLAGS := -Iinclude -MMD -MP
CFLAGS   := -Wall
LDFLAGS  := -Llib
LDLIBS   := -lm

.PHONY: all clean

all: $(EXE)

$(EXE): $(OBJ) | $(BIN_DIR)
    $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(OBJ_DIR)
    $(CC) $(CPPFLAGS) $(CFLAGS) -c $&amp;lt; -o $@

$(BIN_DIR) $(OBJ_DIR):
    mkdir -p $@

clean:
    @$(RM) -rv $(BIN_DIR) $(OBJ_DIR)

-include $(OBJ:.o=.d)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정한 '대상'이 없는 make 유틸리티는 파일의 첫 번째 대상을 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 대상은 보통 '모두'로 명명됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;게시된 파일의 경우 개체 파일을 만들고 명령줄에 대상이 지정되지 않은 경우 실행 파일을 계속 만들지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 제안합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SHELL := /bin/sh

# following so could define executable name on command line
# using the '-D' parameter
#ifndef $(NAME)
    NAME := hellomake
#endif

# use ':=' so macros only evaluated once


MAKE    :=  /usr/bin/make
CC      :=  /usr/bin/gcc

CFLAGS  := -g -Wall -Wextra -pedantic
LFLAGS  :=

ODIR    := obj
IDIR    := ../include
LIBS    :=
LIBPATH := ../lib

DEPS    := $(wildcard $(IDIR)/*.h)
SRCS    := $(wildcard *.c)
OBJS    := $(SRCS:.c=.o)

.PHONY: all
all: $(NAME) $(OBJS)

$(ODIR)/%.o: %.c $(DEPS)
    $(CC) $(CFLAGS) -c -o $@ $&amp;lt; -I$(DEPS)

$(NAME): $(OBJS)
    $(CC) $(LFLAGS) -o $@ $^ -L$(LIBPATH) -l$(LIBS)

.PHONY: clean
clean:
    rm -f $(ODIR)/*.o
    rm -f $(NAME)


however, in your proposed project,
not every source file needs every header file
so should use either gcc or sed to generate the dependency files
then use makefile rules similar to the following,
which may need a little 'tweaking' for your project
because the include files are not in the same directory
as the source files:

DEP := $(SRCS:.c=.d)

#
#create dependency files
#
%.d: %.c 
    # 
    # ========= START $&amp;lt; TO $@ =========
    $(CC) -M $(CPPFLAGS) $&amp;lt; &amp;gt; $@.$$$$;                      \
    sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' &amp;lt; $@.$$$$ &amp;gt; $@;     \
    rm -f $@.$$$$
    # ========= END $&amp;lt; TO $@ =========

# 
# compile the .c files into .o files using the compiler flags
#
%.o: %.c %.d 
     # 
     # ========= START $&amp;lt; TO $@ =========
     $(CC) $(CCFLAGS) -c $&amp;lt; -o $@ -I$(IDIR) 
     # ========= END $&amp;lt; TO $@ =========
     # 

# include the contents of all the .d files
# note: the .d files contain:
# &amp;lt;filename&amp;gt;.o:&amp;lt;filename&amp;gt;.c plus all the dependencies for that .c file 
# I.E. the #include'd header files
# wrap with ifneg... so will not rebuild *.d files when goal is 'clean'
#
ifneq &quot;$(MAKECMDGOALS)&quot; &quot;clean&quot;
-include $(DEP)
endif
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 Makefile 정의는 당신의 질문에 나타나므로 내가 보기에는 괜찮은 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 이름 앞에 컴파일러 옵션을 지정해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(ODIR)/%.o: %.c $(DEPS)
    $(CC) $(CFLAGS) -c -o $@ $&amp;lt;

hellomake: $(OBJ)
    gcc $(CFLAGS) -o $@ $^
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뛰어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;make&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스 디렉토리에서.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류가 발생했을 때&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;*gcc: fatal error: no input files
compilation terminated.*
&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;&quot;, 즉, 당신은 사물 파일을 가지고 있지 않다는 뜻입니다.&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;Makefile 에서 &quot; &quot; &lt;em papago-id=&quot;61-1&quot;&gt;&lt;code papago-id=&quot;61-1-0&quot;&gt;${OBJS} :=&lt;/code&gt;&lt;/em&gt;행을 확인해보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안녕, 형!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 프로젝트라면&quot;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;helloFunc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot; 의 아키텍처는 바로 이 점을 좋아합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;helloFunc

|

|__Makefile

|__build

|__include

|     |__hellomake.h

|__src

     |__hellofunc.cpp
 
     |__hellomake.cpp
     
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Makefile은 다음과 같아야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# This is a Makefile for separated multiple sources to build with VSCode on mac
# Thanks, Job Vranish.
# (https://spin.atomicobject.com/2016/08/26/makefile-c-projects/)
# Reference: Makefile Tutorial
# (https://makefiletutorial.com/)
# Reference: @yagiyuki from Qiita
# (https://qiita.com/yagiyuki/items/ff343d381d9477e89f3b)
# Reference: simonsso from Github
# (https://github.com/simonsso/empty-cpp-project/blob/master/Makefile)
# Reference: Chinese Website blogger CDNS
# (https://blog.csdn.net/qq_22073849/article/details/88893201)

# (1)Compiler
# clang++
CXX = clang++
# (2)Compile options
# -Wall -Wextra -std=c++11 -g
CXX_FLAGS = -Wall -Wextra -std=c++11 -g
# (3)Build task directory path
# I do care about out-of-source builds
# ./build
BUILD_DIR ?= ./build
# (4)Source files directory path
# ./src
SRC_DIRS ?= ./src
# (5)Library files directory path
LIBDIR := 
# (6)Add library files
LIBS :=
# (7)Target file, excutable file.
# main
TARGET ?= main
# (8)Source files(code), to be compiled
# Find source files we want to compile 
# *expression must around by single quotos
# ./src/bank.cpp ./src/main.cpp
SRCS := $(shell find $(SRC_DIRS) -name '*.cpp' -or -name '*.c' -or -name '*.s')
# (9)Object files
# String substituion for every C/C++ file
# e.g: ./src/bank.cpp turns into ./build/bank.cpp.o
# ./build/bank.cpp.o  ./build/main.cpp.o
OBJS := $(patsubst %.cpp, ${BUILD_DIR}/%.cpp.o, $(notdir $(SRCS)))
# (10)Dependency files
# which will generate a .d file next to the .o file. Then to use the .d files,
# you just need to find them all:
# 
DEPS := $(OBJS:.o=.d)
# (11)Include files directory path
# Every folder in ./src find include files to be passed via clang 
# ./include
INC_DIRS := ./include
# (12)Include files add together a prefix, clang make sense that -I flag
INC_FLAGS := $(addprefix -I,$(INC_DIRS))
# (13)Make Makefiles output Dependency files
# That -MMD and -MP flags together to generate Makefiles 
# That generated Makefiles will take .o as .d to the output
# That &quot;-MMD&quot; and &quot;-MP&quot; To generate the dependency files, all you have to do is
# add some flags to the compile command (supported by both Clang and GCC):
CPP_FLAGS ?= $(INC_FLAGS) -MMD -MP
# (14)Link: Generate executable file from object file
# make your target depend on the objects files:
${BUILD_DIR}/${TARGET} : $(OBJS)
    $(CXX) $(OBJS) -o $@ 
# (15)Compile: Generate object files from source files
# $@ := {TARGET}
# $&amp;lt; := THE first file
# $^ all the dependency
# C++ Sources
$(BUILD_DIR)/%.cpp.o: $(SRC_DIRS)/%.cpp
    $(MKDIR_P) $(dir $@)
    $(CXX) $(CPP_FLAGS) $(CXX_FLAGS) -c $&amp;lt; -o $@

#(16)Delete dependence files, object files, and the target file
.PHONY: all clean 
all: ${BUILD_DIR}/${TARGET}


clean:
    $(RM) $(DEPS) $(OBJS) ${BUILD_DIR}/${TARGET}

-include $(DEPS)

MKDIR_P ?= mkdir -p
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요한 Linux 버전으로 만들기 파일 변경:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# (1)Compiler
# g++
CXX = g++
# (2)Compile options
# -Wall -Wextra -std=c++11 -g
CXX_FLAGS = -Wall -Wextra -std=c++11 -g
# (3)Build task directory path
# I do care about out-of-source builds
# ./build
BUILD_DIR ?= ./build
# (4)Source files directory path
# ./src
SRC_DIRS ?= ./src
# (5)Library files directory path
LIBDIR := 
# (6)Add library files
LIBS :=
# (7)Target file, excutable file.
# main
TARGET ?= main
# (8)Source files(code), to be compiled
# Find source files we want to compile 
# *expression must around by single quotos
# ./src/bank.cpp ./src/main.cpp
SRCS := $(shell find $(SRC_DIRS) -name '*.cpp' -or -name '*.c' -or -name '*.s')
# (9)Object files
# String substituion for every C/C++ file
# e.g: ./src/bank.cpp turns into ./build/bank.cpp.o
# ./build/bank.cpp.o  ./build/main.cpp.o
OBJS := $(patsubst %.cpp, ${BUILD_DIR}/%.cpp.o, $(notdir $(SRCS)))
# (10)Dependency files
# which will generate a .d file next to the .o file. Then to use the .d files,
# you just need to find them all:
# 
DEPS := $(OBJS:.o=.d)
# (11)Include files directory path
# Every folder in ./src find include files to be passed via clang 
# ./include
INC_DIRS := ./include
# (12)Include files add together a prefix, gcc make sense that -I flag
INC_FLAGS := $(addprefix -I,$(INC_DIRS))
# (13)Make Makefiles output Dependency files
# That -MMD and -MP flags together to generate Makefiles 
# That generated Makefiles will take .o as .d to the output
# That &quot;-MMD&quot; and &quot;-MP&quot; To generate the dependency files, all you have to do is
# add some flags to the compile command (supported by both Clang and GCC):
CPP_FLAGS ?= $(INC_FLAGS) -MMD -MP
# (14)Link: Generate executable file from object file
# make your target depend on the objects files:
${BUILD_DIR}/${TARGET} : $(OBJS)
    $(CXX) $(OBJS) -o $@ 
# (15)Compile: Generate object files from source files
# $@ := {TARGET}
# $&amp;lt; := THE first file
# $^ all the dependency
# C++ Sources
$(BUILD_DIR)/%.cpp.o: $(SRC_DIRS)/%.cpp
    $(MKDIR_P) $(dir $@)
    $(CXX) $(CPP_FLAGS) $(CXX_FLAGS) -c $&amp;lt; -o $@

#(16)Delete dependency files, object files and the target file
.PHONY: all clean 
all: ${BUILD_DIR}/${TARGET} 
clean:
    $(RM) $(DEPS) $(OBJS) ${BUILD_DIR}/${TARGET}

-include $(DEPS)

MKDIR_P ?= mkdir -p
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 주목해야 할 것은 당신의 &quot;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Makefile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot; file은 include files와 source files의 동일한 디렉토리입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 당신은 당신의 것을 바꾸어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;IDIR:=../include&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot; &quot;IDIR:=./include&quot;로 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Makefile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;종료!&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;윈도우 설정에서 사용하고 있는 내용은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CC = g++
CFLAGS   = -Wall -std=c++20

SRCDIR   = src
HEADDIR  = include
OBJDIR   = build
BINDIR   = bin
# where the executable will be stored
EXECUTABLE := $(BINDIR)/main

# list of all source files
SOURCES  := $(wildcard $(SRCDIR)/*.cpp)
# list of all header files
INCLUDES := $(wildcard $(HEADDIR)/*.h)
# from the list of all source files, create a list of all object files
OBJECTS  := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)

# all: clean $(EXECUTABLE)
all: $(EXECUTABLE)


# Link: Generate executable file from object file
$(EXECUTABLE): $(OBJECTS)
    @echo LINKING..... $(CC) -o $@ $(OBJECTS)
    @$(CC) -o $@ $(OBJECTS)
    @echo RUNNING: $(EXECUTABLE)
    @$(EXECUTABLE)
# Compile: Generate object files from source files
# $@ := {EXECUTABLE}
# $&amp;lt; := THE first file
# $^ all the dependency
# C++ Sources
$(OBJDIR)/%.o : $(SRCDIR)/%.cpp | makedirs
    @echo COMPILING... $(CC) $(CFLAGS) -c &quot;$&amp;lt;&quot; -o &quot;$@&quot;
    @$(CC) $(CFLAGS) -c $&amp;lt; -o $@

# `|` is order-only-prerequisites
# https://www.gnu.org/software/make/manual/html_node/Prerequisite-Types.html
makedirs:
# check if the file exists; if not, create it
# mkdir -p $(OBJDIR) in linux
    @if not exist &quot;$(OBJDIR)&quot; mkdir $(OBJDIR)
    @if not exist &quot;$(BINDIR)&quot; mkdir $(BINDIR)

#Delete dependence files, object files, and the EXECUTABLE file
clean:
    @echo CLEANING UP
# check if the directories exist; if so, delete them
    @if exist &quot;$(OBJDIR)&quot; rmdir /s /q $(OBJDIR)
    @if exist &quot;$(BINDIR)&quot; rmdir /s /q $(BINDIR)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/30573481/how-to-write-a-makefile-with-separate-source-and-header-directories&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1559</guid>
      <comments>https://factcode.tistory.com/1559#entry1559comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:51:32 +0900</pubDate>
    </item>
    <item>
      <title>Angular 4+ 앱에서 구성 요소별 모듈을 만들어야 합니까?</title>
      <link>https://factcode.tistory.com/1558</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular 4+ 앱에서 구성 요소별 모듈을 만들어야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저희는 Angular 4 애플리케이션(+-150 구성품)을 중간 크기로 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 구성 요소 중 대부분은 서비스 클래스를 주입해야 하며 앱의 다른 구성 요소에 대한 선언이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리가 실험해 왔고, 훨씬 더 개발자 친화적이라는 것을 알게 된 접근 방식은 구성 요소별로 모듈을 만드는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모듈은 자식 구성 요소 모듈을 가져오고 구성 요소에 필요한 모든 서비스를 제공(또는 가져오기)합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 다른 구성 요소가 모듈을 통해 참조할 수 있도록 구성 요소 자체를 내보냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성 요소의 구성이 간단해지고 구성 요소의 테스트 고정 장치를 매우 간단하게 설정할 수 있습니다(이전에는 종속성과 하위 구성 요소 트리 종속성의 반복이 많았던 부분입니다).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 접근 방식은 구성 요소 기반 아키텍처와 일치하는 것으로 보이며 구성 요소 의존성이 무엇인지에 대한 캡슐화 형태를 허용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실이기엔 너무 기분이 좋아요 ;)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 질문은 이렇게 많은 모듈을 사용하는 것의 성능(또는 다른) 영향은 무엇인가 하는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 각 &lt;strong papago-id=&quot;8-1&quot;&gt;구성요소당&lt;/strong&gt; 모듈 &lt;strong papago-id=&quot;8-1&quot;&gt;하나&lt;/strong&gt;가 당신의 Angular 앱을 설계하는 가장 좋은 방법이라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 구성 요소에 의존하는 경우, &lt;strong papago-id=&quot;9-3&quot;&gt;직접 종속성&lt;/strong&gt;이며 간접 종속성을 신경 쓸 필요가 없는 각 구성 요소와 관련된 &lt;strong papago-id=&quot;9-1&quot;&gt;구성&lt;/strong&gt; 요소 &lt;strong papago-id=&quot;9-1&quot;&gt;모듈&lt;/strong&gt;만 포함할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;처음에는 작업이 더 많은 것처럼 보일지도 모르지만, 그것은 여러분에게 보답할 것이고, 유지보수 문제를 덜 줄 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;ComponentA&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 달려 있습니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ComponentB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 달려있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ComponentC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;ModuleC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 관련된&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ComponentC&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;ModuleB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 관련된&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ComponentB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수입하는 것&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ModuleC&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;ModuleA&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 관련된&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ComponentA&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;ModuleB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(직접 가져올 필요는 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ModuleC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한다면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ComponentB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제는 에 달려있습니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ComponentD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(포함하는것처럼&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;my-component-d&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿에서)에 따라 중지됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ComponentC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 그냥 변합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ModuleB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 의존하는 모든 구성 요소.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ComponentB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 방법을 사용한다면 잘 작동할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수백 개의 구성 요소에 대해 지금 생각해 보십시오.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 개의 구성요소에 의존할 것인가?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ComponentB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제는 스크립트 태그에 js 파일을 포함하는 이전 방식(또는 너무 오래되지 않음)과 유사하다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;build/a.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;build/b.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;build/c.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;b&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;c&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 따라 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;d&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 가져오는 모든 페이지&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;b&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수입할 일이 있습니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;d&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그 외에도 유지보수 악몽으로 이어질 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제거하는 것을 잊어버릴 수도 있습니다. (이제 불필요한)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;c.js&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 페이지에서 불필요하게 가져오기 때문에 부팅 시간이 증가하거나 &lt;strong papago-id=&quot;38-1&quot;&gt;가져오는&lt;/strong&gt; 모든 파일에서 제거할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;b.js&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;e.js&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 달려있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;c.js&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 페이지의 일부 기능을 손상시킵니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 다음을 가져오는 것이 훨씬 낫다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;build/bundle.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;build/vendor.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;build/main.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;webpack&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성 요소가 많은 모듈을 만들고 가져오기만 하면 되는 방식이 &lt;strong papago-id=&quot;46-1&quot;&gt;있지만 사용&lt;/strong&gt;하지 않는 구성 요소를 여러 개 가져오게 되고 게으른 로딩을 사용하면 앱모듈에서 해당 모듈을 가져오지 않으면 &lt;strong papago-id=&quot;46-3&quot;&gt;모듈이 커져서&lt;/strong&gt; &lt;strong papago-id=&quot;46-5&quot;&gt;부팅 시간이 늘어날&lt;/strong&gt; 수 &lt;strong papago-id=&quot;46-3&quot;&gt;있습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;47-1&quot;&gt;기능 모듈을 사용&lt;/strong&gt;하면 모듈당 하나의 구성 요소의 접근 방식을 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성 &lt;strong papago-id=&quot;47-3&quot;&gt;요소 모듈&lt;/strong&gt;을 (구성 요소 자체가 아닌) 피쳐 모듈로 가져오기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;feature.module.ts:&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;imports: [
    ComponentAModule,
    ComponentBModule,
    ComponentCModule,
]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(수출도 하실 수 있습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 라이브러리를 만들 때 이 방법이 가장 좋은 방법이라고 생각합니다. 그렇지 않으면 라이브러리의 &lt;strong papago-id=&quot;50-1&quot;&gt;소비자&lt;/strong&gt;가 라이브러리의 구성 요소를 1개 또는 2개만 사용하더라도 모든 &lt;strong papago-id=&quot;50-3&quot;&gt;구성 요소를 가져오도록&lt;/strong&gt; &lt;strong papago-id=&quot;50-1&quot;&gt;강제&lt;/strong&gt;할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 문제가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ionic3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;: 미니어처, 미니어처&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ionic-angular&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도서관은 가지고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;437KB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그중에서&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;292KB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성 요소(hopefully와 함께 변경됨)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ionic4&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 몇 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 몇 개만 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ionic&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성품, 모두 가져올 필요는 &lt;strong papago-id=&quot;57-1&quot;&gt;없었지만&lt;/strong&gt;, (리포트를 포크하거나 사용을 중단하지 않는 한) &lt;strong papago-id=&quot;57-1&quot;&gt;선택&lt;/strong&gt;의 여지가 &lt;strong papago-id=&quot;57-1&quot;&gt;없습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 176개의 구성 요소가 있는 앱을 가지고 있는데 이것이 내 생각에 가장 좋은 접근 방법이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전에는 기능 모듈에 여러 구성 요소를 포함시켰는데 나중에 두통이 생겼습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 기능 모듈에서 구성 요소를 다른 기능 모듈로 변경할 때 더 어려웠습니다(해당 &lt;strong papago-id=&quot;58-1&quot;&gt;종속성은 어떻게&lt;/strong&gt; 됩니까&lt;strong papago-id=&quot;58-1&quot;&gt;?).&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;58-1&quot;&gt; 그것들은 모두 합쳐졌습니다&lt;/strong&gt;).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서비스에 대한 만족스러운 접근 방법을 찾지 못했습니다(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@Injectable()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 터프( 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/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;이것은 저의 경험을 바탕으로 한 저의 의견입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구글에서 처음으로 나온 결과인데다 끝없이 검색해보니 다른 사람들에게 전해줄 것이 있는 것 같아 답변을 덧붙이고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 영역을 제외한 모든 영역을 화면당 모듈로 작성하는 애플리케이션이 있습니다. 구성 요소는 아니지만 가깝습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 최근에 게으른 모듈이 정말 도움이 되는지 알고 싶었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;65&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;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;무트. 대부분의 앵글 앱은 이 질문을 받은 경우에도 PWA 또는 프리페칭을 사용하여 사용자가 최대한 많은 앱을 얻을 수 있도록 하며, 클라우드 프론트를 통해 프록시되는 S3 버킷과 같은 전송 소스에 대한 업데이트에서 부서진 번들로 인해 경험이 중단되지 않도록 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;import() 기능을 사용하지 않으면 laze loading도 전혀 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 다른 모듈에서 Import 속성을 사용하여 다른 모듈을 Import하는 것만으로는 실제로 로드가 게으르지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;68&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;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니요. 모듈은 평균 포스트 컴파일 비용이 8kb이며 이러한 방식의 코딩을 유지하기 위해 내 앱이 최대 556kb까지 사용할 수 있는 27개의 모듈로 계산했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;70&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;71&quot; papago-translate=&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;실제로 당신은 코드가 고르게 퍼져있는 것을 원하지만 파일이 너무 크지 않아 각각 최대 600kb로 느린 3G 연결에서 쉽게 다운로드 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;72&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;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 사용자 기기에 따라 크게 달라지는데, 저는 여기서 확실한 테스트가 없지만, 여러분의 평균적인 휴대전화도 큰 앱을 쉽게 다룰 수 있어서 번들당 100개 이하의 구성요소라면 아마도 여러분의 앱을 다룰 수 있을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 모듈이 파일에 있고 JS 엔진에 의해 트랜스코딩되어 앱에 무게를 더한다는 것을 기억해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로 브라우저에서 두 가지 버전의 앱으로 10개(예, 매우 신뢰할 수는 없지만 빠른 버전)의 요청을 테스트했는데, 하나는 해당 앱의 마지막 부분에 게으른 모듈을 추가하도록 변경하고 (변경 사항 없음) 변경 사항이 있는 것이 없는 것보다 더 자주 반환되는 것을 발견했습니다.&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;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SOC&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예, 하지만 이것은 개발자의 느낌에 주관적입니다. 스캠과 같은 일부는 아무도 이해하지 못하는 미친 패러다임을 좋아하고, 어떤 방식으로든 SOC는 폴더의 끝없는 네스팅을 만드는 대신 모듈을 통해 구성 요소를 건전하게 분리함으로써 쉽게 달성될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;78&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;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;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트에 따라 Angular는 이제 독립 실행형 구성 요소 https://angular.io/guide/standalone-components 를 지원하며 곧 새로운 Angular 애플리케이션이 모듈을 사용하지 않고 코딩될 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/46434830/should-i-create-a-module-per-component-in-angular-4-app&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Angular</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1558</guid>
      <comments>https://factcode.tistory.com/1558#entry1558comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:51:17 +0900</pubDate>
    </item>
    <item>
      <title>mysql 테이블에서 테이블 코멘트를 액세스하려면 어떻게 해야 합니까?</title>
      <link>https://factcode.tistory.com/1557</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql 테이블에서 테이블 코멘트를 액세스하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 하면 mysql 테이블에서 테이블 코멘트만 &lt;em papago-id=&quot;1-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;'my comment' 문자열만 받는 방법을 알고 싶습니다(perl =를 통해 ideally).&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;-- Abbreviated output for convenience.
SHOW TABLE STATUS WHERE Name=&quot;foo&quot;
+------+--------+---------+------------+------+----------------+---------------+
| Name | Engine | Version | Row_format | Rows | Create_options | Comment       |
+------+--------+---------+------------+------+----------------+---------------+
| foo  | MyISAM |      10 | Fixed      |    0 |                | my comment    | 
+------+--------+---------+------------+------+----------------+---------------+
&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;SHOW CREATE TABLE foo;
+-------+------------------------------------------------------------------------------+
| Table | Create Table                                                                 |
+-------+------------------------------------------------------------------------------+
| fooo  | CREATE TABLE `fooo` (`id` int(11) NOT NULL PRIMARY KEY) COMMENT='my comment' | 
+-------+------------------------------------------------------------------------------+
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;0-1&quot;&gt;OMG 포니즈&lt;/em&gt;의 답변을 바탕으로 하지만,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;INFORMATION_SCHEMA.TABLES&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;INFORMATION_SCHEMA.COLUMNS&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 웹을 둘러볼 때, 제가 발견할 수 있는 것은 칼럼의 논평에 대한 정보뿐이었지만, 테이블에 대한 정보는 찾을 수 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;2-1&quot;&gt;이렇게&lt;/em&gt; 하면 표의&lt;em papago-id=&quot;2-1&quot;&gt; 의견&lt;/em&gt;을 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-sql prettyprint-override&quot;&gt;&lt;code&gt;SELECT table_comment 
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE table_schema='my_cool_database' 
        AND table_name='user_skill';
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;+--------------------------+
| table_comment            |
+--------------------------+
| my awesome comment       | 
+--------------------------+
&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;SHOW TABLE STATUS WHERE Name='table_name';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 결과의 &quot;Comment&quot; 키를 선택합니다(php의 mysqli_fetch_associate()).&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/3938966/how-can-i-access-the-table-comment-from-a-mysql-table&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MySQL</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1557</guid>
      <comments>https://factcode.tistory.com/1557#entry1557comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:53:47 +0900</pubDate>
    </item>
    <item>
      <title>시스템에서 Out Of Memory 예외가 발생했습니다.그림그리기.Image.FromFile()</title>
      <link>https://factcode.tistory.com/1556</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템에서 Out Of Memory 예외가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그림그리기.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Image.FromFile()&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;썸네일을 생성하는 이미지 업로더와 크로퍼가 있으며 다음 줄에서 Out Of Memory 예외가 발생하기도 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Dim bm As Bitmap = System.Drawing.Image.FromFile(imageFile)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류의 발생은 매우 드물고 매우 드물지만, 저는 항상 오류의 원인이 무엇인지 알고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;imageFile 변수는 서버일 뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지 경로에 대한 MapPath입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전에 이 문제를 경험한 사람이 있는지, 원인이 무엇인지 아는 사람이 있는지 궁금합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;혹시 이미지 크기인가요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요하다면 코드와 제가 가지고 있는 어떤 근거 있는 정보를 게시할 수 있지만, 이것에 대한 사람들의 의견을 듣고 싶습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'Out Of Memory'란 것을 알아둘 가치가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예외가 항상 &lt;em papago-id=&quot;5-1&quot;&gt;메모리&lt;/em&gt; 부족을 의미하는 것은 아닙니다. 특히 파일을 다룰 때는 그렇지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 이유에서인지 손잡이가 부족할 경우에도 그럴 수 있다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비트맵은 다 처리하고 나면 다 처리하는 건가요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단일 이미지에 대해 반복적으로 발생합니까?&lt;/font&gt;&lt;/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;Image.FromFile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 핸들을 열어두고 해결책은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Image.FromStream&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
   using (Image original = Image.FromStream(fs))
   {
      ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명시적 사용&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Dispose()&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; ,a&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;using()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문 또는 값을 다음으로 설정&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비트맵으로 문제를 해결하지는 못합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Image.FromFile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 앱이 잠시 실행되고 많은 파일을 연다면 사용을 고려해 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Image.FromStream()&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;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;&quot;Out Of Memory&quot;가 매번 같은 시점에 발생한 것으로 드러났습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;변환할 이미지가 있는 폴더를 살펴보니 문제를 만들고 있는 파일이 sumbs.db였습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지 파일만 변환되고 문제가 해결되었는지 확인하기 위해 코드를 추가했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 코드는 기본적으로&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;For Each imageFile as FileInfo in fileList
If imageFile.Extension = &quot;.jpg&quot; Or imageFile.Extension = &quot;.gif&quot; Then
    ...proceed with the conversion
End If
Next
&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;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 파일을 다른 곳에서 열지 않았는지도 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 두 번 열었을 때(파일이 있는 경우에도).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;열기() 메모리 부족&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예외도 던져졌습니다...&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;읽기 모드로 열 수도 있습니다. (두 곳에서 동시에 사용하려면)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; public Image OpenImage(string previewFile)
        {
            FileStream fs = new FileStream(previewFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            return Image.FromStream(fs);
        }
&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;font class=&quot;papago-parent&quot;&gt;코딩을 해보지는 못했지만, 시도해보면 프로그램이 휘어지는 것을 막을 수 있을 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오늘 이미지 크기를 조정한 후 잘라낼 때도 비슷한 문제가 있었습니다. 이 코드를 사용하여 이미지 크기를 조정했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private static Image resizeImage(Image imgToResize, Size size)
{
   int sourceWidth = imgToResize.Width;
   int sourceHeight = imgToResize.Height;

   float nPercent = 0;
   float nPercentW = 0;
   float nPercentH = 0;

   nPercentW = ((float)size.Width / (float)sourceWidth);
   nPercentH = ((float)size.Height / (float)sourceHeight);

   if (nPercentH &amp;lt; nPercentW)
      nPercent = nPercentH;
   else
      nPercent = nPercentW;

   int destWidth = (int)(sourceWidth * nPercent);
   int destHeight = (int)(sourceHeight * nPercent);

   Bitmap b = new Bitmap(destWidth, destHeight);
   Graphics g = Graphics.FromImage((Image)b);
   g.InterpolationMode = InterpolationMode.HighQualityBicubic;

   g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
   g.Dispose();

   return (Image)b;
}
&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;private static Image cropImage(Image img, Rectangle cropArea)
{
   Bitmap bmpImage = new Bitmap(img);
   Bitmap bmpCrop = bmpImage.Clone(cropArea,
   bmpImage.PixelFormat);
   return (Image)(bmpCrop);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 코드를 이렇게 불렀더니...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Image img = Image.FromFile(@&quot;C:\Users\****\Pictures\image.jpg&quot;);
img = ImageHandler.ResizeImage(img, new Size(400, 300));
img = ImageHandler.CropImage(img, new Rectangle(0, 25, 400, 250));
long quality = 90;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;크롭 부분에서 계속 오류가 났는데 리사이저는 잘 작동했습니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;알고 보니, 리사이저 안에서 일어난 일은 크롭 기능에 오류를 던지는 것이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;크기를 조정한 계산 결과 이미지의 실제 치수는 제가 넘겨준 400이 아니라 399 정도가 되었습니다.&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;그래서 제가 크롭에 대한 논쟁으로 400을 넘겼을 때, 그것은 400px 너비 bmp의 399px 너비 이미지를 크롭하려다가 메모리 부족 오류를 던졌습니다!&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;위 코드의 대부분은 http://www.switchonthecode.com/tutorials/csharp-tutorial-image-editing-saving-cropping-and-resizing 에서 찾을 수 있습니다.&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;public static Image loadImage(string imagePath)
    {
        Image loadedImage = null;
        if (!File.Exists(imagePath)) return loadedImage;
        try
        {
            FileInfo fileInfo = new FileInfo(imagePath);
            if (fileInfo.Extension.Equals(&quot;.jpg&quot;) || fileInfo.Extension.Equals(&quot;.jpeg&quot;) ||
               fileInfo.Extension.Equals(&quot;.bmp&quot;) || fileInfo.Extension.Equals(&quot;.png&quot;) ||
               fileInfo.Extension.Equals(&quot;.gif&quot;))
            {
                loadedImage = Image.FromFile(imagePath);
            }
            else if (fileInfo.Extension.Equals(&quot;.ico&quot;))
            {
                Bitmap aBitmap = Bitmap.FromHicon(new
                                           Icon(imagePath, new Size(200, 200)).Handle);
                loadedImage = ImageFuncs.ResizeImage(aBitmap, new Size(30, 30));
            }
        }
        catch (Exception eLocal)
        {
            MessageBox.Show(imagePath + &quot; loading error: &quot; + eLocal.Message);
        }
        return loadedImage;
    }
&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;TIFF를 PDF로 변환하기 위해 작성한 유틸리티에도 동일한 문제가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;종종 당신과 같은 라인에서 &quot;기억상실&quot; 오류가 발생하곤 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;System.Drawing.Image.FromFile(imageFile)
&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;그리고 파일 확장자가 &quot;.tiff&quot;일 때만 오류가 발생하고 확장자가 &quot;.tif&quot;인 상태에서 이름을 변경한 후에는 정상적으로 작동했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드에서 이미지 뷰어를 사용하여 이미지를 열 수 있는지 확인하고 싶은 다른 위치를 확인하기 전에 동일한 문제가 발생했으며 이미지가 a임에도 불구하고 손상/손상되었음을 확인했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1KB 크기의 PNG 파일.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 위치에 새 이미지를 추가한 다음 잘 작동했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Tiff 파일을 일괄 처리하는 데도 문제가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 파일이 예외를 허용하지 않지만 ASP에서 &quot;Out of Memory&quot; 예외를 허용하는 파일은 거의 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET 4.0.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 바이너리 데이터를 사용하여 몇 개의 파일과 동일한 폴더 내에서 그 이유를 알아냈습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASP에 대한 권한 문제가 될 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 파일이 작업 파일이기 때문에 NET ASPNET 또는 NETWORK SERVICE 계정입니다.&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;iTextSharp.text를 열었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지 클래스에서 GetInstance()에 대해 오버로드된 메서드가 많이 있음을 발견했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드를 사용하여 문제를 해결했습니다. 참고: 문제가 있는 파일에 대해 catch block이 실행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;                iTextSharp.text.Image image = null;
            try
                {
                    var imgStream = GetImageStream(path);
                     image = iTextSharp.text.Image.GetInstance(imgStream);
                }
                catch {
                    iTextSharp.text.pdf.RandomAccessFileOrArray ra = null;
                    ra = new iTextSharp.text.pdf.RandomAccessFileOrArray(path);
                    image = iTextSharp.text.pdf.codec.TiffImage.GetTiffImage(ra, 1);

                    if (ra != null)
                        ra.Close();

                }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IIS에서 서비스를 제공하는 경우 응용프로그램 풀을 재활용해 보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 저에게 비슷한 이미지 업로드 &quot;Out of Memory&quot; 오류를 해결해 주었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여전히 오류가 발생하는 최소 양식 예제를 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        private void button1_Click(object sender, EventArgs e)
    {
        string SourceFolder = ImageFolderTextBox.Text;
        string FileName = &quot;&quot;;
        DirectoryInfo Mydir = new DirectoryInfo(SourceFolder);
        FileInfo[] JPEGS = Mydir.GetFiles(&quot;*.jpg&quot;);
        for (int counter = 0; counter &amp;lt; JPEGS.Count(); counter++)
        {
            FileName = Mydir + &quot;\\&quot; + JPEGS[counter].Name;
            //using (Image MyImage = System.Drawing.Image.FromFile(FileName))
            using (FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                StatusBtn.BackColor = Color.Green;
            }
        }
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이미지를 이용하여 댓글을 단 두 개의 아웃라인을 모두 사용해 보았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;From File() 및 FileStream()을 사용하는 행.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 다 파일 오류가 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;FromFile() 오류: 시스템.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;OutOf Memory&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예외: '메모리 부족'&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 스트림() 오류: 시스템입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;권한 없는 액세스&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예외: '경로에 접근' E:\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DCIM\100Canon\dsc_7218.jpg'이(가) 거부되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 발생하는 줄 바로 앞에 중단점을 두었고 윈도우 이미지 뷰어를 사용하여 이미지 파일을 열 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 뷰어를 닫았고 다음 줄로 이동하여 오류가 발생한 후 Windows 뷰어로 더 이상 이미지를 볼 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 파일 접근 권한이 없다는 메시지가 나타납니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 파일을 삭제할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류는 반복될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;10번 넘게 했어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;매번 오류가 발생하면 FileName에 사용된 파일을 삭제합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 파일이 손상되지 않은 것으로 확인되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지를 사용한 나의 원래 코드.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;FromFile()은 2년 전에 컴파일했을 때 잘 작동했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실 .exe 파일은 잘 실행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드의 다른 곳에서 사소한 변경을 했는데 이 오류 없이는 코드가 컴파일되지 않는 것을 알고 놀랐습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 페이지의 정보를 바탕으로 FileStream() 방법을 시도했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1108607/out-of-memory-exception-on-system-drawing-image-fromfile&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>asp.net</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1556</guid>
      <comments>https://factcode.tistory.com/1556#entry1556comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:53:41 +0900</pubDate>
    </item>
    <item>
      <title>숨겨진 필드를 추가하여 체크아웃 및 주문을 통해 처리</title>
      <link>https://factcode.tistory.com/1555</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;숨겨진 필드를 추가하여 체크아웃 및 주문을 통해 처리&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주문에 따라 읽기 전용(또는 보이지 않음)으로 미리 채워진 체크아웃 프로세스에 확인 코드를 추가하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;고객이 주문을 확인하려면 이 코드가 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;wocommerce_checkout_fields 필터의 청구 필드에 사용자 지정 배열을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//VID
$fields['billing']['billing_vid'] = array( 
'label'     =&amp;gt; __('', 'woocommerce'), 
'placeholder'   =&amp;gt; _x('', 'placeholder', 'woocommerce'), 
'required'  =&amp;gt; false,
'type'      =&amp;gt; 'text', 
'class'     =&amp;gt; array('form-row-wide'), 
'clear'     =&amp;gt; false,
'default' =&amp;gt; wp_rand(10000,99999)   
);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 되지만, 고객은 체크아웃 프로세스 중에도 필드에 내용을 작성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제게 해결책이 있는 사람이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;6-0&quot;&gt;업데이트 2&lt;/strong&gt;: &lt;em papago-id=&quot;6-2&quot;&gt;Woocommerce 3+&lt;/em&gt;에 대한 &lt;em papago-id=&quot;6-2&quot;&gt;호환성 추가&lt;/em&gt; 및 &lt;em papago-id=&quot;6-2&quot;&gt;일부&lt;/em&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;// Outputting the hidden field in checkout page
add_action( 'woocommerce_after_order_notes', 'add_custom_checkout_hidden_field' );
function add_custom_checkout_hidden_field( $checkout ) {

    // Generating the VID number
    $vid_number = wp_rand(10000,99999);

    // Output the hidden field
    echo '&amp;lt;div id=&quot;user_link_hidden_checkout_field&quot;&amp;gt;
            &amp;lt;input type=&quot;hidden&quot; class=&quot;input-hidden&quot; name=&quot;billing_vid&quot; id=&quot;billing_vid&quot; value=&quot;' . $vid_number . '&quot;&amp;gt;
    &amp;lt;/div&amp;gt;';
}

// Saving the hidden field value in the order metadata
add_action( 'woocommerce_checkout_update_order_meta', 'save_custom_checkout_hidden_field' );
function save_custom_checkout_hidden_field( $order_id ) {
    if ( ! empty( $_POST['billing_vid'] ) ) {
        update_post_meta( $order_id, '_billing_vid', sanitize_text_field( $_POST['billing_vid'] ) );
    }
}

// Displaying &quot;Verification ID&quot; in customer order
add_action( 'woocommerce_order_details_after_customer_details', 'display_verification_id_in_customer_order', 10 );
function display_verification_id_in_customer_order( $order ) {
    // compatibility with WC +3
    $order_id = method_exists( $order, 'get_id' ) ? $order-&amp;gt;get_id() : $order-&amp;gt;id;

    echo '&amp;lt;p class=&quot;verification-id&quot;&amp;gt;&amp;lt;strong&amp;gt;'.__('Verification ID', 'woocommerce') . ':&amp;lt;/strong&amp;gt; ' . get_post_meta( $order_id, '_billing_vid', true ) .'&amp;lt;/p&amp;gt;';
}

 // Display &quot;Verification ID&quot; on Admin order edit page
add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_verification_id_in_admin_order_meta', 10, 1 );
function display_verification_id_in_admin_order_meta( $order ) {
    // compatibility with WC +3
    $order_id = method_exists( $order, 'get_id' ) ? $order-&amp;gt;get_id() : $order-&amp;gt;id;
    echo '&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;'.__('Verification ID', 'woocommerce').':&amp;lt;/strong&amp;gt; ' . get_post_meta( $order_id, '_billing_vid', true ) . '&amp;lt;/p&amp;gt;';
}

// Displaying &quot;Verification ID&quot; on email notifications
add_action('woocommerce_email_customer_details','add_verification_id_to_emails_notifications', 15, 4 );
function add_verification_id_to_emails_notifications( $order, $sent_to_admin, $plain_text, $email ) {
    // compatibility with WC +3
    $order_id = method_exists( $order, 'get_id' ) ? $order-&amp;gt;get_id() : $order-&amp;gt;id;

    $output = '';
    $billing_vid = get_post_meta( $order_id, '_billing_vid', true );

    if ( !empty($billing_vid) )
        $output .= '&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;' . __( &quot;Verification ID:&quot;, &quot;woocommerce&quot; ) . '&amp;lt;/strong&amp;gt; &amp;lt;span class=&quot;text&quot;&amp;gt;' . $billing_vid . '&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;';

    echo $output;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드가 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;활성 하위 테마(또는 테마)의 php 파일 또는 플러그인 파일에 있습니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드는 테스트되고 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/42894452/adding-a-hidden-fields-to-checkout-and-process-it-through-order&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Wordpress</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1555</guid>
      <comments>https://factcode.tistory.com/1555#entry1555comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:53:32 +0900</pubDate>
    </item>
    <item>
      <title>크롬에서 작동하지 않는 로컬 파일 시스템에 대한 AJAX 요청?</title>
      <link>https://factcode.tistory.com/1554</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;크롬에서 작동하지 않는 로컬 파일 시스템에 대한 AJAX 요청?&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b papago-id=&quot;1-1&quot;&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/10752055/cross-origin-requests-are-only-supported-for-http-error-when-loading-a-local&quot; dir=&quot;ltr&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬 파일을 로드할 때 &quot;크로스 오리진 요청은 HTTP에만 지원됩니다.&quot; 오류가 발생했습니다.&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(30개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/32996001/jquery-load-only-working-in-firefox&quot; dir=&quot;ltr&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jquery load()는 파이어폭스에서만 작동합니까?&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(2개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;닫힘&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;6-1&quot; title=&quot;2016-07-1307:21:36Z&quot; papago-attr-id=&quot;1&quot;&gt;7년 전&lt;/span&gt;에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 jQuery를 사용하여 XML에서 UI를 동적으로 만드는 작업을 하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 jQuery는 Firefox에서 작동하지만 Chrome에서는 작동하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;콘솔 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;교차 오리진 요청은 프로토콜 체계(http, data, chrome, chrome-extension, https, chrome-extension-resource)에만 지원됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 Firefox에서는 작동하지만 Google chrome에서는 작동하지 않는 제 jQuery 코드입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
    url: 'file:///home/satendra/dndExamples/avisDnD/file.xml',
    success: function(xml) {
        $(xml).find('Tab').each(function() {
            var id = $(this).attr('URL');
            var tab = $(this).attr('TabName');
            $(&quot;ul&quot;).append(&quot;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;+ id +&quot;&amp;gt;&quot;+ tab +&quot;&amp;lt;/li&amp;gt;&quot;);
        });
    }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파이어폭스는 로컬 파일 시스템에 대한 요청을 수락하기 때문에 요청을 허용합니다(즉,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;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;(protocol) 그들도 거기서 유래된 것이라면요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 Chrome은 다음에 대한 모든 XMLHttpRequest를 거부합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;file://&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;urls.&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;브라우저의 외부 도메인에서 로컬 파일 시스템에 AJAX 요청을 할 수 없습니다. 가능하다면 보안상 큰 &lt;em papago-id=&quot;13-1&quot;&gt;결함&lt;/em&gt;이 될 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 AJAX 요청이 Chrome에서 작동하려면 웹 서버에 요청해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows(윈도우)를 사용하는 경우 로컬 &lt;a href=&quot;http://www.howtogeek.com/112455/how-to-install-iis-8-on-windows-8/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;14-1&quot;&gt;컴퓨터&lt;/a&gt;에 IIS &lt;a href=&quot;http://www.wampserver.com/en/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;14-3&quot;&gt;또는&lt;/a&gt; WAMP를 쉽게 설치할 수 있습니다.&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;브라우저에서 로컬 파일 시스템으로 요청할 수 있는 설정을 Google Chrome에서 활성화할 수 있지만 사용하는 것은 실제로 좋지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든 이렇게 하고 싶다고 결정하면 &lt;a href=&quot;http://www.chrome-allow-file-access-from-file.com/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15-1&quot;&gt;여기&lt;/a&gt;서 가이드를 찾을 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/38344612/ajax-request-to-local-file-system-not-working-in-chrome&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>AJAX</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1554</guid>
      <comments>https://factcode.tistory.com/1554#entry1554comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:53:25 +0900</pubDate>
    </item>
    <item>
      <title>pandas - df.index를 float64에서 유니코드 또는 문자열로 변경</title>
      <link>https://factcode.tistory.com/1553</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;pandas - df.index를 float64에서 유니코드 또는 문자열로 변경&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;데이터 프레임의 인덱스(행)를 float64에서 문자열 또는 유니코드로 변경합니다.&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;#check type
type(df.index)
'pandas.core.index.Float64Index'

#change type to unicode
if not isinstance(df.index, unicode):
    df.index = df.index.astype(unicode)
&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;TypeError: Setting &amp;lt;class 'pandas.core.index.Float64Index'&amp;gt; dtype to anything other than float64 or object is not supported
&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;# for Python 2
df.index = df.index.map(unicode) 

# for Python 3 (the unicode type does not exist and is replaced by str)
df.index = df.index.map(str)
&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;왜 당신이 부유물로 전환할 때와 다르게 진행할 것인지에 관해 말하자면, 그것이 Numpy(판다가 기반을 둔 도서관)의 특징입니다.&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;모든 numpy 배열에는 기본적으로 요소의 &lt;strong papago-id=&quot;6-3&quot;&gt;기계&lt;/strong&gt; 유형인 &lt;em papago-id=&quot;6-1&quot;&gt;dtype&lt;/em&gt;이 있습니다. 그런 방식으로 &lt;strong papago-id=&quot;6-5&quot;&gt;numpy&lt;/strong&gt;는 파이썬 개체가 아니라 &lt;strong papago-id=&quot;6-5&quot;&gt;네이티브 유형을 직접 다루는데&lt;/strong&gt;, 이것은 numpy가 얼마나 빠른지를 설명해줍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 당신이 dtype을 int64에서 float64로 변경할 때, numpy는 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;기본적으로 파이썬 객체에 대한 포인터를 제공하는 특별한 dtype : &lt;em papago-id=&quot;7-1&quot;&gt;object&lt;/em&gt;도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열을 사용하려면 &lt;em papago-id=&quot;0-1&quot;&gt;개체&lt;/em&gt; dtype을 사용해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.astype(object)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 &lt;em papago-id=&quot;1-1&quot;&gt;objectdtype&lt;/em&gt;으로 인덱스를 만들고 내부에 Python float objects를 넣을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서는 맵을 사용하여 인덱스를 적절한 함수를 가진 문자열로 변환합니다. numpy는 문자열 개체를 가져오고, 문자열을 수용할 수 있는 유일한 dtype이기 때문에 인덱스에 &lt;em papago-id=&quot;10-1&quot;&gt;개체&lt;/em&gt; dtype이 있어야 한다는 것을 이해합니다.&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;python 3 버전과 panda 0.19 이상 버전의 경우, 다음과 같은 작업이 저에게 적합합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# Python 3 (pandas 0.19 or latter versions)
df.index.astype(str, copy = False)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 방법이 가장 효과적입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;df.index = df.index.astype('int64')
&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;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/35368645/pandas-change-df-index-from-float64-to-unicode-or-string&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>dataframe</category>
      <author>factcode</author>
      <guid isPermaLink="true">https://factcode.tistory.com/1553</guid>
      <comments>https://factcode.tistory.com/1553#entry1553comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:53:18 +0900</pubDate>
    </item>
  </channel>
</rss>