<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>javamemo</title>
    <link>https://javamemo.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Sat, 4 Jul 2026 22:25:41 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>javamemo</managingEditor>
    <item>
      <title>Wordpress 페이지 편집 영역에서 &amp;quot;TypeError: c is null&amp;quot;을 제거하는 방법</title>
      <link>https://javamemo.tistory.com/720</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Wordpress 페이지 편집 영역에서 &quot;TypeError: c is null&quot;을 제거하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 워드프레스 CMS로 만들어진 Visual Composer를 이용한 웹사이트를 가지고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;페이지 내용을 추가/편집할 때마다 항상 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;TypeError: c is null

...var b=a.getWin(),c=b.getSelection();if(!(c.rangeCount&amp;lt;=0)){var d=&quot;SELRES_&quot;+Math....
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NGupN.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NGupN.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이걸 어떻게 제거할 수 있을까요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비상 솔루션: Firefox를 사용하지 마십시오. Opera나 Chrome을 사용하면 해당 오류가 발생하지 않고 시각적인 작곡가가 작동합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전 버전의 Opera(45.0.X)에서는 오류가 발생하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최상의 솔루션: Visual Composer 업그레이드.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WPBakery Page Builder(이전의 Visual Composer)의 최신 버전(5.4)으로 업그레이드하면 제 경우에 문제가 해결되었습니다.&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/47559880/how-to-remove-typeerror-c-is-null-in-wordpress-page-edit-area&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/720</guid>
      <comments>https://javamemo.tistory.com/720#entry720comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:36:44 +0900</pubDate>
    </item>
    <item>
      <title>.sql 파일에서 SQL 구문을 확인하려면 어떻게 해야 합니까?</title>
      <link>https://javamemo.tistory.com/719</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.sql 파일에서 SQL 구문을 확인하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.sql 파일에서 SQL 구문을 확인하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;SELECT STATEMENT_DIGEST_TEXT&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 8.0에서 MySQL 쿼리 구문 검증에 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;8.0.4&amp;gt;SELECT STATEMENT_DIGEST_TEXT('FLUSH TABLES')\G
STATEMENT_DIGEST_TEXT('FLUSH TABLES'): FLUSH TABLES 

8.0.4&amp;gt;SELECT STATEMENT_DIGEST_TEXT(&quot;SET GLOBAL second_cache.key_buffer_size=128*1024;&quot;)\G
STATEMENT_DIGEST_TEXT(&quot;SET GLOBAL second_cache.key_buffer_size=128*1024;&quot;): SET GLOBAL `second_cache` . `key_buffer_size` = ? * ? ;

8.0.4&amp;gt;SELECT STATEMENT_DIGEST_TEXT(&quot;create TABLE t1 ( a2 int unsigned not null, b2 int unsigned not null, c2 int unsigned not null, primary key (a2), index b2x (b2), index c2x (c2) ) ENGINE=MEMORY;&quot;)\G
STATEMENT_DIGEST_TEXT(&quot;create TABLE t1 ( a2 int unsigned not null, b2 int unsigned not null, c2 int unsigned not null, primary key (a2), index b2x (b2), index c2x (c2) ) ENGINE=MEMORY;&quot;): CREATE TABLE `t1` ( `a2` INTEGER UNSIGNED NOT NULL , `b2` INTEGER UNSIGNED NOT NULL , `c2` INTEGER UNSIGNED NOT NULL , PRIMARY KEY ( `a2` ) , INDEX `b2x` ( `b2` ) , INDEX `c2x` ( `c2` ) ) ENGINE = MEMORY ; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SQL이 지원되지 않으면 오류가 발생합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 마찬가지로, 하지만 이 반응에는 특별한 점이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;8.0.4&amp;gt;SELECT STATEMENT_DIGEST_TEXT('HELP SELECT')\G
ERROR 3676 (HY000): Could not parse argument to digest function: &quot;You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT' at line 1&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;'HELP'는 유효하지만 클라이언트 측의 유일한 키워드(즉, 서버 키워드가 아님)라는 사실입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 경우든 잘못된 SQL 문은 비슷한 상황을 만들어 냅니다. 즉, ERROR.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 ERROR 대 NO ERROR에 따라 확인하여 전달된 SQL 구문이 유효한지 여부를 확인할 수 있습니다(클라이언트 측 전용 명령어의 매우 제한된 집합은 제외하지만 대부분의 사용자는 이러한 명령어를 사용할 수 없습니다).&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;SELECT STATEMENT_DIGEST_TEXT&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 포괄적인 SQL 파서(직접/의도된 기능은 아닐 수도 있음)로, 실제로 실행하지 않고도 모든 경우에 문의 유효성을 신속하게 확인할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 SQL 유효성 검증에 관한 한 큰 진전입니다.&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;이를 위해서는 MySQL 서버를 설치하고 실행해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;를 사용하여 쿼리를 전달할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql -e&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클라이언트 또는 파이프를 사용하여 다음 작업을 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql&lt;/code&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;기본 렉서는 sql/sql_lex.cc에 구현된 것 같습니다.&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;edit: MySQL 8.0+의 경우 &lt;a href=&quot;https://stackoverflow.com/questions/956507/how-can-i-check-the-sql-syntax-in-a-sql-file/49701921#49701921&quot;&gt;.sql 파일에서 SQL&lt;/a&gt; 구문을 &lt;a href=&quot;https://stackoverflow.com/questions/956507/how-can-i-check-the-sql-syntax-in-a-sql-file/49701921#49701921&quot;&gt;확인&lt;/a&gt;하려면 어떻게 &lt;a href=&quot;https://stackoverflow.com/questions/956507/how-can-i-check-the-sql-syntax-in-a-sql-file/49701921#49701921&quot;&gt;해야&lt;/a&gt; 합니까&lt;a href=&quot;https://stackoverflow.com/questions/956507/how-can-i-check-the-sql-syntax-in-a-sql-file/49701921#49701921&quot;&gt;?&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;TLDR:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;awk '{print &quot;EXPLAIN &quot; $0}' statements.sql | mysql --force -u user -p database | grep &quot;ERROR&quot;
&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에는 이것을 위한 스위치가 내장되어 있지 않지만, 당신은 syntax를 추가하여 확인할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;EXPLAIN&lt;/code&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;statements.sql&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 문장을 한 줄에 붙여 파일을 작성하고, 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;EXPLAIN&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 줄 앞에 다음을 표시합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;awk '{print &quot;EXPLAIN &quot; $0}' statements.sql &amp;gt; check.sql
&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;mysql&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;명령줄 도구 및 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--force&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;&amp;gt;mysql --force -u user -p database &amp;lt; check.sql
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 오류가 있는 선만 보려면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;mysql --force -u user -p database &amp;lt; check.sql | grep &quot;ERROR&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;&amp;gt;awk '{print &quot;EXPLAIN &quot; $0}' statements.sql | mysql --force -u user -p database | grep &quot;ERROR&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 쿼리 브라우저(GUI Tools 패키지의 일부)와 같은 쿼리 브라우저에 붙여넣고 키워드와 문자열 리터럴의 색상을 시각적으로 검사하여 구문 오류가 있는지 보다 쉽게 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://dev.mysql.com/downloads/gui-tools/5.0.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://dev.mysql.com/downloads/gui-tools/5.0.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 데이터베이스에 연결하거나 스크립트에 붙여넣어 검증할 수 있는 몇 가지 무료/트라이웨어 제품이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구글은 당신의 친구입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://developer.mimer.se/validator/index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mimer는 ANSI-Standard 구문 유효성&lt;/a&gt; 검사를 &lt;a href=&quot;http://developer.mimer.se/validator/index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;확인&lt;/a&gt;할 것이지만 MySQL 세부 사항은 처리하지 않을 수 있습니다.&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;트랜잭션을 지원하는 InnoDB 테이블을 사용하는 경우 간단히 실행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;start transaction;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 .sql 파일의 시작에 그리고 a.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rollback;&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;MySQL은 구문 오류를 출력합니다.&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;UPDATE&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DELETE&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문장, 추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;LIMIT 0&lt;/code&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;/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;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;운영하다, 실행합니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;롤백&lt;/font&gt;&lt;/p&gt;&lt;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/956507/how-can-i-check-the-sql-syntax-in-a-sql-file&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/719</guid>
      <comments>https://javamemo.tistory.com/719#entry719comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:36:38 +0900</pubDate>
    </item>
    <item>
      <title>MariaDB Galera 클러스터에 대한 DR 설정</title>
      <link>https://javamemo.tistory.com/718</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MariaDB Galera 클러스터에 대한 DR 설정&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;노드가 3개인 MariaDB Galera Cluster 2개가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클러스터 1 : MDB-01, MDB-02, MDB-03 클러스터 2 : MDBDR-01, MDBDR-02, MDBDR-03&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;클러스터 1은 프로덕션 클러스터이고 클러스터 2는 DR 클러스터입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GTID를 사용한 비동기 복제가 http://www.severalnines.com/blog/deploy-asynchronous-replication-slave-mariadb-galera-cluster-gtid-clustercontrol 링크의 지정된 구성에 따라 MDB-01에서 MDB-01 사이에 설정되었습니다(Link는 MariaDB Galera Cluster to Standalone MariaDB 인스턴스 간의 비동기 복제입니다).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 MariaDB Galera Cluster에서 MariaDB Galera Cluster로 비동기 복제를 위해 동일한 구성을 설정했습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래 명령으로 현재 슬레이브 MDBDR-01 =&amp;gt; MDB-01 =&amp;gt; MDB-02로 전환할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MASTER를 MASTER_host='로 변경합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MDB-02'&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런데 MDBDR-01이 다운된 경우 MDBDR-02 =&amp;gt; MDB-01을 가리키는 방법에 어려움을 겪고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MDBDR-02 =&amp;gt; MDB-01 또는 MDBDR-03 =&amp;gt; MDB-01을 포인팅하기 위한 입력을 해주실 수 있나요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 기사는 MariaDB의 각 GTID 구현이 이러한 상황에서 문제를 일으킬 수 있다는 것을 이해해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 노드는 고유한 GTID 목록을 유지하고 galera 트랜잭션에는 고유한 ID가 없으므로 동일한 GTID가 각 서버의 동일한 위치를 가리키지 않을 수 있습니다(&lt;a href=&quot;http://linsenraum.de/erkules_int/2014/07/galera-cluster-using-gtid-mysql-vs-mariadb.html&quot; rel=&quot;nofollow&quot;&gt;이&lt;/a&gt; 기사 참조).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 문제 때문에 MariaDB 10.1 없이는 당신이 하는 일을 시도하지 않을 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MariaDB 10.1.8은 10.1 라인의 첫 번째 GA 릴리즈입니다. 10.1은 GTID 구현을 변경하여 galera 트랜잭션이 자신의 것을 사용하도록 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;server_id&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(config variable을 통해 설정).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 노예에 대한 복제를 필터링하여 갤러리 에이드만 복제할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 슬레이브 서버로 전환하려면 이전 슬레이브에서 마지막 GTID를 실행해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gtid_slave_pos&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에 저장됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql.gtid_slave_pos&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,그렇지만&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql.*&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;트랜잭션의 원래 GTID가 다른 슬레이브 galera 노드로 전달되는지 여부를 테스트할 방법이 없습니다(즉, 마스터 클러스터의 galera server_id가 1이고 슬레이브 클러스터의 galera server_id가 2이고 MDDR-01이 GTID 1-1-123의 슬레이브 이벤트를 수신하는 경우 MDDR-02가 1-1-123 또는 1-2-456으로 기록할지 여부).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새로운 GTID 구현이 server_id를 변경해야 하므로 그렇지 않을 것으로 추측하지만, 당신은 이것을 확인할 수 있을 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 슬레이브 galera 노드에서 마지막으로 실행된 마스터 GTID를 가져올 수 없기 때문에 이전 슬레이브에서 GTID를 가져와야 할 수 있습니다. 이는 이전 슬레이브를 정상적으로 종료하지 않는 한 불가능할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 슬레이브의 binlog에서 마지막으로 실행된 트랜잭션의 GTID를 찾아 마스터의 binlog에 있는 트랜잭션과 일치시켜야 할 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 사용하지 않을 경우에는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sync_binlog = 1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, binlog는 신뢰할 수 없고 약간 뒤에 있을 수 있습니다.&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;각 galera 슬레이브 노드는 실행된 GTID를 모를 수 있고 이전 GTID 이벤트를 건너뛸 수 없기 때문에 사용자는 다음과 같이 플레이해야 할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SQL_SLAVE_SKIP_COUNTER&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;발견한 GTID가 뒤에 있을 경우 올바른 위치로 이동할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GTID(또는 추측)를 얻으면 원래 슬레이브에 설정한 방식과 동일하게 새 슬레이브에 복제를 설정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 명령을 수행해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SET GLOBAL gtid_slave_pos = &quot;{마지막으로 실행된 GTID}&quot;,&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마스터를 마스터_host=&quot;{MasterAddress}&quot;, 마스터_port={MasterPort}, 마스터_user=&quot;{ReplicationUser}, 마스터_password={ReplicationPassword}, 마스터_use_gtid= slave_pos;로 변경합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시작 슬레이브;&lt;/font&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;실행된 슬레이브 GTID가 galera를 통해 복제될 때까지 이와 같은 페일오버는 복잡한 프로세스가 될 것입니다.&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/33032210/dr-setup-for-mariadb-galera-clusters&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/718</guid>
      <comments>https://javamemo.tistory.com/718#entry718comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:36:32 +0900</pubDate>
    </item>
    <item>
      <title>휴대성이란 무엇입니까?자바는 다른 언어보다 어떻게 더 휴대성이 좋습니까?</title>
      <link>https://javamemo.tistory.com/717</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;휴대성이란 무엇입니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&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&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;a href=&quot;https://stackoverflow.com/help/on-topic&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;2017-08-04 15:19:16Z&quot; papago-attr-id=&quot;1&quot;&gt;6년전&lt;/span&gt;에 문을 닫았습니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;ml24 pl2&quot;&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;mt24 d-flex gsx gs8&quot;&gt; 
   &lt;a class=&quot;s-btn s-btn__outlined flex--item js-post-notice-edit-post&quot; href=&quot;/posts/3925947/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;자바가 어떻게 C, C++, 그리고 C보다 더 휴대성이 좋은지 궁금합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NET 및 기타 언어.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바가 인터프리터와 JVM 때문에 휴대성이 있다는 것을 여러 번 읽었지만, JVM은 하드웨어의 구조적인 차이를 감추고 있을 뿐입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서로 다른 머신 아키텍처를 위해서는 여전히 서로 다른 JVM이 필요합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 뭘 놓치고 있는 거지?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 가장 일반적인 아키텍처, 예를 들어 CVM에 대해 C에 대한 추상화 계층을 작성하는 경우 CVM이 설치되면 해당 아키텍처에서 모든 C 프로그램이 실행됩니다. 그렇지 않습니까?&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;.NET을 휴대용이라고 부를 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;휴대성은 흑백이 아닙니다. 예, 아니요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;휴대성이란 프로그램을 얼마나 쉽게 받아 자신이 아끼는 모든 플랫폼에서 실행할 수 있느냐는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것에 영향을 미치는 몇 가지가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하나는 언어 그 자체입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바 언어 사양은 일반적으로 &quot;구현&quot;에 훨씬 덜 맡겨집니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, &quot;i = i++&quot;는 C 및 C++에서는 정의되지 않지만 Java에서는 정의된 의미를 갖습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;좀 더 실질적으로 말하자면, 자바에서는 &quot;int&quot;와 같은 타입들이 특정한 크기를 가지고 있는 반면, C와 C++에서는 플랫폼과 컴파일러에 따라 크기가 다릅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 차이점만으로 C와 C++로 휴대용 코드를 작성하는 것을 막을 수는 없지만 훨씬 더 부지런해질 필요가 있습니다.&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;자바에는 C와 C++가 없는 표준 라이브러리들이 많이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 스레드화, 네트워킹 및 GUI 라이브러리가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 종류의 라이브러리는 C 및 C++용으로 존재하지만 표준의 일부가 아니며 사용 가능한 해당 라이브러리는 플랫폼마다 매우 다양합니다.&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;대상 플랫폼에 JVM이 있다고 가정할 때, 이는 일반적으로 Java와 함께 작동합니다. (그리고 사람들이 관심을 가지는 많은/대부분의 플랫폼을 위한 JVM이 있습니다.)&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 일반적으로 C와 C++에서는 사실이 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;최소한&lt;/em&gt; 재컴파일이 필요한 경우가 일반적이며, 앞의 두 가지 사항을 이미 처리했다고 가정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예, 만약 &quot;CVM&quot;이 여러 플랫폼을 위해 존재한다면, C와 C++를 좀 더 휴대성 있게 만들 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C 코드를 휴대용 방식으로 작성하거나(예: 표준에서 말하는 int의 크기 외에는 아무것도 가정하지 않음), CVM에 작성하거나(모든 대상 플랫폼에서 이와 같은 모든 종류의 것에 대해 균일한 결정을 내렸다고 가정할 경우) CVM에 작성해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 비표준 라이브러리(네트워킹, 쓰레딩 또는 GUI 없음)의 사용을 포기하거나 CVM별 라이브러리에 쓰기도 해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇다면 C와 C++를 휴대성 있게 만드는 것이 아니라 휴대성이 뛰어난 특별한 CVM-C/C++를 말하는 것입니다.&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;GUI 라이브러리(특히 AWT)는 일관성 없는 동작으로 악명이 높았으며, 스레드와 관련된 모든 것은 엉성하게 되면 다르게 동작할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 일반적으로 C 또는 C++로 작성된 프로그램으로 실행하는 것보다 한 플랫폼에서 작성된 사소한 자바 프로그램을 가져다가 다른 플랫폼에서 실행하는 것이 훨씬 쉽습니다.&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;어떤 관점에서 보면, C는 사실 자바보다 더 &lt;strong&gt;&lt;em&gt;휴대성&lt;/em&gt;&lt;/strong&gt;이 뛰어납니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C는 기본 하드웨어에 대한 가정을 거의 하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한 바이트에 8비트가 있다고 가정하거나, 2의 보어를 사용하여 음수를 표현해야 한다고 가정하지도 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이론적으로는 폰 노이만 기반의 머신과 컴파일러만 있다면 C를 사용해도 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사실, C로 작성된 &quot;Hello world&quot; 프로그램은 자바로 작성된 &quot;Hello world&quot; 프로그램보다 더 많은 플랫폼에서 작동할 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Pdp-11&quot; rel=&quot;noreferrer&quot;&gt;PDP-11&lt;/a&gt;과 아이폰에서도 동일한 &quot;헬로 월드&quot; 프로그램을 사용할 수 있을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 현실은 대부분의 &lt;em&gt;실제&lt;/em&gt; 프로그램이 출력된 &quot;Hello world&quot;보다 훨씬 더 많은 것을 한다는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바는 &lt;em&gt;실제&lt;/em&gt; C 프로그램을 실제 자바 프로그램보다 다른 플랫폼으로 포팅하는 데 훨씬 많은 노력이 들기 때문에 C보다 휴대성이 뛰어나기로 정평이 나 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 C 언어가 정말로 ANSI-C이기 때문인데, 이것은 매우 범용적이고, 맨 뼈를 가진 언어입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네트워크 프로그래밍, 쓰레드 또는 GUI 개발에 대한 지원이 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 이러한 것들 중 하나를 포함하는 프로그램을 작성하는 즉시 Win32나 POSIX 같은 휴대성이 떨어지는 &lt;em&gt;확장&lt;/em&gt; 프로그램을 C에 다시 의존해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 Java의 경우 네트워크 프로그래밍, 쓰레드 및 GUI 도구가 언어에 따라 정의되고 각 VM 구현에 내장됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇기는 하지만 요즘 많은 프로그래머들이 휴대성과 관련하여 현대 C/C++가 이룬 발전을 &lt;em&gt;과소평가&lt;/em&gt;하고 있다고 생각합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;POSIX는 크로스 플랫폼 스레딩을 제공하는 데 큰 도움을 주며, C++와 관련하여 Boost는 기본적으로 Java의 어떤 것과 마찬가지로 휴대성이 뛰어난 네트워킹 및 스레딩 라이브러리를 제공합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 라이브러리에는 플랫폼별 특이점이 있지만 Java도 마찬가지입니다.&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;기본적으로 자바는 바이트 코드를 예측 가능한 방식으로 해석하는 VM 구현을 가진 각 플랫폼에 의존하며 C/C++는 전처리기를 사용하여 플랫폼 고유의 코드를 통합하는 라이브러리에 의존합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#ifdef&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;s). 두 전략 모두 교차 플랫폼 쓰레드, 네트워킹 및 GUI 개발이 가능합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단지 자바가 휴대성에 있어서 C/C++보다 더 빠른 발전을 이뤘을 뿐입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바 언어 사양은 첫 날부터 쓰레드, 네트워킹 및 GUI 개발이 거의 이루어진 반면, 부스트 네트워킹 라이브러리는 2005년경에 출시되었으며, C++11에서는 2011년이 되어서야 표준 휴대용 쓰레드가 C++에 포함되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Java 프로그램을 작성하면 Windows, Linux, MacOS 등 JVM이 작성된 모든 플랫폼에서 실행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C++ 프로그램을 작성할 경우 각 플랫폼별로 구체적으로 컴파일해야 합니다.&lt;/font&gt;&lt;/p&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;많은 기본 리소스와의 상호 작용이 필요한 데스크톱 애플리케이션의 경우에는 그렇지 않지만 각 JavaEE 애플리케이션은 모든 플랫폼에서 실행될 수 있습니다.&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;(휴대성과 관련된 또 다른 것은 Java EE(엔터프라이즈 에디션)입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JavaEE 기술로 작성된 애플리케이션은 JavaEE 인증을 받은 애플리케이션 서버에서 실행된다고 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 이는 적어도 JavaEE6까지는 사실이 아닙니다. (&lt;a href=&quot;http://techblog.bozho.net/?p=213&quot; rel=&quot;noreferrer&quot;&gt;여기&lt;/a&gt; 참조)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;휴대성은 프로그램이 원래의 환경이 아닌 다른 환경에서 실행되도록 하기 위한 노력의 양을 나타내는 척도입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 Linux의 JVM이 Windows 환경과 다른 환경인지에 대해 논의할 수 있습니다(그렇다고 주장합니다). 하지만 많은 경우 몇 가지 문제가 발생하지 않도록 주의를 기울인다면 아무런 노력이 필요하지 않다는 사실이 여전히 남아 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 말하는 CVM은 POSIX 라이브러리와 런타임 라이브러리가 제공하려는 것이지만, 장애물을 넘어서기에는 큰 구현 차이가 있습니다.&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;.net front에서, 만약 당신이 mono가 제공하는 것을 고수할 수 있다면, 오픈 소스.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;순 구현 시 Java와 거의 동일한 종류의 휴대성을 누릴 수 있지만 Windows 버전에 비해 mono가 크게 뒤떨어지므로 이는 일반적인 선택 사항이 아닙니다.&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;C는 많은 경우 특정 OS에 연결되어 있을 뿐만 아니라 컴파일이 완료되면 항상 특정 하드웨어 아키텍처에 연결되어 있기 때문에 휴대용이 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C++도 마찬가지입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Net은 C/C++보다 휴대성이 뛰어납니다. 가상 머신에 의존하기 때문에 컴파일 시 특정 하드웨어 아키텍처에 연결되지 않지만 Windows 머신(공식적으로)에만 국한되기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;맞습니다. JVM은 플랫폼에 따라 다릅니다.(반드시 그래야 합니다!) 하지만 자바가 휴대용이라고 하면 개발자 입장에서 JVM을 말하는 것이고 표준 자바 개발자들은 JVM을 작성하지 않고 사용합니다. :-).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;@Raze2Dust를 &lt;strong&gt;편집&lt;/strong&gt;하여 질문을 해결합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네, 할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제로 바이트코드가 아닌 머신코드를 생성하는 컴파일러를 작성하면 자바 플랫폼에 특화된 것을 만들 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런데 다른 분들이 말씀하시는 것처럼 왜 그러시는 거죠?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JVM이 작동하는 것과 같은 방식으로 컴파일된 코드를 연산에 매핑하는 인터프리터를 만들어야 합니다.&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;Java는 세 &lt;strong&gt;&lt;em&gt;가지&lt;/em&gt;&lt;/strong&gt; 유형의 휴대성을 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;소스 코드 이식성:&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주어진 Java 프로그램은 기본 CPU, 운영 체제 또는 Java 컴파일러에 관계없이 동일한 결과를 생성해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;CPU 아키텍처 이식성:&lt;/strong&gt; 현재 Java 컴파일러는 아직 존재하지 않는 CPU의 객체 코드(바이트 코드)를 생성합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Java 프로그램을 실행할 실제 CPU, Java 인터프리터 또는 가상 시스템에 대해 J-code를 &quot;실행&quot;합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;존재하지 않는 CPU를 사용하면 Java 인터프리터가 존재하는 CPU에서 동일한 개체 코드를 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;OS/GUI 휴대성:&lt;/strong&gt; 자바는 상상의 OS와 상상의 GUI와 대화하는 일련의 라이브러리 기능(awt, util, lang 등 자바가 제공하는 라이브러리에 포함)을 제공함으로써 이 문제를 해결합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JVM이 가상 CPU를 제공하는 것처럼 자바 라이브러리는 가상 OS/GUI를 제공합니다. 모든 자바 구현은 이 가상 OS/GUI를 구현하는 라이브러리를 제공합니다. 이러한 라이브러리를 사용하여 필요한 OS 및 GUI 기능 포트를 상당히 쉽게 제공하는 자바 프로그램입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 &lt;a href=&quot;http://www.javaworld.com/article/2076944/java-s-three-types-of-portability.html&quot; rel=&quot;nofollow&quot;&gt;링크&lt;/a&gt; 참조&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;'CVM'을 쓸 수 있냐고 물으시잖아요. 그렇지 않아요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;자바&quot;는 프로그래밍 언어와 가상 머신을 모두 포함하여 많은 것을 의미하는 Sun의 큰 용어입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;C&quot;는 단지 프로그래밍 언어일 뿐입니다. 결과적인 이진법의 형식을 결정하는 것은 컴파일러와 OS와 CPU에 달려 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C는 런타임을 지정하지 않기 &lt;em&gt;때문&lt;/em&gt;에 휴대용이라고 말하기도 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 컴파일러를 쓴 사람들은 그 플랫폼에 맞는 것들을 고를 수 있었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단점은 C가 충분히 낮은 수준이고 플랫폼이 충분히 다르다는 것입니다. C 프로그램이 한 시스템에서 잘 작동하고 다른 시스템에서는 전혀 작동하지 않는 것이 일반적입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C 언어를 특정 ABI와 결합하는 경우 JVM과 유사하게 해당 언어에 대한 VM을 정의할 수 있습니다.&lt;/font&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;&quot;Intel Binary Compatibility Specification&quot;(인텔 바이너리 호환성 사양)은 이러한 ABI의 한 예입니다(오늘날 거의 아무도 사용하지 않음).&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;Microsoft Windows&quot;는 이러한 ABI(거대하고 제대로 지정되지 않은 ABI)일 수도 있습니다. Wine은 이를 위해 작성된 프로그램을 실행하는 VM 중 하나입니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;MS-DOS&quot;(dosemu가 하나의 VM인 경우)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리눅스(Linux)는 오늘날 가장 인기있는 프로그램 중 하나로, 리눅스 자체, &lt;a href=&quot;http://www.netbsd.org/docs/guide/en/chap-linux.html&quot; rel=&quot;nofollow&quot;&gt;NetBSD&lt;/a&gt;, &lt;a href=&quot;http://www.freebsd.org/doc/handbook/linuxemu.html&quot; rel=&quot;nofollow&quot;&gt;FreeBSD&lt;/a&gt;로 프로그램을 실행할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://www.hpl.hp.com/techreports/1999/HPL-1999-78.html&quot; rel=&quot;nofollow&quot;&gt;HP의 Dynamo&lt;/a&gt;가 JIT와 같은 VM이었던 &quot;PA-RISC&quot;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 모든 CVM은 사실 실제 머신입니다. AFAIK를 비롯한 그 누구도 순수하게 가상화된 CVM을 만들어 본 적이 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C는 하드웨어에서 효율적으로 실행되도록 설계되었으므로 한 시스템에서 정상적으로 실행할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HP가 보여주었듯이 동일한 플랫폼에서도 코드를 보다 효율적으로 실행할 수 있는 JIT를 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다양한 아키텍처를 위해 JVM이 필요하지만, 물론 Java 프로그램은 &lt;em&gt;해당 JVM&lt;/em&gt;에서 실행됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아키텍처에 대한 JVM이 있으면 해당 아키텍처에 대해 Java 프로그램을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 자바 프로그램을 작성하여 자바 바이트 코드(아키텍처에 구애받지 않음)로 컴파일할 수 있으며, 이는 모든 아키텍처의 모든 JVM에서 실행할 수 있음을 의미합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JVM은 기본 아키텍처를 추상화하고 프로그램은 가상 머신에서 실행됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 &lt;em&gt;아이디어&lt;/em&gt;는 자바 언어가 휴대용(또는 더 정확하게는 컴파일된 바이트 코드가 휴대용)이라는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 VM에 특정 하드웨어 프로파일에 대한 특정 구현이 필요한 것이 맞습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 그 노력이 이루어지면 모든 &lt;em&gt;자바&lt;/em&gt; 바이트코드가 해당 플랫폼에서 실행됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바/바이트 코드를 한 번 작성하면 모든 JVM에서 실행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.NET은 상당히 유사하지만 원칙에 훨씬 더 낮은 강조점을 가지고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CLR은 JVM과 유사하며 자체 바이트 코드를 가지고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;*nix에 모노가 존재하지만 &quot;공식&quot;이 아닌 것이 맞습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Software_portability&quot; rel=&quot;nofollow&quot;&gt;소프트웨어 이식성&lt;/a&gt;(Portability)은 여러 환경(OS)에서 동일한 소프트웨어(코드)를 재사용할 수 있는 기능입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Java JVM은 Windows, Linux, Mac OS 등을 위해 설계된 운영 체제에서 실행할 수 있는 JVM입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.NET에서는 소프트웨어를 다른 플랫폼으로 포팅할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/.NET_framework&quot; rel=&quot;nofollow&quot;&gt;위키피디아&lt;/a&gt;에서:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의 디자인.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NET Framework를 사용하면 이론적으로 플랫폼에 구애받지 않으므로 플랫폼 간 호환이 가능합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 프레임워크를 사용하기 위해 작성된 프로그램은 프레임워크가 구현되는 모든 유형의 시스템에서 변경 없이 실행되어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 마이크로소프트는 단 한 번도 구현하지 않았기 때문입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NET 프레임워크를 Windows 밖에서 사용할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NET은 플랫폼에 구애받지 않으며 &lt;a href=&quot;http://en.wikipedia.org/wiki/Mono_%28software%29&quot; rel=&quot;nofollow&quot;&gt;Mono&lt;/a&gt;는 실행을 가능하게 했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리눅스에서 실행할 NET 응용 프로그램 및 컴파일 코드.&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;C+++Pascal 등의 언어의 경우 각 OS로 이동하여 해당 플랫폼에서 실행하려면 해당 플랫폼에서 구축해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Windows의 EXE 파일이 다음 파일과 같지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.so&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;둘 다 커널과 대화하기 위해 서로 다른 라이브러리를 사용하고 각각의 OS가 고유한 커널을 가지고 있기 때문에 리눅스 (기계 코드)에서.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WEARED - 모든 곳에 한 번만 실행 시 쓰기&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제로는 JVM이 있는 플랫폼에만 제한이 있지만, 구축하고자 하는 대부분의 플랫폼에는 제한이 있습니다.&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/3925947/what-is-portability-how-is-java-more-portable-than-other-languages&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/717</guid>
      <comments>https://javamemo.tistory.com/717#entry717comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:36:25 +0900</pubDate>
    </item>
    <item>
      <title>HTML 에코 내부에 변수가 있는 큰따옴표 탈출</title>
      <link>https://javamemo.tistory.com/716</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML 에코 내부에 변수가 있는 큰따옴표 탈출&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/18677829/single-and-double-quotes-together-as-html-attribute-value&quot; dir=&quot;ltr&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML 속성 값으로 단일 및 이중 따옴표를 함께 사용하시겠습니까?&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(2개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;닫힘&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;span class=&quot;relativetime&quot; title=&quot;2013-12-17 10:31:46Z&quot; papago-attr-id=&quot;1&quot;&gt;9년 전&lt;/span&gt;에.&lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML을 포함하는 에코 내부 변수의 경우 큰따옴표를 피하기 위해 슬래시를 추가할 위치는 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;echo &quot;&amp;lt;input type=\&quot;hidden\&quot; name=\&quot;id\&quot; value=&quot;.$row['id'].&quot; /&amp;gt;&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;value=&quot;.$row['id'].&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML을 PHP로 출력하는 몇 가지 팁:&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;큰따옴표를 피할 필요가 없도록 작은따옴표를 사용합니다(에코 사용 시).&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자가 가질 수 있는 &quot;불량&quot; 값을 적절히 피할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용 예제&lt;/font&gt;&lt;/font&gt;&lt;code&gt;echo&lt;/code&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;echo '&amp;lt;input type=&quot;hidden&quot; name=&quot;id&quot; value=&quot;', htmlspecialchars($row['id'], ENT_QUOTES, 'UTF-8'), '&quot; /&amp;gt;';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;printf()&lt;/code&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;printf('&amp;lt;input type=&quot;hidden&quot; name=&quot;id&quot; value=&quot;%s&quot; /&amp;gt;', 
    htmlspecialchars($row['id'], ENT_QUOTES, 'UTF-8')
);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 HTML 모드에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;?&amp;gt;
&amp;lt;input type=&quot;hidden&quot; name=&quot;id&quot; value=&quot;&amp;lt;?php echo htmlspecialchars($row['id'], ENT_QUOTES, 'UTF-8'); ?&amp;gt;&quot; /&amp;gt;
&amp;lt;?php
&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;htmlentities&lt;/code&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;echo &quot;&amp;lt;input type=\&quot;hidden\&quot; name=\&quot;id\&quot; value=\&quot;&quot;.htmlentities($row['id']).&quot;\&quot; /&amp;gt;&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;이와 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;echo '&amp;lt;input type=&quot;hidden&quot; name=&quot;id&quot; value=&quot;'.$row['id'].'&quot; /&amp;gt;';
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/20622676/escape-double-quotes-with-variable-inside-html-echo&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/716</guid>
      <comments>https://javamemo.tistory.com/716#entry716comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:36:18 +0900</pubDate>
    </item>
    <item>
      <title>Sqlplus oracle : bash에서 sql 명령을 한 줄로 실행하려면 어떻게 해야 합니까?</title>
      <link>https://javamemo.tistory.com/715</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Sqlplus oracle : bash에서 sql 명령을 한 줄로 실행하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것을 sqlplus에서 bash시 1개의 명령줄로 변환할 수 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자동화하고 싶기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sqlplus / as sysdba
SQL&amp;gt; EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);
exit
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어차피 파일 끝에서 종료되기 때문에 자동화된 종료가 필요하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한 마디로 다음과 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;echo 'EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);' | sqlplus / as sysdba
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;sqlplus user/password@host @file.sql
&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;#!/bin/bash
sqlplus / as sysdba &amp;lt;&amp;lt;EOF
EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);
exit
EOF
&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;code&gt;sqlplus /nolog @your_script.sql&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;URL : https://stackoverflow.com/questions/11237824/sqlplus-oracle-how-can-i-run-sql-command-on-bash-in-1-line&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/715</guid>
      <comments>https://javamemo.tistory.com/715#entry715comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:36:12 +0900</pubDate>
    </item>
    <item>
      <title>git push gerrit HEAD:refs/for/master가 git push origin master 대신 사용되는 이유</title>
      <link>https://javamemo.tistory.com/714</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;git push gerrit HEAD:refs/for/master가 git push origin master 대신 사용되는 이유&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;git push gerrit HEAD:refs/for/master&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하는 대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git push origin master&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하게되면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git push origin master&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 오류를 이해합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;! [remote rejected] master -&amp;gt; master (prohibited by Gerrit)&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Gerrit에 대한 문서, 특히 &lt;a href=&quot;https://gerrit-review.googlesource.com/Documentation/user-upload.html&quot; rel=&quot;noreferrer&quot;&gt;&quot;Push&lt;/a&gt; changes&lt;a href=&quot;https://gerrit-review.googlesource.com/Documentation/user-upload.html&quot; rel=&quot;noreferrer&quot;&gt;&quot;&lt;/a&gt; 섹션은 당신이 &quot;Magical&quot;로 밀고 나간다는 것을 설명합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;refs/for/'branch'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 Git 클라이언트 도구를 거부합니다.&quot;&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://gerrit-review.googlesource.com/Documentation/user-upload.html&quot; rel=&quot;noreferrer&quot;&gt;다음&lt;/a&gt; 이미지는 &lt;a href=&quot;https://gerrit-review.googlesource.com/Documentation/user-upload.html&quot; rel=&quot;noreferrer&quot;&gt;인트로&lt;/a&gt; 투 &lt;a href=&quot;https://gerrit-review.googlesource.com/Documentation/user-upload.html&quot; rel=&quot;noreferrer&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;git push gerrit HEAD:refs/for/&amp;lt;BRANCH&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 그러면 변경사항이 &lt;em&gt;준비 영역&lt;/em&gt;으로 이동합니다(그림의 &quot;변경 보류 중&quot;).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;게릿은 사실 '게릿'이라는 지점이 없습니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;BRANCH&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;내부적으로 Git 및 SSH 스택에 대한 Gerrit 자체 구현이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 통해 &quot;마법&quot;을 제공할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;refs/for/&amp;lt;BRANCH&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;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 네임스페이스 중 하나에 Ref를 만들기 위한 푸시 요청이 수신되면 Gerrit은 자체 로직을 수행하여 데이터베이스를 업데이트한 다음 작업 결과에 대해 클라이언트에 거짓말을 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성공적인 결과가 나오면 고객은 게릿이 심판을 만들었다고 믿지만 실제로는 게릿이 심판을 전혀 만들지 않았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;[&lt;a href=&quot;https://gerrit-review.googlesource.com/Documentation/user-upload.html&quot; rel=&quot;noreferrer&quot;&gt;링크&lt;/a&gt; -&lt;a href=&quot;https://gerrit-review.googlesource.com/Documentation/user-upload.html&quot; rel=&quot;noreferrer&quot;&gt; 게릿,&lt;/a&gt; &quot;&lt;a href=&quot;https://gerrit-review.googlesource.com/Documentation/user-upload.html&quot; rel=&quot;noreferrer&quot;&gt;Gritty Details&lt;/a&gt;&quot;].&lt;a href=&quot;https://gerrit-review.googlesource.com/Documentation/user-upload.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/2lCom.png&quot; alt=&quot;The Gerrit workflow&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;패치를 성공적으로 적용한 후(즉, 패치를 Gerrit에게 푸시하고 [변경 보류 중] 단계 영역에 넣고 검토한 후 검토를 통과) Gerrit는 변경 내용을 &quot;변경 보류 중&quot;에서 &quot;권한 저장소&quot;로 푸시하고, 푸시할 때 수행한 마법을 기반으로 해당 변경 내용을 푸시할 분기를 계산합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;refs/for/&amp;lt;BRANCH&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 이렇게 하면 성공적으로 검토된 패치를 올바른 분기에서 직접 꺼낼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Authoritative Repository&lt;/code&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;git push 명령을 완전히 지정할 필요가 없도록 git config 파일을 수정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[remote &quot;gerrit&quot;]
    url = https://your.gerrit.repo:44444/repo
    fetch = +refs/heads/master:refs/remotes/origin/master
    push = refs/heads/master:refs/for/master
&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;git fetch gerrit
git push gerrit
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.2/user-upload.html&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/10461214/why-is-git-push-gerrit-headrefs-for-master-used-instead-of-git-push-origin-mast&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Git</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/714</guid>
      <comments>https://javamemo.tistory.com/714#entry714comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:36:05 +0900</pubDate>
    </item>
    <item>
      <title>도커 컨테이너에서 php의 mysql 확장을 활성화하는 방법은?</title>
      <link>https://javamemo.tistory.com/713</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도커 컨테이너에서 php의 mysql 확장을 활성화하는 방법은?&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/37526509/how-to-install-pdo-driver-in-php-docker-image&quot; dir=&quot;ltr&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ppd 도커 이미지에 pdo 드라이버를 설치하는 방법은?&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(2개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;닫힘&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;span class=&quot;relativetime&quot; title=&quot;2019-07-24 13:09:54Z&quot; papago-attr-id=&quot;1&quot;&gt;4년 전&lt;/span&gt;에.&lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 다음과 같은 도커- compose.yml을 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;web:
  image: nginx:1.17.1-alpine
  ports:
    - &quot;80:80&quot;
  volumes:
    - ./code:/code
    - ./site.conf:/etc/nginx/conf.d/site.conf
  links:
    - php

php:
  build: .
  volumes:
    - ./code:/code
  links:
    - mysql

mysql:
  image: yobasystems/alpine-mariadb:latest
  ports:
    - &quot;3306:3306&quot;
  volumes:
    - ./mysql:/var/lib/mysql
environment: 
    - MYSQL_ROOT_PASSWORD=password
&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;FROM php:7.1.0-fpm-alpine

RUN docker-php-ext-install mysqli &amp;amp;&amp;amp; docker-php-ext-enable mysqli
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 설정에서는 php의 mysql 확장자나 docker mysql 확장자가 설치되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 php 컨테이너에서 mysql에 접근할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;관리인&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;php는 &quot;지원되는 PHP 확장(MySQLi, MySQL, PDO_MySQL) 중 어느 것도 사용할 수 없다&quot;고 불만을 표시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 문제를 어떻게 해결해야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도커 파일에 다음을 추가하면 문제가 해결되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;RUN docker-php-ext-install mysqli pdo pdo_mysql &amp;amp;&amp;amp; docker-php-ext-enable pdo_mysql
&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/57183109/how-to-enable-phps-mysql-extensions-in-docker-container&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/713</guid>
      <comments>https://javamemo.tistory.com/713#entry713comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:35:59 +0900</pubDate>
    </item>
    <item>
      <title>Google CDN의 최신 jQuery 버전</title>
      <link>https://javamemo.tistory.com/712</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Google CDN의 최신 jQuery 버전&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;구글 CDN의 &lt;a href=&quot;https://developers.google.com/speed/libraries/devguide#jquery&quot; rel=&quot;noreferrer&quot;&gt;공식 문서&lt;/a&gt;에서 읽었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;src&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery에게:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 jQuery를 바꿔야 하는 것은 귀찮은 일입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;src&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 버전 업데이트 시 참조.&lt;/font&gt;&lt;/font&gt;&lt;/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;1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구글은 jQuery의 최신 버전을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js
/*! jQuery v1.8.2 jquery.com | jquery.org/license */
&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;구글 CDN에서 호스팅하는 jQuery의 최신 버전을 참조할 수 있는 공식적인 URL이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;업데이트 7/3/2014:&lt;/strong&gt; 현재&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jquery-latest.js&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 이상 업데이트되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://blog.jquery.com/2014/07/03/dont-use-jquery-latest-js/&quot;&gt;jQuery 블로그&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;우리는 http://code.jquery.com/jquery-latest.js 이 가장 인기 있는 파일이라는 CDN 통계 때문에 악용되고 있다는 것을 알고 있습니다.&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;우리는 두 파일을 버전 1.11.1로 영원히 유지하면서 이 파일과 미니드 카피의 업데이트를 중단하기로 결정했습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Google CDN 팀은 부주의한 웹 손상을 방지하기 위한 이러한 노력에 동참하였으며, 더 이상 http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js 에서 파일을 업데이트하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 파일은 버전 1.11.1에서도 잠겨 있을 것입니다.&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;hr&gt; 
&lt;p&gt;&lt;a href=&quot;http://webcache.googleusercontent.com/search?q=cache:http://www.impressivewebs.com/linking-to-jquery/&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;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery의 주요 버전에 링크하는 것은 효과가 있지만, 이는 좋은 생각이 아닙니다. 완전히 새로운 기능은 10진수 업데이트마다 추가되고 사용되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드를 &lt;strong&gt;완전히&lt;/strong&gt; 테스트하지 않고 jQuery를 자동으로 업데이트하면 중요한 방법의 API가 변경된 경우 예기치 않은 놀라움을 느낄 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 최신 버전의 jQuery를 사용하여 코드를 작성하는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테스트하고, 디버그하고, 생산 준비가 되면 공개합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 새로운 버전의 jQuery가 출시되면 자문해 보십시오.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;제 코드에 이 새 버전이 필요합니까?&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 이전에 없었던 중요한 브라우저 호환성이 있습니까? 아니면 대부분의 브라우저에서 코드 속도를 높일 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대답이 &quot;아니오&quot;이면 코드를 최신 jQuery 버전으로 업데이트할 필요가 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 &lt;a href=&quot;http://jquery.com/upgrade-guide/1.9/&quot;&gt;하면 코드에 이전에 없었던 새로운 오류가 추가&lt;/a&gt;될 수 &lt;a href=&quot;http://jquery.com/upgrade-guide/1.9/&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;항상 최신 버전의 jQuery를 사용할 이유가 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전 버전은 여전히 CDN에서 사용할 수 있는데, 사용자의 목적에 맞게 작동한다면 대체할 이유가 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;부차적이지만 더 중요한 문제는 캐싱입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;많은 사람들이 CDN에서 jQuery에 링크하는데, 이는 다른 많은 사이트들이 jQuery에 링크하기 때문이며, 사용자들은 해당 버전이 이미 캐시되어 있을 가능성이 높습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제는 &lt;a href=&quot;http://www.bucketsoft.com/blog/post/maximize-your-chances-of-caching-your&quot;&gt;전체&lt;/a&gt; 버전 번호를 &lt;a href=&quot;http://www.bucketsoft.com/blog/post/maximize-your-chances-of-caching-your&quot;&gt;제공하는 경우에만 캐싱이 가능&lt;/a&gt;하다는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일부 버전 번호를 제공하면 일부 사용자가 동일한 URL에서 다른 마이너 버전의 jQuery를 얻을 수 있기 때문에 먼 미래의 캐싱은 발생하지 않습니다. (1.7로 연결되는 링크가 하루는 1.7.1, 다음 날은 1.7.2를 가리킵니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;브라우저가 오늘 최신 버전을 제공하는지 확인하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;답변: 캐싱 없음.)&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사실 &lt;a href=&quot;http://www.bucketsoft.com/blog/post/maximize-your-chances-of-caching-your&quot;&gt;여기&lt;/a&gt;에 몇 가지 옵션들과 그들의 유효기간 설정에 대한 &lt;a href=&quot;http://www.bucketsoft.com/blog/post/maximize-your-chances-of-caching-your&quot;&gt;분석이 있습니다.&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://code.jquery.com/jquery-latest.min.js&quot;&gt;http://code.jquery.com/jquery-latest.min.js&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://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js&quot;&gt;http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js&lt;/a&gt; (1시간)&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js&quot;&gt;http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js&lt;/a&gt; (1시간)&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js&quot;&gt;http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js&lt;/a&gt; (1년)&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 jQuery에 연결하면 CDN을 사용해야 하는 주요한 이유 중 하나를 &lt;strong&gt;제거&lt;/strong&gt;할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://code.jquery.com/jquery-latest.min.js&quot;&gt;http://code.jquery.com/jquery-latest.min.js&lt;/a&gt; 에서 항상 원하는 버전을 제공하지는 않을 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery 2.x도 출시되었음에도 불구하고 이 글을 쓰는 현재 jQuery 1.x의 최신 버전으로 연결되어 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 jQuery 1.x가 IE 6/7/8을 포함한 오래된 브라우저와 호환되고 &lt;a href=&quot;http://blog.jquery.com/2013/04/18/jquery-2-0-released/&quot;&gt;jQuery 2.x는 호환&lt;/a&gt;되지 않기 때문입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery 2.x의 최신 버전을 원한다면, (지금은) 이를 명시적으로 지정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 버전의 API가 동일하기 때문에 호환되는 브라우저에 대한 인식 차이는 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 jQuery 1.x는 2.x보다 더 큰 다운로드입니다.&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;최신 1.8.x:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;//ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.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;&gt;최신 1.x:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.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;&gt;그러나 이러한 링크는 전체 버전 번호보다 캐시 제한 시간이 훨씬 짧으므로 사용자가 원하는 만큼 더 많이 다운로드할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자세한 내용은 &lt;a href=&quot;http://encosia.com/the-crucial-0-in-google-cdn-references-to-jquery-1-x-0/&quot;&gt;jQuery &lt;/a&gt;1&lt;a href=&quot;http://encosia.com/the-crucial-0-in-google-cdn-references-to-jquery-1-x-0/&quot;&gt;.&lt;/a&gt;x&lt;a href=&quot;http://encosia.com/the-crucial-0-in-google-cdn-references-to-jquery-1-x-0/&quot;&gt;.0에 대한 Google &lt;/a&gt;CDN의 &lt;a href=&quot;http://encosia.com/the-crucial-0-in-google-cdn-references-to-jquery-1-x-0/&quot;&gt;critical.0 참조&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Google에서 호스팅하는 jQuery 라이브러리가 아닌 다른 jQuery CDN을 사용하려면 이를 사용하고 최신 버전의 jQuery를 사용해야 &lt;strong&gt;합니다&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;http://code.jquery.com/jquery-latest.min.js&quot; type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h1&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Google에서 호스팅하는 최신 jquery 버전을 사용하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/h1&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;a href=&quot;https://developers.google.com/speed/libraries/#jquery&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://developers.google.com/speed/libraries/ #jquery&lt;/font&gt;&lt;/a&gt; &lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;토막글 가져오기:&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;code&gt;&amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드에 입력하세요.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작동하는지 확인합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;봇:&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사람이 할 때까지 기다립니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/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/12608242/latest-jquery-version-on-googles-cdn&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/712</guid>
      <comments>https://javamemo.tistory.com/712#entry712comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:35:52 +0900</pubDate>
    </item>
    <item>
      <title>생성된 저장 프로시저 실패</title>
      <link>https://javamemo.tistory.com/711</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;CREATE TABLE `church` (
  `ID` int(10) UNSIGNED NOT NULL,
  `StudentID` int(11) NOT NULL,
  `semesterID` int(11) NOT NULL,
  `attendedWed` int(11) NOT NULL,
  `attendedFri` int(11) NOT NULL,
  `attendedSabM` int(11) NOT NULL,
  `attendedSabE` int(11) NOT NULL,
  `ChurchScore` double(10,2) GENERATED ALWAYS AS ((((((`attendedWed` + `attendedFri`) + `attendedSabM`) + `attendedSabE`) * 100) / 60)) STORED
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
&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 papago-translate=&quot;translated&quot;&gt;SQL 스크립트를 데이터베이스에 적용하는 동안 오류가 발생했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행 중: ALTER TABLE&lt;/font&gt;&lt;/font&gt;&lt;code&gt;citizenshipgroup3&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;church&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열 변경&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ChurchScore&lt;/code&gt; &lt;code&gt;ChurchScore&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DUBLE(10,2) NULL Default&lt;/font&gt;&lt;/font&gt;&lt;code&gt;attendedWed&lt;/code&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;오류 1064:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 설명서에서 '근처에 사용할 올바른 구문을 확인하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;attendedWed&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;' 2행 SQL 문: ALTER TABLE&lt;/font&gt;&lt;/font&gt;&lt;code&gt;citizenshipgroup3&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;church&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열 변경&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ChurchScore&lt;/code&gt; &lt;code&gt;ChurchScore&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DUBLE(10,2) NULL Default&lt;/font&gt;&lt;/font&gt;&lt;code&gt;attendedWed&lt;/code&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;문제는 MySQL이 생성된 열을 5.7까지 지원하지 않는다는 것입니다.&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 시간에 오류가 나타납니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ALTER TABLE&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 열을 수정하려고 할 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ChurchScore&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;세팅하기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DEFAULT&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 열을 포함하는 식의 값&lt;/font&gt;&lt;/font&gt;&lt;code&gt;attendedWed&lt;/code&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이 아닌 MariaDB에서 온 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://mariadb.com/kb/en/library/create-table/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mariadb 설명서&lt;/a&gt;에서:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MariaDB 10.2.1부터는 DEFAULT에서 대부분의 함수를 사용할 수 있습니다. 표현식에는 괄호가 있어야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DEFAULT에서 비결정론적 함수를 사용하면 테이블에 대한 모든 삽입이 행 모드로 복제됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DEFAULT 식에서 이전 열을 참조할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;CREATE TABLE t1 (a int DEFAULT (1+1), b int DEFAULT (a+1));
CREATE TABLE t2 (a bigint primary key DEFAULT UUID_SHORT());
&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;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MariaDB 버전을 10.2.1 이상으로 업그레이드합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최신 버전으로 업그레이드하는 것이 좋습니다(현재 10.3+입니다).&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에 지정된 표현 주위에 괄호를 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DEFAULT&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;절&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ALTER TABLE&lt;/code&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;ALTER TABLE `citizenshipgroup3`.`church` 
CHANGE COLUMN `ChurchScore` `ChurchScore` DOUBLE(10,2) NULL 
DEFAULT (attendedWed) ;
&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/53467871/failed-generated-stored-procedure&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/711</guid>
      <comments>https://javamemo.tistory.com/711#entry711comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:35:46 +0900</pubDate>
    </item>
    <item>
      <title>빌드의 일부로 Xml 직렬화 어셈블리 생성</title>
      <link>https://javamemo.tistory.com/710</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;빌드의 일부로 Xml 직렬화 어셈블리 생성&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 코드는 FileNotFoundException을 생성하지만 최종적으로는 문제없이 실행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void ReadXml()
{
    XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
    //...
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 예외가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;'System' 유형의 첫 번째 기회 예외입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;mscorlib.dll에서 'IO.FileNotFoundException'이(가) 발생했습니다.&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;'MyAssembly' 파일 또는 어셈블리를 로드할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Xml Serializer, 버전=1.4.3190.15950, Culture=neutral, PublicKey&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Token= null' 또는 해당 종속성 중 하나입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지정한 파일을 찾을 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;프레임워크가 발견되지 않으면 자동으로 직렬화 어셈블리를 생성하는 것으로 보입니다.&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;sgen.exe를 사용하여 수동으로 생성할 수 있어 예외를 완화합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시각 스튜디오에서 XML Serialization 어셈블리를 자동으로 생성하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;업데이트: 직렬화 어셈블리 생성:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;설정에서 아무 것도 하지 않는 것 같습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마틴이 &lt;a href=&quot;https://stackoverflow.com/a/264464/94928&quot;&gt;답변&lt;/a&gt;에서 설명한 것처럼 프로젝트 속성을 통해 직렬화 어셈블리의 생성을 켜는 것은 SGen 작업이 추가되고 있기 때문에 충분하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/proxytypes&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;sgen으로 전환합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;exe 명령행입니다.&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;Microsoft는 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/bb629394.aspx&quot; rel=&quot;noreferrer&quot;&gt;문서화된 MSBuild 속성&lt;/a&gt;을 가지고 있으며 이 속성을 사용하지 않도록 설정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/proxytypes&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;switch를 실행하면 어셈블리에 프록시 유형이 없더라도 SGen Task에서 직렬화 어셈블리를 생성합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SGenUse프록시 유형&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SGen.exe에서 프록시 유형을 생성해야 하는지 여부를 나타내는 부울 값입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SGen 대상은 이 속성을 사용하여 UseProxyTypes 플래그를 설정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 속성은 true로 기본 설정되며 이를 변경할 UI가 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;웹 서비스가 아닌 유형에 대한 직렬화 어셈블리를 생성하려면 이 속성을 프로젝트 파일에 추가하고 Microsoft를 가져오기 전에 false로 설정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;흔한.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대상 또는 C#/VB.대상&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;SGenUseProxyTypes&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;  &amp;lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'Debug|x86' &quot;&amp;gt;
    &amp;lt;!-- Snip... --&amp;gt;
    &amp;lt;GenerateSerializationAssemblies&amp;gt;On&amp;lt;/GenerateSerializationAssemblies&amp;gt;
    &amp;lt;SGenUseProxyTypes&amp;gt;false&amp;lt;/SGenUseProxyTypes&amp;gt;
  &amp;lt;/PropertyGroup&amp;gt;
  &amp;lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'Release|x86' &quot;&amp;gt;
    &amp;lt;!-- Snip... --&amp;gt;
    &amp;lt;GenerateSerializationAssemblies&amp;gt;On&amp;lt;/GenerateSerializationAssemblies&amp;gt;
    &amp;lt;SGenUseProxyTypes&amp;gt;false&amp;lt;/SGenUseProxyTypes&amp;gt;
  &amp;lt;/PropertyGroup&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 제가 제 안에 있는 MSBUILD 스크립트를 수정해서 할 수 있었던 방법입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CSPROJ 파일:&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;프로젝트가 아닌 파일로 CSPROJ 파일.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트 태그가 닫히기 직전에 주석이 달린 코드를 찾을 때까지 파일 맨 아래로 스크롤합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets.
&amp;lt;Target Name=&quot;BeforeBuild&quot;&amp;gt;
&amp;lt;/Target&amp;gt;
&amp;lt;Target Name=&quot;AfterBuild&quot;&amp;gt;
&amp;lt;/Target&amp;gt;
--&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 AfterBuild 대상을 삽입하여 기존 XmlSerializer를 삭제하고 SGen을 우리 고유의 것으로 삭제합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Target Name=&quot;AfterBuild&quot; DependsOnTargets=&quot;AssignTargetPaths;Compile;ResolveKeySource&quot; Inputs=&quot;$(MSBuildAllProjects);@(IntermediateAssembly)&quot; Outputs=&quot;$(OutputPath)$(_SGenDllName)&quot;&amp;gt;
   &amp;lt;!-- Delete the file because I can't figure out how to force the SGen task. --&amp;gt;
   &amp;lt;Delete
     Files=&quot;$(TargetDir)$(TargetName).XmlSerializers.dll&quot;
     ContinueOnError=&quot;true&quot; /&amp;gt;
   &amp;lt;SGen
     BuildAssemblyName=&quot;$(TargetFileName)&quot;
     BuildAssemblyPath=&quot;$(OutputPath)&quot;
     References=&quot;@(ReferencePath)&quot;
     ShouldGenerateSerializer=&quot;true&quot;
     UseProxyTypes=&quot;false&quot;
     KeyContainer=&quot;$(KeyContainerName)&quot;
     KeyFile=&quot;$(KeyOriginatorFile)&quot;
     DelaySign=&quot;$(DelaySign)&quot;
     ToolPath=&quot;$(TargetFrameworkSDKToolsDirectory)&quot;
     Platform=&quot;$(Platform)&quot;&amp;gt;
      &amp;lt;Output
       TaskParameter=&quot;SerializationAssembly&quot;
       ItemName=&quot;SerializationAssembly&quot; /&amp;gt;
   &amp;lt;/SGen&amp;gt;
&amp;lt;/Target&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 그것이 좋습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 질문에 대한 다른 답변에서는 프로젝트 속성-&amp;gt;빌드-&amp;gt;&lt;strong&gt;직렬화 어셈블리 생성&lt;/strong&gt; 설정에 대해 이미 언급했지만, 기본적으로 프로젝트에 &quot;&lt;strong&gt;XML &lt;/strong&gt;웹 서비스 &lt;strong&gt;프록시 유형&lt;/strong&gt;&quot;이 있는 경우에만 어셈블리를 생성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Visual Studio의 정확한 동작을 이해하는 가장 좋은 방법은 C:\ 내에서 Generate &lt;strong&gt;Serialization&lt;/strong&gt; Assembly 대상을 조사하는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WINDOWS\Microsoft.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NET\Framework\v2.0.50727**Microsoft.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Common.targets** 파일입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Visual Studio &lt;strong&gt;Output&lt;/strong&gt; 창에서 이 빌드 작업의 결과를 확인하고 &lt;strong&gt;Show output from&lt;/strong&gt;: 드롭다운 상자에서 &lt;strong&gt;Build&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:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin\sgen.exe/assembly:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;D:\Temp\Library&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;A\obj\Debug\LibraryA.dll /&lt;strong&gt;proxytypes&lt;/strong&gt; /reference:..&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;/compiler:/delaysign - 라이브러리 A -&amp;gt; D:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;\Temp\Library&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;A\bin\Debug\Library A.dll&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 핵심은 /&lt;strong&gt;proxytype&lt;/strong&gt; 스위치입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/bk3w6240(VS.80).aspx&quot; rel=&quot;noreferrer&quot;&gt;XML Serializer Generator Tool(Sgen.exe)&lt;/a&gt;의 다양한 스위치에 대해 읽을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MSBuild에 익숙한 경우 GenerateSerializationAssemblys 대상을 사용자 지정하여 SGen 작업이 참이 아닌 UseProxyTypes=&quot;false&quot; 속성을 갖도록 할 수 있지만 Visual Studio/MSBuild 시스템 사용자 지정과 관련된 모든 책임을 져야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 빌드 프로세스를 확장하여 /proxytype 스위치 없이 수동으로 SGen을 호출할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SGen에 대한 설명서를 읽어보면 Microsoft가 이 기능의 사용을 제한하고자 했다는 것을 알 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 주제에 대한 잡음의 양을 고려할 때, Microsoft가 비주얼 스튜디오 경험을 문서화하는 데 큰 역할을 하지 못했다는 것은 분명합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 문제에 대한 &lt;a href=&quot;http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=123088&quot; rel=&quot;noreferrer&quot;&gt;피드백 연결&lt;/a&gt; 항목도 있는데 반응이 좋지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 sgen 작업 정의를 생성하면 파리가 깨집니다.&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;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;(http://msdn.microsoft.com/en-us/library/ff798449.aspx) 의 일부와 함께)&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Visual Studio 2010의 솔루션 탐색기에서 직렬화 어셈블리를 생성할 프로젝트를 마우스 오른쪽 버튼으로 누른 다음 프로젝트 언로드를 누르십시오.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;솔루션 탐색기에서 직렬화 어셈블리를 생성할 프로젝트를 마우스 오른쪽 버튼으로 누른 다음 편집 .csproj를 누르십시오.&lt;/font&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;.csproj 파일에서, 그 직후에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;TargetFrameworkVersion&amp;gt;v?.?&amp;lt;/TargetFrameworkVersion&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;element, 다음 element를 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
  &lt;blockquote&gt; 
   &lt;p&gt;&lt;code&gt;&amp;lt;SGenUseProxyTypes&amp;gt;false&amp;lt;/SGenUseProxyTypes&amp;gt;&lt;/code&gt; &lt;code&gt;&amp;lt;SGenPlatformTarget&amp;gt;$(Platform)&amp;lt;/SGenPlatformTarget&amp;gt;&lt;/code&gt;&lt;/p&gt; 
  &lt;/blockquote&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.csproj 파일에서, 각 플랫폼 구성에서&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;PropertyGroup Condition=&quot;'$(Configuration)|$(Platform)' == 'Debug|x86'&quot;&amp;gt;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 행을 추가합니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;&amp;lt;GenerateSerializationAssemblies&amp;gt;On&amp;lt;/GenerateSerializationAssemblies&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.csproj 파일을 저장하고 닫습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;솔루션 탐색기에서 방금 편집한 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 프로젝트 다시 로드를 클릭합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 절차에서는 출력 폴더에 .xmlSerializers.dll이라는 이름의 어셈블리를 추가로 생성합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;솔루션과 함께 이 어셈블리를 배포해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;설명.&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프록시 유형에 대한 SGen은 기본적으로 &quot;모든 CPU&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;SGenPlatformTarget은 PlatformTarget과 일치해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 이것이 프로젝트 템플릿의 버그라고 생각하는 경향이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;sgen target 플랫폼이 프로젝트 플랫폼과 다른 이유는 무엇입니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 런타임 예외가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;0x80131040:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위치한 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트 파일을 분석하여 msbuild 작업 정의를 찾을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Import Project=&quot;$(MSBuildToolsPath)\Microsoft.CSharp.targets&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 MSBuildToolsPath는 사용자의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;TargetFrameworkVersion&amp;gt;&lt;/code&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/bb397428.aspx&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://msdn.microsoft.com/en-us/library/bb397428.aspx&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;TargetFrameworkVersion 4.0에 대한 SGen 작업 정의 내부를 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Windows 설치 경로\Microsoft.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NET\Framework\v4.0.30319\Microsoft.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CS샤프타겟&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트 파일에서 자유롭게 설정할 수 있는 $(SGenPlatformTarget)과 같은 문서화되지 않은 변수를 보려면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Target
    Name=&quot;GenerateSerializationAssemblies&quot;
    Condition=&quot;'$(_SGenGenerateSerializationAssembliesConfig)' == 'On' or ('@(WebReferenceUrl)'!='' and '$(_SGenGenerateSerializationAssembliesConfig)' == 'Auto')&quot;
    DependsOnTargets=&quot;AssignTargetPaths;Compile;ResolveKeySource&quot;
    Inputs=&quot;$(MSBuildAllProjects);@(IntermediateAssembly)&quot;
    Outputs=&quot;$(IntermediateOutputPath)$(_SGenDllName)&quot;&amp;gt;

    &amp;lt;SGen
        BuildAssemblyName=&quot;$(TargetFileName)&quot;
        BuildAssemblyPath=&quot;$(IntermediateOutputPath)&quot;
        References=&quot;@(ReferencePath)&quot;
        ShouldGenerateSerializer=&quot;$(SGenShouldGenerateSerializer)&quot;
        UseProxyTypes=&quot;$(SGenUseProxyTypes)&quot;
        KeyContainer=&quot;$(KeyContainerName)&quot;
        KeyFile=&quot;$(KeyOriginatorFile)&quot;
        DelaySign=&quot;$(DelaySign)&quot;
        ToolPath=&quot;$(SGenToolPath)&quot;
        SdkToolsPath=&quot;$(TargetFrameworkSDKToolsDirectory)&quot;
        EnvironmentVariables=&quot;$(SGenEnvironment)&quot;
        SerializationAssembly=&quot;$(IntermediateOutputPath)$(_SGenDllName)&quot;
        Platform=&quot;$(SGenPlatformTarget)&quot;
        Types=&quot;$(SGenSerializationTypes)&quot;&amp;gt;
            &amp;lt;Output TaskParameter=&quot;SerializationAssembly&quot; ItemName=&quot;SerializationAssembly&quot;/&amp;gt;
    &amp;lt;/SGen&amp;gt;
&amp;lt;/Target&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전에 모든 것이 정상적으로 작동한 후에 다른 사람이 갑자기 이 문제에 직면한 경우:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 경우에는 옵션 메뉴(옵션 -&amp;gt; 디버깅)에서 &quot;Enable Just My Code (Managed Only)&quot; 확인란을 선택 해제하는 것과 관련이 있었습니다(설치 후 자동으로 꺼짐).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NET Reflector).&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;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특히 비주얼 스튜디오는 프로젝트의 속성을 보려고 할 때마다 충돌합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 csproj 파일을 읽는 방법을 더 이상 이해하지 못했기 때문이라고 생각합니다.&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;&quot;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\sgen.exe&quot; &quot;$(TargetPath)&quot; /force
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 디버그 또는 릴리스용 프로젝트를 빌드할 때마다 sgen.exe를 직접 사용하여 Xml Serialization 어셈블리를 재구성할 수 있습니다.&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;&lt;a href=&quot;https://stackoverflow.com/a/15538240&quot;&gt;Brain&lt;/a&gt; backup에서 제공하는 솔루션과 약간 다른 솔루션은 플랫폼을 사용해야 하는 위치를 직접 지정하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- Check the platform target value and if present use that for a correct *.XmlSerializer.dll platform setup (default is MSIL)--&amp;gt;
&amp;lt;PropertyGroup Condition=&quot; '$(PlatformTarget)'=='' &quot;&amp;gt;
  &amp;lt;SGenPlatform&amp;gt;$(Platform)&amp;lt;/SGenPlatform&amp;gt;
&amp;lt;/PropertyGroup&amp;gt;
&amp;lt;PropertyGroup Condition=&quot; '$(PlatformTarget)'!='' &quot;&amp;gt;
  &amp;lt;SGenPlatform&amp;gt;$(PlatformTarget)&amp;lt;/SGenPlatform&amp;gt;
&amp;lt;/PropertyGroup&amp;gt;

&amp;lt;!-- Delete the file because I can't figure out how to force the SGen task. --&amp;gt;
&amp;lt;Delete Files=&quot;$(TargetDir)$(TargetName).XmlSerializers.dll&quot; ContinueOnError=&quot;true&quot; /&amp;gt;
&amp;lt;SGen
  BuildAssemblyName=&quot;$(TargetFileName)&quot;
  BuildAssemblyPath=&quot;$(OutputPath)&quot;
  References=&quot;@(ReferencePath)&quot;
  ShouldGenerateSerializer=&quot;true&quot;
  UseProxyTypes=&quot;false&quot;
  KeyContainer=&quot;$(KeyContainerName)&quot;
  KeyFile=&quot;$(KeyOriginatorFile)&quot;
  DelaySign=&quot;$(DelaySign)&quot;
  ToolPath=&quot;$(SGenToolPath)&quot;
  SdkToolsPath=&quot;$(TargetFrameworkSDKToolsDirectory)&quot;
  EnvironmentVariables=&quot;$(SGenEnvironment)&quot;
  Platform=&quot;$(SGenPlatform)&quot;&amp;gt;
  &amp;lt;Output TaskParameter=&quot;SerializationAssembly&quot; ItemName=&quot;SerializationAssembly&quot; /&amp;gt;
&amp;lt;/SGen&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;누구든지 그렇게 하는 것에 관심이 있습니다&lt;strong&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;NET Core&lt;/strong&gt; - MS 문서 &lt;strong&gt;https://learn.microsoft.com/en-us/dotnet/core/additional-tools/xml-serializer-generator&lt;/strong&gt; 을 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로, 당신의 프로젝트에 nuget 패키지 하나만 추가하면 됩니다.&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/134224/generating-an-xml-serialization-assembly-as-part-of-my-build&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>XML</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/710</guid>
      <comments>https://javamemo.tistory.com/710#entry710comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:35:39 +0900</pubDate>
    </item>
    <item>
      <title>Oracle: 조건을 포함한 전체 텍스트 검색</title>
      <link>https://javamemo.tistory.com/709</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle: 조건을 포함한 전체 텍스트 검색&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같은 Oracle Text 인덱스를 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;create index my_idx on my_table (text) indextype is ctxsys.context; 
&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;select * from my_table where contains(text, '%blah%') &amp;gt; 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;group_id&lt;/code&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;select * from my_table where contains(text, '%blah%') &amp;gt; 0 and group_id = 43;
&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;위 인덱스를 사용하면 Oracle은 다음을 포함하는 모든 항목을 검색해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'blah'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그리고 그들 모두를 확인해 보세요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;group_id&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;s.&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;group_id = 43&lt;/code&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 index my_idx on my_table (group_id, text) indextype is ctxsys.context; 
&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;group_id&lt;/code&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;Oracle에서 이와 같은 작업을 수행할 수 있는 방법이 있습니까(중요한 경우 10g을 사용합니다)?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편집(명확화)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;백만 행과 다음 두 열 중에서 다음 두 열이 있는 표를 생각해 보십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;A&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;B&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 숫자 둘 다&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;500개의 다양한 값이 있다고 가정해 보겠습니다.&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;그리고 2000개의 다른 값들의.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;B&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 각 행은 독특합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 생각해 보겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;select ... where A = x and B = y&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에 대한 색인&lt;/font&gt;&lt;/font&gt;&lt;code&gt;A&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;B&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 말할 수 있는 한 따로 인덱스 검색을 해봐요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;B&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 500개의 다른 행을 반환한 다음 이 행에 대해 조인/스캔을 수행합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 경우에도 최소 500개의 행을 살펴보아야 합니다(데이터베이스가 운이 좋고 필요한 행을 일찍 찾는 것 외에도).&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;(A,B)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한 인덱스 검색에서 한 행을 찾으면 훨씬 더 효과적입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;별도 인덱스를 에 추가하는 중&lt;/font&gt;&lt;/font&gt;&lt;code&gt;group_id&lt;/code&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;(1) 사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;group_id&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;색인을 만들고 텍스트에 대한 모든 결과 행을 검색합니다.&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) 텍스트 색인을 사용하고 모든 결과 행을 검색하여 다음 항목에 대해&lt;/font&gt;&lt;/font&gt;&lt;code&gt;group_id&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&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;(3) 두 인덱스를 모두 사용하고 조인을 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 원하는 건&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(4) 사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(group_id, &quot;text&quot;)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;색인을 사용하여 특정 아래의 텍스트 색인을 찾습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;group_id&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;텍스트 색인에서 필요한 특정 행/행을 검색합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에서 인덱스를 사용할 때와 마찬가지로 스캔 및 검사 또는 결합이 필요하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(A,B)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오라클 텍스트&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1 - &lt;a href=&quot;http://download.oracle.com/docs/cd/E11882_01/text.112/e16594/ind.htm#CIHHJJJE&quot; rel=&quot;noreferrer&quot;&gt;FILTER BY&lt;/a&gt;:로 컨텍스트 인덱스를 만들어 성능을 향상시킬 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;create index my_idx on my_table(text) indextype is ctxsys.context filter by group_id;
&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;filter by&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성능은 확실히 향상되었지만 group_id에서 btree 인덱스를 사용하는 것이 여전히 약간 빠릅니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2 - CTXCAT 인덱스는 &quot;하위 인덱스&quot;를 사용하며 다중 열 인덱스와 유사하게 작동하는 것으로 보입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 여러분이 찾고 있는 옵션(4)인 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;begin
  ctx_ddl.create_index_set('my_table_index_set');
  ctx_ddl.add_index('my_table_index_set', 'group_id');
end;
/

create index my_idx2 on my_table(text) indextype is ctxsys.ctxcat
    parameters('index set my_table_index_set');

select * from my_table where catsearch(text, 'blah', 'group_id = 43') &amp;gt; 0
&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;당신의 A 및 B 시나리오와 유사한 120MB의 랜덤 텍스트에 대해 위의 쿼리를 사용하면 18개의 일관된 get만 필요합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 단점으로는 CTXCAT 지수를 만드는 데 거의 11분이 걸렸고 1.8을 사용했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GB의 공간.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(참고: Oracle Text는 여기서 올바르게 작동하는 것처럼 보이지만, Text에 익숙하지 않고 @NullUserException이 말한 것처럼 이러한 인덱스를 사용하는 것이 부적절하지 않다는 것을 확인할 수 없습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다중 열 인덱스 대 인덱스 조인&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편집에서 설명한 상황의 경우, &lt;em&gt;일반적&lt;/em&gt;으로 (A,B)에서 인덱스를 사용하는 것과 A와 B에서 별도의 인덱스를 결합하는 것 사이에는 큰 차이가 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 설명한 것과 유사한 데이터로 몇 가지 테스트를 작성했는데 인덱스 결합은 다중 열 인덱스에 대해 7개의 일관된 get과 2개의 일관된 get만 필요합니다.&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;블록은 보통 8K이고 인덱스 블록은 이미 정렬되어 있으므로 500에서 2000까지의 값을 몇 개의 블록에 맞출 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성능이 걱정된다면 보통 블록을 읽고 쓰는 IO만 중요합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle이 몇 천 개의 행을 결합해야 하는지 여부는 CPU 시간의 의미가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 이는 Oracle Text 인덱스에는 적용되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Bt트리 인덱스(&quot;비트맵과?&quot;)로 CONCONTIC 인덱스에 가입할 수 있지만 성능이 떨어집니다.&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;group_id&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 정도면 충분한가 봐요&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;몇 줄에 대해 이야기하는지, 어떤 성능이 필요한지에 대해서는 말하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;술어가 처리되는 순서가 반드시 쿼리에서 술어를 작성한 순서는 아니라는 것을 기억하십시오.&lt;/font&gt;&lt;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;strong&gt;짧은 버전:&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그럴 필요 없어요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쿼리 최적화 도구는 데이터를 선택하는 가장 좋은 방법을 결정할 수 있을 정도로 똑똑합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;bt 트리 인덱스 만들기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;group_id&lt;/code&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 INDEX my_group_idx ON my_table (group_id); 
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;긴 버전:&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;136행의 더미 데이터를 삽입하는 스크립트()&lt;a href=&quot;http://pastebin.com/JsRL1N4k&quot; rel=&quot;nofollow&quot;&gt;&lt;code&gt;testperf.sql&lt;/code&gt;&lt;/a&gt;를 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DESC my_table;

Name     Null     Type      
-------- -------- --------- 
ID       NOT NULL NUMBER(4) 
GROUP_ID          NUMBER(4) 
TEXT              CLOB      
&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;bt트리 인덱스가 에 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;group_id&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 인덱스가 실제로 사용되는지 확인하려면 다음을 dba 사용자로 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;EXEC DBMS_STATS.GATHER_TABLE_STATS('&amp;lt;YOUR USER HERE&amp;gt;', 'MY_TABLE', cascade=&amp;gt;TRUE);
&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;group_id&lt;/code&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;GROUP_ID               COUNT                  PCT                    
---------------------- ---------------------- ---------------------- 
1                      1                      1                      
2                      2                      1                      
3                      4                      3                      
4                      8                      6                      
5                      16                     12                     
6                      32                     24                     
7                      64                     47                     
8                      9                      7         
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쿼리 최적화 도구는 좋은 아이디어라고 생각되는 경우에만 인덱스를 사용합니다. 즉, 행의 특정 비율까지 검색하고 있는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 다음에 대한 쿼리 계획을 요청할 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT * FROM my_table WHERE group_id = 1;
SELECT * FROM my_table WHERE group_id = 7;
&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;group_id = 7&lt;/code&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;WHERE group_id = Y AND text LIKE '%blah%'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(내가 잘 모르기 때문에)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ctxsys.context&lt;/code&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;SELECT * FROM my_table WHERE group_id = 1 AND text LIKE '%ipsum%';
&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;em&gt;사용&lt;/em&gt;하는 것을 알 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;group_id&lt;/code&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;SELECT * FROM my_table WHERE text LIKE '%ipsum%' AND group_id = 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 papago-translate=&quot;translated&quot;&gt;그리고 같은 쿼리를 실행하려고 하면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;group_id = 7&lt;/code&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;SELECT * FROM my_table WHERE group_id = 7 AND text LIKE '%ipsum%';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle은 쿼리 최적화기의 효율성을 지속적으로 개선하기 위해 통계를 매일 자동으로 수집합니다(매일 밤과 주말에 실행 예정).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;간단히 말해, Oracle은 최적화를 위해 최선을 다하므로 굳이 최적화할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테스트할 Oracle 인스턴스를 가지고 있지 않고 Oracle에서 전체 텍스트 인덱싱을 사용한 적은 없지만 &lt;em&gt;인라인&lt;/em&gt; 뷰를 사용하면 일반적으로 좋은 성능을 발휘할 수 있습니다. 이는 사용자가 염두에 둔 인덱스를 대체할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;contains()&lt;/strong&gt;가 포함된 경우 다음 구문이 적합합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 인라인 뷰를 통해 그룹 43의 행에 대한 PK 값을 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;             (
             select T.pkcol
             from T
             where group = 43
             )
&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;그런 다음 해당 집합을 T로 다시 연결합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;           select * from T
           inner join
            (
             select T.pkcol
             from T
             where group = 43
             ) as MyGroup

           on T.pkcol = MyGroup.pkcol
           where contains(text, '%blah%') &amp;gt; 0
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Optimizer가 PK 인덱스를 사용하여 조인을 최적화한 다음 &lt;strong&gt;포함&lt;/strong&gt; 술어를 그룹 43 행에만 적용할 수 있기를 바랍니다.&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/7358137/oracle-full-text-search-with-condition&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/709</guid>
      <comments>https://javamemo.tistory.com/709#entry709comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:35:31 +0900</pubDate>
    </item>
    <item>
      <title>Wildfly 및 자동으로 데이터베이스에 다시 연결</title>
      <link>https://javamemo.tistory.com/708</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Wildfly 및 자동으로 데이터베이스에 다시 연결&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;클라이언트는 EJB 원격 인터페이스를 통해 서버와 통신합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서버로서 - Wildfly 8.2.0을 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터베이스로서 - MySQL을 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서버는 JPA/Hibernate를 통해 MySQL과 통신합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 서버를 끄면 당연히 와일드플라이는 예외를 던집니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 MySQL을 다시 켜면 Wildfly는 여전히 동일한 &lt;a href=&quot;http://pastebin.com/2jga18fW&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;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연결 URL에 자동 재연결을 설정하려고 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jdbc:mysql://localhost/db?autoReconnect=true&amp;amp;amp;useUnicode=yes&amp;amp;amp;characterEncoding=UTF8&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 사용하는 standalone-full.xml 파일에 다음 줄을 추가하려고 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;check-valid-connection-sql&amp;gt;select 1&amp;lt;/check-valid-connection-sql&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;translated&quot;&gt;독립 실행형-full.xml:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- ... --&amp;gt;
&amp;lt;datasource jta=&quot;true&quot; jndi-name=&quot;java:jboss/datasources/MySQLDS&quot; pool-name=&quot;MySQLDS&quot; enabled=&quot;true&quot; use-ccm=&quot;true&quot;&amp;gt;
    &amp;lt;connection-url&amp;gt;jdbc:mysql://localhost/db?autoReconnect=true&amp;amp;amp;amp;useUnicode=yes&amp;amp;amp;amp;characterEncoding=UTF8&amp;lt;/connection-url&amp;gt;
    &amp;lt;driver-class&amp;gt;com.mysql.jdbc.Driver&amp;lt;/driver-class&amp;gt;
    &amp;lt;driver&amp;gt;mysqlDriver&amp;lt;/driver&amp;gt;
    &amp;lt;security&amp;gt;
        &amp;lt;user-name&amp;gt;user&amp;lt;/user-name&amp;gt;
        &amp;lt;password&amp;gt;***&amp;lt;/password&amp;gt;
    &amp;lt;/security&amp;gt;
    &amp;lt;validation&amp;gt;
        &amp;lt;check-valid-connection-sql&amp;gt;select 1&amp;lt;/check-valid-connection-sql&amp;gt;
        &amp;lt;validate-on-match&amp;gt;false&amp;lt;/validate-on-match&amp;gt;
        &amp;lt;background-validation&amp;gt;false&amp;lt;/background-validation&amp;gt;
    &amp;lt;/validation&amp;gt;
    &amp;lt;timeout&amp;gt;
        &amp;lt;set-tx-query-timeout&amp;gt;false&amp;lt;/set-tx-query-timeout&amp;gt;
        &amp;lt;blocking-timeout-millis&amp;gt;0&amp;lt;/blocking-timeout-millis&amp;gt;
        &amp;lt;idle-timeout-minutes&amp;gt;0&amp;lt;/idle-timeout-minutes&amp;gt;
        &amp;lt;query-timeout&amp;gt;0&amp;lt;/query-timeout&amp;gt;
        &amp;lt;use-try-lock&amp;gt;0&amp;lt;/use-try-lock&amp;gt;
        &amp;lt;allocation-retry&amp;gt;0&amp;lt;/allocation-retry&amp;gt;
        &amp;lt;allocation-retry-wait-millis&amp;gt;0&amp;lt;/allocation-retry-wait-millis&amp;gt;
    &amp;lt;/timeout&amp;gt;
    &amp;lt;statement&amp;gt;
        &amp;lt;share-prepared-statements&amp;gt;false&amp;lt;/share-prepared-statements&amp;gt;
    &amp;lt;/statement&amp;gt;
&amp;lt;/datasource&amp;gt;
&amp;lt;drivers&amp;gt;
    &amp;lt;driver name=&quot;mysqlDriver&quot; module=&quot;com.mysql&quot;&amp;gt;
        &amp;lt;xa-datasource-class&amp;gt;com.mysql.jdbc.Driver&amp;lt;/xa-datasource-class&amp;gt;
    &amp;lt;/driver&amp;gt;
&amp;lt;/drivers&amp;gt;
&amp;lt;!-- ... --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Wildfly 8.1에서 작동하는 내용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;         &amp;lt;datasource jta=&quot;true&quot; jndi-name=&quot;java:jboss/datasources/xxxdb&quot; pool-name=&quot;xxxxDB&quot; enabled=&quot;true&quot; use-ccm=&quot;false&quot;&amp;gt;
          &amp;lt;connection-url&amp;gt;jdbc:mysql://localhost:3306/xxxdb?autoReconnect=true&amp;amp;amp;amp;useUnicode=true&amp;amp;amp;amp;characterEncoding=UTF-8&amp;lt;/connection-url&amp;gt;
          &amp;lt;driver-class&amp;gt;com.mysql.jdbc.Driver&amp;lt;/driver-class&amp;gt;
          &amp;lt;driver&amp;gt;mysql-connector-java-5.1.26-bin.jar&amp;lt;/driver&amp;gt;
          &amp;lt;security&amp;gt;
              &amp;lt;user-name&amp;gt;xxxuser&amp;lt;/user-name&amp;gt;
              &amp;lt;password&amp;gt;xxxpassword&amp;lt;/password&amp;gt;
          &amp;lt;/security&amp;gt;
          &amp;lt;validation&amp;gt;
              &amp;lt;check-valid-connection-sql&amp;gt;select 1&amp;lt;/check-valid-connection-sql&amp;gt;
              &amp;lt;validate-on-match&amp;gt;false&amp;lt;/validate-on-match&amp;gt;
              &amp;lt;background-validation&amp;gt;true&amp;lt;/background-validation&amp;gt;
              &amp;lt;background-validation-millis&amp;gt;10000&amp;lt;/background-validation-millis&amp;gt;
          &amp;lt;/validation&amp;gt;
          &amp;lt;statement&amp;gt;
              &amp;lt;share-prepared-statements&amp;gt;false&amp;lt;/share-prepared-statements&amp;gt;
          &amp;lt;/statement&amp;gt;
        &amp;lt;/datasource&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;독립 실행형-full.xml 파일에서 일치 확인 값을 true로 변경하여 이 문제를 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;&amp;lt;validate-on-match&amp;gt;true&amp;lt;/validate-on-match&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;설정 가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;background-validation&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;true&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 왜냐하면 이 옵션은 더 좋은 성능과 세트를 가지고 있기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;validate-on-match&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;false&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;URL : https://stackoverflow.com/questions/28707650/wildfly-and-auto-reconnect-to-the-database&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/708</guid>
      <comments>https://javamemo.tistory.com/708#entry708comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:35:23 +0900</pubDate>
    </item>
    <item>
      <title>javascript code 실행 전에 javascript 파일이 모두 로딩될 때까지 기다리는 것이 가능합니까?</title>
      <link>https://javamemo.tistory.com/707</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;javascript code 실행 전에 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;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;$(document).ready()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이런 짓을 했지만, 알고 보니 그렇지 않아요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론 스크립트 파일을 아래에서 위로 옮길 수는 있지만, 제가 원하는 것으로 가능한지 궁금합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용가능&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(window).on('load', function() {
    // your code here
});
&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;$(document).ready()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DOM이 로드될 때까지 기다립니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반 JS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;window.addEventListener('load', function() {
    // your code here
})
&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; $.getScript(&quot;my_lovely_script.js&quot;, function(){

    alert(&quot;Script loaded and executed.&quot;);
    // here you can use anything you defined in the loaded script

 });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 나은 설명은 여기에서 확인할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/950087/include-javascript-file-inside-javascript-file&quot;&gt;다른 자바스크립트 파일에 자바스크립트 파일을 포함하려면 어떻게 해야 합니까?&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용가능&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;defer&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기여하다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;페이지 파싱이 완료되면 스크립트가 실행되도록 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script defer src=&quot;path/to/yourscript.js&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것에 관한 멋진 기사: http://davidwalsh.name/script-defer&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;브라우저 지원은 꽤 괜찮은 것 같습니다. http://caniuse.com/ #&lt;a href=&quot;http://caniuse.com/#search=defer&quot; rel=&quot;noreferrer&quot;&gt;search&lt;/a&gt;=&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지연 및 비동기를 사용하여 JS를 로드하는 것에 대한 또 다른 좋은 기사: https://flaviocopes.com/javascript-async-defer/&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;@Eruant의 답변을 좀 더 확대해서 보면,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(window).on('load', function() {
    // your code here
});
&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;async&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;defer&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스크립트를 로드하는 동안.&lt;/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;&amp;lt;script src=&quot;/js/script1.js&quot; async defer&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;/js/script2.js&quot; async defer&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;/js/script3.js&quot; async defer&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;꼭 확인해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;script1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수를 호출하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;script3&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(window).on('load' ...&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그들을 꼭 안으로 불러들입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;window load&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트성의&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비동기/지연기에 대한 자세한 내용은 &lt;a href=&quot;https://bitsofco.de/async-vs-defer/&quot; rel=&quot;noreferrer&quot;&gt;여기&lt;/a&gt;에 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저한테는 잘 맞는군요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var jsScripts = [];

jsScripts.push(&quot;/js/script1.js&quot; );
jsScripts.push(&quot;/js/script2.js&quot; );
jsScripts.push(&quot;/js/script3.js&quot; );

$(jsScripts).each(function( index, value ) {
    $.holdReady( true );
    $.getScript( value ).done(function(script, status) {
        console.log('Loaded ' + index + ' : ' + value + ' (' + status + ')');                
        $.holdReady( false );
    });
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/11258068/is-it-possible-to-wait-until-all-javascript-files-are-loaded-before-executing-ja&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/707</guid>
      <comments>https://javamemo.tistory.com/707#entry707comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:35:16 +0900</pubDate>
    </item>
    <item>
      <title>MYSQL LOAD DATA INFILE 중복 행 무시(기본 키로 자동 증가)</title>
      <link>https://javamemo.tistory.com/706</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MYSQL LOAD DATA INFILE 중복 행 무시(기본 키로 자동 증가)&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이미 데이터베이스에 있는 행을 무시하고 싶어서 LOAD DATA INFILE 명령을 사용하는 데 문제가 발생했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같은 데이터를 가진 표가 있다면,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;id  |name   |age
--------------------
1   |aaaa   |22
2   |bbbb   |21
3   |bbaa   |20
4   |abbb   |22
5   |aacc   |22
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 id는 자동 증분 값입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 가지고 있는 csv 파일에는 다음과 같은 데이터가 포함되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;cccc&quot;,&quot;14&quot;
&quot;ssee&quot;,&quot;33&quot;
&quot;dddd&quot;,&quot;22&quot;
&quot;aaaa&quot;,&quot;22&quot;
&quot;abbb&quot;,&quot;22&quot;
&quot;dhgg&quot;,&quot;34&quot;
&quot;aacc&quot;,&quot;22&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;    &quot;aaaa&quot;,&quot;22&quot;
    &quot;abbb&quot;,&quot;22&quot;
    &quot;aacc&quot;,&quot;22&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;그리고 테이블에 모든 것을 업로드 하는 아직 내가 가지고 있는 질문은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    LOAD DATA INFILE 'member.csv'
    INTO TABLE tbl_member
    FIELDS TERMINATED BY ','
           ENCLOSED BY '&quot;'
           ESCAPED BY '&quot;'
           LINES TERMINATED BY '\n'
    (name, age);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 일을 도와주시기 바랍니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대단히 감사할 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 많은 링크를 시도했지만 도움이 되지 않았습니다 :(&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연령 열에 유니크 인덱스를 생성한 다음:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;LOAD DATA INFILE 'member.csv'
IGNORE INTO TABLE tbl_member
FIELDS TERMINATED BY ','
ENCLOSED BY '&quot;'
ESCAPED BY '&quot;'
LINES TERMINATED BY '\n'
(name, age);
&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;여기에 업로드하고 SQL을 사용하여 temp table에서 tbl_member를 업데이트합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;INSERT INTO tbl_member
SELECT Field1,Field2,Field3,... 
FROM temp_table
WHERE NOT EXISTS(SELECT * 
             FROM tbl_member 
             WHERE (temp_table.Field1=tbl_member.Field1 and
                   temp_table.Field2=tbl_member.Field2...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;LOAD DATA는 모든 열에 기존 행과 일치하는 행을 삽입하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예: ALTER TABL_member ADD UNIQUE_index(이름, 나이)&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/12891337/mysql-load-data-infile-ignore-duplicate-rows-autoincrement-as-primary-key&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/706</guid>
      <comments>https://javamemo.tistory.com/706#entry706comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:35:09 +0900</pubDate>
    </item>
    <item>
      <title>설치된 모든 node.js 모듈의 목록을 인쇄합니다.</title>
      <link>https://javamemo.tistory.com/705</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;설치된 모든 node.js 모듈의 목록을 인쇄합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 작업하고 있는 node.js 스크립트에서 npm을 사용하여 설치된 모든 node.js modules를 명령줄에 인쇄하고 싶습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이거 어떻게 해요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;console.log(__filename);

//now I want to print all installed modules to the command line. How can I do this?
&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;code&gt;npm -g ls --depth=0&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 로컬(omit -g):&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;npm ls --depth=0&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://docs.npmjs.com/cli/ls&quot; rel=&quot;noreferrer&quot;&gt;npmls&lt;/a&gt; 사용 (json 출력도 있음)&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;test.js:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function npmls(cb) {
  require('child_process').exec('npm ls --json', function(err, stdout, stderr) {
    if (err) return cb(err)
    cb(null, JSON.parse(stdout));
  });
}
npmls(console.log);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; node test.js
null { name: 'x11', version: '0.0.11' }
&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; npm -g ls
&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;npm -g list
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것으로 끝입니다&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로 설치된 패키지를 나열하는 방법은 &lt;a href=&quot;https://docs.npmjs.com/cli/ls&quot; rel=&quot;noreferrer&quot;&gt;CLI&lt;/a&gt;(명령줄 인터페이스)를 통해 나열하거나 &lt;a href=&quot;https://docs.npmjs.com/api/ls&quot; rel=&quot;noreferrer&quot;&gt;API&lt;/a&gt;를 사용하여 응용 프로그램에서 나열할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 명령 모두 다음으로 인쇄됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;stdout&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;트리 구조에 설치된 패키지의 모든 버전과 종속성을 포함합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CLI&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;npm list
&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;-g&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(global) 플래그는 전역적으로 설치된 모든 패키지를 나열합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--depth=0&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;플래그는 상위 패키지만 나열하고 종속성은 나열하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;API&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자의 경우 스크립트 내에서 이를 실행하기를 원하므로 API를 사용해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문서에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npm.commands.ls(args, [silent,] callback)
&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;stdout&lt;/code&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;dependencies&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;package.json&lt;/code&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;console.log(Object.keys(require('./package.json').dependencies));
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;for package in `sudo npm -g ls --depth=0 --parseable`; do
    printf &quot;${package##*/}\n&quot;;
done
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2021년 말 현재 확실한 방법은 거의 없으며, 위의 답을 제시하는 유일한 부분은 완전한 목록입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Node.js 설명서는 실제로 이 문제에 대해 상당히 잘 설명되어 있으며, 이것은 주요 명령어들의 집합된 목록입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 명령은 설치된 모듈 목록을 &lt;em&gt;&lt;strong&gt;로컬&lt;/strong&gt;&lt;/em&gt;로 실행합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;글로벌 레벨을 실행하려면 문&lt;strong&gt; 끝에 플래그를 추가하기&lt;/strong&gt;만 하면 됩니다&lt;strong&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;종속성&lt;/strong&gt;을 포함하여 설치된 &lt;strong&gt;모든&lt;/strong&gt; npm 패키지의 버전을 확인합니다.&lt;/font&gt;&lt;/p&gt; &lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;❯ npm list

 &amp;gt;&amp;gt;&amp;gt; /Users/joe/dev/node/cowsay
 └─┬ cowsay@1.3.1
   ├── get-stdin@5.0.1
   ├─┬ optimist@0.6.1
   │ ├── minimist@0.0.10
   │ └── wordwrap@0.0.3
   ├─┬ string-width@2.1.1
   │ ├── is-fullwidth-code-point@2.0.0
   │ └─┬ strip-ansi@4.0.0
   │   └── ansi-regex@3.0.0
   └── strip-eof@1.0.0
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최상위 패키지만 가져옵니다.&lt;/font&gt;&lt;/p&gt; &lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;npm list --depth=0
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이름을 지정하여 특정 패키지의 버전을 가져옵니다.&lt;/font&gt;&lt;/p&gt; &lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;npm list &amp;lt;package-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;npm 저장소에서 사용 가능한 패키지의 최신 버전을 확인&lt;/font&gt;&lt;/p&gt; &lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;npm view &amp;lt;package-name&amp;gt; version
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;@ 구문을 사용하여 이전 버전의 npm 패키지 설치&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;npm install @ npm install cowsay@1.2.0&lt;/font&gt;&lt;/p&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;npm install -g webpack@4.16.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;패키지의 모든 이전 버전 나열&lt;/font&gt;&lt;/p&gt; &lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;npm view cowsay versions
[ '1.0.0',
  '1.0.1',
  '1.0.2',
  '1.0.3',
  '1.1.0',
  '1.1.1',
  '1.1.2',
  '1.1.3',
  ....
]
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;hr&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 Node.js 종속성 업데이트&lt;/font&gt;&lt;/h2&gt; 
&lt;ol start=&quot;7&quot;&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 마이너 또는 패치 릴리스 설치&lt;/font&gt;&lt;/p&gt; &lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt; npm update
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 마이너 또는 패치 릴리스를 설치하지만 업데이트 패키지는 설치하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;json&lt;/font&gt;&lt;/p&gt; &lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt; npm update --no-save
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;패키지의 새 릴리스를 검색하려면 한 저장소에 오래 전에 업데이트되지 않은 몇 가지 패키지 목록을 제공합니다.&lt;/font&gt;&lt;/p&gt; &lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;  npm outdated
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ol&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;npm 업데이트를 실행해도 해당 버전은 업데이트되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주요 릴리스는 (정의상) 획기적인 변경 사항을 도입하기 때문에 이러한 방식으로 업데이트되지 않으며 npm은 문제를 해결하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 패키지를 새 주 버전으로 업데이트하려면 npm-check-updates 패키지를 전역적으로 설치합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;npm install -g npm-check-updates
ncu -u
&lt;/code&gt;&lt;/pre&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;json 파일, to dependence 및 devDependencys, snpm은 새로운 메이저 버전을 설치할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;개발 종속성&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;개발 종속성에 설치합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;npm install &amp;lt;package-name&amp;gt; -D
npm install &amp;lt;package-name&amp;gt; --save-dev # same as above
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;운영 환경에 이러한 개발 종속성을 설치하지 마십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;npm install --production
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;npm 패키지 제거&lt;/font&gt;&lt;/h2&gt; 
&lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;npm uninstall &amp;lt;package-name&amp;gt;
npm uninstall -g &amp;lt;package-name&amp;gt; # globally uninstall
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;10&quot;&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;패키지를 제거하고 ** 패키지에서 참조를 제거합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;json**&lt;/font&gt;&lt;/p&gt; &lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;  npm uninstall &amp;lt;package-name&amp;gt; -S
  npm uninstall &amp;lt;package-name&amp;gt; --save # same as above
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;글로벌 플래그 예제가 있는 일부 명령.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;npm list -g 
npm list --depth=0 -g
npm list &amp;lt;package-name&amp;gt; -g 
npm view &amp;lt;package-name&amp;gt; version -g 
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;추가 명령어&lt;/font&gt;&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/40784174/13903942&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;답변: @prosti&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문서화&lt;/font&gt;&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://nodejs.dev/learn/find-the-installed-version-of-an-npm-package&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;설치된 버전의 npm 패키지 찾기&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://nodejs.dev/learn/install-an-older-version-of-an-npm-package&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전 버전의 npm 패키지 설치&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://nodejs.dev/learn/update-all-the-nodejs-dependencies-to-their-latest-version&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 Node.js 종속성을 최신 버전으로 업데이트합니다.&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://nodejs.dev/learn/semantic-versioning-using-npm&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;npm을 이용한 시맨틱 버젼링&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://nodejs.dev/learn/uninstalling-npm-packages&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;npm 패키지 제거&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://nodejs.dev/learn/npm-global-or-local-packages&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;npm 전역 또는 로컬 패키지&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://nodejs.dev/learn/npm-dependencies-and-devdependencies&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;npm 종속성 및 devDependency&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://nodejs.dev/learn/the-npx-nodejs-package-runner&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;npx Node.js 패키지 실행기&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;목차.&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/13981938/print-a-list-of-all-installed-node-js-modules&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Node.js</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/705</guid>
      <comments>https://javamemo.tistory.com/705#entry705comment</comments>
      <pubDate>Wed, 1 Nov 2023 21:57:11 +0900</pubDate>
    </item>
    <item>
      <title>Android와 iPhone 둘 다 모바일 앱에서 추천 프로그램을 구현하는 방법</title>
      <link>https://javamemo.tistory.com/704</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Android와 iPhone 둘 다 모바일 앱에서 추천 프로그램을 구현하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Google Play Store와 Apple AppStore에서 모두 사용할 수 있는 모바일 앱이 있습니다. 더 많은 사용자가 앱을 설치하고 사용할 수 있도록 추천 프로그램을 구현하고자 합니다.&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;모든 신규 사용자(예: John)는 FB/TW/Email 또는 SMS에 공유할 수 있는 고유한 추천 링크를 받습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;John friend가 링크를 클릭하면 해당 장치의 각 AppStore 기반으로 이동합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;존의 친구가 앱을 설치하고 앱을 여는 순간 서버에 알림이 오고, 그 추천이 존으로부터 온 것임을 알게 되면 존은 그에 따라 보상을 받게 될 것입니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저희는 많은 모바일 앱 설치 추적 도구들을 평가하였는데, 대부분의 도구들은 게시자/모바일 광고에서 가장 잘 사용되고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의견이나 제안에 감사드립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;치어스 제임스&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;신규 사용자(링크를 받은 사용자)가 앱을 성공적으로 설치할 경우 레퍼러(앱에 대한 링크를 실제로 공유한 사용자)에게 일정 금액의 리워드 포인트를 제공하는 유사한 형태의 레퍼러 시스템을 앱에서 수행하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 신규 사용자(예: John)에게는 FB/TW/Email 또는 SMS를 사용하여 친구들에게 공유할 수 있는 고유한 추천 링크가 제공됩니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;John의 친구가 링크를 클릭하면 먼저 Servlet으로 방향이 바뀌며, 결국에는 앱을 다운로드하기 위해 자신의 플랫폼(Android/iPhone)에 기반한 각각의 AppStore로 방향이 바뀝니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서블릿을 사용하여 링크를 클릭한 사용자의 IP 주소, 사용자 에이전트 및 장치 모델을 알 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우리는 이미 참조 링크가 John의 것이고 따라서 서블릿은 John의 친구의 IP 주소, 사용자 에이전트 및/또는 장치 모델을 John의 데이터베이스 항목에 매핑한다는 것을 알고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;John의 친구가 앱을 설치하고 앱을 여는 순간, 애플리케이션은 IP 주소, 사용자 에이전트 및/또는 장치 모델을 서버로 전송합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서버는 레퍼러를 찾기 위해 모든 사용자를 상대로 엔트리를 확인하고, 그를 찾으면 존은 그에 따라 보상을 받습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Thats it. We implemented this in the last month itself and it does increased our downloads. Let me know if that's helpful.&lt;/p&gt;&lt;p&gt;If anyone is still looking for solution to this question. I read a lot of blogs and documents for the same problem, and arrived at following conclusion:-&lt;/p&gt; 
&lt;p&gt;IP Address + User Agent + Device Model is not enough to identify a device uniquely. So, I think it will be better to use dynamic links. You can create dynamic links containing a unique id. And that data will survive url redirection to app store and even after installation your app can get the unique id from dynamic link.Google's firebase can be used for creating dynamic links :-&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;https://firebase.google.com/docs/dynamic-links/&quot; rel=&quot;noreferrer&quot;&gt;https://firebase.google.com/docs/dynamic-links/&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Or if you want to use a ready to use solution then you can refer branch.io&lt;/p&gt;&lt;p&gt;&lt;em&gt;Disclaimer: not being satisfied with the original accepted answer, I'm providing an alternative solution back to this &quot;popular&quot; thread.&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;On &lt;strong&gt;Android&lt;/strong&gt;, this is not an issue at all. Google will let you access the referrer param sent at install time by &lt;a href=&quot;https://stackoverflow.com/a/43915210/1378525&quot;&gt;registering a receiver&lt;/a&gt;, you can also leverage their &lt;a href=&quot;https://developer.android.com/google/play/installreferrer&quot; rel=&quot;noreferrer&quot;&gt;install referrer API&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;For &lt;strong&gt;iOS&lt;/strong&gt; it is a bit trickier as it's not officially supported. As proposed &lt;a href=&quot;https://stackoverflow.com/a/22246314/1378525&quot;&gt;here&lt;/a&gt; you can do fingerprinting but that's cumbersome and comes with a high degree of inaccuracy. There are two more elegant solutions I came across:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Cookie based tracking that is explained in details &lt;a href=&quot;http://blogs.innovationm.com/deferred-deep-linking-in-ios-with-universal-link/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL을 클립보드에 복사(Firebase는 클립보드와 쿠키 접근을 모두 수행하는 것처럼 보이지만 이는 개인적인 관찰에 기초한 것이며 공식적인 출처는 없음).&lt;/font&gt;&lt;/font&gt;&lt;ul&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자가 웹 페이지를 방문할 때(즉:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;example.com/invite/123&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;앱스토어로 리디렉션하기 전에 웹 페이지를 표시합니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
   &lt;li&gt;In that page make the user push a button so that you can copy a string to the clipboard/pasteboard with &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;document.execCommand('copy')&lt;/code&gt;&lt;/a&gt; after having selected some string residing in an hidden input via &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/focus&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;focus()&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;setSelectionRange()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;설치 후 사용자가 앱에 착륙하면 다음 두 가지를 수행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;ol&gt; 
     &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음을 통해 클립보드/붙임판 콘텐츠 잡기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UIPasteboard.general.string&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(swift) 및 파싱 또는 API 호출을 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
     &lt;li&gt;Redirect the user back (via its default browser to avoid Cookies not present) on a page on the same domain as in the initial link (ie: mydomain.com/retrieve) so that the page will receive the initially set cookies (in step 1.) gently shared by the browser upon visit. You can then redirect the user back to your original link as the app is now installed and Universal Linking will now work as intended.&lt;/li&gt; 
    &lt;/ol&gt;&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안드로이드&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Android에서는 Shared Preferences 링크의 레퍼러 부분을 가져와 저장할 수 있는 설치 브로드캐스트 리스너를 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.example.app&amp;amp;referrer=example_referral_code_here&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://play.google.com/store/apps/details?id=com.example.app&amp;amp;referrer=example_referral_code_here&lt;/font&gt;&lt;/a&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;br&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/30103338/android-is-it-possible-to-get-install-referrer-programatically&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Android - 프로그램적으로 설치 레퍼러를 얻을 수 있습니까?&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/4093150/get-referrer-after-installing-app-from-android-market&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Android Market 앱 설치 후 레퍼러 받기&lt;/font&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;a href=&quot;https://developer.android.com/google/play/installreferrer/library.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://developer.android.com/google/play/installreferrer/library.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;iOS&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재(2016년 1월) 안드로이드와 같이 앱에서 설치 레퍼러 코드를 받을 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ios에 대한 옵션은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;alau.me 와 같은 사용자 프레임워크/제3자 서비스&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;푸루 파와르가 제안한 것과 유사한 지문 채취를 통한 해결책&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자가 당신의 앱 안에 추천 코드를 입력하게 하기만 하면 됩니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그라들 파일&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; implementation 'com.android.installreferrer:installreferrer:1.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; InstallReferrerClient mReferrerClient;

 mReferrerClient = InstallReferrerClient.newBuilder(this).build();

 mReferrerClient.startConnection(new InstallReferrerStateListener() {
 @Override
 public void onInstallReferrerSetupFinished(int responseCode) {
            switch (responseCode) {
                case InstallReferrerClient.InstallReferrerResponse.OK:
                    // Connection established
                    try {
                        ReferrerDetails response = 
 mReferrerClient.getInstallReferrer();
                        if (!response.getInstallReferrer().contains(&quot;utm_source&quot;))
                            edtPRferelCode.setText(&quot;&quot; + 
 response.getInstallReferrer());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    mReferrerClient.endConnection();
                    break;
                case 
 InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED:
                    // API not available on the current Play Store app
                    break;
                case 
 InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE:
                    // Connection could not be established
                    break;
            }
        }

        @Override
        public void onInstallReferrerServiceDisconnected() {
            // Try to restart the connection on the next request to
            // Google Play by calling the startConnection() method.
        }
    });
&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://play.google.com/store/apps/details?id=com.yourpackage&amp;amp;referrer=9BE46300&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://play.google.com/store/apps/details?id=com.yourpackage&amp;amp;referrer=9BE46300&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대안은 현재 사용자가 David123 또는 Henry와 같은 고유한 코드를 만들도록 하는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ABC. 그들은 코드를 공유합니다 (개인적인 것이라 기억하기 쉽습니다).&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;지문 방식의 큰 문제는 iOS가 충분히 고유하지 않고 모바일 네트워크가 IP 주소를 공유한다는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 EE에 있는 런던의 아이폰 6s를 가지고 있는 사람은 다른 사람들의 100대와 같은 지문을 가지고 있을 가능성이 높습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://developers.google.com/analytics/devguides/collection/android/v2/campaigns&quot; rel=&quot;nofollow noreferrer&quot;&gt;Google Campaign Measurement&lt;/a&gt;를 사용하면 utm_source에서 설치 후 Google Play 스토어에서 &lt;a href=&quot;https://developers.google.com/analytics/solutions/testing-play-campaigns&quot; rel=&quot;nofollow noreferrer&quot;&gt;브로드캐스트하기&lt;/a&gt; 때문에 사용자의 친구가 앱을 설치할 때 받을 수 있는 고유 번호/문자열만 지정할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/9059149/how-could-i-implement-referral-program-for-app-users-in-android-market&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/22006674/how-to-implement-referral-program-in-mobile-apps-for-both-android-and-iphone&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>iphone</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/704</guid>
      <comments>https://javamemo.tistory.com/704#entry704comment</comments>
      <pubDate>Wed, 1 Nov 2023 21:57:03 +0900</pubDate>
    </item>
    <item>
      <title>윈도우용 단말기 크기를 c로 얻는 중?</title>
      <link>https://javamemo.tistory.com/703</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;윈도우용 단말기 크기를 c로 얻는 중?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;콘솔 창, 윈도우 아래에서 평 c를 사용하여 ymax와 xmax를 확인하는 방법?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리눅스에는 다음과 같은 코드가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-c prettyprint-override&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;sys/ioctl.h&amp;gt;
int main (void)
{
    struct winsize max;
    ioctl(0, TIOCGWINSZ , &amp;amp;max);
    printf (&quot;lines %d\n&quot;, max.ws_row);
    printf (&quot;columns %d\n&quot;, max.ws_col);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 윈도우에 대해서도 어떻게 같은 작업을 할 수 있는지 궁금합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 노력했다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;winioctl.h&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 그것은 정의하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;struct winsize&lt;/code&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PS. 리눅스에서 콘솔 크기는 다음을 사용하여 찾을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getenv(&quot;LINES&quot;);&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 창문 밑에 비슷한 변수가 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PPS. 또한 항상 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ncurses.h&lt;/code&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;PPPS. 여기 이 질문 &lt;a href=&quot;https://stackoverflow.com/questions/1022957/getting-terminal-width-in-c&quot;&gt;C에서 단자 폭을 얻는 &lt;/a&gt;것은 많은 팁을 가지고 있으므로 반복할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;버퍼가 아닌 콘솔 크기를 인쇄합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;windows.h&amp;gt;

int main(int argc, char *argv[]) {
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    int columns, rows;

    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &amp;amp;csbi);
    columns = csbi.srWindow.Right - csbi.srWindow.Left + 1;
    rows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1;

    printf(&quot;columns: %d\n&quot;, columns);
    printf(&quot;rows: %d\n&quot;, rows);
    return 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;srWindow&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;디스플레이 창의 왼쪽 상단 및 오른쪽 하단 모서리의 콘솔 화면 버퍼 좌표를 contains합니다.&quot; 및&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SMALL_RECT&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구조는 MSDN에 따라 &quot;스크린 버퍼 문자 셀의 행과 열을 지정합니다.&quot; 콘솔 윈도우의 크기를 얻기 위해 평행한 면을 뺀 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그때부터.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제 값보다 작은 값으로 하나를 추가했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(부분답변)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CONSOLE_SCREEN_BUFFER_INFO csbi;
int ret;
ret = GetConsoleScreenBufferInfo(GetStdHandle( STD_OUTPUT_HANDLE ),&amp;amp;csbi);
if(ret)
{
    printf(&quot;Console Buffer Width: %d\n&quot;, csbi.dwSize.X);
    printf(&quot;Console Buffer Height: %d\n&quot;, csbi.dwSize.Y);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;버퍼의 크기를 지정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유일한 문제는 그것이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dwSize.Y&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;화면 크기가 아닙니다. (여기는 25줄이 아니라 300줄입니다.) 하지만.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dwSize.X&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열의 번호와 일치합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;니드만&lt;/font&gt;&lt;/font&gt;&lt;code&gt;windows.h&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일하기 위해.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래 두 가지 기능은 윈도우 크기를 좀 더 직접적으로 얻을 수 있을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;gcc를 사용하여 이 접근 방식과 GetConsoleScreenBufferInfo 프로그램이 파이핑된 경우 모두 작동하지 않는다는 것을 알게 되었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은/f가 작동하지 않기 때문에 다소 고통스럽습니다.&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;;) 파이프의 스크린이 아닌 STDOUT 입니다!&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, STD_ERROR_HANDLE 위에 STD_ERROR_HANDLE을 사용하는 것을 선호합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;OUTPUT_HANDLE.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 표준 출력보다 표준 오류를 화면에서 멀리 유도할 가능성이 훨씬 낮습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;typedef struct _CONSOLE_FONT_INFO {
  DWORD nFont;
  COORD dwFontSize;
} CONSOLE_FONT_INFO, *PCONSOLE_FONT_INFO;

BOOL WINAPI GetCurrentConsoleFont(
   HANDLE             hConsoleOutput,
   BOOL               bMaximumWindow,
   PCONSOLE_FONT_INFO lpConsoleCurrentFont
);

/* Get the window width */
int getww_(void)
{
    CONSOLE_FONT_INFO info;
    GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &amp;amp;info);
    return info.dwFontSize.X;
}

/* Get the window height */
int getwh_(void)
{
    CONSOLE_FONT_INFO info;
    GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &amp;amp;info);
    return info.dwFontSize.Y;
}
&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/6812224/getting-terminal-size-in-c-for-windows&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/703</guid>
      <comments>https://javamemo.tistory.com/703#entry703comment</comments>
      <pubDate>Wed, 1 Nov 2023 21:56:55 +0900</pubDate>
    </item>
    <item>
      <title>LIMT와 함께 MariaDb UPDATE를 찾을 수 없습니다.</title>
      <link>https://javamemo.tistory.com/702</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;LIMT와 함께 MariaDb UPDATE를 찾을 수 없습니다.&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;나는 마리아DB에서 이 진술을 해야 합니다. 왜냐하면 나는 그것을 절차에 넣어야 하기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;While&lt;/code&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;translated&quot;&gt;1093 - 테이블 'piscina'가 'UPDATE' 대상 및 데이터의 별도 소스로 두 번 지정됨&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드는:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UPDATE pool set number= 0, code_partner= 900000 
WHERE id_member = 
(Select id_member from pool
where code_partner is null
order by id_member ASC limit 0,1)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 다른 예에서는 &quot;Error in your SQL syntax&quot;라고 말합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UPDATE pool set number = 0, code_partner = 900000 
WHERE code_partner is null 
order by id_person ASC limit 0,1
&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;URL : https://stackoverflow.com/questions/47351749/mariadb-update-not-found-with-limit&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/702</guid>
      <comments>https://javamemo.tistory.com/702#entry702comment</comments>
      <pubDate>Wed, 1 Nov 2023 21:56:48 +0900</pubDate>
    </item>
    <item>
      <title>장고, 아약스, jQuery를 사용하여 페이지를 새로 고치지 않고 양식을 제출하는 방법?</title>
      <link>https://javamemo.tistory.com/701</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;장고, 아약스, jQuery를 사용하여 페이지를 새로 고치지 않고 양식을 제출하는 방법?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 장고랑 일하는 신입입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;간단한 예가 필요합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;장고, 아약스, jQuery를 사용하여 페이지를 새로 고치지 않고 양식(게시물)을 제출하는 방법?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;양식, 보기 및 템플릿입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;views.py&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from django.shortcuts import *
from django.template import RequestContext
from linki.forms import *

def advert(request):
    if request.method == &quot;POST&quot;:
        form = AdvertForm(request.POST)

        if(form.is_valid()):
            print(request.POST['title'])
            message = request.POST['title']

        else:
            message = 'something wrong!'


        return render_to_response('contact/advert.html',
                {'message':message},
            context_instance=RequestContext(request))

    else:
        return render_to_response('contact/advert.html',
                {'form':AdvertForm()},
            context_instance=RequestContext(request))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;forms.py (&quot;모델 양식&quot;을 사용한 양식)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from django import forms
from django.forms import ModelForm
from linki.models import Advert


class AdvertForm(ModelForm):
    class Meta:
        model = Advert
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;TEMPLES (양식 html 코드)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;

&amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;Leave a Suggestion Here&amp;lt;/h1&amp;gt;
        {% if message %}
            {{ message }}
        {% endif %}
        &amp;lt;div&amp;gt;
            &amp;lt;form action=&quot;&quot; method=&quot;post&quot;&amp;gt;{% csrf_token %}
                {{ form.as_p }}
                &amp;lt;input type=&quot;submit&quot; value=&quot;Submit Feedback&quot; /&amp;gt;
            &amp;lt;/form&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jquery와 함께 ajax submit을 사용할 계획이라면 당신의 보기에서 html을 반환해서는 안됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신 이렇게 해줄 것을 제안합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;html:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;Leave a Suggestion Here&amp;lt;/h1&amp;gt;
        &amp;lt;div class=&quot;message&quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;div&amp;gt;
            &amp;lt;form action=&quot;&quot; method=&quot;post&quot;&amp;gt;{% csrf_token %}
                {{ form.as_p }}
                &amp;lt;input type=&quot;submit&quot; value=&quot;Submit Feedback&quot; /&amp;gt;
            &amp;lt;/form&amp;gt;
        &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;js&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#form').submit(function(e){
    $.post('/url/', $(this).serialize(), function(data){ ... 
       $('.message').html(data.message);
       // of course you can do something more fancy with your respone
    });
    e.preventDefault();
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;views.py&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import json
from django.shortcuts import *
from django.template import RequestContext
from linki.forms import *

def advert(request):
    if request.method == &quot;POST&quot;:
        form = AdvertForm(request.POST)

        message = 'something wrong!'
        if(form.is_valid()):
            print(request.POST['title'])
            message = request.POST['title']

        return HttpResponse(json.dumps({'message': message}))

    return render_to_response('contact/advert.html',
            {'form':AdvertForm()}, RequestContext(request))
&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;message&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;div. 평이한 html을 반환하는 대신 json을 반환해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
$(document).ready(function() {
    $('#form_id').submit(function() { // On form submit event
        $.ajax({ // create an AJAX call...
            data: $(this).serialize(), // get the form data
            type: $(this).attr('method'), // GET or POST
            url: $(this).attr('action'), // the file to call
            success: function(response) { // on success..
                $('#success_div').html(response); // update the DIV
            },
            error: function(e, x, r) { // on error..
                $('#error_div').html(e); // update the DIV
            }
        });
        return false;
    });
});
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;$('#form-id').submit(function(e){
    $.post('your/url', $(this).serialize(), function(e){ ... });
    e.preventDefault();
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 &lt;a href=&quot;https://realpython.com/django-and-ajax-form-submissions/&quot; rel=&quot;nofollow 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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;먼저 이&lt;a href=&quot;https://github.com/realpython/django-form-fun/blob/master/part1/main.js&quot; rel=&quot;nofollow noreferrer&quot;&gt; jQuery 스크립트&lt;/a&gt;를 에 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main.js&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;페이지에 연결합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 코드를 에 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main.js&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(블로그 댓글을 보내기 위한 제 버전을 포함하겠습니다)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Submit post on submit
$('#comment-form').on('submit', function(event){
    event.preventDefault();
    create_post();
});

// AJAX for posting
function create_post() {
    $.ajax({
        url : &quot;/blogcomment/&quot;, // the endpoint
        type : &quot;POST&quot;, // http method
        data : {
            blog_id: blog_id,
            c_name : $('#comment-name').val(),
            c_email:  $('#comment-email').val(),
            c_text:  $('#comment-text').val(),
        }, // data sent with the post request

        // handle a successful response
        success : function(json) {
            $('#comment-name').val(''); // remove the value from the input
            $('#comment-email').val(''); // remove the value from the input
            $('#comment-text').val(''); // remove the value from the input
            $('#comment-form').prepend(&quot;&amp;lt;div class='alert alert-success'&amp;gt;&amp;lt;button type='button' class='close' data-dismiss='alert'&amp;gt;&amp;amp;times;&amp;lt;/button&amp;gt;&quot; + json.result +&quot;&amp;lt;/div&amp;gt;&quot;);
        },

        // handle a non-successful response
        error : function(xhr,errmsg,err) {
            $('#comment-form').prepend(&quot;&amp;lt;div class='alert alert-danger'&amp;gt;&amp;lt;button type='button' class='close' data-dismiss='alert'&amp;gt;&amp;amp;times;&amp;lt;/button&amp;gt;Oop! Error happend!&amp;lt;/div&amp;gt;&quot;); // add the error to the dom
            //console.log(xhr.status + &quot;: &quot; + xhr.responseText); // provide a bit more info about the error to the console
        }
    });
}
&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;views.py&lt;/code&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;def get_blog_comment(request):
    if request.method == 'POST':
        blog_id = request.POST.get('blog_id') 
        user = request.POST.get('c_name')
        email = request.POST.get('c_email')
        comment = request.POST.get('c_text')
        date = jdatetime.datetime.now().strftime(&quot;%Y-%m-%d&quot;);
        response_data = {}
        blogcomment = Comments(blog_id = blog_id, date = date, name = user, email = email, comment_text = comment)
        blogcomment.save()

        response_data['result'] = 'Success!!.'

        return HttpResponse(
            json.dumps(response_data),
            content_type=&quot;application/json&quot;
        )
    else:
        return HttpResponse(
            json.dumps({&quot;nothing to see&quot;: &quot;this isn't happening&quot;}),
            content_type=&quot;application/json&quot;
        )
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 마지막으로 url part for.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;urls.py&lt;/code&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;path('blogcomment/', views.get_blog_comment, name='get_blog_comment'),
&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;csrf_token&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에게&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ajax&lt;/code&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;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Script.js에서&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;jQuery.noConflict()
jQuery(document).ready(($) =&amp;gt; {
    $(&quot;#contactUsForm&quot;).on(&quot;submit&quot;, () =&amp;gt; {
        var el = document.getElementsByName(&quot;csrfmiddlewaretoken&quot;);
        csrf_value = el[0].getAttribute(&quot;value&quot;);
        $.ajax({
            url: &quot;/contactUs/&quot;,
            type: &quot;POST&quot;,
            data: {
                userName: $(&quot;#userName&quot;).val(),
                companyName: $(&quot;#companyName&quot;).val(),
                emailAddress: $(&quot;#emailAddress&quot;).val(),
                message: $(&quot;#message&quot;).val(),
                'csrfmiddlewaretoken': csrf_value
            },
            success: function (json) {
                console.debug(json)
                console.debug(&quot;Successfully send contact form&quot;)
            },
            error: function (json) {
                console.error(json)
                console.error(&quot;Error occured while sending contact form&quot;)
            }
        })

        return false;
    })
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Views.py 에서&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;def contactUs(request: HttpRequest):
    print(&quot;Contact Us&quot;)
    if request.method == &quot;POST&quot;:
        username = request.POST.get(&quot;userName&quot;)
        companyName = request.POST.get(&quot;companyName&quot;)
        emailAddress = request.POST.get(&quot;emailAddress&quot;)
        message = request.POST.get(&quot;message&quot;)

        print(username)
        print(companyName)
        print(emailAddress)
        print(message)
        response_data = {}
        response_data['result'] = 'Success!!.'
        return HttpResponse(
            json.dumps(response_data),
            content_type=&quot;application/json&quot;
        )
        pass
    else:
        logger.error(
            f&quot;Contact US request method {request.method} is not Valid expected POST&quot;)
    
    return redirect(&quot;/&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/11647715/how-to-submit-form-without-refreshing-page-using-django-ajax-jquery&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Ajax</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/701</guid>
      <comments>https://javamemo.tistory.com/701#entry701comment</comments>
      <pubDate>Wed, 1 Nov 2023 21:56:41 +0900</pubDate>
    </item>
    <item>
      <title>문자열 크기를 바이트 단위로 구하는 방법은?</title>
      <link>https://javamemo.tistory.com/700</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;C&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 사용하기 좋습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 내가 그것을 (문자열) 없이 함수에 선언했다면.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 안에? 아니면, 내가 포인터로 선언한 거라면?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;초기화를 하면 어떨까요?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;? 저는 철저한 답변을 받고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://www.cplusplus.com/reference/cstring/strlen/&quot; rel=&quot;noreferrer&quot;&gt;스트렌&lt;/a&gt;을 사용하시면 됩니다.&lt;/font&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;메모리 버퍼의 크기를 가져오려면 문자열을 포함하고 포인터가 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동적 배열(malloc로 생성)인 경우 컴파일러는 포인터가 무엇을 가리키는지 모르기 때문에 크기를 얻는 것은 불가능합니다. (&lt;a href=&quot;https://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointer-pointing-to-an-array&quot;&gt;이&lt;/a&gt; 항목을 확인하십시오.)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정적 배열일 경우 다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;크기를 측정하기 위해서입니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동적 배열과 정적 배열 간의 차이에 대해 혼동이 있는 경우 &lt;a href=&quot;https://stackoverflow.com/questions/2672085/c-static-array-vs-dynamic-array&quot;&gt;이&lt;/a&gt;를 확인합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;null&lt;/strong&gt;로 끝나는 &lt;strong&gt;문자열&lt;/strong&gt;의 길이를 가져옵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열이 아닌 &lt;strong&gt;배열&lt;/strong&gt;의 길이를 반환합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;포인터인 경우(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *s&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 배열()이 아님&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char s[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;포인터의 크기를 반환하므로(보통 32비트 시스템에서는 4바이트) 작동하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열이 포인터로 전달되거나 반환되므로 사용할 수 있는 기능을 잃게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열의 크기를 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 &lt;strong&gt;문자열이 전체 배열에 걸쳐&lt;/strong&gt; 있는 &lt;strong&gt;경우&lt;/strong&gt;에만 해당됩니다(예:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char s[] = &quot;stuff&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;), 다음을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&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;된 배열의 경우 원하는 것을 반환합니다(그리고 null-terminator를 찾기 위해 순환할 필요가 없으므로 더 빠릅니다)(마지막 문자가 null-terminator이면 1을 빼야 합니다).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전체 배열에 걸쳐 있지 않으면 원하는 것을 반환하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 모든 것에 대한 대안은 실제로 문자열의 크기를 저장하는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하는 동안에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 다음과 같은 특정 유형의 문자열에 대해 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char str[] = &quot;content&quot;;
int charcount = sizeof str - 1; // -1 to exclude terminating '\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;str&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;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;포인터의 크기(일반적으로 4 또는 8) 또는 지정된 길이의 배열()을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 지정된 길이와 일치하는 바이트 수를 반환하며, 이 바이트 수는 문자 유형에 대해 동일합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그냥 사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strlen()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그다음에 a&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char str[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 답변을 드립니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char str[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열의 길이( 문자열 터미네이터 포함)를 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 포인터의 크기를 반환합니다(컴파일러에 따라 differs).&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;(strlen(string) + 1 ) * sizeof(char)
&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;snprintf()와 함께 사용하면 다음과 같은 이점이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const char* message = &quot;%s, World!&quot;;
char* string = (char*)malloc((strlen(message)+1))*sizeof(char));
snprintf(string, (strlen(message)+1))*sizeof(char), message, &quot;Hello&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;건배! 함수:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;size_t strlen (const char *s)&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열 크기 바이트를 찾는 두 &lt;strong&gt;가지&lt;/strong&gt; 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫 번째 솔루션:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# include &amp;lt;iostream&amp;gt;
# include &amp;lt;cctype&amp;gt;
# include &amp;lt;cstring&amp;gt;
using namespace std;

int main()
{
    char str[] = {&quot;A lonely day.&quot;};
    cout&amp;lt;&amp;lt;&quot;The string bytes for str[] is: &quot;&amp;lt;&amp;lt;strlen(str);
    return 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;# include &amp;lt;iostream&amp;gt;
# include &amp;lt;cstring&amp;gt;
using namespace std;

int main()
{
    char str[] = {&quot;A lonely day.&quot;};
    cout&amp;lt;&amp;lt;&quot;The string bytes for str[] is: &quot;&amp;lt;&amp;lt;sizeof(str);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 솔루션은 서로 &lt;strong&gt;다른 출력&lt;/strong&gt;을 생성합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것들을 읽고 설명해 드리겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫 번째 솔루션은 cplusplus.com 을 사용하고 기반으로 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C 문자열의 길이는 종료 널 문자에 의해 결정됩니다. C&lt;strong&gt; 문자열은 문자열의 시작과 종료&lt;/strong&gt; 널 &lt;strong&gt;문자 사이의 문자 수만큼 깁니다(종료&lt;/strong&gt; 널 &lt;strong&gt;문자 자체는 포함하지 않음).&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 두 번째 솔루션이 잘못된 문자열 크기 바이트를 인쇄할 때 첫 번째 솔루션이 올바른 문자열 크기 바이트를 인쇄하는 이유가 설명됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 여전히 이해가 되지 않는다면, 계속해서 읽으세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 번째 솔루션은 다음과 같이 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열 크기 바이트를 찾습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 &lt;a href=&quot;https://stackoverflow.com/questions/1392200/sizeof-string-literal&quot;&gt;SO&lt;/a&gt; 답변을 바탕으로 다음과 같이 말합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;code&gt;sizeof(&quot;f&quot;)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열 크기 바이트 2개를 반환해야 합니다. 하나는 'f'이고 하나는 종료 '\0'(종료 null-charter)입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 출력이 문자열 크기 바이트 14인 이유입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하나는 전체 문자열에, 하나는 '\0'에 해당합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;결론:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 번째 솔루션에 대한 정답을 얻으려면 다음 작업을 수행해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof(str)-1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&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;a href=&quot;https://stackoverflow.com/questions/1392200/sizeof-string-literal&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열 리터럴 크기&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://cplusplus.com/reference/cstring/strlen/?kw=strlen&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://cplusplus.com/reference/cstring/strlen/ ?kw=strlen&lt;/font&gt;&lt;/a&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/15000544/how-to-get-the-string-size-in-bytes&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/700</guid>
      <comments>https://javamemo.tistory.com/700#entry700comment</comments>
      <pubDate>Wed, 1 Nov 2023 21:56:31 +0900</pubDate>
    </item>
    <item>
      <title>매개 변수화된 sql 쿼리 느리고 활성화된 오라클 세션의 최대 절전 모드</title>
      <link>https://javamemo.tistory.com/699</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매개 변수화된 sql 쿼리 느리고 활성화된 오라클 세션의 최대 절전 모드&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;SELECT 
    fields
FROM 
    tables and JoinedTables
WHERE
        Field1  &amp;gt;= :value1
    AND Field2 = :value2
    AND Field3 = :value3
Order By MaintTable.Id Desc
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Spring Java + Hibernate 4.2 방법으로 이 방법을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SQLQuery query = (SQLQuery) session.createSQLQuery(querySql)
                                .addEntity(CertificateViewEnt.class)
                                .setParameter(&quot;value1&quot;, firstCertificateRecordDate)
                                .setParameter(&quot;value2&quot;, certType.toUpperCase())
                                .setParameter(&quot;value3&quot;, deleted? 1:0);      
&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;성능 향상을 위한 ID Descendent.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;처음에는 세션/연결 풀이 올바르게 관리되지 않는 것으로 생각하여 상태 비저장 &lt;strong&gt;세션&lt;/strong&gt;으로 변경하고 이 session.close()를 추가했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;query.setCacheable(false)
              .setTimeout(30)
              .setReadOnly(true);
...
...
//Pagination
query.setMaxResults(rows);
query.setFirstResult(HelperMethod(page, rows));

result = (List&amp;lt;CertificateViewEnt&amp;gt;) query.list(); 
session.close();
return result;
&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;쿼리가 몇 번 정상적으로 실행되지만 알 수 없는 이유로 인해 이전에 이미 실행된 값을 사용하면 Oracle에서 세션이 중단되고 세션이 열립니다(status=&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ACTIVE) 및 시간 초과 시 실패합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 SQL 클라이언트에서 Oracle과 동일한 쿼리를 실행하고 가능한 모든 조합의 매개 변수를 사용하여 수십 번 실행하는 동일한 쿼리는 한 번에 10개의 레코드에 대해 약 400ms의 최고 성능으로 실행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기저기 기사를 읽고 링크1 [&lt;a href=&quot;https://stackoverflow.com/questions/14294735/slow-performance-on-hibernate-java-but-fast-when-i-use-toad-with-the-same-nati#]&quot;&gt;Hibernate &lt;/a&gt;+ &lt;a href=&quot;https://stackoverflow.com/questions/14294735/slow-performance-on-hibernate-java-but-fast-when-i-use-toad-with-the-same-nati#]&quot;&gt;Java에서는 성능이 느리지만 동일한 네이티브 Oracle 쿼리와 TOAD를 사용하면 빠름&lt;/a&gt; 링크2: [&lt;a href=&quot;https://stackoverflow.com/questions/5284757/query-hangs-oracle-10g]&quot;&gt;쿼리에 오라클 10g이 걸려&lt;/a&gt; 있음&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Hibernate에서 QueryPlan을 제대로 사용하지 못할 것으로 예상하고 bound parameter를 사용하여 모든 필터를 제거하기로 결정했고 해결되지 않았지만 조금 더 나아졌습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;잠시 후 1, 2, 3, 4 페이지와 같은 다른 페이지로 이동할 때 중단되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 후 하이버네이트의 방법으로 생성된 SQL이 의심스러웠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;query.setMaxResults(rows)
query.setFirstResult(SomeHelperMethod(page, rows));
&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;       ...
       Order By Certificado.Id Desc ) row_
       where rownum &amp;lt;= ?)
  where rownum_ &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;2015-09-15 14:09:53 TRACE QueryPlanCache:200 - Located native-sql query plan in cache (SELECT /*+ INDEX(
&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;2015-09-15 14:09:53 TRACE BasicBinder:84 - binding parameter [2] as [VARCHAR] - E
2015-09-15 14:09:53 DEBUG Loader:2031 - bindNamedParameters() 0 -&amp;gt; deleted [3]
2015-09-15 14:09:53 TRACE BasicBinder:84 - binding parameter [3] as [INTEGER] - 0
2015-09-15 14:09:53 TRACE Loader:1931 - Bound [7] parameters total
/*
SLOW here !!!  Around 3 secs when query runs in ~0,300 secs via SQL client.
And ACTIVE sessions are left running in Oracle.
*/
2015-09-15 14:09:56 TRACE JdbcCoordinatorImpl:397 - Registering result set [org.apache.commons.dbcp.DelegatingResultSet@f0c620]
2015-09-15 14:09:56 TRACE Loader:943 - Processing result set
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마지막으로 모든 Hibernate bind param을 포기하고 사용자 지정 계산 페이지화를 구현하고 페이지 행을 검색하기 위해 모든 SQL을 작성했으며 DB 세션을 올바르게 실행하고 관리하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;그래서 제 질문은 다음과 같습니다.&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최대 절전 모드는 쿼리가 데이터베이스에 대해 실행될 때 실행되지 않도록 하는 장면에서 무엇을 합니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;바인딩 매개 변수 쿼리에 알려진 문제가 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;바인딩 매개 변수가 있을 때 모든 SQL 코드를 작성하고 이 SQL을 하드 파싱하는 것을 별로 좋아하지 않습니다.&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;Tomcat과 Oracle은 동일한 호스트에 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 네트워크 연결이 문제가 아닙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동면 버전 4.2.15 Final&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블에는 dev 데이터베이스에 약 300k rec가 있으며(생산 시 1,5M) Primary Key Desc(Sequence generated)별로 정렬된 10, 20, 50rec의 페이지가 한 번에 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Hibernate 전문가들이 이 문제에 대해 도움을 주어서 대형 데이터베이스 프로젝트에서 Hibernate 쿼리를 여전히 신뢰할 수 있기를 바랍니다.&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은 쿼리를 구문 분석할 때 bind 변수 값을 확인한 다음 쿼리 계획을 저장하므로 새로운 바인딩 변수 집합으로 쿼리를 실행할 때마다 쿼리를 계속 구문 분석할 필요가 없습니다.&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;font papago-translate=&quot;translated&quot;&gt;힌트가 도움이 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SQL Profiles를 사용하여 계획을 변경하려는 바인딩 변수가 있는 쿼리의 계획을 잠급니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최적화 통계가 수집되는 시기와 방법을 사용자 정의하여 바인딩 변수에 전달되는 값에 관계없이 양호한 계획이 생성되도록 할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어쨌든, 그것은 제가 항상 보는 것이고 당신의 문제일 수도 있고 아닐 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;바비&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/32596761/hibernate-parameterized-sql-query-slow-and-active-oracle-sessions&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/699</guid>
      <comments>https://javamemo.tistory.com/699#entry699comment</comments>
      <pubDate>Wed, 1 Nov 2023 21:56:24 +0900</pubDate>
    </item>
    <item>
      <title>여러 템플릿이 포함된 AngularJS 지시문</title>
      <link>https://javamemo.tistory.com/698</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여러 템플릿이 포함된 AngularJS 지시문&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작업:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연락처를 보여주기 위해서.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연락처는 JSON 데이터입니다. {name: &quot;Mark&quot;, 위치: &quot;England&quot;, 전화: [...]}라고 합시다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연락처는 다양한 방식으로 표시될 수 있습니다. &lt;em&gt;컴팩트/디테일/&lt;/em&gt;추가 정보로 &lt;em&gt;향상&lt;/em&gt;됨(공유 연락처 - 추가 지시).&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연락처가 다른 장소의 다른 페이지에 표시될 수 있기 때문에 연락처에 대한 지시문(위젯)을 만드는 것은 당연하지만, 여기서 질문이 있습니다: &quot;&lt;strong&gt;여러 템플릿으로 동일&lt;/strong&gt;한 위젯을 &lt;strong&gt;구성&lt;/strong&gt;하는 방법은 무엇입니까&lt;strong&gt;?&quot;&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;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;ng-switch &lt;/em&gt;및&lt;em&gt; ng-if가 많을 가능성&lt;/em&gt;이 있는 큰&lt;em&gt; 템플릿&lt;/em&gt;인 &lt;strong&gt;연락처 &quot;type&quot;&lt;/strong&gt;에 &lt;strong&gt;따라 섹션을 숨기는 하나의 템플릿으로 하나의 지시문을 작성&lt;/strong&gt;합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;각 템플릿에 대한 지시문 작성&lt;/strong&gt; - 다른 &lt;em&gt;템플릿(또는&lt;/em&gt; 템플릿)만 &lt;em&gt;있는 거의 동일한 지시문&lt;/em&gt; 작성&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;URL)&lt;/em&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;&lt;a href=&quot;http://www.befundoo.com/university/tutorials/angularjs-directives-tutorial/&quot;&gt;링크&lt;/a&gt;&lt;/strong&gt;하는 &lt;strong&gt;&lt;a href=&quot;http://www.befundoo.com/university/tutorials/angularjs-directives-tutorial/&quot;&gt;동안 템플릿을 동적으로 로드&lt;/a&gt;&lt;/strong&gt;하려면 - &lt;em&gt;트랜스클루전&lt;/em&gt; 및 &lt;em&gt;교체(속성 병합&lt;/em&gt;) &lt;em&gt;문제가 있습니다.&lt;/em&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 문제를 해결한 경험은 어떻습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;개인적으로 저는 옵션 2가 디스플레이 모드 사이를 깔끔하게 분리할 수 있다고 생각합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 템플릿에 대해 개별 지시어를 사용하여 이 작업을 깨끗하게 수행할 수 있는 방법을 설명하기 위해 &lt;a href=&quot;http://codepen.io/anon/pen/tabcx&quot;&gt;작동하는 코드펜&lt;/a&gt; 예제를 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 CodePen 예제에서 사용한 방법은 Angular DI를 통해 각 지시어에 주입되는 템플릿 팩토리를 활용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;템플릿 팩토리 구현은 지원되는 각 디스플레이 모드(콤팩트하고 상세)에 대해 ng 포함 &lt;a href=&quot;http://code.angularjs.org/1.1.5/docs/api/ng.directive%3angInclude&quot;&gt;템플릿&lt;/a&gt; 문자열만 사용하기 때문에 매우 깔끔합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제 HTML 템플릿(부분)은 외부 보기 파일 또는 내부 스크립트 블록에 보관할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연락처 지침을 쉽게 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;contact compact ng-repeat=&quot;contact in contacts&quot; ng-model=&quot;contact&quot;&amp;gt;&amp;lt;/contact&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 연락처 목록의 압축 버전이 만들어집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;contact detailed ng-repeat=&quot;contact in contacts&quot; ng-model=&quot;contact&quot;&amp;gt;&amp;lt;/contact&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 세부 연락처 목록이 만들어집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 이러한 코드를 프로덕션에 배포하지 않았다는 것을 인정할 것이므로 확장성이나 기타 고려하지 않은 우려가 있을 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 제가 제공한 코드가 당신의 질문에 답하거나 최소한 추가적인 탐색을 위한 영감을 주기를 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Adam 예제를 사용하여 새로운 접근 방식을 개발했으며 각진 문서의 샘플을 사용하여 템플릿Url 속성 https://docs.angularjs.org/guide/directive, 의 함수에 대해 설명했습니다. 이 방법은 각진 문서의 플렁커입니다. http://plnkr.co/edit/h2CSf2WqCLYfPvzL9WQn?p=preview&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.directive('myCustomer', function() {
    return {
      templateUrl: function(elem, attr){
        return 'customer-'+attr.type+'.html';
      }
    };
  });
&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://codepen.io/anon/pen/wawOyz?editors=101&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://codepen.io/anon/pen/wawOyz?editors=101&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.factory('templates', function() {
  return {
    compact:   'compact',
    detailed:  'detailed'
  };
 });

app.directive('contact', function(templates) {
  return {
    restrict: 'E',
    templateUrl: function($elem, $attr){
      return templates[$attr.mode];       
    },
    scope: {
      contact: '=ngModel'
    }
  };
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 템플릿 주소를 하나의 공장에 배치하는 것이 마음에 들었지만, 모드별 지시가 상당히 반복적이라고 생각하기 때문에 이 접근 방식을 사용하는 여러 요소가 있다면 충돌하지 않도록 네임스페이스(연락처-텍스트, 이메일-텍스트, 회사-텍스트)를 구성해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 더 나은 방법인지, 더 짧고 더 건조한 방법인지는 아직 잘 모르겠지만 테스트하기가 더 어렵거나 사용자 지정이 가능하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;누구에게나 도움이 될 수 있는 접근법을 공유하고 싶었을 뿐입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/19015239/angularjs-directive-with-multiple-templates&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/698</guid>
      <comments>https://javamemo.tistory.com/698#entry698comment</comments>
      <pubDate>Wed, 1 Nov 2023 21:56:17 +0900</pubDate>
    </item>
    <item>
      <title>WAMP 서버가 데이터베이스 파일을 저장하는 위치</title>
      <link>https://javamemo.tistory.com/697</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WAMP 서버가 데이터베이스 파일을 저장하는 위치&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하드 드라이브에 몇 가지 문제가 발생하여 Windows를 부팅할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;외장 드라이브로 다른 PC에 연결하면 드라이브의 내용을 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;범자 드라이브에서 개발 목적으로 로컬 WAMP 서버를 실행하고 있었는데 여기서 mySQL 데이터베이스를 저장하려고 합니다.&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;나는 내 wamp 디렉토리를 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;E:\wamp&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 여기서 서버를 기동하여 phpmyadmin을 사용하여 mysqdump를 수행할 수 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇지 않다면 DB를 복구할 수 있는 옵션은 무엇입니까?&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;C:\Program Files (x86)\WampServer\bin\mysql\mysql5.1.53\data&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 그래서 당신 안에 그들은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;E:\wamp\bin\mysql\mysql-version\data&lt;/code&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;mysql&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로부터 국소적으로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;E:\wamp\bin\mysql\mysql-version\bin&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 모든 실행 파일이 있는 곳입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하려는 구성 파일은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;E:\wamp\bin\mysql\mysql-version\my.ini&lt;/code&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;제가 MySql 전문가는 아니지만 다른 서버에서 데이터베이스를 문제없이 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Wamp를 다시 설치해야 하는데 백업에서 wamp\bin\mysql\mysql-version\의 데이터 디렉토리를 복사하여 데이터베이스를 복구했습니다. phpMyAdmin이 데이터베이스와 테이블을 가져왔습니다.&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/5515403/where-does-wamp-server-store-database-files&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/697</guid>
      <comments>https://javamemo.tistory.com/697#entry697comment</comments>
      <pubDate>Wed, 1 Nov 2023 21:56:10 +0900</pubDate>
    </item>
    <item>
      <title>scanf()와 fgets()의 차이</title>
      <link>https://javamemo.tistory.com/696</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;scanf()와 fgets()의 차이&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;fgets()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scanf()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 저는 C를 저의 플랫폼으로 사용하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;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;ul&gt; 
 &lt;li&gt;&lt;code&gt;fgets()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열려있는 파일에서 읽을 수 있지만,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scanf()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표준 입력만 읽습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;fgets()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일에서 '텍스트 줄'을 읽습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scanf()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;를 사용할 수 있지만 문자열에서 내장된 숫자 형식으로의 변환도 처리합니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;많은 사람들이 사용할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fgets()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한 줄의 데이터를 읽고 사용하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sscanf()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해부를 하기 위해서요&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;int scanf(const char * restrict format, ...);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;scanf(3)&lt;/strong&gt;는 &lt;em&gt;stdin&lt;/em&gt;이라고 알려진 주어진 입력에서 &lt;em&gt;format 인수&lt;/em&gt;로 정의된 특정 &lt;em&gt;패턴&lt;/em&gt;을 검색합니다. 여기서 패턴은 사용자에 의해 정의됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변형(scanf, fscanf&lt;strong&gt;,&lt;/strong&gt; sscanf, vsscanf, vsscanf, vfscanf)에 따라 &lt;strong&gt;scanf(3&lt;/strong&gt;)에 대한 지정된 입력은 문자열 또는 파일일 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *fgets(char * restrict str, int size, FILE * restrict stream);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;fgets(3)&lt;/strong&gt;는 입력 파일 &lt;em&gt;스트림&lt;/em&gt;에서 한 &lt;em&gt;줄&lt;/em&gt;을 읽고 바이트를 null 종단 문자열로 버퍼 &lt;em&gt;스트랜드&lt;/em&gt;에 복사하여 버퍼에 출력을 &lt;em&gt;크기&lt;/em&gt;가 지정된 바이트로 제한합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스캔프는 경계 검사를 수행하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;fgets가 더 나은 선택이 될 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 sscanf()를 사용하여 평가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 주제에 대한 좋은 토론 - http://cboard.cprogramming.com/c-programming/109243-scanf-vs-fgets.html&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/1247989/how-do-you-allow-spaces-to-be-entered-using-scanf/1247993#1247993&quot;&gt;scanf를 사용하여 공간을 입력하려면 어떻게 해야 합니까?&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주의해야 할 점은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scanf&lt;/code&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;scanf( &quot; %80s&quot;, mybuffer );
&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;printf()&lt;/code&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;printf( &quot;My name is %*s.\n&quot;, 20, name );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;scanf()&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;#define NAMEWIDTH 40
char buffer[ NAMEWIDTH + 4 ];
...
scanf( &quot; %40x&quot;, buffer );
&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;필드 너비 40을 연결할 방법이 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scanf()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;버퍼 선언에 버퍼 폭 40을 포함합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;scanf는 읽은 문자열(또는 만든 문자열)을 구문 분석하고 열린 파일*에서 한 줄을 읽습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면 fscanf?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주요 차이점은 읽을 수 있는 문자의 수에 제한이 없는 반면(기본 사용 시) 읽을 수 있는 문자의 수가 최대라는 점입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 기능의 프로토타입 참조:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;char * fgets (char * dest, int size, FILE * stream);&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;int scanf (constchar * 형식, ...);&lt;/font&gt;&lt;/strong&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;fgets&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최대 크기의 char를 읽도록 강요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또 다른 분명한 차이는 반환 값입니다. 성공 시 포인터를 반환하고 성공적으로 일치 및 할당된 입력 항목 수를 반환합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면, &lt;em&gt;scanf&lt;/em&gt; 함수는 &lt;em&gt;포맷&lt;/em&gt;에 따라 입력을 스캔하고, 표준 입력 스트림 &lt;strong&gt;&lt;em&gt;stdin&lt;/em&gt;&lt;/strong&gt;으로부터 입력을 읽어내는 동안,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fgets&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;FILE &lt;/strong&gt;* &lt;strong&gt;스트림&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;/font&gt;&lt;/font&gt;&lt;code&gt;scanf&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일에서 데이터를 읽고 고정 크기 배열에 삽입하는 것(예를 들어)은 그다지 의미가 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의 장점&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scanf&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 출력 데이터의 포맷입니다. 함수가 다음을 읽는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;12345\n&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 산출량은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;12345&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 물건들이 읽고 돌아오는 동안에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;\n&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(included), a 추가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;\0&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;결국은 스트링 터미네이터로서 말입니다.&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/1252132/difference-between-scanf-and-fgets&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/696</guid>
      <comments>https://javamemo.tistory.com/696#entry696comment</comments>
      <pubDate>Wed, 1 Nov 2023 21:56:03 +0900</pubDate>
    </item>
    <item>
      <title>Vue.js에서 키 입력 처리</title>
      <link>https://javamemo.tistory.com/695</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Vue.js에서 키 입력 처리&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;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로, 이 단추는 다른 사용자가 키보드의 키를 누르면 양식을 제출합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;누군가가 텍스트 필드를 입력할 때 각 키를 누른 상태로 캡처합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;키가 다음과 같은 경우&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;font papago-translate=&quot;translated&quot;&gt;저에게 도전을 주는 것은 후자입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 제가 가지고 있는 &lt;a href=&quot;https://jsfiddle.net/ffgvw3yr/2/&quot; rel=&quot;noreferrer&quot;&gt;Fiddle&lt;/a&gt; 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;new Vue({
  el: '#myApp',
  data: {
    emailAddress: '',
    log: ''
  },
  methods: {
    validateEmailAddress: function(e) {
      if (e.keyCode === 13) {
        alert('Enter was pressed');
      } else if (e.keyCode === 50) {
        alert('@ was pressed');
      }      
      this.log += e.key;
    },
    
    postEmailAddress: function() {
      this.log += '\n\nPosting';
    }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 양식을 제출하지 않으면 키를 누를 수 없을 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만, 저는 기대합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;validateEmailAddress&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;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 뭘 잘못하고 있는 거지?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Vue 2에서 엔터 이벤트를 잡을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;v-on:keyup.enter&lt;/code&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;a href=&quot;https://v2.vuejs.org/v2/guide/events.html#Key-Modifiers&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://v2.vuejs.org/v2/guide/events.html#Key-Modifiers&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아주 &lt;em&gt;간단한&lt;/em&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 vm = new Vue({
  el: '#app',
  data: {msg: ''},
  methods: {
    onEnter: function() {
       this.msg = 'on enter event';
    }
  }
});&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://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js&quot;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;div id=&quot;app&quot;&amp;gt;
  &amp;lt;input v-on:keyup.enter=&quot;onEnter&quot; /&amp;gt;
  &amp;lt;h1&amp;gt;{{ msg }}&amp;lt;/h1&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;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;vuejs의 &lt;a href=&quot;https://v2.vuejs.org/v2/guide/events.html#Event-Modifiers&quot; rel=&quot;noreferrer&quot;&gt;이벤트 수정자&lt;/a&gt;를 참조하여 폼 제출을 방지할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;enter&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열쇠.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전화하는 것은 매우 일반적인 필요입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;event.preventDefault()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;event.stopPropagation()&lt;/code&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;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;방법 내부에서 이를 쉽게 수행할 수 있지만, 방법이 DOM 이벤트 세부 정보를 처리하는 것보다 순수하게 데이터 논리에 관한 것이라면 더 나을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 문제를 해결하기 위해 Vue는 다음에 대한 이벤트 수정자를 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;v-on&lt;/code&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;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;form v-on:submit.prevent=&quot;&amp;lt;method&amp;gt;&quot;&amp;gt;
  ...
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문서에 명시되어 있듯이, 이것은 의 합성 설탕입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;e.preventDefault()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 Enter 키를 누르면 원하지 않는 양식 제출을 중지합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://jsfiddle.net/hufa5woo/&quot; rel=&quot;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;new Vue({
  el: '#myApp',
  data: {
    emailAddress: '',
    log: ''
  },
  methods: {
    validateEmailAddress: function(e) {
      if (e.keyCode === 13) {
        alert('Enter was pressed');
      } else if (e.keyCode === 50) {
        alert('@ was pressed');
      }      
      this.log += e.key;
    },
    
    postEmailAddress: function() {
            this.log += '\n\nPosting';
    },
    noop () {
      // do nothing ?
    }
  }
})&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;html, body, #editor {
  margin: 0;
  height: 100%;
  color: #333;
}&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://unpkg.com/vue@2.2.4/dist/vue.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;div id=&quot;myApp&quot; style=&quot;padding:2rem; background-color:#fff;&quot;&amp;gt;
&amp;lt;form v-on:submit.prevent=&quot;noop&quot;&amp;gt;
  &amp;lt;input type=&quot;text&quot; v-model=&quot;emailAddress&quot; v-on:keyup=&quot;validateEmailAddress&quot; /&amp;gt;
  &amp;lt;button type=&quot;button&quot; v-on:click=&quot;postEmailAddress&quot; &amp;gt;Subscribe&amp;lt;/button&amp;gt; 
  &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
  
  &amp;lt;textarea v-model=&quot;log&quot; rows=&quot;4&quot;&amp;gt;&amp;lt;/textarea&amp;gt;  
&amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;입력 이벤트 처리의 경우 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;@keyup.enter&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;@keyup.13&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;13은 입력의 키코드입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;@ key 이벤트의 경우 키코드는 50입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하시면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@keyup.50&lt;/code&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 class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;input @keyup.50=&quot;atPress()&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;@keyup.enter.native=&quot;onEnter&quot;.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마지막 줄 앞에 '}을(를) 잊어버립니다(&quot;methods {...&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;/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;Vue.config.keyCodes.atsign = 50;

new Vue({
  el: '#myApp',
  data: {
    emailAddress: '',
    log: ''
  },
  methods: {
  
    onEnterClick: function() {
    	alert('Enter was pressed');
    },
    
    onAtSignClick: function() {
    	alert('@ was pressed');
    },
    
    postEmailAddress: function() {
			this.log += '\n\nPosting';
    }
  }
})&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;html, body, #editor {
  margin: 0;
  height: 100%;
  color: #333;
}&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://vuejs.org/js/vue.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;div id=&quot;myApp&quot; style=&quot;padding:2rem; background-color:#fff;&quot;&amp;gt;

  &amp;lt;input type=&quot;text&quot; v-model=&quot;emailAddress&quot; v-on:keyup.enter=&quot;onEnterClick&quot; v-on:keyup.atsign=&quot;onAtSignClick&quot; /&amp;gt;
  
  &amp;lt;button type=&quot;button&quot; v-on:click=&quot;postEmailAddress&quot; &amp;gt;Subscribe&amp;lt;/button&amp;gt; 
  &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
  
  &amp;lt;textarea v-model=&quot;log&quot; rows=&quot;4&quot;&amp;gt;&amp;lt;/textarea&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트를 다음과 같은 하위 구성 요소로 전달할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;CustomComponent
    @keyup.enter=&quot;handleKeyUp&quot;
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;template&amp;gt;
    &amp;lt;div&amp;gt;
        &amp;lt;input
            type=&quot;text&quot;
            v-on=&quot;$listeners&quot;
        &amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
export default {
    name: 'CustomComponent',

    mounted() {
        console.log('listeners', this.$listeners)
    },
}
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;패스스루 구성요소가 있고 청취자가 특정 구성요소로 이동하기를 원할 경우 이 작업이 잘 수행됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;뷰 3&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Vue 3에서 이벤트 입력을 들으려면 이 코드가 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input @keyup.enter=&quot;onPressEnter&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 키가 해제될 때가 아니라 키를 누르면 이벤트가 실행되기를 원할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input @keydown.enter=&quot;onPressEnter&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;new Vue({
  el: '#myApp',
  data: {
    emailAddress: '',
    log: ''
  },
  methods: {
    validateEmailAddress: function(e) {
      if (e.keyCode === 13) {
        alert('Enter was pressed');
      } else if (e.keyCode === 50) {
        alert('@ was pressed');
      }      
      this.log += e.key;
    },

    postEmailAddress: function() {
      this.log += '\n\nPosting';
    }
  }//add this closing bracket and everything is fine
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 Vue3에서 Composition API로 작성하시면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script setup&amp;gt;
function callOnEnter() {
  console.log(&quot;Enter key pressed&quot;);
}
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
  &amp;lt;input type=&quot;text&quot; @keyup.enter=&quot;callOnEnter&quot; /&amp;gt;
&amp;lt;/template&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자세한 내용은 https://vuejs.org/guide/essentials/event-handling.html#key-modifiers 에서 확인할 수 있습니다.&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/42951967/handling-enter-key-in-vue-js&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>javascript</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/695</guid>
      <comments>https://javamemo.tistory.com/695#entry695comment</comments>
      <pubDate>Wed, 1 Nov 2023 21:55:57 +0900</pubDate>
    </item>
    <item>
      <title>jQuery를 사용하여 Ajax를 통해 체크박스 배열의 값을 보내는 방법은?</title>
      <link>https://javamemo.tistory.com/694</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery를 사용하여 Ajax를 통해 체크박스 배열의 값을 보내는 방법은?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;양식 필드(12 x n 행)가 많은 양식을 가지고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 행의 첫 번째 필드(제품을 나타냄)는 다음과 유사한 확인란입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;checkbox&quot; class=&quot;ids&quot; name=&quot;ids[]&quot; value=&quot;1&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 확인란의 값은 고유합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 하려는 것은 확인된 값을 Ajax를 통해 처리하기 위해 PHP 스크립트로 보내는 것입니다.&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;$('.ids:checked').serialize();
&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 ids = [];
$('.ids:checked').each(function(i, e) {
    ids.push($(this).val());
});

$.ajax({
    url: &quot;stub&quot;,
    type: &quot;post&quot;,
    dataType: &quot;json&quot;,
    data: {
        'ids[]': 'ids[]='+ids.join('&amp;amp;ids[]=')
    },
    success: function(data) {
        // stub
    }
});
&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;ids[]=104&amp;amp;ids;[]=105
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;양식 전체를 직렬화해서 보낼 수는 있지만, 그렇게 되면 데이터가 많이 전송되어 사용되지 않을 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 값만 보내려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;delete[]&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;PHP가 배열로 인식하는 방식이 이상적입니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(아이디를 쉼표로 구분된 문자열로 보내면서 해결했지만 충분한 시간을 들여서 해결 방법을 알고 싶습니다.)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 방법은 저에게 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;checkbox&quot; class=&quot;ids&quot; name=&quot;ids[]&quot; value=&quot;2&quot;&amp;gt;
&amp;lt;input type=&quot;checkbox&quot; class=&quot;ids&quot; name=&quot;ids[]&quot; value=&quot;3&quot;&amp;gt;
&amp;lt;input type=&quot;checkbox&quot; class=&quot;ids&quot; name=&quot;ids[]&quot; value=&quot;4&quot;&amp;gt;
&amp;lt;input type=&quot;checkbox&quot; class=&quot;ids&quot; name=&quot;ids[]&quot; value=&quot;5&quot;&amp;gt;
&amp;lt;input type=&quot;checkbox&quot; class=&quot;ids&quot; name=&quot;ids[]&quot; value=&quot;6&quot;&amp;gt;

&amp;lt;div id=&quot;response&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;button id=&quot;submit&quot;&amp;gt;Submit&amp;lt;/button&amp;gt;

&amp;lt;script&amp;gt;

$('#submit').click(function() {

$.ajax({
    url: &quot;stub.php&quot;,
    type: &quot;post&quot;,
    data: $('.ids:checked').serialize(),
    success: function(data) {
    $('#response').html(data);
    }
});


});
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그럼 스터브에.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;php&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var_dump($_POST);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ids를 쉼표로 구분된 문자열로 보내는 게 어때요?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서버 측에서 분할하여 관련된 논리를 적용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var ids = [];
$('.ids:checked').each(function(i, e) {
    ids.push($(this).val());
});

$.ajax({
    url: &quot;stub&quot;,
    type: &quot;post&quot;,
    dataType: &quot;json&quot;,
    data: {
        'ids[]': ids.join()
    },
    success: function(data) {
        // stub
    }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;잘 일하는 나를 위한 해결책&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//get checkbox checked data as the array

var ids = new Array();
      $('input[name=&quot;ids[]&quot;]:checked').each(function(){
         ids.push($(this).val());
      });



var dataString = 'ids='+ ids;


 $.ajax({
            type: &quot;POST&quot;,
            url: &quot;ajax_fees_pay_Directly.php&quot;,
            data: dataString,
            cache: false,
            success: function(data){

}
 });
&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/12433438/how-to-send-the-values-of-an-array-of-checkboxes-through-ajax-using-jquery&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Ajax</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/694</guid>
      <comments>https://javamemo.tistory.com/694#entry694comment</comments>
      <pubDate>Wed, 1 Nov 2023 21:55:47 +0900</pubDate>
    </item>
    <item>
      <title>translatable=&amp;quot;false&amp;quot;가 있는 strings.xml의 &amp;quot;여기서 번역되지만 기본 로케일에서는 찾을 수 없습니다&amp;quot; 오류</title>
      <link>https://javamemo.tistory.com/693</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;translatable=&quot;false&quot;가 있는 strings.xml의 &quot;여기서 번역되지만 기본 로케일에서는 찾을 수 없습니다&quot; 오류&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 내 &lt;strong&gt;values\strings.xml&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;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 로케일(values\strings.xml)을 편집하는 경우 &quot;기본 로케일에서 찾을 수 없음&quot;을 확인하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;설정하면 보풀 번역 오류가 어떻게 되나요?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;translatable=&quot;false&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;? values-pl\strings.xml(및 values-ru, values-iw 폴더에도 문자열이 존재하지 않습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어쨌든 그럴 리가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;러시아 문자열 오류가 왜 안나오는지 이해가 안 되는 것 같습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(여기에 values-ru\string.xml 또는 values-pl\string.xml을 표시하지만 문자열이 누락되어 관심있는 것은 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.)&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 나에게도 일어났습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;전체 파일을 확인하여 다른 번역이 수행되지 않았는지 확인합니다(파일 en에는 있지만 pt-br에는 있습니다).&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Android Studio를 정리하고, 그라들을 업데이트한 후 종료하고 다시 시작합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리빌딩은 시간이 오래 걸릴 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;YMMV, 하지만...&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;불쾌감을 주는 선을 제거하고 다시 추가하기만 하면 됩니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나를 위해 일했습니다.&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;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오류를 발생시키는 문자열을 선택합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;잘라버려요.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다시 붙여넣기&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 당신에게 효과가 없다면, 같은 문자열을 추가해보세요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strings.xml(v21)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;Invalidate Caches &lt;/strong&gt;/ &lt;strong&gt;Restart ...&lt;/strong&gt;을 눌러 Android 스튜디오를 다시 시작합니다.&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;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트 정리하기&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리빌딩&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일 메뉴에서 유효하지 않은 캐시/Restart(다시 시작)를 누릅니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 그냥&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Clean Project&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아마 효과가 있을 겁니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 나에게 효과가 있었다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Android Studio를 그만두고 다시 시작하는 것이 저를 위해 해결해 주었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 로케일 자체와 모든 번역에 이상한 문제로 같은 오류 메시지가 있었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내부적으로 &quot;bla_blub&quot;으로 변환된 후 &quot;bla.blub&quot;과 일치할 수 없으므로 오류가 발생하므로 사용자 이름에 점을 사용해서는 안 되는 것으로 나타났습니다(예: name=&quot;bla.blub&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;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그냥 불쾌감을 주는 행(또는 여러 개의 불쾌감을 주는 행 중 하나)을 복사하고 제거한 다음 다시 붙여넣기만 하면 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 문제가 없어졌습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동일한 대문자를 포함하여 모든 문자열 파일에 동일한 이름 지정 규칙이 있는지 확인하십시오.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;strings.xml에 &quot;sign_in&quot;이 있고 fr/string.xml에 &quot;sign_In&quot;이 있으면 &quot;is translated but not in default local&quot;과 같이 fr/strings.xml에서 오류가 발생합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 sign_in으로 편집할 때.&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;xml 파일의 모든 문자열에 대해 이 문제가 발생했습니다.&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;strings.xml&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지 말았어야 하는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tools:locale&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 번역 파일이 가지고 있는 속성입니다.&lt;/font&gt;&lt;font 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;a href=&quot;https://github.com/gubatron/android-missing-strings&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://github.com/gubatron/android-missing-strings&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 언어의 모든 남은 부분을 지우려면 다음과 같이 호출합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;./ams --cleanleftovers -o all.txt
&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;txt 파일&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;Clean and restart도 해봤는데, 이전 오류는 사라졌지만 새로운 입력 문자열은 여전히 새로운 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열린 &lt;strong&gt;strings.xml&lt;/strong&gt; 파일과 &lt;strong&gt;Translations Editor&lt;/strong&gt;를 닫고 다시 시작해 보았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4dHf2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;strings.xml 파일 및 Translations Editor&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 그것이 좋습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;음, 제 경우에는 보고되는 문자열의 이전 문자열에 형식 오류가 있을 때 발생했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안타깝게도 그 형식 오류는 보고되지 않았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;형식 오류를 수정하면 문제가 해결됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것을 추가하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   &amp;lt;resources xmlns:tools=&quot;http://schemas.android.com/tools&quot; tools:ignore=&quot;ExtraTranslation&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;빌드 메뉴로 이동하여 클린 프로젝트를 선택하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위에서 제안한 다른 것은 모두 실패했습니다. 파일 -&amp;gt; IDE Android Studio 복구 메뉴 옵션을 사용하는 것이 효과적이었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;복구가 완료되고 메시지가 표시된 후 IDE를 다시 시작하려면 선택합니다.&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;Translations Error&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;체크 인 후 체크 인 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Untranslatable&lt;/code&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/50027691/is-translated-here-but-not-found-in-default-locale-error-in-strings-xml-with-t&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>XML</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/693</guid>
      <comments>https://javamemo.tistory.com/693#entry693comment</comments>
      <pubDate>Wed, 1 Nov 2023 21:55:39 +0900</pubDate>
    </item>
    <item>
      <title>memset과 루프가 복수의 배열을 영점화하는 것 중 어느 것이 더 빠르거나 더 좋습니까?</title>
      <link>https://javamemo.tistory.com/692</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;memset과 루프가 복수의 배열을 영점화하는 것 중 어느 것이 더 빠르거나 더 좋습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;double d[10];
int length = 10;

memset(d, length * sizeof(double), 0);

//or

for (int i = length; i--;)
  d[i] = 0.0;
&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;그러나 가장 휴대하기 쉬운 방법은 std::fill():&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;std::fill( array, array + numberOfElements, 0.0 );
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;memset의 경우, 이전의 C 함수이기 때문에 요소의 개수가 아닌 바이트의 개수를 전달해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;memset(d, 0, sizeof(double)*length);
&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;memset은 assembler로 작성되기 때문에 더 빠를 수 &lt;em&gt;있지만&lt;/em&gt;, 반면에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::fill&lt;/code&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;strong&gt;추천&lt;/strong&gt;합니다.&lt;/font&gt;&lt;/font&gt; &lt;code&gt;std::fill()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;- 그것은 일을 하는 c++ 방식이고, 고려합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;memset&lt;/code&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;멋지기 위해서라도 한번 써보세요 xD&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{
    double *to = d;
    int n=(length+7)/8;
    switch(length%8){
        case 0: do{ *to++ = 0.0;
        case 7:     *to++ = 0.0;
        case 6:     *to++ = 0.0;
        case 5:     *to++ = 0.0;
        case 4:     *to++ = 0.0;
        case 3:     *to++ = 0.0;
        case 2:     *to++ = 0.0;
        case 1:     *to++ = 0.0;
        }while(--n&amp;gt;0);
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;루프 길이가 적분 상수 표현이라고 가정하면, 가장 가능성 있는 결과는 좋은 최적화자가 for-loop과 memset(0)을 모두 인식할 것입니다.&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;코드에 있는 여러 버그와 누락 외에 memset을 사용하는 것은 휴대가 불가능합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 0비트가 있는 두 배가 0.0이라고 가정할 수는 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;먼저 코드를 올바르게 설정한 다음 최적화에 대해 고민합니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;memset(d,0,10*sizeof(*d));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 빠를 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신도 할 수 있다고 하는 것처럼&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;std::fill_n(d,10,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;calloc(length, sizeof(double))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IEEE-754에 따르면, 양의 0의 비트 표현은 모두 0 비트이며, IEEE-754의 준수를 요구하는 것은 문제가 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(다시 사용하기 위해 어레이를 제로화해야 할 경우 위의 솔루션 중 하나를 선택합니다.)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/IEEE_754-1985#Double-precision_64_bit&quot; rel=&quot;nofollow noreferrer&quot;&gt;IEEE 754-1975 64비트 부동 소수점&lt;/a&gt;에 대한 위키피디아 기사에 따르면 모든 0의 비트 패턴은 실제로 두 배를 0.0으로 적절하게 초기화합니다.&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;memset(d, 0, length * sizeof(double));
&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;{
    double *d;
    int length = 10;
    d = malloc(sizeof(d[0]) * length);
    memset(d, 0, length * sizeof(d[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;물론, malloc의 반품 값에 대한 오류 검사를 수행해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof(d[0])&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보다 약간 낫습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof(double)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;d형의 변화에 강하기 때문입니다.&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;calloc(length, sizeof(d[0]))&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 메모리가 지워지고 그 이후의 멤셋은 더 이상 필요 없게 됩니다.&lt;/font&gt;&lt;font 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;Memset은 디버그 모드 또는 낮은 수준의 최적화를 사용하는 경우 항상 더 빠릅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 높은 최적화 수준에서는 std::fill 또는 std::fill_n과 동일합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, Google 벤치마크의 다음 코드의 경우: (테스트 설정: xubuntu 18, GCC 7.3, Clang 6.0)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;cstring&amp;gt;
#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;benchmark/benchmark.h&amp;gt;

double total = 0;


static void memory_memset(benchmark::State&amp;amp; state)
{
    int ints[50000];

    for (auto _ : state)
    {
        std::memset(ints, 0, sizeof(int) * 50000);
    }

    for (int counter = 0; counter != 50000; ++counter)
    {
        total += ints[counter];
    }
}


static void memory_filln(benchmark::State&amp;amp; state)
{
    int ints[50000];

    for (auto _ : state)
    {
        std::fill_n(ints, 50000, 0);
    }

    for (int counter = 0; counter != 50000; ++counter)
    {
        total += ints[counter];
    }
}


static void memory_fill(benchmark::State&amp;amp; state)
{
    int ints[50000];

    for (auto _ : state)
    {
        std::fill(std::begin(ints), std::end(ints), 0);
    }

    for (int counter = 0; counter != 50000; ++counter)
    {
        total += ints[counter];
    }
}


// Register the function as a benchmark
BENCHMARK(memory_filln);
BENCHMARK(memory_fill);
BENCHMARK(memory_memset);



int main (int argc, char ** argv)
{
    benchmark::Initialize (&amp;amp;argc, argv);
    benchmark::RunSpecifiedBenchmarks ();
    printf(&quot;Total = %f\n&quot;, total);
    getchar();
    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GCC(-O2;-march= native)의 릴리스 모드에서 다음 결과를 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-----------------------------------------------------
Benchmark              Time           CPU Iterations
-----------------------------------------------------
memory_filln       16488 ns      16477 ns      42460
memory_fill        16493 ns      16493 ns      42440
memory_memset       8414 ns       8408 ns      83022
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 다음과 같이 디버그 모드(-O0)가 됩니다.&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;-----------------------------------------------------
Benchmark              Time           CPU Iterations
-----------------------------------------------------
memory_filln       87209 ns      87139 ns       8029
memory_fill        94593 ns      94533 ns       7411
memory_memset       8441 ns       8434 ns      82833
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;-O3에 있거나 -O2에 클랜이 있는 동안 다음을 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-----------------------------------------------------
Benchmark              Time           CPU Iterations
-----------------------------------------------------
memory_filln        8437 ns       8437 ns      82799
memory_fill         8437 ns       8437 ns      82756
memory_memset       8436 ns       8436 ns      82754
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;TLDR: 적어도 IEEE-754 부동 소수점이 아닌 POD 유형에 대해 std::fill 또는 for-loop을 사용해야 한다고 절대적으로 말하지 않는 한 memset을 사용합니다.&lt;/font&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;(참고: 배열 내용을 계산하는 for loops는 클랜이 구글 벤치마크 루프를 완전히 최적화하지 않기 위해 필요합니다(그렇지 않으면 사용되지 않음을 감지합니다).&lt;/font&gt;&lt;/em&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;double d[50] = {0.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;font papago-translate=&quot;translated&quot;&gt;성능에 정말 관심이 있다면 루프에 적절하게 최적화된 제품을 비교하는 것을 잊지 마십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열이 충분히 길다면 Duff의 장치의 일부 변형, 접두사 --i not supplus i-- (대부분의 컴파일러가 자동으로 수정할 것입니다.)&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;memset(d, 10, 0)은 10바이트만 널링하므로 올바르지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;prefer std::fill은 의도가 가장 명확하기 때문입니다.&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;이제 정말로 몇 개의 2배로 끝나려면 루프가 더 빨라질 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 채우기 루프가 그림자를 드리우는 지점에 도달함에 따라 소수의 설정 명령어 멤셋은 일반적으로 속도를 최대화하기 위해 더 크고 때로는 정렬된 청크를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;평소와 같이 시험하고 측정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(그러나 이 경우에는 캐시에 저장되어 측정값이 거짓으로 판명될 수도 있습니다.)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 질문에 답하는 한 가지 방법은 컴파일러 탐색기를 통해 코드를 빠르게 실행하는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 &lt;a href=&quot;https://godbolt.org/z/TGG11P&quot; rel=&quot;nofollow noreferrer&quot;&gt;링크&lt;/a&gt;를 확인하면 다음 코드에 대한 어셈블리가 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-cpp prettyprint-override&quot;&gt;&lt;code&gt;void do_memset(std::array&amp;lt;char, 1024&amp;gt;&amp;amp; a) {
    memset(&amp;amp;a, 'q', a.size());
}

void do_fill(std::array&amp;lt;char, 1024&amp;gt;&amp;amp; a) {
    std::fill(a.begin(), a.end(), 'q');
}

void do_loop(std::array&amp;lt;char, 1024&amp;gt;&amp;amp; a) {
    for (int i = 0; i &amp;lt; a.size(); ++i) {
        a[i] = 'q';
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;답은 (적어도 에 대해서는)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;clang&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;)는 최적화 수준을 가진 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-O0&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-O1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 조립은 다르며,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::fill&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반복기의 사용이 최적화되지 않았기 때문에 속도가 느려질 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-O2&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 더 높은 곳에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;do_memset&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;do_fill&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;동일한 조립체&lt;/em&gt;를 제작합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;루프는 결국 전화를 걸게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;memset&lt;/code&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열의 &lt;em&gt;모든 항목에 대해&lt;/em&gt; 다음과 같은 경우에도&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-O3&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;릴리스 빌드가 실행되는 경향이 있다고 가정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-O2&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성능에 대한 고려 사항은 없으며 다음을 사용할 것을 권장합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::fill&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가능할 때, 그리고&lt;/font&gt;&lt;/font&gt;&lt;code&gt;memset&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C에 대하여&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;STL을 사용하지 말아야 한다면...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;double aValues [10];
ZeroMemory (aValues, sizeof(aValues));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ZeroMemory는 적어도 의도를 분명히 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제안된 모든 것에 대한 대안으로 시작 시 배열을 모든 0으로 설정하지 않는 것을 제안할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신 특정 셀의 값에 처음 액세스할 때만 값을 0으로 설정합니다.&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;memset(d, 0, length * sizeof(d[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;for (int i = length; --i &amp;gt;= 0; ) d[i] = 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;std::fill()&lt;/code&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/1373369/which-is-faster-preferred-memset-or-for-loop-to-zero-out-an-array-of-doubles&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/692</guid>
      <comments>https://javamemo.tistory.com/692#entry692comment</comments>
      <pubDate>Wed, 1 Nov 2023 21:55:32 +0900</pubDate>
    </item>
    <item>
      <title>파워셸에서 병렬로 태스크 실행</title>
      <link>https://javamemo.tistory.com/691</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;다음과 같은 PowerShell 스크립트가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Foreach ($file in $files) {
    [Do something]
    [Do something]
    [Do something]
}
&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;파일 4개를 동시에 처리하고 싶습니다.&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;PowerShell에서 이를 실현하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/4016451/can-powershell-run-commands-in-parallel&quot;&gt;Jobs&lt;/a&gt;를 조사하거나 &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/system.management.automation.runspaces.runspace(v=vs.85).aspx&quot; rel=&quot;noreferrer&quot;&gt;공간&lt;/a&gt;을 실행할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Jobs의 예는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$block = {
    Param([string] $file)
    &quot;[Do something]&quot;
}
#Remove all jobs
Get-Job | Remove-Job
$MaxThreads = 4
#Start the jobs. Max 4 jobs running simultaneously.
foreach($file in $files){
    While ($(Get-Job -state running).count -ge $MaxThreads){
        Start-Sleep -Milliseconds 3
    }
    Start-Job -Scriptblock $Block -ArgumentList $file
}
#Wait for all jobs to finish.
While ($(Get-Job -State Running).count -gt 0){
    start-sleep 1
}
#Get information from each job.
foreach($job in Get-Job){
    $info= Receive-Job -Id ($job.Id)
}
#Remove all jobs created.
Get-Job | Remove-Job
&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;$file&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서로 병렬로 실행됩니다(최대 4개가 동시에 실행됨).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편집: 의견에 대한 답변으로 스크립트 블록에 대한 몇 가지 문서가 &lt;a href=&quot;https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_script_blocks&quot; rel=&quot;noreferrer&quot;&gt;있습니다&lt;/a&gt;.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매개 변수를 포함해야 하는 짧은 이유는 PowerShell 기능과 달리 스크립트 블록이 괄호 {} 외부의 매개 변수를 지정할 수 없기 때문입니다.&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;파워셸 7이 소개&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foreach-object -parallel&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://devblogs.microsoft.com/powershell/powershell-foreach-object-parallel-feature/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://devblogs.microsoft.com/powershell/powershell-foreach-object-parallel-feature/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 대본은 다음과 같이 말할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-bsh prettyprint-override&quot;&gt;&lt;code&gt;$files | ForEach-Object -parallel {
    [Do something]
    [Do something]
    [Do something]
}
&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;ForEach -Parallel...&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 항목에 대해 전체 스크립트 블록을 병렬로 처리하지만 스크립트 블록의 명령어는 순차적으로 처리됩니다(아마도 다음과 같이 괄호를 친 경우 병렬로 처리될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Parallel {...}&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 이를 수락하려면 스크립트가 PowerShell 워크플로우여야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Parallel&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Sequence&lt;/code&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/43685522/running-tasks-parallel-in-powershell&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PowerShell</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/691</guid>
      <comments>https://javamemo.tistory.com/691#entry691comment</comments>
      <pubDate>Wed, 1 Nov 2023 21:55:22 +0900</pubDate>
    </item>
    <item>
      <title>Ora-01427 단일 행 하위 쿼리가 두 개 이상의 행을 선택하여 반환하도록 수정하는 방법은 무엇입니까?</title>
      <link>https://javamemo.tistory.com/690</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ora-01427 단일 행 하위 쿼리가 두 개 이상의 행을 선택하여 반환하도록 수정하는 방법은 무엇입니까?&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;blockquote&gt; 
 &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;Ora-01427 단일 행 하위 쿼리가 두 개 이상의 행을 반환합니다.&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;SELECT E.I_EmpID AS EMPID,
       E.I_EMPCODE AS EMPCODE,
       E.I_EmpName AS EMPNAME,
       REPLACE(TO_CHAR(A.I_REQDATE, 'DD-Mon-YYYY'), ' ', '') AS FROMDATE,
       REPLACE(TO_CHAR(A.I_ENDDATE, 'DD-Mon-YYYY'), ' ', '') AS TODATE,
       TO_CHAR(NOD) AS NOD,
       DECODE(A.I_DURATION,
              'FD',
              'FullDay',
              'FN',
              'ForeNoon',
              'AN',
              'AfterNoon') AS DURATION,
       L.I_LeaveType AS LEAVETYPE,
       REPLACE(TO_CHAR((SELECT C.I_WORKDATE
                         FROM T_COMPENSATION C
                        WHERE C.I_COMPENSATEDDATE = A.I_REQDATE
                          AND C.I_EMPID = A.I_EMPID),
                       'DD-Mon-YYYY'),
               ' ',
               '') AS WORKDATE,
       A.I_REASON AS REASON,
       AP.I_REJECTREASON AS REJECTREASON
  FROM T_LEAVEAPPLY A
 INNER JOIN T_EMPLOYEE_MS E
    ON A.I_EMPID = E.I_EmpID
   AND UPPER(E.I_IsActive) = 'YES'
   AND A.I_STATUS = '1'
 INNER JOIN T_LeaveType_MS L
    ON A.I_LEAVETYPEID = L.I_LEAVETYPEID
  LEFT OUTER JOIN T_APPROVAL AP
    ON A.I_REQDATE = AP.I_REQDATE
   AND A.I_EMPID = AP.I_EMPID
   AND AP.I_APPROVALSTATUS = '1'
 WHERE E.I_EMPID &amp;lt;&amp;gt; '22'
 ORDER BY A.I_REQDATE DESC
&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;A의 주문 없이 이것을 실행할 때.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;I_REQDATE DESC는 100개의 행을 반환합니다...&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 쿼리를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT E.I_EmpID AS EMPID,
       E.I_EMPCODE AS EMPCODE,
       E.I_EmpName AS EMPNAME,
       REPLACE(TO_CHAR(A.I_REQDATE, 'DD-Mon-YYYY'), ' ', '') AS FROMDATE,
       REPLACE(TO_CHAR(A.I_ENDDATE, 'DD-Mon-YYYY'), ' ', '') AS TODATE,
       TO_CHAR(NOD) AS NOD,
       DECODE(A.I_DURATION,
              'FD',
              'FullDay',
              'FN',
              'ForeNoon',
              'AN',
              'AfterNoon') AS DURATION,
       L.I_LeaveType AS LEAVETYPE,
       REPLACE(TO_CHAR((SELECT max(C.I_WORKDATE)
                         FROM T_COMPENSATION C
                        WHERE C.I_COMPENSATEDDATE = A.I_REQDATE
                          AND C.I_EMPID = A.I_EMPID),
                       'DD-Mon-YYYY'),
               ' ',
               '') AS WORKDATE,
       A.I_REASON AS REASON,
       AP.I_REJECTREASON AS REJECTREASON
  FROM T_LEAVEAPPLY A
 INNER JOIN T_EMPLOYEE_MS E
    ON A.I_EMPID = E.I_EmpID
   AND UPPER(E.I_IsActive) = 'YES'
   AND A.I_STATUS = '1'
 INNER JOIN T_LeaveType_MS L
    ON A.I_LEAVETYPEID = L.I_LEAVETYPEID
  LEFT OUTER JOIN T_APPROVAL AP
    ON A.I_REQDATE = AP.I_REQDATE
   AND A.I_EMPID = AP.I_EMPID
   AND AP.I_APPROVALSTATUS = '1'
 WHERE E.I_EMPID &amp;lt;&amp;gt; '22'
 ORDER BY A.I_REQDATE DESC
&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;트릭은 집계 함수를 추가하여 내부 쿼리가 하나의 레코드만 반환하도록 강제하는 것입니다(여기서 max()를 사용했습니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 쿼리에 관한 한 완벽하게 작동하지만, 솔직히 OP는 내부 쿼리가 데이터를 검사하여 여러 개의 레코드를 반환하는 이유를 조사해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 다수의 기록이 정말로 비즈니스 측면에서 적합한 것입니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하위 쿼리는 이것뿐인 것 같습니다. 추가해 보십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ROWNUM&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;(SELECT C.I_WORKDATE
         FROM T_COMPENSATION C
         WHERE C.I_COMPENSATEDDATE = A.I_REQDATE AND ROWNUM &amp;lt;= 1
         AND C.I_EMPID = A.I_EMPID)
&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;C.I_COMPENSATEDDATE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜가 일치하여&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성능상의 이유로 룩업 하위 쿼리를 내부/좌측 조인으로 재배열할 수 있는지도 확인해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; SELECT 
    ...
    REPLACE(TO_CHAR(C.I_WORKDATE, 'DD-Mon-YYYY'),
            ' ',
            '') AS WORKDATE,
    ...
 INNER JOIN T_EMPLOYEE_MS E
    ...
     LEFT OUTER JOIN T_COMPENSATION C
          ON C.I_COMPENSATEDDATE = A.I_REQDATE
          AND C.I_EMPID = A.I_EMPID
    ...
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;(SELECT C.I_WORKDATE
         FROM T_COMPENSATION C
         WHERE C.I_COMPENSATEDDATE = A.I_REQDATE AND ROWNUM &amp;lt;= 1
         AND C.I_EMPID = A.I_EMPID)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/21397694/how-to-fix-ora-01427-single-row-subquery-returns-more-than-one-row-in-select&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/690</guid>
      <comments>https://javamemo.tistory.com/690#entry690comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:40:49 +0900</pubDate>
    </item>
    <item>
      <title>PowerShell에서 Byte[] 만들기</title>
      <link>https://javamemo.tistory.com/689</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell에서 Byte[] 만들기&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;저는 COM API를 사용하고 있는 PowerShell 코드를 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;바이트 배열을 전달할 때 유형 불일치 오류가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 배열을 만드는 방법과 몇 가지 유형 정보입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;PS C:\&amp;gt; $bytes = Get-Content $file -Encoding byte
PS C:\&amp;gt; $bytes.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array


PS C:\&amp;gt; $bytes[0].GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Byte                                     System.ValueType
&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;API를 찾아보니 기본 유형의 시스템을 가진 Byte[]를 찾고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;PS C:\&amp;gt; $r.data.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Byte[]                                   System.Array

PS C:\&amp;gt; $r.data[0].gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Byte                                     System.ValueType
&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;제가 하려는 것은 $bytes를 $r.data와 동일한 유형으로 변환하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 이유에서인지 $bytes가 Object[]로 생성되고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;바이트[]에 캐스팅하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 답은 문맥이 없는 질문에 대한 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;검색 결과 때문에 추가하는 겁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[System.Byte[]]::CreateInstance([System.Byte],&amp;lt;Length&amp;gt;)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마 더 많은 방법이 있겠지만, 제가 생각할 수 있는 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;직접 배열 초기화:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-bsh prettyprint-override&quot;&gt;&lt;code&gt;[byte[]] $b = 1,2,3,4,5
$b = [byte]1,2,3,4,5
$b = @([byte]1,2,3,4,5)
$b = [byte]1..5
&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-bsh prettyprint-override&quot;&gt;&lt;code&gt;$b = [System.Array]::CreateInstance([byte],5)
$b = [byte[]]::new(5)        # Powershell v5+
$b = New-Object byte[] 5
$b = New-Object -TypeName byte[] -Args 5
&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;byte[]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(2-D 배열)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-bsh prettyprint-override&quot;&gt;&lt;code&gt;# 5 by 5
[byte[,]] $b = [System.Array]::CreateInstance([byte],@(5,5)) # @() optional for 2D and 3D
[byte[,]] $b = [byte[,]]::new(5,5)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-bsh prettyprint-override&quot;&gt;&lt;code&gt;# 3-D
[byte[,,]] $b = [byte[,,]]::new(5,5,5)
[byte[,]] $b = [System.Array]::CreateInstance([byte],5,5,5)
&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;PS 5.1에서는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;&lt;code&gt;[System.Byte[]]::CreateInstance(&amp;lt;Length&amp;gt;)&lt;/code&gt;&lt;/em&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&gt;&lt;strong&gt;&lt;code&gt;new-object byte[] 4&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;빈 바이트[4]:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;0
0
0
0
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바이트 배열로 캐스트:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[byte[]]$bytes = Get-Content $file -Encoding byte
&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;임의 문자열만 바이트[] 배열로 인코딩하려면 FWIW:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$foo = &quot;This is a string&quot;
[byte[]]$bar = $foo.ToCharArray()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/17474131/creating-byte-in-powershell&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PowerShell</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/689</guid>
      <comments>https://javamemo.tistory.com/689#entry689comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:40:41 +0900</pubDate>
    </item>
    <item>
      <title>AngularJS - Get 및 Post에 대한 $resource different URL</title>
      <link>https://javamemo.tistory.com/688</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AngularJS - Get 및 Post에 대한 $resource different URL&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;GET과 POST를 서로 다른 URL에서 수행해야 하는 경우에는 어떻게 됩니까?&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;예를 들어 GET URL은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;http://localhost/pleaseGethere/:id&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 POST URL은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;http://localhost/pleasePosthere&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아무런 변수도 없이&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[actions]의 'url' 속성을 사용하여 기본 URL을 재정의합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$resource(url, [paramDefaults], [actions], options);
&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;$resource('http://localhost/pleaseGethere/:id',{},{
    getMethod:{
        method:'GET',
        isArray:true
    }
    postMethod:{
        url:'http://localhost/pleasePosthere',
        method:'POST',
        isArray:false
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular $ 리소스 사용: http://docs.angularjs.org/api/ngResource/service/$resource&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;URL을 매개 변수로 노출할 수 있어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이렇게 할 수 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$provide.factory('twitterResource', [
    '$resource',
    function($resource) {
        return $resource(
            'https://:url/:action',
            {
                url: 'search.twitter.com',
                action: 'search.json',
                q: '#ThingsYouSayToYourBestFriend',
                callback: 'JSON_CALLBACK'
            },
            {
                get: {
                    method: 'JSONP'
                }
            }
        );
    }
]);
&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;그러면 당신은 당신의 URL을 덮어쓸 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GET&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;http://&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL 문자열에서 작동하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 메시지를 받지 못했습니다.&lt;/font&gt;&lt;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;$resource 호출에 매개 변수 이름이 포함된 해시를 추가하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$resource('localhost/pleaseGethere/:id', {id: '@id'});
&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;그러면 함수를 호출할 때 :id가 &lt;em papago-id=&quot;14-1&quot;&gt;id&lt;/em&gt; 매개변수에 매핑됩니다(&lt;em papago-id=&quot;14-3&quot;&gt;GET localhost/pleaseGetheer/123&lt;/em&gt;).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Resource.get({id: 123});
&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;POST의 경우 &lt;em papago-id=&quot;15-1&quot;&gt;id&lt;/em&gt; 파라미터를 할당하지 않을 뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Resource.post({}, {name: &quot;Joe&quot;});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;올바른 URL이 호출되며, 이 경우 &lt;em papago-id=&quot;16-1&quot;&gt;POST localhost/pleaseGetthere&lt;/em&gt;(후행 슬래시는 ngResource에 의해 제거됨)입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은&lt;a href=&quot;http://docs.angularjs.org/api/ngResource.%24resource&quot; papago-id=&quot;17-1&quot;&gt; &lt;/a&gt;http://docs.angularjs.org/api/ngResource.$resource -&amp;gt; 예제 -&amp;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;Iris Wong의 답변 외에도, 저는 여러 가지 방법과 행동으로 여러 개의 파라미터를 가지는 예를 들어 보고자 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;angular
  .module('thingApp')
  .factory('ThingResource', ['$resource', '$state',  returnThing]);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 자원:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function returnThing($resource, $state) {
  var mainUrl = '/api/stuffs/:stuffId/thing'
  var params = {stuffId: '@_id', thingMongoId: '@_id', thingNumber: '@_id'}
  return $resource(mainUrl, params, {
    'save': {
      url: '/api/stuffs/:stuffId/thing/:thingMongoId',
      method: 'POST',
      interceptor: {
        responseError: function(e) {
          console.warn('Problem making request to backend: ', e)
          $state.go('oops')
        }
      }
    },
    'get': {
      url: '/api/stuffs/:stuffId/thing/:thingMongoId',
      method: 'GET',
      interceptor: {
        responseError: function(e) {
          console.warn('Problem making request to backend: ', e)
          $state.go('oops')
        }
      }
    },
    'assignThing':{
      method: 'POST',
      url: '/api/stuffs/:stuffId/thing/assign/:thingNumber'
    }
  });
}
&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;// POST to http://currnt_base_url/api/stuffs/:stuffId/thing/:thingMongoId
ThingResource.save({
    stuffId:'56c3d1c47fe68be29e0f7652', 
    thingMongoId: '56c3d1c47fe6agwbe29e0f11111'})

// GET to current http://currnt_base_url/api/stuffs/:stuffId/thing/:thingMongoId
ThingResource.get({
    stuffId:'56c3d1c47fe68be29e0f7652', 
    thingMongoId: '56c3d1c47fe6agwbe29e0f11111'})

// POST to http://currnt_base_url/api/stuffs/:stuffId/thing/assign/:thingNumber
ThingResource.assignThing({
    stuffId:'56c3d1c47fe68be29e0f7652', 
    thingNumber: '999998'})
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 방법을 따릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(function () {
    'use strict';

    angular
        .module(&quot;app&quot;)
        .factory(&quot;SomeFactory&quot;, SomeFactory);

    function SomeFactory($resource) {
        var provider = &quot;http://stackoverflow.com/:action/:id&quot;;
        var params = {&quot;id&quot;:&quot;@id&quot;};
        var actions = {
            &quot;create&quot;:   {&quot;method&quot;: &quot;POST&quot;,  &quot;params&quot;: {&quot;action&quot;: &quot;CreateAwesomePost&quot;}},
            &quot;read&quot;:     {&quot;method&quot;: &quot;POST&quot;,  &quot;params&quot;: {&quot;action&quot;: &quot;ReadSomethingInteresting&quot;}},
            &quot;update&quot;:   {&quot;method&quot;: &quot;POST&quot;,  &quot;params&quot;: {&quot;action&quot;: &quot;UpdateSomePost&quot;}},
            &quot;delete&quot;:   {&quot;method&quot;: &quot;GET&quot;,   &quot;params&quot;: {&quot;action&quot;: &quot;DeleteJustForFun&quot;}}
        };

        return $resource(provider, params, actions);
    }
})();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 됐으면 좋겠네요!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;맛있게 드세요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/12633904/angularjs-resource-different-url-for-get-and-post&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/688</guid>
      <comments>https://javamemo.tistory.com/688#entry688comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:40:34 +0900</pubDate>
    </item>
    <item>
      <title>AJAX가 뭐지, 정말?</title>
      <link>https://javamemo.tistory.com/687</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;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트에서 AJAX를 사용해야 하는데 어디서부터 시작해야 할지 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 좀 도와주시겠습니까?&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;비동기 자바스크립트와 Xml&lt;strong papago-id=&quot;2-4&quot;&gt;&lt;/strong&gt;&lt;strong papago-id=&quot;2-6&quot;&gt;&lt;/strong&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTTP를 통해 웹 브라우저와 서버 간의 양방향, 스크립트 기반 통신을 달성하기 위한 기술.&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고 항목:&lt;/font&gt;&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ajax_%28programming%29&quot; rel=&quot;noreferrer&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;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.w3schools.com/xml/ajax_intro.asp&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AJAX w3 학교 소개&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.ajaxlessons.com/2006/02/11/ajax-workshop-1-ajax-basics-build-a-simple-email-verification-with-prototypejs/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ajax Workshop 1에서 Ajax의 교훈을 소개합니다.&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;7-0&quot;&gt;편집:&lt;/strong&gt; Nosredna가 지적한 대로, XML 대신 &lt;a href=&quot;http://json.org/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-2&quot;&gt;JSON&lt;/a&gt;이 자주 사용됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대략적인 영어 개념:&lt;/font&gt;&lt;/p&gt; 
&lt;p 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;일부 이벤트(버튼 누르기 또는 다른 형태의 이벤트일 수 있음, 또는 타이머에 의해 트리거된 것일 수 있음)가 발생하고 서버에 새로운 정보(예를 들어 GOOG 스톡의 최신 값)를 요청하는 JavaScript 코드를 트리거합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버에는 전달한 정보를 수집하고 일부 정보를 다시 전송하는 코드 조각이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 서버가 보통 가지고 있는 페이지 서비스 작업과는 다릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버가 응답할 때 서버에 대한 자바스크립트 호출에서 지정한 콜백 함수가 서버의 정보와 함께 호출됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트 코드는 GOOG 주식 차트 같은 것을 업데이트하는 데 그 정보를 사용합니다.&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://www.colgate.com/app/Colgate/US/HC/Products/HouseholdCleaners/Ajax.cvsp&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12-1&quot;&gt;클리너&lt;/a&gt;와 혼동하지 않도록, &lt;a href=&quot;http://webdesign.about.com/od/ajax/a/aa101705.htm&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12-3&quot;&gt;기술&lt;/a&gt; 용어인 AJAX는 XML과 자바스크립트를 사용하여 서버 사이드 코드에 비동기 호출을 하는 기술로서 프레임워크 또는 더 잘 명시된 기술을 정말로 설명하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 몇 가지 &lt;a href=&quot;http://www.ajaxtopics.com/codesamples.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;13-1&quot;&gt;좋은 코드&lt;/a&gt; 샘플이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.fiftyfoureleven.com/resources/programming/xmlhttprequest/examples&quot; rel=&quot;noreferrer&quot; papago-id=&quot;13-3&quot;&gt;그리고&lt;/a&gt; 또.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 많은 샘플은 모든 XML 요청 개체를 만드는 방법을 보여주지만, Microsoft for ASP의 AJAX Control Toolkit을 살펴보시면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET 애플리케이션이나 jQuery를 사용하면 작업하기가 쉬워집니다.&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;jQuery 샘플(&lt;a href=&quot;http://jquery.com&quot; papago-id=&quot;15-1&quot; rel=&quot;noreferrer&quot;&gt;jQuery&lt;/a&gt; 사이트에서):&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splited&quot;&gt;&lt;em papago-id=&quot;1&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 class=&quot;papago-parent&quot;&gt;php 파일은 이름과 위치값을 전달하며 히트합니다.&lt;/font&gt;&lt;/font&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;script type=&quot;javascript&quot;&amp;gt;
        function saveDataAjax(){ 
        $.ajax({
           type: &quot;POST&quot;,
           url: &quot;some.php&quot;,
           data: &quot;name=John&amp;amp;location=Boston&quot;,
           success: function(msg){
             alert( &quot;Data Saved: &quot; + msg );
           }
         });
       }
   &amp;lt;/script&amp;gt;
   &amp;lt;input type=&quot;submit&quot; onClick=&quot;saveDataAjax();&quot; value=&quot;submit&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유행어의 핵심은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(&lt;strong papago-id=&quot;18-1&quot;&gt;배경에서) 비동기 HTTP&lt;/strong&gt; 요청을 &lt;strong papago-id=&quot;18-1&quot;&gt;위해&lt;/strong&gt; 자바스크립트를 사용합니다&lt;strong papago-id=&quot;18-1&quot;&gt;.&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;콘텐츠가 도착하면 보통 약간의 논리를 수행한 다음 DOM 트리를 조작하여 페이지의 모양을 업데이트하는 동작을 수행합니다. 즉, 새로운 HTML 요소를 삽입하고 일부 HTML 요소를 삭제하는 등입니다.&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;AJAX의 X는 XML을 의미하지만 무관합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML은 서버가 전송하는 데이터를 포맷하는 여러 가지 방법 중 &lt;em papago-id=&quot;20-1&quot;&gt;하나&lt;/em&gt;일 뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JSON이 훨씬 더 나은 대안(IMNSHO)입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 서버는 평문이나 일반 html만 보낼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 키워드는 비동기 요청입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저가 페이지를 다시 로드할 필요 없이 백그라운드에서 발생하는 요청입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.pragprog.com/titles/ajax/pragmatic-ajax&quot; rel=&quot;noreferrer&quot; papago-id=&quot;22-1&quot;&gt;프래그머티즘 아약스&lt;/a&gt; 책에서:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;h2 papago-id=&quot;23&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;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아약스는 원라이너로 증류하기 힘든 맹수입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 그렇게 어려운 이유는 이것에 양면성이 있기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아약스는 기술의 집합으로 볼 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;li papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ajax는 아키텍처로 볼 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3 papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ajax: 비동기 자바스크립트 및 XML&lt;/font&gt;&lt;/h3&gt; 
 &lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아약스라는 이름은 브라우저와 서버 사이의 비동기 통신 채널, 자바스크립트, XML을 지원하는 기술들의 번들에서 비롯되었습니다. 이것이 ﬁ화 해제되었을 때, 이것은 다음과 같이 구상되었습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XHTML과 CSS를 이용한 표준 기반 프레젠테이션&lt;/font&gt;&lt;/li&gt; 
  &lt;li papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저의 DOM(DocumentObject Model)을 사용한 동적 표시 및 상호 작용&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;XML과 XSLT를 이용한 데이터 교환 및 조작&lt;/font&gt;&lt;/li&gt; 
  &lt;li papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XMLHtpRequest 또는 XMLHTTP를 사용한 비동기식 데이터 검색(Microsoft에서)&lt;/font&gt;&lt;/li&gt; 
  &lt;li papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 것을 하나로 묶는 자바스크립트&lt;/font&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 가능한 기술을 사용하여 개발하는 것이 일반적이지만 보상보다는 문제가 빠르게 발생할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 이유로 아약스에게 더 중요한 디 ﬁ네이션은&lt;/font&gt;&lt;/p&gt; 
 &lt;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;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ajax의 흥미로운 발전은 웹 애플리케이션을 설계하는 방법에 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ﬁrst의 기존 웹 아키텍처를 살펴보겠습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li papago-id=&quot;38&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;39&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;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 페이지가 사용자에게 렌더링됩니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금 우리는 이것이 당연한 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹이 애플리케이션에 관한 것이 아니었기 때문에 웹의 초기에는 말이 되었습니다.&lt;/font&gt;&lt;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;클릭할 때마다 응용프로그램 화면의 모든 구성요소가 처음부터 다시 그려질 경우 어떻게 생각할지 상상해 보십시오.&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;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ajax는 새로운 아키텍처입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 아키텍처의 중요한 부분은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;44-0&quot;&gt;소규모 서버측 이벤트:&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 웹 응용프로그램의 구성요소는 서버에 작은 요청을 할 수 있고, 정보를 얻을 수 있으며, DOM을 변경하여 표시되는 페이지를 조정할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;전체 페이지 새로 고침이 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;45-0&quot;&gt;비동기:&lt;/strong&gt; 서버에 다시 게시된 요청으로 인해 브라우저가 차단되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자는 응용프로그램의 다른 부분을 계속 사용할 수 있으며 UI를 업데이트하여 요청이 발생하고 있음을 사용자에게 알릴 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
  &lt;li&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-0&quot;&gt;원하는 항목:&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 사용자가 하는 거의 모든 것을 바탕으로 서버와 상호작용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현대 브라우저는 마우스 오버, 마우스 클릭, 키 누르기 등 운영 체제와 동일한 사용자 이벤트의 대부분을 트랩합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 사용자 이벤트가 비동기 요청을 야기할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;/ul&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;/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;우리가 너무 무리하면, 새로운 UI 추상화로 사용자들을 놀라게 할 수도 있습니다.&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;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 일반적으로 브라우저에서 JavaScript*를 통해 XMLHttpRequest 개체를 사용하는 것을 말합니다.&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;질문하는 사람에 따라 브라우저에 URL을 입력하는 것 외에 HTTP를 통한 거의 모든 유형의 클라이언트/서버 통신을 설명하는 데 사용될 수 있습니다.&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;*jQuery는 브라우저 간 차이 등을 처리하기 위한 멋진 포장지 코드를 제공합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아약스는 약간 잘못된 이름입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위키 기사 인용하기&lt;/font&gt;&lt;/p&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;이름에도 불구하고 자바스크립트와 XML의 사용은 실제로 필요하지 않으며 요청이 비동기적일 필요도 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반면에 지금 대부분의 사람들은 &quot;ajax&quot;를 어떤 유형이든&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;백그라운드에서 서버와 통신하는 웹 응용 프로그램&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://www.w3schools.com/Ajax/Default.Asp&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.w3schools.com/Ajax/Default.Asp&lt;/font&gt;&lt;/a&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;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;그 용어를 만든 사람으로부터 - http://adaptivepath.com/ideas/essays/archives/000385.php&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;&quot;Ajax&quot;는 잘 붙지 않던 오래된 용어인 &quot;DHTML&quot;을 대체하기 위해 지난 2005년에 도입된 성공적인 마케팅 용어입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오늘날 &quot;Ajax&quot;는 새로운 단어인 &quot;HTML5&quot;가 등장함에 따라 역사의 일부가 되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여전히 &quot;HTML5&quot;는 원래의 &quot;DHTML&quot;과 거의 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ajax는 &quot;애플리케이션 개발의 새로운 접근법&quot;이라고도 불리는데, 처음에는 서버에 웹 페이지를 만들었지만 나중에는 데이터나 부분 콘텐츠가 백그라운드로 서버에 전달되면서 클라이언트에서 업데이트가 진행되고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 분명해지길 바랍니다.&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;font class=&quot;papago-parent&quot;&gt;비록, AJAX는 그들의 브라우저 이메일에서 Gmail에 의해 유명해졌습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;AJAX의 공로는 마이크로소프트사에 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들은 AJAX라는 것을 만들었습니다.&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;jQuery를 시작하는 가장 빠르고 쉬운 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://jquery.com/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://jquery.com/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://docs.jquery.com/Ajax/jQuery.ajax#examples&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://docs.jquery.com/Ajax/jQuery.ajax#examples&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;AJAX는 비동기 자바스크립트와 XML을 의미하지만, 더 이상 XML 데이터를 항상 다루는 것은 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 클라이언트에서 실행되는 자바스크립트를 통해 XMLHttpRequest 개체를 사용하여 웹 요청을 하고 페이지 새로 고침 없이 페이지 상태를 업데이트하는 데 사용하는 정보를 가져오는 것으로 요약됩니다.&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;운영 수준 애플리케이션에서 사용하기 전에 베어본 Ajax를 사용하여 http://www.w3schools.com/Ajax/Default.asp 과 같은 비동기 요청을 하는 방법을 보여주는 기본 튜토리얼부터 시작합니다.&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;저는 개인적으로 http://www.jquery.com/ 을 추천합니다.&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;첫 번째 AJAX 레퍼런스로 &lt;a href=&quot;http://oreilly.com/catalog/9780596515782/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;68-1&quot;&gt;Head First AJAX&lt;/a&gt;를 읽었고, AJAX에 대한 간결하고 실용적인 개요를 제공하는 것을 발견했습니다.&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;기존에 알려진 기술을 창의적으로 활용하는 것.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저 측 스크립팅과 서버의 데이터에 대한 프로그램 방식 접근은 모두 이전에 알려진 바 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;AJAX에서는 이전에 알려진 기술의 새로운 응용 프로그램을 가능하게 하는 혁신적인 사용을 위해 통합되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;REST는 비슷한 종류의 진보로 생각됩니다.&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;AJAX는 매우 간단합니다. 어떤 사람은 페이지를 다시 로드하지 않고도 서버에 무언가를 보내고 서버로부터 무언가를 받을 수 있다면 멋질 것이라고 생각했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AJAX는 혁명이 아니라 단순한 것에 대한 이름일 뿐입니다. 웹 페이지는 리로더가 되지 않고 서버에 요청을 보낼 수 있습니다. 여기에 비동기적인 것들이 있을 뿐입니다.&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;작업 없이 웹 페이지에 AJAX 컨트롤을 추가할 수 있습니다. Visual Studio로 드래그하기만 하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;관리자를 추가해야 할 수도 있지만, 이는 단순히 드래그 앤 드롭 작업일 뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 주의: 악성 웹 브라우저는 보통 IE와 같은 AJAX 언어를 사용하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AJAX는 브라우저에 전체 페이지를 다시 로드할 필요성과 함께 컨텐츠의 일부를 새로 고칠 수 있는 기능을 제공하는 것을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 사람들이 말했듯이, 그것을 구현하기 위해서 XML이나 심지어 자바스크립트도 필요하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실 초창기에는 VBScript와 Jscript로 완성되었고 DHTML이라고 불렸습니다. &lt;a href=&quot;http://en.wikipedia.org/wiki/Ajax_(programming)&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;75-1&quot;&gt;Jesse James Garrett가 AJAX라는 용어를 발명했을지 모르지만&lt;/a&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;a href=&quot;http://garrettsmith.net/blog/archives/2006/01/microsoft_inven_1.html&quot; papago-id=&quot;76-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;이 소식통에 따르면 마이크로소프트는 1999년&lt;/a&gt;에 이 기술을 &lt;a href=&quot;http://garrettsmith.net/blog/archives/2006/01/microsoft_inven_1.html&quot; papago-id=&quot;76-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;시작&lt;/a&gt;했지만, 저는 이 기술의 탄생 시기를 더 앞당길 것이라고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;a href=&quot;http://www.wired.com/science/discoveries/news/2005/10/69316&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;76-2&quot;&gt;Wired 기사&lt;/a&gt;는 이 기술이 90년대 후반에 있었던 날짜에 더 정확할 것이며, 대부분은 1997년에 시작된 마이크로소프트사의 Michael Wallent가 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/bb263969(VS.85).aspx&quot; papago-id=&quot;76-4&quot; rel=&quot;nofollow noreferrer&quot;&gt;작성한 MSDN DHTML&lt;/a&gt; Dude &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/bb263969(VS.85).aspx&quot; papago-id=&quot;76-4&quot; rel=&quot;nofollow noreferrer&quot;&gt;칼럼&lt;/a&gt;의 옛날 기사에서 나온 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://channel9.msdn.com/posts/Charles/Michael-Wallent-Advent-and-Evolution-of-WPF/ Megan은 지금도 Microsoft에서 일하는 중인데, &lt;a href=&quot;http://en.wikipedia.org/wiki/ActiveX&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;76-10&quot;&gt;ActiveX&lt;/a&gt;를 대신하는 Silverlight 팀에서 일하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 아약스로 돌아가서...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Jesse James Garrett가 2005년에 돌아왔을 때 그는 주로 자바스크립트 코드 내에서 &lt;a href=&quot;http://en.wikipedia.org/wiki/XMLHTTPRequest&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;77-1&quot;&gt;XMLHTTPRequest&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;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 것이 아니라, 오래된 것의 새로운 버전일 뿐입니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;79-1&quot;&gt;&quot;웹에서 실행&lt;/em&gt;할 수 있는 &lt;em papago-id=&quot;79-1&quot;&gt;리치 애플리케이션을 브라우저에서 구축하기 위한 W3C 기반(자바스크립트, HTML&lt;/em&gt; 및 &lt;em papago-id=&quot;79-1&quot;&gt;CSS) 솔루션을 제공하는 개념입니다.&quot;&lt;/em&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;다른 것들은 그저 &quot;기술적인 세부사항&quot;일 뿐입니다.. ;)&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;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AJAX(비동기 자바스크립트와 XML)는 수년 동안 존재해 왔지만 최근 G메일, 구글 제안, 구글 지도와 같은 애플리케이션이 출시되기 전까지 많은 웹 개발자들에 의해 간과되었던 두 가지 강력한 브라우저 기능에 대한 새로운 용어입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ajax에 대한 자세한 내용은 &lt;a href=&quot;https://www.wisdomjobs.com/e-university/ajax-tutorial-267.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;82-1&quot;&gt;Ajax 튜토리얼&lt;/a&gt;을 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;83-0&quot;&gt;AJAX&lt;/strong&gt; &lt;strong papago-id=&quot;83-0&quot;&gt;=&lt;/strong&gt; 비동기 자바스크립트 및 XML.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AJAX는 빠르고 동적인 웹 페이지를 만드는 기술입니다.&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;AJAX는 서버와 소량의 데이터를 뒤에서 주고받음으로써 웹 페이지를 비동기적으로 업데이트할 수 있게 해줍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 전체 &lt;strong papago-id=&quot;85-1&quot;&gt;페이지를 다시&lt;/strong&gt; 로드하지 &lt;strong papago-id=&quot;85-1&quot;&gt;않고도 웹 페이지의 일부를 업데이트&lt;/strong&gt;할 수 &lt;strong papago-id=&quot;85-1&quot;&gt;있습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AJAX를 사용하지 않는 고전적인 웹 페이지는 내용이 변경되어야 할 경우 전체 페이지를 다시 로드해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AJAX를 이용한 어플리케이션의 예: Google Maps, Gmail, Youtube, Facebook 탭&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(3개 &lt;a href=&quot;https://www.w3schools.com/xml/ajax_intro.asp&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;87-1&quot;&gt;학교&lt;/a&gt;에서).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단히 이해하기: 링크나 양식을 요청할 때 서버에 동기식으로 데이터를 요청합니다. 웹페이지는 현재 페이지를 파기하고 새 페이지를 재생성합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 AJAX 브라우저를 사용하면 전체 페이지를 다시 칠하지 않고도 동일한 요청을 보낼 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;88&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트지만 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/958040/what-is-ajax-really&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Ajax</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/687</guid>
      <comments>https://javamemo.tistory.com/687#entry687comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:40:26 +0900</pubDate>
    </item>
    <item>
      <title>SQL Server(2008)에서 특정 테이블을 사용하는 뷰를 찾는 방법은 무엇입니까?</title>
      <link>https://javamemo.tistory.com/686</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL Server(2008)에서 특정 테이블을 사용하는 뷰를 찾는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블에 몇 개의 열을 추가해야 하고 이 열을 이 테이블을 사용하는 모든 보기에 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 테이블을 사용하는 데이터베이스의 모든 보기 목록을 얻을 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT * 
FROM   INFORMATION_SCHEMA.VIEWS 
WHERE  VIEW_DEFINITION like '%YourTableName%'
&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;테이블 종속성을 찾으려면 sys를 사용하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;sql_expression_dependency 카탈로그 보기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT DISTINCT
referencing_object_name = o.name, 
referencing_object_type_desc = o.type_desc, 
referenced_object_name = referenced_entity_name, 
referenced_object_type_desc =so1.type_desc 
FROM sys.sql_expression_dependencies sed 
INNER JOIN sys.views o ON sed.referencing_id = o.object_id 
LEFT OUTER JOIN sys.views so1 ON sed.referenced_id =so1.object_id 
WHERE referenced_entity_name = 'Person'  
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.apexsql.com/sql_tools_search.aspx&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;5-1&quot;&gt;ApexSQL Search&lt;/a&gt; a free SSMS 및 View Dependencies 기능이 있는 VS add-in을 사용해 볼 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;종속성 보기 기능은 암호화된 개체와 시스템 개체, SQL Server 2012 특정 개체, TDE(Transparent Data Encryption)로 암호화된 데이터베이스에 저장된 개체 등 모든 SQL 데이터베이스 개체의 관계를 시각화할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 방법이 더 효과적이라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT type, *
FROM sys.objects
WHERE OBJECT_DEFINITION(object_id) LIKE '%' + @ObjectName + '%'
AND type IN ('V')
ORDER BY name
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필터링&lt;/font&gt;&lt;/font&gt;&lt;code&gt;VIEW_DEFINTION&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안에서.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;INFORMATION_SCHEMA.VIEWS&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;꽤 많은 거짓 긍정을 주고 있어요&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스 개체(예: 테이블, 열, 트리거)를 이름으로 찾아야 하는 경우 &lt;a href=&quot;http://www.red-gate.com/products/sql-development/sql-search/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-3&quot;&gt;SQL 검색&lt;/a&gt;이라는 &lt;strong papago-id=&quot;10-1&quot;&gt;FREE&lt;/strong&gt; Red-Gate 도구를 살펴보십시오. 이 도구는 전체 데이터베이스에서 문자열의 종류를 검색합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/LqzbS.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/QdmAn.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 툴은 모든 DBA나 데이터베이스 개발자에게 꼭 필요한 툴입니다. 이미 어떤 종류의 용도로도 &lt;strong papago-id=&quot;11-1&quot;&gt;무료&lt;/strong&gt;로 사용할 수 있다고 말했었나요?&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;SELECT VIEW_NAME
FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE TABLE_NAME = 'Your Table'
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블을 선택합니다 -&amp;gt; 종속성 보기 -&amp;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;아래 쿼리를 사용하여 tableName에 대한 사용된 뷰 또는 저장 프로시저를 찾는 가장 간단한 방법 -&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;exec dbo.dbsearch 'Your_Table_Name'
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/9618134/how-to-find-which-views-are-using-a-certain-table-in-sql-server-2008&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>sql-server</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/686</guid>
      <comments>https://javamemo.tistory.com/686#entry686comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:40:15 +0900</pubDate>
    </item>
    <item>
      <title>-fPIC 플래그는 오버헤드를 얼마나 추가할 수 있습니까?</title>
      <link>https://javamemo.tistory.com/685</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-fPIC 플래그는 오버헤드를 얼마나 추가할 수 있습니까?&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;질문.&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 Mandelbrot fractal을 계산하는 간단한 코드를 테스트하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포인트가 만델브로 세트에 속하는지 확인하는 기능에서 반복 횟수에 따라 성능을 확인해 왔습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;놀라운 점은 추가하고 나면 시간 차이가 많이 난다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-fPIC&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;플래그. 내가 읽은 바로는 보통 오버헤드는 무시할 수 있고 내가 본 최고 오버헤드는 약 6%였습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;머리 위에서 30% 정도 측정했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 조언이든 감사히 받겠습니다!&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;4&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;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;-O3&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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;.04.&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; &lt;font class=&quot;papago-parent&quot;&gt;gcc&lt;/font&gt; 4&lt;font class=&quot;papago-parent&quot;&gt;.7.2,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;투&lt;/font&gt; 12.04&lt;font class=&quot;papago-parent&quot;&gt;.2&lt;/font&gt;, x86_64 &lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;#iter C (fPIC) C C/C (fPIC)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1         0.01      0.01    1.00&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;100       0.04      0.03    0.75&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;200       0.06      0.04    0.67&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;500       0.15      0.1     0.67&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1000      0.28      0.19    0.68&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;2000      0.56      0.37    0.66&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;4000      1.11      0.72    0.65&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;8000      2.21      1.47    0.67&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;16000      4.42      2.88    0.65&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;32000      8.8       5.77    0.66&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;64000      17.6      11.53   0.66&lt;/font&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;gcc -O3 -fPIC fractalMain.c fractal.c -o ffpic
gcc -O3 fractalMain.c fractal.c -o f
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드: fractalMain.c&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;time.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdbool.h&amp;gt;
#include &quot;fractal.h&quot;

int main()
{
    int iterNumber[] = {1, 100, 200, 500, 1000, 2000, 4000, 8000, 16000, 32000, 64000};
    int it;
    for(it = 0; it &amp;lt; 11; ++it)
    {
        clock_t start = clock();
        fractal(iterNumber[it]);
        clock_t end = clock();
        double millis = (end - start)*1000 / CLOCKS_PER_SEC/(double)1000;
        printf(&quot;Iter: %d, time: %lf \n&quot;, iterNumber[it], millis);
    }
    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드: fractal.h&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;#ifndef FRACTAL_H
#define FRACTAL_H
    void fractal(int iter);
#endif
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드: fractal.c&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdbool.h&amp;gt;
#include &quot;fractal.h&quot;

void multiplyComplex(double a_re, double a_im, double b_re, double b_im, double* res_re, double* res_im)
{
    *res_re = a_re*b_re - a_im*b_im;
    *res_im = a_re*b_im + a_im*b_re;
}

void sqComplex(double a_re, double a_im, double* res_re, double* res_im)
{
    multiplyComplex(a_re, a_im, a_re, a_im, res_re, res_im);
} 

bool isInSet(double P_re, double P_im, double C_re, double C_im, int iter)
{
    double zPrev_re = P_re;
    double zPrev_im = P_im;
    double zNext_re = 0;
    double zNext_im = 0;
    double* p_zNext_re = &amp;amp;zNext_re;
    double* p_zNext_im = &amp;amp;zNext_im;
    int i;  
    for(i = 1; i &amp;lt;= iter; ++i)
    {
        sqComplex(zPrev_re, zPrev_im, p_zNext_re, p_zNext_im);
        zNext_re = zNext_re + C_re;
        zNext_im = zNext_im + C_im;
        if(zNext_re*zNext_re+zNext_im*zNext_im &amp;gt; 4)
        {
            return false;
        }
        zPrev_re = zNext_re;
        zPrev_im = zNext_im;
    }
    return true;
}

bool isMandelbrot(double P_re, double P_im, int iter)
{
    return isInSet(0, 0, P_re, P_im, iter);
}
void fractal(int iter)
{
    int noIterations = iter;
    double xMin = -1.8;
    double xMax = 1.6;
    double yMin = -1.3;
    double yMax = 0.8;
    int xDim = 512;
    int yDim = 384;
    double P_re, P_im;
    int nop;
    int x, y;

    for(x = 0; x &amp;lt; xDim; ++x)
        for(y = 0; y &amp;lt; yDim; ++y)
        {
            P_re = (double)x*(xMax-xMin)/(double)xDim+xMin;
            P_im = (double)y*(yMax-yMin)/(double)yDim+yMin;
            if(isMandelbrot(P_re, P_im, noIterations))
                nop = x+y;
        }
        printf(&quot;%d&quot;, nop);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;12&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;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;-fPIC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 파일을 작성할 때 플래그를 지정합니다(댓글 중 하나에 해당).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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에서 is Mandelbrot 함수를 호출하는 Lua 코드와 비교하고 싶었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 lua에서 그것을 부르기 위해 공유 객체를 만들었고 - 그리고 큰 시간 차이가 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 왜 그들이 여러 번 반복되면서 성장하는지 이해할 수 없었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결국 그것이 그 때문이라는 것을 알게 되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-fPIC&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;. 내 루아 스크립트라고 하는 작은 C 프로그램을 만들 때 (그래서 효과적으로 같은 작업을 수행합니다.) - 시간은 C와 매우 비슷합니다 (그렇지 않으면).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-fPIC&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;code&gt;-fPIC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속도를 줄이게 될 겁니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 당신이 다음과 같은 것 없이 컴파일할 때.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-fPIC&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;multiplyComplex&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;sqComplex&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;isInSet&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;isMandelbrot&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;-fPIC&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;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러가 헬퍼 함수를 자동으로 인라인할 수 없는 이유는 기호 인터페이싱과 관련이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 전역 데이터에 간접적으로 액세스하려면, 즉 전역 오프셋 테이블을 통해 위치에 독립적인 코드가 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;절차 연결 테이블을 거쳐야 하는 함수 호출에도 동일한 제약 조건이 적용됩니다.&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;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;-fPIC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 범위가 한 다른 할 수 할 수  즉, ,&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 컴파일러는 검색 범위가 실행 파일 자체에서 시작하여 사전 로드된 라이브러리를 포함한 다른 모든 라이브러리가 뒤따르기 때문에 실행 파일에 정의된 전역 기호를 삽입할 수 없다고 안전하게 가정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보다 자세한 이해를 위해서는 다음 &lt;a href=&quot;http://www.akkadia.org/drepper/dsohowto.pdf&quot; rel=&quot;noreferrer&quot; papago-id=&quot;28-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;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;-fPIC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 GCC가 인라인 및 클로닝과 같은 많은 최적화를 비활성화하도록 강제합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 극복하기 위한 몇 가지 방법을 지적하고자 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;교체하다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-fPIC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-fPIE&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;/li&gt; 
 &lt;li&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;-fvisibility=hidden&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;__attribute__((visibility(&quot;default&quot;)))&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라이브러리에서 필요한 기능만 내보내고 나머지 기능은 숨깁니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이를 통해 GCC는 숨겨진 기능을 보다 적극적으로 최적화할 수 있습니다.&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;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;__attribute__((alias (&quot;__f&quot;)));&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;) 도서관 내에서 도서관 기능을 언급하는 것; 이것은 다시 GCC의 손을 풀어줄 것입니다.&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;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;-fno-semantic-interposition&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;최근 GCC 버전에 추가된 플래그&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 Clang  GCC 롭습니다에 롭습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그것은 그것이 기본적으로 모든 최적화를 허용하기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-fPIC&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;-fsemantic-interposition&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;GCC와 유사한 동작을 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사람들이 당신의 오프닝 게시글의 댓글란에서 논의한 것과 같이, 다음과 같이 편집합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-flto&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;gcc의 링크 시간 최적화는 몇 가지 함수를 줄이면 실제로 괜찮다는 것을 알 수 있기 때문에, 이 특정한 경우에 볼 수 있는 실행 시간의 차이를 줄이는 데 도움이 될 것입니다;&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;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 링크 시간 최적화는 &lt;a href=&quot;https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36912.pdf&quot; papago-id=&quot;35-1&quot; rel=&quot;nofollow&quot; title=&quot;링크 시간 옵션의 용지에 링크&quot; papago-attr-id=&quot;1&quot;&gt;코드&lt;/a&gt; 크기를 크게 줄일 수 있으며(~6%), &lt;a href=&quot;https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36912.pdf&quot; papago-id=&quot;35-1&quot; rel=&quot;nofollow&quot; title=&quot;링크 시간 옵션의 용지에 링크&quot; papago-attr-id=&quot;2&quot;&gt;골드의 링크&lt;/a&gt; 시간 &lt;a href=&quot;https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36912.pdf&quot; papago-id=&quot;35-1&quot; rel=&quot;nofollow&quot; title=&quot;링크 시간 옵션의 용지에 링크&quot; papago-attr-id=&quot;3&quot;&gt;최적화에 대한 문서에 링크&lt;/a&gt;를 연결하여 실행 시간도 줄일 수 있습니다(프로그램이 캐시에 더 많이 들어감).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고할 점은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-fPIC&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;a href=&quot;https://gcc.gnu.org/ml/gcc/2012-11/msg00205.html&quot; rel=&quot;nofollow&quot; title=&quot;gcc 메일링 리스트의 안드로이드 메시지&quot; papago-id=&quot;36-1&quot; papago-attr-id=&quot;4&quot;&gt;안드로이드에서는 항상 활성화&lt;/a&gt;됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/14990461/why-does-arm-linux-androideabi-gcc-enforce-fpic&quot; papago-id=&quot;36-3&quot; title=&quot;SO 링크&quot; papago-attr-id=&quot;5&quot;&gt;SO에 대한&lt;/a&gt; 이 &lt;a href=&quot;https://stackoverflow.com/questions/14990461/why-does-arm-linux-androideabi-gcc-enforce-fpic&quot; papago-id=&quot;36-3&quot; title=&quot;SO 링크&quot; papago-attr-id=&quot;6&quot;&gt;질문&lt;/a&gt;도 간략하게 설명합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한, 알려 드리자면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-fpic&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;-fPIC&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;-fPIC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해라&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-fpic&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;a href=&quot;https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;40-1&quot;&gt;gcc 문서에 링크&lt;/a&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;x86의 경우에는 차이가 없겠지만, 직접 확인해보거나 gcc-help에 문의해보셔야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/15861759/how-much-overhead-can-the-fpic-flag-add&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/685</guid>
      <comments>https://javamemo.tistory.com/685#entry685comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:40:08 +0900</pubDate>
    </item>
    <item>
      <title>타겟팅 위치: 현재 '고임' 상태인 끈적거리는 요소</title>
      <link>https://javamemo.tistory.com/684</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타겟팅 위치: 현재 '고임' 상태인 끈적거리는 요소&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://updates.html5rocks.com/2012/08/Stick-your-landings-position-sticky-lands-in-WebKit&quot; papago-id=&quot;1-0&quot;&gt;position: sticky&lt;/a&gt;는 현재 일부 모바일 브라우저에서 작동하므로 페이지로 메뉴 바를 스크롤할 수 있지만 사용자가 스크롤할 때마다 뷰포트 상단에 붙어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 만약 여러분이 끈적거리는 메뉴바가 현재 '붙을' 때마다 약간의 스타일을 바꾸고 싶다면 어떻게 해야 할까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 페이지를 스크롤할 때마다 막대에 둥근 모서리가 있기를 원할 수도 있지만, 뷰포트 상단에 붙자마자 맨 위의 둥근 모서리를 없애고 그 아래에 약간의 그림자를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;::stuck&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;position: sticky&lt;/code&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 &lt;strong papago-id=&quot;5-0&quot;&gt;현재&lt;/strong&gt; 고착되어 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 브라우저 공급업체가 이와 같은 것을 파이프라인에 가지고 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 그렇지 않다면 어디에 요청해야 합니까?&lt;/font&gt;&lt;/font&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;NB. javascript 솔루션은 모바일에서 보통 단 하나만 얻을 수 있기 때문에 이것에 좋지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scroll&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;사용자가 손가락을 놓으면 스크롤 임계값이 통과된 정확한 순간을 JS가 알 수 없습니다.&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&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://dev.w3.org/csswg/css-position&quot; papago-id=&quot;8-1&quot;&gt;Positioned Layout 모듈&lt;/a&gt;은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;position: sticky&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정의되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이러한 선택기에 대해서도 언급하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS에 대한 기능 요청은 &lt;a href=&quot;http://lists.w3.org/Archives/Public/www-style&quot; papago-id=&quot;10-1&quot;&gt;www&lt;/a&gt; 스타일 &lt;a href=&quot;http://lists.w3.org/Archives/Public/www-style&quot; papago-id=&quot;10-1&quot;&gt;메일링 리스트&lt;/a&gt;에 게시할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 A라고 믿습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;:stuck&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;사이비 클래스는 a보다 더 말이 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;::stuck&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;사이비 element입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;:stuck&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;a href=&quot;http://lists.w3.org/Archives/Public/www-style/2013Aug/0574.html&quot; papago-id=&quot;13-1&quot;&gt;얼마 전&lt;/a&gt;에 논의되었습니다. 주된 합병증은 렌더링된 또는 계산된 스타일에 기반하여 일치를 시도하는 제안된 선택기에 대한 것으로 발견되었습니다. 즉 원형 의존성입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;:stuck&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;의사 클래스, 순환성의 가장 간단한 경우는 다음과 같은 CSS로 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;:stuck { position: static; /* Or anything other than sticky/fixed */ }
:not(:stuck) { position: sticky; /* Or fixed */ }
&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;em papago-id=&quot;17-1&quot;&gt;좋다는&lt;/em&gt; 것에는 동의하지만, 불행하게도 이러한 사소한 구현을 가능하게 하는 주요 제한 사항이 존재합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 문제에 대한 순수한 CSS 해결책에 대해 조만간 숨을 죽이고 싶지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 경우에는 단순한.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;IntersectionObserver&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상황이 적절한 플러시가 아닌 루트 컨테이너 외부의 픽셀 또는 두 개에 달라붙을 수 있는 경우, 를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장자리 바로 너머에 앉으면 관찰자가 총을 쏘고 우리는 도망갑니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const observer = new IntersectionObserver( 
  ([e]) =&amp;gt; e.target.toggleAttribute('stuck', e.intersectionRatio &amp;lt; 1),
  {threshold: [1]}
);

observer.observe(document.querySelector('nav'));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소를 용기 밖으로 바로 집어넣습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;top: -2px&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그 다음에 목표물은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;stuck&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성...&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;nav {
  background: magenta;
  height: 80px;
  position: sticky;
  top: -2px;
}
nav[stuck] {
  box-shadow: 0 0 16px black;
}
&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;예: https://codepen.io/anon/pen/vqyQEK&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;저는 '고착된' 요소를 스타일링 할 수 있는 순수한 CSS 솔루션을 원했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;::stuck&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유사 selector이 존재합니다(아, 2021년에는 여전히 존재하지 않습니다).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 JS 없이도 효과를 얻고 제 요구에 맞는 순수한 CSS 해킹을 만들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 두 개의 요소 복사를 통해 작동합니다. 하나는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sticky&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 하나는 그렇지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;unstuck&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1), 그리고 이 후자는 그것을 덮고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sticky&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;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데모: https://codepen.io/TomAnthony/pen/qBqgErK&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;대체 데모: https://codepen.io/TomAnthony/pen/mdOvJYw (이 버전은 제가 원했던 것입니다. 저는 끈적거리는 항목이 'stuck'일 때만 나타나기를 원했습니다. 중복 콘텐츠가 없다는 것을 의미하기도 합니다.)&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;HTML:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;sticky&quot;&amp;gt;
    &amp;lt;div class=&quot;unstuck&quot;&amp;gt;
        &amp;lt;div&amp;gt;
        Box header. Italic when 'stuck'.
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;stuck&quot;&amp;gt;
        &amp;lt;div&amp;gt;
        Box header. Italic when 'stuck'.
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;.sticky {
    height: 20px;
    display: inline;
    background-color: pink;
}

.stuck {
    position: -webkit-sticky;
    position: sticky;
    top: 0;
    height: 20px;
    font-style: italic;
}

.unstuck {
    height: 0;
    overflow-y: visible;
    position: relative;
    z-index: 1;
}

.unstuck &amp;gt; div {
    position: absolute;
    width: 100%;
    height: 20px;
    background-color: inherit;
}
&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;a href=&quot;https://developers.google.com/web/updates/2017/09/sticky-headers&quot; rel=&quot;noreferrer&quot; papago-id=&quot;34-0&quot;&gt;구글 개발자 블로그의 누군가&lt;/a&gt;가 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver&quot; rel=&quot;noreferrer&quot; papago-id=&quot;34-2&quot;&gt;IntersectionObserver&lt;/a&gt;로 실행 가능한 자바스크립트 기반 솔루션을 찾았다고 주장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;관련 코드 비트:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/**
 * Sets up an intersection observer to notify when elements with the class
 * `.sticky_sentinel--top` become visible/invisible at the top of the container.
 * @param {!Element} container
 */
function observeHeaders(container) {
  const observer = new IntersectionObserver((records, observer) =&amp;gt; {
    for (const record of records) {
      const targetInfo = record.boundingClientRect;
      const stickyTarget = record.target.parentElement.querySelector('.sticky');
      const rootBoundsInfo = record.rootBounds;

      // Started sticking.
      if (targetInfo.bottom &amp;lt; rootBoundsInfo.top) {
        fireEvent(true, stickyTarget);
      }

      // Stopped sticking.
      if (targetInfo.bottom &amp;gt;= rootBoundsInfo.top &amp;amp;&amp;amp;
          targetInfo.bottom &amp;lt; rootBoundsInfo.bottom) {
       fireEvent(false, stickyTarget);
      }
    }
  }, {threshold: [0], root: container});

  // Add the top sentinels to each section and attach an observer.
  const sentinels = addSentinels(container, 'sticky_sentinel--top');
  sentinels.forEach(el =&amp;gt; observer.observe(el));
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 직접 복제를 해본 적은 없지만, 이 문제로 인해 비틀거리는 사람에게 도움이 될 수도 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스타일링을 위해 js 핵을 사용하는 것을 별로 좋아하지 않지만(예: BoudingClientRect 가져오기, 스크롤 듣기, 듣기 크기 조정), 이것이 현재 문제를 해결하는 방법입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 솔루션은 최소화/최대화 가능한 내용(&amp;lt;details&amp;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 lowestKnownOffset: number = -1;
window.addEventListener(&quot;resize&quot;, () =&amp;gt; lowestKnownOffset = -1);

const $Title = document.getElementById(&quot;Title&quot;);
let requestedFrame: number;
window.addEventListener(&quot;scroll&quot;, (event) =&amp;gt; {
    if (requestedFrame) { return; }
    requestedFrame = requestAnimationFrame(() =&amp;gt; {
        // if it's sticky to top, the offset will bottom out at its natural page offset
        if (lowestKnownOffset === -1) { lowestKnownOffset = $Title.offsetTop; }
        lowestKnownOffset = Math.min(lowestKnownOffset, $Title.offsetTop);
        // this condition assumes that $Title is the only sticky element and it sticks at top: 0px
        // if there are multiple elements, this can be updated to choose whichever one it furthest down on the page as the sticky one
        if (window.scrollY &amp;gt;= lowestKnownOffset) {
            $Title.classList.add(&quot;--stuck&quot;);
        } else {
            $Title.classList.remove(&quot;--stuck&quot;);
        }
        requestedFrame = undefined;
    });
})
&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&gt;&lt;/font&gt;&lt;code&gt;position:sticky&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성을 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;stuck&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS에서 일치시킬 수 있는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;header[stuck]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;img id=&quot;logo&quot; ...&amp;gt;
&amp;lt;div&amp;gt;
  &amp;lt;header style=&quot;position: sticky&quot;&amp;gt;
    ...
  &amp;lt;/header&amp;gt;
  ...
&amp;lt;/div&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;JS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (typeof IntersectionObserver !== 'function') {
  // sorry, IE https://caniuse.com/#feat=intersectionobserver
  return
}

new IntersectionObserver(
  function (entries, observer) {
    for (var _i = 0; _i &amp;lt; entries.length; _i++) {
      var stickyHeader = entries[_i].target.nextSibling
      stickyHeader.toggleAttribute('stuck', !entries[_i].isIntersecting)
    }
  },
  {}
).observe(document.getElementById('logo'))
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/25308823/targeting-positionsticky-elements-that-are-currently-in-a-stuck-state&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>CSS</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/684</guid>
      <comments>https://javamemo.tistory.com/684#entry684comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:39:59 +0900</pubDate>
    </item>
    <item>
      <title>Cannot display HTML string</title>
      <link>https://javamemo.tistory.com/683</link>
      <description>&lt;h2 papago-id=&quot;0&quot;&gt;Cannot display HTML string&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot;&gt;I am struggling with display string HTML in Android WebView.&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot;&gt;On the server side, I downloaded a web page and escape HTML characters and quotes (I used Python):&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;my_string = html.escape(my_string, True)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot;&gt;On the Android client side: strings are unescaped by:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;myString = StringEscapeUtils.unescapeHtml4(myString)
webview.loadData( myString, &quot;text/html&quot;, &quot;encoding&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot;&gt;However webview just display them as literal strings. Here are the result:&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/SQU8f.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot;&gt;Edit: I add original string returned from server side:&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;6&quot;&gt;&quot;&amp;amp;lt;!DOCTYPE html&amp;amp;gt; &amp;amp;lt;html lang=&amp;amp;quot;en&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;head&amp;amp;gt; &amp;amp;lt;meta charset=&amp;amp;quot;utf-8&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;meta http-equiv=&amp;amp;quot;X-UA-Compatible&amp;amp;quot; content=&amp;amp;quot;IE=edge&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;meta name=&amp;amp;quot;viewport&amp;amp;quot; content=&amp;amp;quot;width=device-width, initial-scale=1.0&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;meta name=&amp;amp;quot;description&amp;amp;quot; content=&amp;amp;quot;&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;title&amp;amp;gt;Saulify&amp;amp;lt;/title&amp;amp;gt; &amp;amp;lt;!-- All the Favicons... --&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;shortcut icon&amp;amp;quot; href=&amp;amp;quot;/static/favicon/favicon.ico&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;57x57&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-57x57.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;114x114&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-114x114.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;72x72&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-72x72.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;144x144&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-144x144.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;60x60&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-60x60.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;120x120&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-120x120.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;76x76&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-76x76.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;152x152&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-152x152.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;180x180&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-180x180.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;icon&amp;amp;quot; type=&amp;amp;quot;image/png&amp;amp;quot; href=&amp;amp;quot;/static/favicon/favicon-192x192.png&amp;amp;quot; sizes=&amp;amp;quot;192x192&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;icon&amp;amp;quot; type=&amp;amp;quot;image/png&amp;amp;quot; href=&amp;amp;quot;/static/favicon/favicon-160x160.png&amp;amp;quot; sizes=&amp;amp;quot;160x160&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;icon&amp;amp;quot; type=&amp;amp;quot;image/png&amp;amp;quot; href=&amp;amp;quot;/static/favicon/favicon-96x96.png&amp;amp;quot; sizes=&amp;amp;quot;96x96&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;icon&amp;amp;quot; type=&amp;amp;quot;image/png&amp;amp;quot; href=&amp;amp;quot;/static/favicon/favicon-16x16.png&amp;amp;quot; sizes=&amp;amp;quot;16x16&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;icon&amp;amp;quot; type=&amp;amp;quot;image/png&amp;amp;quot; href=&amp;amp;quot;/static/favicon/favicon-32x32.png&amp;amp;quot; sizes=&amp;amp;quot;32x32&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;meta name=&amp;amp;quot;msapplication-TileColor&amp;amp;quot; content=&amp;amp;quot;#da532c&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;meta name=&amp;amp;quot;msapplication-TileImage&amp;amp;quot; content=&amp;amp;quot;/static/favicon/mstile-144x144.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;meta name=&amp;amp;quot;msapplication-config&amp;amp;quot; content=&amp;amp;quot;/static/favicon/browserconfig.xml&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;!-- External CSS --&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;stylesheet&amp;amp;quot; href=&amp;amp;quot;&lt;a href=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-1&quot;&gt;https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css&lt;/a&gt;&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;!-- External Fonts --&amp;amp;gt; &amp;amp;lt;link href=&amp;amp;quot;//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css&amp;amp;quot; rel=&amp;amp;quot;stylesheet&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link href=&amp;amp;#x27;//fonts.googleapis.com/css?family=Open+Sans:300,600&amp;amp;#x27; rel=&amp;amp;#x27;stylesheet&amp;amp;#x27; type=&amp;amp;#x27;text/css&amp;amp;#x27;&amp;amp;gt; &amp;amp;lt;link href=&amp;amp;#x27;//fonts.googleapis.com/css?family=Lora:400,700&amp;amp;#x27; rel=&amp;amp;#x27;stylesheet&amp;amp;#x27; type=&amp;amp;#x27;text/css&amp;amp;#x27;&amp;amp;gt; &amp;amp;lt;!--[if lt IE 9]&amp;amp;gt; &amp;amp;lt;script src=&amp;amp;quot;//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt; &amp;amp;lt;script src=&amp;amp;quot;//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt; &amp;amp;lt;![endif]--&amp;amp;gt; &amp;amp;lt;!-- Site CSS --&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;stylesheet&amp;amp;quot; type=&amp;amp;quot;text/css&amp;amp;quot; href=&amp;amp;quot;/static/css/style.css&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;stylesheet&amp;amp;quot; type=&amp;amp;quot;text/css&amp;amp;quot; href=&amp;amp;quot;/static/css/glyphicon.css&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;/head&amp;amp;gt; &amp;amp;lt;body&amp;amp;gt; &amp;amp;lt;div class=&amp;amp;quot;container article-page&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;div class=&amp;amp;quot;row&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;div class=&amp;amp;quot;col-md-8 col-md-offset-2&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;h2&amp;amp;gt;&amp;amp;lt;a href=&amp;amp;quot;&lt;a href=&quot;http://www.huffingtonpost.com/2015/03/22/ted-cruz-climate-change_n_6919002.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-3&quot;&gt;http://www.huffingtonpost.com/2015/03/22/ted-cruz-climate-change_n_6919002.html&lt;/a&gt;&amp;amp;quot;&amp;amp;gt;Gov. Jerry Brown Says Ted Cruz Is &amp;amp;amp;#39;Absolutely Unfit&amp;amp;amp;#39; To Run For Office Because Of Climate Change Views&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;/h2&amp;amp;gt; &amp;amp;lt;h4&amp;amp;gt;Sam Levine&amp;amp;lt;/h4&amp;amp;gt; &amp;amp;lt;div class=&amp;amp;quot;article&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;p&amp;amp;gt;California Gov. Jerry Brown (D) said on Sunday that Texas Sen. Ted Cruz (R-Texas) is &amp;amp;quot;absolutely unfit to be running for office&amp;amp;quot; because of his position on climate change.&amp;amp;lt;/p&amp;amp;gt; &amp;amp;lt;p&amp;amp;gt;&amp;amp;quot;I just came back from New Hampshire, where there&amp;amp;#x27;s snow and ice everywhere. My view on this is simple: Debates on this should follow science and should follow data, and many of the alarmists on global warming, they have a problem because the science doesn&amp;amp;#x27;t back them up,&amp;amp;quot; Cruz &amp;amp;lt;a href=&amp;amp;quot;&lt;a href=&quot;https://www.youtube.com/watch?v=m0UJ_Sc0Udk&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-5&quot;&gt;https://www.youtube.com/watch?v=m0UJ_Sc0Udk&lt;/a&gt;&amp;amp;quot;&amp;amp;gt;said&amp;amp;lt;/a&amp;amp;gt; on &amp;amp;quot;Late Night with Seth Meyers&amp;amp;quot; last week.&amp;amp;lt;/p&amp;amp;gt; &amp;amp;lt;p&amp;amp;gt;To back up his claim, Cruz cited satellite data that has shown a lack of significant warming over the last 17 years. But Cruz&amp;amp;#x27;s reasoning &amp;amp;lt;a href=&amp;amp;quot;&lt;a href=&quot;http://www.politifact.com/truth-o-meter/statements/2015/mar/20&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-7&quot;&gt;http://www.politifact.com/truth-o-meter/statements/2015/mar/20&lt;/a&gt; /ted-cruz/ted-cruzs-worlds-fire-not-last-17-years/&amp;amp;quot;&amp;amp;gt;has been debunked by Politifact&amp;amp;lt;/a&amp;amp;gt;, which has shown that scientists have ample evidence to believe that the climate will continue to warm.&amp;amp;lt;/p&amp;amp;gt; &amp;amp;lt;p&amp;amp;gt;&amp;amp;quot;What he said is absolutely false,” Brown said on &amp;amp;lt;a href=&amp;amp;quot;&lt;a href=&quot;http://www.nbcnews.com/meet-the-press/california-governor-ted-cruz-&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-9&quot;&gt;http://www.nbcnews.com/meet-the-press/california-governor-ted-cruz-&lt;/a&gt; unfit-be-running-n328046&amp;amp;quot;&amp;amp;gt;NBC&amp;amp;#x27;s &amp;amp;quot;Meet the Press.&amp;amp;quot;&amp;amp;lt;/a&amp;amp;gt; He added that &amp;amp;lt;a href=&amp;amp;quot;&lt;a href=&quot;http://climate.nasa.gov/scientific-consensus/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-11&quot;&gt;http://climate.nasa.gov/scientific-consensus/&lt;/a&gt;&amp;amp;quot;&amp;amp;gt;over 90 percent&amp;amp;lt;/a&amp;amp;gt; of scientists who study the climate agree that climate change is caused by human activity. &amp;amp;quot;That man betokens such a level of ignorance and a direct falsification of existing scientific data. It&amp;amp;#x27;s shocking, and I think that man has rendered himself absolutely unfit to be running for office,&amp;amp;quot; Brown said.&amp;amp;lt;/p&amp;amp;gt; &amp;amp;lt;p&amp;amp;gt;Brown added that climate change has &amp;amp;lt;a href=&amp;amp;quot;&lt;a href=&quot;http://www.huffingtonpost.com/2015/03/06/california-drought-february-&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-13&quot;&gt;http://www.huffingtonpost.com/2015/03/06/california-drought-february-&lt;/a&gt; record_n_6820704.html?utm_hp_ref=california-drought&amp;amp;quot;&amp;amp;gt;caused droughts in his state&amp;amp;lt;/a&amp;amp;gt;, as well as severe cold and storms on the east coast.&amp;amp;lt;/p&amp;amp;gt; &amp;amp;lt;p&amp;amp;gt;While Cruz may have seen snow and ice everywhere in New Hampshire, data shows that the country is actually experiencing a &amp;amp;lt;a href=&amp;amp;quot;&lt;a href=&quot;http://www.huffingtonpost.com/2015/02/19/cold-weather-&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-15&quot;&gt;http://www.huffingtonpost.com/2015/02/19/cold-weather-&lt;/a&gt; winter_n_6713104.html&amp;amp;quot;&amp;amp;gt;warmer than average&amp;amp;lt;/a&amp;amp;gt; winter.&amp;amp;lt;/p&amp;amp;gt; &amp;amp;lt;p&amp;amp;gt;Brown’s criticism of Cruz comes one day before the Texas senator is set to announce a &amp;amp;lt;a href=&amp;amp;quot;&lt;a href=&quot;http://www.huffingtonpost.com/2015/03/22&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-17&quot;&gt;http://www.huffingtonpost.com/2015/03/22&lt;/a&gt; /ted-cruz-2016_n_6917824.html&amp;amp;quot;&amp;amp;gt;presidential campaign&amp;amp;lt;/a&amp;amp;gt;. &amp;amp;lt;/p&amp;amp;gt; &amp;amp;lt;/div&amp;amp;gt; &amp;amp;lt;div class=&amp;amp;quot;original&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;a href=&amp;amp;quot;&lt;a href=&quot;http://www.huffingtonpost.com/2015/03/22/ted-cruz-climate-change_n_6919002.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-19&quot;&gt;http://www.huffingtonpost.com/2015/03/22/ted-cruz-climate-change_n_6919002.html&lt;/a&gt;&amp;amp;quot;&amp;amp;gt;VIEW ORIGINAL&amp;amp;lt;/a&amp;amp;gt; &amp;amp;lt;/div&amp;amp;gt; &amp;amp;lt;/div&amp;amp;gt; &amp;amp;lt;/div&amp;amp;gt; &amp;amp;lt;/div&amp;amp;gt; &amp;amp;lt;script src=&amp;amp;quot;//code.jquery.com/jquery-latest.js&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt; &amp;amp;lt;script src=&amp;amp;quot;/static/js/modal.js&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt; &amp;amp;lt;script src=&amp;amp;quot;/static/js/bootbox.min.js&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt; &amp;amp;lt;script src=&amp;amp;quot;/static/js/site.js&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt; &amp;amp;lt;script&amp;amp;gt; (function(i,s,o,g,r,a,m){i[&amp;amp;#x27;GoogleAnalyticsObject&amp;amp;#x27;]=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,&amp;amp;#x27;script&amp;amp;#x27;,&amp;amp;#x27;//www.google-analytics.com/analytics.js&amp;amp;#x27;,&amp;amp;#x27;ga&amp;amp;#x27;); ga(&amp;amp;#x27;create&amp;amp;#x27;, &amp;amp;#x27;UA-56257533-1&amp;amp;#x27;, &amp;amp;#x27;auto&amp;amp;#x27;); ga(&amp;amp;#x27;send&amp;amp;#x27;, &amp;amp;#x27;pageview&amp;amp;#x27;); &amp;amp;lt;/script&amp;amp;gt; &amp;amp;lt;/body&amp;amp;gt; &amp;amp;lt;/html&amp;amp;gt;&quot;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 코드를 수정했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class test extends Activity {
    private WebView wv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
        wv = (WebView) findViewById(R.id.wv);
        String s = &quot;&amp;amp;lt;!DOCTYPE html&amp;amp;gt; &amp;amp;lt;html lang=&amp;amp;quot;en&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;head&amp;amp;gt; &amp;amp;lt;meta charset=&amp;amp;quot;utf-8&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;meta http-equiv=&amp;amp;quot;X-UA-Compatible&amp;amp;quot; content=&amp;amp;quot;IE=edge&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;meta name=&amp;amp;quot;viewport&amp;amp;quot; content=&amp;amp;quot;width=device-width, initial-scale=1.0&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;meta name=&amp;amp;quot;description&amp;amp;quot; content=&amp;amp;quot;&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;title&amp;amp;gt;Saulify&amp;amp;lt;/title&amp;amp;gt; &amp;amp;lt;!-- All the Favicons... --&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;shortcut icon&amp;amp;quot; href=&amp;amp;quot;/static/favicon/favicon.ico&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;57x57&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-57x57.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;114x114&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-114x114.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;72x72&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-72x72.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;144x144&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-144x144.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;60x60&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-60x60.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;120x120&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-120x120.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;76x76&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-76x76.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;152x152&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-152x152.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;apple-touch-icon&amp;amp;quot; sizes=&amp;amp;quot;180x180&amp;amp;quot; href=&amp;amp;quot;/static/favicon/apple-touch-icon-180x180.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;icon&amp;amp;quot; type=&amp;amp;quot;image/png&amp;amp;quot; href=&amp;amp;quot;/static/favicon/favicon-192x192.png&amp;amp;quot; sizes=&amp;amp;quot;192x192&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;icon&amp;amp;quot; type=&amp;amp;quot;image/png&amp;amp;quot; href=&amp;amp;quot;/static/favicon/favicon-160x160.png&amp;amp;quot; sizes=&amp;amp;quot;160x160&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;icon&amp;amp;quot; type=&amp;amp;quot;image/png&amp;amp;quot; href=&amp;amp;quot;/static/favicon/favicon-96x96.png&amp;amp;quot; sizes=&amp;amp;quot;96x96&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;icon&amp;amp;quot; type=&amp;amp;quot;image/png&amp;amp;quot; href=&amp;amp;quot;/static/favicon/favicon-16x16.png&amp;amp;quot; sizes=&amp;amp;quot;16x16&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;icon&amp;amp;quot; type=&amp;amp;quot;image/png&amp;amp;quot; href=&amp;amp;quot;/static/favicon/favicon-32x32.png&amp;amp;quot; sizes=&amp;amp;quot;32x32&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;meta name=&amp;amp;quot;msapplication-TileColor&amp;amp;quot; content=&amp;amp;quot;#da532c&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;meta name=&amp;amp;quot;msapplication-TileImage&amp;amp;quot; content=&amp;amp;quot;/static/favicon/mstile-144x144.png&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;meta name=&amp;amp;quot;msapplication-config&amp;amp;quot; content=&amp;amp;quot;/static/favicon/browserconfig.xml&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;!-- External CSS --&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;stylesheet&amp;amp;quot; href=&amp;amp;quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;!-- External Fonts --&amp;amp;gt; &amp;amp;lt;link href=&amp;amp;quot;//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css&amp;amp;quot; rel=&amp;amp;quot;stylesheet&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link href=&amp;amp;#x27;//fonts.googleapis.com/css?family=Open+Sans:300,600&amp;amp;#x27; rel=&amp;amp;#x27;stylesheet&amp;amp;#x27; type=&amp;amp;#x27;text/css&amp;amp;#x27;&amp;amp;gt; &amp;amp;lt;link href=&amp;amp;#x27;//fonts.googleapis.com/css?family=Lora:400,700&amp;amp;#x27; rel=&amp;amp;#x27;stylesheet&amp;amp;#x27; type=&amp;amp;#x27;text/css&amp;amp;#x27;&amp;amp;gt; &amp;amp;lt;!--[if lt IE 9]&amp;amp;gt; &amp;amp;lt;script src=&amp;amp;quot;//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt; &amp;amp;lt;script src=&amp;amp;quot;//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt; &amp;amp;lt;![endif]--&amp;amp;gt; &amp;amp;lt;!-- Site CSS --&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;stylesheet&amp;amp;quot; type=&amp;amp;quot;text/css&amp;amp;quot; href=&amp;amp;quot;/static/css/style.css&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;link rel=&amp;amp;quot;stylesheet&amp;amp;quot; type=&amp;amp;quot;text/css&amp;amp;quot; href=&amp;amp;quot;/static/css/glyphicon.css&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;/head&amp;amp;gt; &amp;amp;lt;body&amp;amp;gt; &amp;amp;lt;div class=&amp;amp;quot;container article-page&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;div class=&amp;amp;quot;row&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;div class=&amp;amp;quot;col-md-8 col-md-offset-2&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;h2&amp;amp;gt;&amp;amp;lt;a href=&amp;amp;quot;http://www.huffingtonpost.com/2015/03/22/ted-cruz-climate-change_n_6919002.html&amp;amp;quot;&amp;amp;gt;Gov. Jerry Brown Says Ted Cruz Is &amp;amp;amp;#39;Absolutely Unfit&amp;amp;amp;#39; To Run For Office Because Of Climate Change Views&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;/h2&amp;amp;gt; &amp;amp;lt;h4&amp;amp;gt;Sam Levine&amp;amp;lt;/h4&amp;amp;gt; &amp;amp;lt;div class=&amp;amp;quot;article&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;p&amp;amp;gt;California Gov. Jerry Brown (D) said on Sunday that Texas Sen. Ted Cruz (R-Texas) is &amp;amp;quot;absolutely unfit to be running for office&amp;amp;quot; because of his position on climate change.&amp;amp;lt;/p&amp;amp;gt; &amp;amp;lt;p&amp;amp;gt;&amp;amp;quot;I just came back from New Hampshire, where there&amp;amp;#x27;s snow and ice everywhere. My view on this is simple: Debates on this should follow science and should follow data, and many of the alarmists on global warming, they have a problem because the science doesn&amp;amp;#x27;t back them up,&amp;amp;quot; Cruz &amp;amp;lt;a href=&amp;amp;quot;https://www.youtube.com/watch?v=m0UJ_Sc0Udk&amp;amp;quot;&amp;amp;gt;said&amp;amp;lt;/a&amp;amp;gt; on &amp;amp;quot;Late Night with Seth Meyers&amp;amp;quot; last week.&amp;amp;lt;/p&amp;amp;gt; &amp;amp;lt;p&amp;amp;gt;To back up his claim, Cruz cited satellite data that has shown a lack of significant warming over the last 17 years. But Cruz&amp;amp;#x27;s reasoning &amp;amp;lt;a href=&amp;amp;quot;http://www.politifact.com/truth-o-meter/statements/2015/mar/20 /ted-cruz/ted-cruzs-worlds-fire-not-last-17-years/&amp;amp;quot;&amp;amp;gt;has been debunked by Politifact&amp;amp;lt;/a&amp;amp;gt;, which has shown that scientists have ample evidence to believe that the climate will continue to warm.&amp;amp;lt;/p&amp;amp;gt; &amp;amp;lt;p&amp;amp;gt;&amp;amp;quot;What he said is absolutely false,” Brown said on &amp;amp;lt;a href=&amp;amp;quot;http://www.nbcnews.com/meet-the-press/california-governor-ted-cruz- unfit-be-running-n328046&amp;amp;quot;&amp;amp;gt;NBC&amp;amp;#x27;s &amp;amp;quot;Meet the Press.&amp;amp;quot;&amp;amp;lt;/a&amp;amp;gt; He added that &amp;amp;lt;a href=&amp;amp;quot;http://climate.nasa.gov/scientific-consensus/&amp;amp;quot;&amp;amp;gt;over 90 percent&amp;amp;lt;/a&amp;amp;gt; of scientists who study the climate agree that climate change is caused by human activity. &amp;amp;quot;That man betokens such a level of ignorance and a direct falsification of existing scientific data. It&amp;amp;#x27;s shocking, and I think that man has rendered himself absolutely unfit to be running for office,&amp;amp;quot; Brown said.&amp;amp;lt;/p&amp;amp;gt; &amp;amp;lt;p&amp;amp;gt;Brown added that climate change has &amp;amp;lt;a href=&amp;amp;quot;http://www.huffingtonpost.com/2015/03/06/california-drought-february- record_n_6820704.html?utm_hp_ref=california-drought&amp;amp;quot;&amp;amp;gt;caused droughts in his state&amp;amp;lt;/a&amp;amp;gt;, as well as severe cold and storms on the east coast.&amp;amp;lt;/p&amp;amp;gt; &amp;amp;lt;p&amp;amp;gt;While Cruz may have seen snow and ice everywhere in New Hampshire, data shows that the country is actually experiencing a &amp;amp;lt;a href=&amp;amp;quot;http://www.huffingtonpost.com/2015/02/19/cold-weather- winter_n_6713104.html&amp;amp;quot;&amp;amp;gt;warmer than average&amp;amp;lt;/a&amp;amp;gt; winter.&amp;amp;lt;/p&amp;amp;gt; &amp;amp;lt;p&amp;amp;gt;Brown’s criticism of Cruz comes one day before the Texas senator is set to announce a &amp;amp;lt;a href=&amp;amp;quot;http://www.huffingtonpost.com/2015/03/22 /ted-cruz-2016_n_6917824.html&amp;amp;quot;&amp;amp;gt;presidential campaign&amp;amp;lt;/a&amp;amp;gt;. &amp;amp;lt;/p&amp;amp;gt; &amp;amp;lt;/div&amp;amp;gt; &amp;amp;lt;div class=&amp;amp;quot;original&amp;amp;quot;&amp;amp;gt; &amp;amp;lt;a href=&amp;amp;quot;http://www.huffingtonpost.com/2015/03/22/ted-cruz-climate-change_n_6919002.html&amp;amp;quot;&amp;amp;gt;VIEW ORIGINAL&amp;amp;lt;/a&amp;amp;gt; &amp;amp;lt;/div&amp;amp;gt; &amp;amp;lt;/div&amp;amp;gt; &amp;amp;lt;/div&amp;amp;gt; &amp;amp;lt;/div&amp;amp;gt; &amp;amp;lt;script src=&amp;amp;quot;//code.jquery.com/jquery-latest.js&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt; &amp;amp;lt;script src=&amp;amp;quot;/static/js/modal.js&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt; &amp;amp;lt;script src=&amp;amp;quot;/static/js/bootbox.min.js&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt; &amp;amp;lt;script src=&amp;amp;quot;/static/js/site.js&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt; &amp;amp;lt;script&amp;amp;gt; (function(i,s,o,g,r,a,m){i[&amp;amp;#x27;GoogleAnalyticsObject&amp;amp;#x27;]=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,&amp;amp;#x27;script&amp;amp;#x27;,&amp;amp;#x27;//www.google-analytics.com/analytics.js&amp;amp;#x27;,&amp;amp;#x27;ga&amp;amp;#x27;); ga(&amp;amp;#x27;create&amp;amp;#x27;, &amp;amp;#x27;UA-56257533-1&amp;amp;#x27;, &amp;amp;#x27;auto&amp;amp;#x27;); ga(&amp;amp;#x27;send&amp;amp;#x27;, &amp;amp;#x27;pageview&amp;amp;#x27;); &amp;amp;lt;/script&amp;amp;gt; &amp;amp;lt;/body&amp;amp;gt; &amp;amp;lt;/html&amp;amp;gt;&quot;;


        wv.loadData(stripHtml(s), &quot;text/html&quot;, &quot;UTF-8&quot;);

    }

    public String stripHtml(String html) {
        return Html.fromHtml(html).toString();
    }

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/jt8Mr.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드를 사용해 보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (android.os.Build.VERSION.SDK_INT &amp;gt;= android.os.Build.VERSION_CODES.N){
   yourtextview.setText(Html.fromHtml(yourstring,Html.FROM_HTML_MODE_LEGACY));
}
else {
   yourtextview.setText(Html.fromHtml(yourstring));
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도해 보기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;wv = (WebView) findViewById(R.id.wv);
String s = &quot;You HTML string&quot;;
wv.loadData(stripHtml(s), &quot;text/html&quot;, &quot;UTF-8&quot;);

public String stripHtml(String html) {
    return Html.fromHtml(html).toString();
}
&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/29208984/cannot-display-html-string&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>python</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/683</guid>
      <comments>https://javamemo.tistory.com/683#entry683comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:39:50 +0900</pubDate>
    </item>
    <item>
      <title>PHP를 사용하여 MySQL 데이터베이스 내의 모든 테이블을 표시하시겠습니까?</title>
      <link>https://javamemo.tistory.com/682</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHP를 사용하여 MySQL 데이터베이스 내의 모든 테이블을 표시하시겠습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스에 있는 모든 테이블을 보여주려 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이것을 시도해 봤습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$sql = &quot;SHOW TABLES&quot;;
$result = $conn-&amp;gt;query($sql);
$tables = $result-&amp;gt;fetch_assoc();
foreach($tables as $tmp)
{
    echo &quot;$tmp &amp;lt;br&amp;gt;&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;하지만 제가 알고 있는 데이터베이스에는 테이블 이름이 2개밖에 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 뭘 잘못하고 있는 거지?&lt;/font&gt;&lt;/p&gt;&lt;h1 papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블을 구하는 방법&lt;/font&gt;&lt;/h1&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;splited&quot;&gt;1. &lt;/font&gt;&lt;code&gt;SHOW TABLES&lt;/code&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; USE test;
Database changed
mysql&amp;gt; SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
| t2             |
| t3             |
+----------------+
3 rows in set (0.00 sec)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;splited&quot;&gt;2. &lt;/font&gt;&lt;code&gt;SHOW TABLES IN db_name&lt;/code&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; SHOW TABLES IN another_db;
+----------------------+
| Tables_in_another_db |
+----------------------+
| t3                   |
| t4                   |
| t5                   |
+----------------------+
3 rows in set (0.00 sec)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3. 정보 스키마 사용&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; SELECT TABLE_NAME
       FROM information_schema.TABLES
       WHERE TABLE_SCHEMA = 'another_db';
+------------+
| TABLE_NAME |
+------------+
| t3         |
| t4         |
| t5         |
+------------+
3 rows in set (0.02 sec)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OP로&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1열만 가져오면 됩니다. 다음과 같이 수정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;while ( $tables = $result-&amp;gt;fetch_array())
{
    echo $tmp[0].&quot;&amp;lt;br&amp;gt;&quot;;
}
&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;그리고 내 생각에, 정보_schema가 더 나을 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SHOW TABLES&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT TABLE_NAME
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'your database name'

while ( $tables = $result-&amp;gt;fetch_assoc())
{
    echo $tables['TABLE_NAME'].&quot;&amp;lt;br&amp;gt;&quot;;
}
&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;SHOW TABLES FROM nameOfDatabase;
&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;SHOW TABLE_NAME이 올바르지 않습니다.&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;TD&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;SHOW TABLES는 지정된 데이터베이스의 비 임시 테이블만 나열합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/5.0/en/show-tables.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://dev.mysql.com/doc/refman/5.0/en/show-tables.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$dbname = 'mysql_dbname';
if (!mysql_connect('mysql_host', 'mysql_user', 'mysql_password')) {
echo 'Could not connect to mysql';
exit;
}
$sql = &quot;SHOW TABLES FROM $dbname&quot;;
$result = mysql_query($sql);
if (!$result) {
echo &quot;DB Error, could not list tables\n&quot;;
echo 'MySQL Error: ' . mysql_error();
exit;
}
while ($row = mysql_fetch_row($result)) {
echo &quot;Table: {$row[0]}\n&quot;;
}
mysql_free_result($result);
?&amp;gt;
//Try This code is running perfectly !!!!!!!!!!
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;hr&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/20183553/show-all-tables-inside-a-mysql-database-using-php&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/682</guid>
      <comments>https://javamemo.tistory.com/682#entry682comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:39:41 +0900</pubDate>
    </item>
    <item>
      <title>부트스트랩에서 토글 버튼을 만드는 방법</title>
      <link>https://javamemo.tistory.com/681</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩에서 토글 버튼을 만드는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 원래 HTML, CSS, 자바스크립트로 웹앱을 만들다가 부트스트랩에서도 다시 만들어달라는 요청을 받았습니다.&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;&amp;lt;label&amp;gt;
  Notifications
  &amp;lt;span class='toggle'&amp;gt;
    &amp;lt;input type='radio'
      class='notifications'
      name='notifications'
      id='notifications' /&amp;gt;
  &amp;lt;/span&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;label&amp;gt;
  Preview
  &amp;lt;span class='toggle'&amp;gt;
    &amp;lt;input type='radio'
      class='preview'
      name='preview'
      id='preview' /&amp;gt;
  &amp;lt;/span&amp;gt;
&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML 페이지가 링크되는 자바스크립트와 CSS 파일은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src = 'jqtouch.js'&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;jquery.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;js/bootstrap.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;link href=&quot;css/bootstrap.css&quot; rel=&quot;stylesheet&quot;&amp;gt;
&amp;lt;link href=&quot;css/bootstrap-responsive.css&quot; rel=&quot;stylesheet&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;토글 버튼을 돌려받을 수 있도록 코드를 변경하는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;h1 papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2013년 최초 답변&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우수한 (비공식) &lt;a href=&quot;https://github.com/Bttstrp/bootstrap-switch&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;6-1&quot;&gt;부트스트랩 스위치를 사용&lt;/a&gt;할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9QTta.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9QTta.png&quot; alt=&quot;Classic 2013 Switch&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;my-checkbox&quot; checked&amp;gt;
$(&quot;[name='my-checkbox']&quot;).bootstrapSwitch();
&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;em papago-id=&quot;7-1&quot;&gt;타입&lt;/em&gt;이나 체크박스를 스위치로 사용합니다. A&lt;/font&gt;&lt;/font&gt;&lt;code&gt;type&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성은 V.1.8부터 추가되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스코드는 &lt;a href=&quot;https://github.com/nostalgiaz/bootstrap-switch&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;9-1&quot;&gt;Github에서 사용&lt;/a&gt; 가능합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2018년 노트&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;많은 사람들이 지적하는 &lt;a href=&quot;http://ux.stackexchange.com/questions/1318/should-a-toggle-button-show-its-current-state-or-the-state-to-which-it-will-chan&quot; papago-id=&quot;11-1&quot;&gt;사용성 문제로 항상&lt;/a&gt; 어려움을 &lt;a href=&quot;http://ux.stackexchange.com/questions/1318/should-a-toggle-button-show-its-current-state-or-the-state-to-which-it-will-chan&quot; papago-id=&quot;11-1&quot;&gt;겪는&lt;/a&gt; 것처럼 보였기 때문에 지금은 그런 종류의 오래된 스위치 버튼을 사용하는 것을 권장하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/react-component&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;12-3&quot;&gt;React Component 프레임워크&lt;/a&gt;(부트스트랩 관련은 아니지만 부트스트랩 그리드와 UI에 통합할 수 있음)에서 &lt;a href=&quot;https://react-component.github.io/switch/examples/simple.html&quot; papago-id=&quot;12-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;이와 같은&lt;/a&gt; 최신 &lt;a href=&quot;https://react-component.github.io/switch/examples/simple.html&quot; papago-id=&quot;12-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;스위치&lt;/a&gt;를 확인해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular, View 또는 jQuery에 대한 다른 구현이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4E0Uu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4E0Uu.png&quot; alt=&quot;Modern 2018 Switch&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import '../assets/index.less'
import React from 'react'
import ReactDOM from 'react-dom'
import Switch from 'rc-switch'

class Switcher extends React.Component {
  state = {
    disabled: false,
  }

  toggle = () =&amp;gt; {
    this.setState({
      disabled: !this.state.disabled,
    })
  }

  render() {
    return (
      &amp;lt;div style={{ margin: 20 }}&amp;gt;
        &amp;lt;Switch
          disabled={this.state.disabled}
          checkedChildren={'开'}
          unCheckedChildren={'关'}
        /&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;
    )
  }
}

ReactDOM.render(&amp;lt;Switcher /&amp;gt;, document.getElementById('__react-content'))
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;14&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;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://getbootstrap.com/docs/4.3/components/forms/#switches&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;15-3&quot;&gt;네이티브 부트스트랩 스위치&lt;/a&gt;에 대한 &lt;a href=&quot;https://stackoverflow.com/questions/13511368/how-to-create-a-toggle-button-in-bootstrap/59004573#answer-59004573&quot; papago-id=&quot;15-1&quot;&gt;ohkts11의 답변&lt;/a&gt;은 아래를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML을 변경하는 것이 괜찮다면, 당신은 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data-toggle&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;&amp;lt;button&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;s. &lt;a href=&quot;http://getbootstrap.com/javascript/#buttons&quot; papago-id=&quot;18-3&quot; rel=&quot;noreferrer&quot;&gt;버튼 예제&lt;/a&gt;의 &lt;em papago-id=&quot;18-1&quot;&gt;Single toggle&lt;/em&gt; 섹션을 참조하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot; data-toggle=&quot;button&quot;&amp;gt;
    Single toggle
&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩 3에는 체크박스나 라디오 버튼에 따라 토글 버튼을 만들 수 있는 옵션이 있습니다. http://getbootstrap.com/javascript/ #&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;체크박스&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;btn-group&quot; data-toggle=&quot;buttons&quot;&amp;gt;
  &amp;lt;label class=&quot;btn btn-primary active&quot;&amp;gt;
    &amp;lt;input type=&quot;checkbox&quot; checked&amp;gt; Option 1 (pre-checked)
  &amp;lt;/label&amp;gt;
  &amp;lt;label class=&quot;btn btn-primary&quot;&amp;gt;
    &amp;lt;input type=&quot;checkbox&quot;&amp;gt; Option 2
  &amp;lt;/label&amp;gt;
  &amp;lt;label class=&quot;btn btn-primary&quot;&amp;gt;
    &amp;lt;input type=&quot;checkbox&quot;&amp;gt; Option 3
  &amp;lt;/label&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라디오 버튼&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;btn-group&quot; data-toggle=&quot;buttons&quot;&amp;gt;
  &amp;lt;label class=&quot;btn btn-primary active&quot;&amp;gt;
    &amp;lt;input type=&quot;radio&quot; name=&quot;options&quot; id=&quot;option1&quot; checked&amp;gt; Option 1 (preselected)
  &amp;lt;/label&amp;gt;
  &amp;lt;label class=&quot;btn btn-primary&quot;&amp;gt;
    &amp;lt;input type=&quot;radio&quot; name=&quot;options&quot; id=&quot;option2&quot;&amp;gt; Option 2
  &amp;lt;/label&amp;gt;
  &amp;lt;label class=&quot;btn btn-primary&quot;&amp;gt;
    &amp;lt;input type=&quot;radio&quot; name=&quot;options&quot; id=&quot;option3&quot;&amp;gt; Option 3
  &amp;lt;/label&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업을 수행하려면 초기화해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.btn&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;s와 부트스트랩의 자바스크립트:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('.btn').button();
&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;javascript로 수동으로 'active' 클래스를 활성화하려고 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;완전한 라이브러리만큼 사용할 수 있는 것은 아니지만 쉬운 경우에는 충분할 것으로 보입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var button = $('#myToggleButton');
button.on('click', function () {
  $(this).toggleClass('active');
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;신중하게 생각해보면, '액티브' 수업은 버튼을 누를 때 부트스트랩으로 사용하는 것이지, 그 전이나 후가 아니기 때문에 같은 수업을 재사용하는 데 충돌이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 예를 사용해 보고 실패할 경우 알려주십시오. http://jsbin.com/oYoSALI/1/edit?html,js,output&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;대신 당신이 스스로 자바스크립트 코드(angularjs, javascript, jquery)로 유지하고 그냥 평범한 CSS를 사용하는 것을 제안합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋은 토글 버튼 생성기: https://proto.io/freebies/onoff/&lt;/font&gt;&lt;/p&gt;&lt;p&gt;
 &lt;strike papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 매우 유용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.bootstraptoggle.com/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;29-1&quot;&gt;부트스트랩 토글 버튼의 경우&lt;/a&gt; 코드 스니펫의 예!!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래에 js fiddle.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/strike&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;  &amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;link href=&quot;https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css&quot; rel=&quot;stylesheet&quot;&amp;gt;
    &amp;lt;script src=&quot;https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;link href=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css&quot; rel=&quot;stylesheet&quot;&amp;gt;
    &amp;lt;input id=&quot;toggle-trigger&quot; type=&quot;checkbox&quot; checked data-toggle=&quot;toggle&quot;&amp;gt;
    &amp;lt;button class=&quot;btn btn-success&quot; onclick=&quot;toggleOn()&quot;&amp;gt;On by API&amp;lt;/button&amp;gt;
&amp;lt;button class=&quot;btn btn-danger&quot; onclick=&quot;toggleOff()&quot;&amp;gt;Off by API&amp;lt;/button&amp;gt;
&amp;lt;button class=&quot;btn btn-primary&quot; onclick=&quot;getValue()&quot;&amp;gt;Get Value&amp;lt;/button&amp;gt;
&amp;lt;script&amp;gt;
  //If you want to change it dynamically
  function toggleOn() {
    $('#toggle-trigger').bootstrapToggle('on')
  }
  function toggleOff() {
    $('#toggle-trigger').bootstrapToggle('off')  
  }
  //if you want get value
  function getValue()
  {
   var value=$('#toggle-trigger').bootstrapToggle().prop('checked');
   console.log(value);
  }
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;strike papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에서 몇 가지 예시를 보여드렸습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되었으면 좋겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Js Fiddle은&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://jsfiddle.net/kswwmcdc/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;30-1&quot;&gt;여기&lt;/a&gt;서 소스코드는&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/minhur/bootstrap-toggle&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;30-3&quot;&gt;깃허브에서 이용 가능합니다.&lt;/a&gt;&lt;/font&gt;&lt;/strike&gt;
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩용 2020 업데이트 4&lt;/font&gt;&lt;/strong&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;2020년에 부츠트랩 &lt;a href=&quot;https://gitbrent.github.io/bootstrap4-toggle/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;32-1&quot;&gt;4토글&lt;/a&gt;을 추천했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css&quot; integrity=&quot;sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh&quot; crossorigin=&quot;anonymous&quot;&amp;gt;

&amp;lt;script src=&quot;https://code.jquery.com/jquery-3.4.1.slim.min.js&quot; integrity=&quot;sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n&quot; crossorigin=&quot;anonymous&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js&quot; integrity=&quot;sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo&quot; crossorigin=&quot;anonymous&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js&quot; integrity=&quot;sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6&quot; crossorigin=&quot;anonymous&quot;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;link href=&quot;https://cdn.jsdelivr.net/gh/gitbrent/bootstrap4-toggle@3.6.1/css/bootstrap4-toggle.min.css&quot; rel=&quot;stylesheet&quot;&amp;gt;
&amp;lt;script src=&quot;https://cdn.jsdelivr.net/gh/gitbrent/bootstrap4-toggle@3.6.1/js/bootstrap4-toggle.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;input id=&quot;toggle-trigger&quot; type=&quot;checkbox&quot; checked data-toggle=&quot;toggle&quot; data-onstyle=&quot;success&quot;&amp;gt;
&amp;lt;button class=&quot;btn btn-success&quot; onclick=&quot;toggleOn()&quot;&amp;gt;On by API&amp;lt;/button&amp;gt;
&amp;lt;button class=&quot;btn btn-danger&quot; onclick=&quot;toggleOff()&quot;&amp;gt;Off by API&amp;lt;/button&amp;gt;
&amp;lt;button class=&quot;btn btn-primary&quot; onclick=&quot;getValue()&quot;&amp;gt;Get Value&amp;lt;/button&amp;gt;

&amp;lt;script&amp;gt;
  //If you want to change it dynamically
  function toggleOn() {
    $('#toggle-trigger').bootstrapToggle('on')
  }
  function toggleOff() {
    $('#toggle-trigger').bootstrapToggle('off')  
  }
  //if you want get value
  function getValue()
  {
   var value=$('#toggle-trigger').bootstrapToggle().prop('checked');
   console.log(value);
  }
&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 papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS Toggle Switch 라이브러리를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS를 포함하고 JS를 직접 프로그래밍하기만 하면 됩니다: http://ghinda.net/css-toggle-switch/bootstrap.html&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;부트스트랩 3.3.0에 대한 재질 디자인 스위치를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://bootsnipp.com/snippets/featured/material-design-switch&quot; rel=&quot;nofollow&quot; papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://bootsnipp.com/snippets/featured/material-design-switch&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩 4 솔루션&lt;/font&gt;&lt;/strong&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;부트스트랩 4척 내장 토글&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://getbootstrap.com/docs/4.3/components/forms/#switches&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;37-1&quot;&gt;https://getbootstrap.com/docs/4.3/components/forms/ #&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ynRNC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ynRNC.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가가 여전히 좋은 스위치/토글 버튼을 찾고 있다면, 저는 릭의 제안에 따라 그 주변에 간단한 각도 지시문인 각도 &lt;a href=&quot;https://github.com/erikvullings/angular-switch&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;각스위치&quot; papago-id=&quot;38-1&quot; papago-attr-id=&quot;2&quot;&gt;스위치&lt;/a&gt;를 만들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 스타일의 스위치를 선호하는 것 외에도 위에서 함께 언급한 각도 부트스트랩-스위치 및 부트스트랩-스위치에 비해 총 다운로드 수가 훨씬 적습니다(2kb vs 23kb minized css+js).&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;먼저 필요한 js 및 css 파일을 포함합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;./bower_components/angular-switch/dist/switch.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;./bower_components/angular-switch/dist/switch.css&quot;&amp;gt;&amp;lt;/link&amp;gt;
&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;angular.module('yourModule', ['csComp'
    // other dependencies
]);
&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;&amp;lt;switch state=&quot;vm.isSelected&quot; 
    textlabel=&quot;Switch&quot; 
    changed=&quot;vm.changed()&quot;
    isdisabled=&quot;{{isDisabled}}&quot;&amp;gt;
&amp;lt;/switch&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZHIFd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZHIFd.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/13511368/how-to-create-a-toggle-button-in-bootstrap&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/681</guid>
      <comments>https://javamemo.tistory.com/681#entry681comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:39:33 +0900</pubDate>
    </item>
    <item>
      <title>ASC로 주문(하단에 널 포함)</title>
      <link>https://javamemo.tistory.com/680</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASC로 주문(하단에 널 포함)&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 학교 테이블과 지역 테이블을 연결하는 SQL 쿼리를 작성하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 학교가 하나의 지역에 붙어있는 단순한 일대다 관계.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 질문은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT 
    schools.id AS schoolid,
    schools.name AS school, 
    districts.id AS districtid, 
    districts.name AS district
FROM sms_schools AS schools
    LEFT JOIN sms_districts AS districts ON schools.districtid = districts.id
WHERE 1 = 1
ORDER BY districts.name, schools.name
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 레프트조인을 한 이유는 모든 학교가 지역구에 붙어있지 않기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 한 학교는 홈스쿨링을 받는 모든 학생들을 포함할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그건 지역에 없을 겁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 제가 하고 싶은 일은 ORDER BY를 지역명과 학교명 그대로 주문하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유일한 문제는 출력이 끝날 때 '기타'라는 그룹을 사용할 수 있도록 null district가 하단에 있기를 원한다는 것입니다.&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;출력 끝에 null로 오름차순으로 주문 가능한가요?&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;질문을 한 지 1분 만에 답을 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;절별 순서에서 null을 다른 것보다 높은 값으로 만들기 위해 case를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; ORDER BY (CASE WHEN districts.id IS NULL then 1 ELSE 0 END),districts.name, schools.name;
&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;ISNULL()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-0&quot;&gt;&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_isnull&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-0-1&quot;&gt;MySQL 설명서&lt;/a&gt;&lt;/strong&gt;에서&lt;strong papago-id=&quot;8-0&quot;&gt; 다음&lt;/strong&gt;을(를)&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ISNULL()&lt;/font&gt;&lt;/font&gt;&lt;code&gt;expr&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;/strong&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;expr&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;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&gt;&lt;/font&gt;&lt;code&gt;ISNULL()&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;1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그렇지 않으면 되돌아옵니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;17-0&quot;&gt;예&lt;/strong&gt;를 들어,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ORDER BY ISNULL(districts.name), districts.name, schools.name
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이것 대신에 이것을 사용하는 것을 좋아합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CASE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL에 대한 옵션.&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;/font&gt;&lt;code&gt;ISNULL()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 표준 SQL이 아니며 다른 버전의 SQL에서는 다르게 작동합니다.&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;기본적으로 Null은 맨 위에 표시되지만 IsNull을 사용하여 기본값을 할당할 수 있으므로 필요한 위치에 Null을 배치할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;
SELECT schools.id AS schoolid,schools.name AS school, districts.id AS districtid, districts.name AS district FROM sms_schools AS schools LEFT JOIN sms_districts AS districts ON schools.districtid = districts.id WHERE 1 = 1 
ORDER BY isnull(districts.name,'1'), schools.name 
&lt;/code&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;SELECT
 schools.id AS schoolid,
 schools.name AS school,
 districts.id AS districtid,
 districts.name AS district,
 if(schools.districtid IS NULL,1,0) as sort 
FROM sms_schools AS schools
LEFT JOIN sms_districts AS districts 
 ON schools.districtid = districts.id
WHERE 1 = 1
ORDER BY sort, districts.name, schools.name
&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;'new' 컬럼에 정렬 규칙을 추가하고 코드에서 필드를 숨긴 숫자를 사용하여 if를 직접 정렬할 수 있는지 테스트합니다(if...로 정렬).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;행운을 빌어요&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/5993109/order-by-asc-with-nulls-at-the-bottom&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/680</guid>
      <comments>https://javamemo.tistory.com/680#entry680comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:39:23 +0900</pubDate>
    </item>
    <item>
      <title>워드프레스 tinymce.js가 PHP로 파싱되고 있습니까?</title>
      <link>https://javamemo.tistory.com/679</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스 tinymce.js가 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;내 WordPress &quot;Edit Post&quot; 페이지의 TinyMCE 편집기가 고장 난 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;크롬 콘솔은 다음을 보여줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Resource interpreted as Script but transferred with MIME type text/html: &quot;http://mysite.com/wp-includes/js/tinymce/langs/wp-langs-en.js?ver=349-20805&quot;. post.php:62
Resource interpreted as Script but transferred with MIME type text/html: &quot;http://mysite.com/wp-includes/js/tinymce/tiny_mce.js?ver=349-20805&quot;. post.php:62
Uncaught SyntaxError: Unexpected token &amp;lt;          tiny_mce.js:1
Uncaught ReferenceError: tinyMCE is not defined   wp-langs-en.js:1
Uncaught ReferenceError: tinymce is not defined   post.php:1180
&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;Chrome Developer Tools에서 tinymce.js를 검사하면 다음과 같은 응답 헤더가 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Cache-Control:public, must-revalidate, proxy-revalidate
Connection:close
Content-Type:text/html
Date:Sat, 16 Jun 2012 01:40:42 GMT
Pragma:public
Server:Apache
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-Powered-By:PHP/5.2.17, W3 Total Cache/0.9.2.4
&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;&amp;lt;br /&amp;gt;
&amp;lt;b&amp;gt;Parse error&amp;lt;/b&amp;gt;:  syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in &amp;lt;b&amp;gt;/home/mysite/public_html/wp-includes/js/tinymce/tiny_mce.js&amp;lt;/b&amp;gt; on line &amp;lt;b&amp;gt;1&amp;lt;/b&amp;gt;&amp;lt;br /&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;다른 여러 .js 파일들이 제대로 검색되고 실행되고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;W3TC를 끄는 것은 아무런 차이가 없습니다.&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;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;PHP가 .js 파일 요청을 처리하지 않는 한 이러한 일은 발생하지 않을 것입니다.&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;Apache2 conf 파일을 확인하고 conf.d 폴더에 있는 conf.d 파일도 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;.htaccess 파일도 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 파일에서 다음과 같은 것을 찾습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;AddHandler application/x-httpd-php .js
&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;&amp;lt;FilesMatch &quot;.js$&quot;&amp;gt;
AddHandler application/x-httpd-php .js
php_value default_mimetype &quot;text/javascript&quot;
&amp;lt;/FilesMatch&amp;gt;
&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;일부 .htaccess 및 apache 구성 튜토리얼에서는 PHP를 사용하여 .js 파일을 처리할 것을 제안합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 일반적인 이유는 PHP GZIP 파일을 ZIP Compress the JS 파일로 호출하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;안타깝게도 tiny_mce.js를 처리하기 위해 php를 사용하는 것은 워드프레스를 고장내는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHP가 tiny_mce.js 파일에 있는 무언가에 걸려 넘어지고 있습니다. 최소화된 것 때문일까요?&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;나는 이 정확한 문제에 부딪혔고 내 구성에서 .js 파일에 대한 php 핸들러를 제거해야 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 Apache가 자체적으로 ziping을 하도록 구성되어 있기 때문에 실제로는 그럴 필요가 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 gzip을 하기 위해 PHP 파일을 호출하는 것이 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;zip 압축을 위해 PHP 스크립트에 의존하는 것은 실제로 일을 수행하는 최선의 방법이 아닙니다(분명히 이와 같은 문제가 발생하기 때문입니다!)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가에게 도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;독자들은 또한 이 게시물이 유용하다고 생각할 수 있습니다: &lt;a href=&quot;https://stackoverflow.com/questions/7437800/caching-problem-using-addhandler-application-x-httpd-php&quot; papago-id=&quot;12-1&quot;&gt;&quot;AddHandler application/x-httpd-php&lt;/a&gt;&quot;를&lt;a href=&quot;https://stackoverflow.com/questions/7437800/caching-problem-using-addhandler-application-x-httpd-php&quot; papago-id=&quot;12-1&quot;&gt; 사용하여 캐싱 문제&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 JS나 CSS와 같은 정적 파일을 처리하기 위해 임의로 PHP를 사용하는 것은 성능상 좋은 생각이 아니라고 덧붙이겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일이 진정으로 동적인 경우가 아니라면 PHP 핸들러를 호출해서는 안 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 서버에 불필요한 리소스 요구 사항을 추가하게 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;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/11060182/wordpress-tinymce-js-being-parsed-as-php&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/679</guid>
      <comments>https://javamemo.tistory.com/679#entry679comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:39:16 +0900</pubDate>
    </item>
    <item>
      <title>식에서 HTML 유니코드 문자를 출력하는 방법</title>
      <link>https://javamemo.tistory.com/678</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;식에서 HTML 유니코드 문자를 출력하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 간단한 html 유니코드 문자를 출력하려고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;clubs;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 표현에서&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하려고 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng-bind-html&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng-bind-html-unsafe&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 나는 그것을 내 HTML에 나타낼 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;$scope.character = '&amp;amp;clubs;';&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;&amp;lt;span ng-bind-html=&quot;{{character}}&quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;/code&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;html 코드가 span balise에 주입되지 않았습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;html 코드가 해석되지 않습니다(html 문자가 콘솔에 나타나지 않지만 컨트롤러의 표현을 사용하지 않고 직접 호출하는 경우).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;span ng-bind-html=&quot;&amp;amp;clubs;&quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 콘솔에서 HTML 문자가 올바르게 해석되지만 스팬 발리즈에는 여전히 주입되지 않습니다.)&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;식에서 html 문자를 출력하는 방법?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트를 가져옵니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;//ajax.googleapis.com/ajax/libs/angularjs/1.2.7/angular-sanitize.min.js&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ngSanitize&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;a href=&quot;http://docs.angularjs.org/api/ng.%24sce&quot; papago-id=&quot;13-1&quot;&gt;$sce(Strict Contextual Escape&lt;/a&gt;)를 사용해야 합니다&lt;a href=&quot;http://docs.angularjs.org/api/ng.%24sce&quot; papago-id=&quot;13-1&quot;&gt;.&lt;/a&gt; ngHtmlBindUnsafe는 1.2에서 제거되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function myCtrl($scope,$sce){
    $scope.html = $sce.trustAsHtml('&amp;amp;clubs;');
}
&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;Fiddle: http://jsfiddle.net/TheSharpieOne/uPw2U/&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;.filter('html',function($sce){
    return function(input){
        return $sce.trustAsHtml(input);
    }
})
&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;HTML:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;span ng-bind-html=&quot;'&amp;amp;clubs;'|html&quot;&amp;gt;&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Fiddle: http://jsfiddle.net/TheSharpieOne/uPw2U/1/&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/21097513/how-to-output-html-unicode-characters-from-an-expression&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/678</guid>
      <comments>https://javamemo.tistory.com/678#entry678comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:39:10 +0900</pubDate>
    </item>
    <item>
      <title>워드프레스 qTranslate는 자바스크립트에서 어떻게 작동합니까?</title>
      <link>https://javamemo.tistory.com/677</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스 qTranslate는 자바스크립트에서 어떻게 작동합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WordPress의 qTranslate 플러그인을 사용하여 웹사이트의 언어로 변경합니다.&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;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;&quot;Your field is required&quot; &amp;lt;= English

&quot;ここはデータが欲しいです&quot; &amp;lt;= Japanese
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유효성 확인 메시지는 자바스크립트로 제어됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 노력했다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[en:]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[ja:]&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;&amp;lt;--!en:--&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;--!ja:--&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 성공하지 못했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;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;qTranslate 플러그인으로 자바스크립트로 언어를 제어하려면 어떻게 해야 합니까?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러분 감사합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트로 언어를 얻는 방법을 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;언어를 변경하면 HTML 태그가 속성을 변경합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lang=&quot;en&quot;&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;lang=&quot;ja&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 기본적으로 다음을 사용했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    document.documentElement.lang==&quot;en-US&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 현재의 언어를 얻을 것이고 당신의 직업은 if 조건에 놓이게 될 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    if(document.documentElement.lang==&quot;en-US&quot;){}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모두 검토해 주셔서 감사합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/33241988/how-does-wordpress-qtranslate-work-with-javascript&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/677</guid>
      <comments>https://javamemo.tistory.com/677#entry677comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:39:03 +0900</pubDate>
    </item>
    <item>
      <title>Momentjs와의 어제 데이트를 어떻게 얻을 수 있습니까?</title>
      <link>https://javamemo.tistory.com/676</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Momentjs와의 어제 데이트를 어떻게 얻을 수 있습니까?&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;그래서, 제 질문은 간단합니다. MomentJs로 어제 날짜를 어떻게 잡을 수 있을까요? 자바스크립트에서는 매우 간단합니다. 즉, 매우 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;today = new Date();
yesterday = new Date(today.setDate(today.getDate() - 1))

console.log(yesterday)
&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;하지만 MomentJs로 이를 달성하려면 어떻게 해야 합니까?&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;moment().subtract(1, 'days')&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 로컬 PC의 현재 시간과 동일한 전날 시간을 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;moment().subtract(1, 'day')
&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;로컬 PC의 현재 시간과 동일한 전날 시간을 제공합니다.&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-0&quot;&gt;1.&lt;/strong&gt;현재 타이밍으로 어제 날짜 가져오기&lt;strong papago-id=&quot;8-0&quot;&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;moment().subtract(1, 'days').toString()
&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;strong papago-id=&quot;9-0&quot;&gt;2.&lt;/strong&gt;오늘의 시작으로 어제 날짜 가져오기&lt;strong papago-id=&quot;9-0&quot;&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;moment().subtract(1, 'days').startOf('day').toString()      
&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;strong papago-id=&quot;10-0&quot;&gt;3.&lt;/strong&gt;오늘이 끝나는 어제 날짜 가져오기&lt;strong papago-id=&quot;10-0&quot;&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;moment().subtract(1, 'days').endOf('day').toString()
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;moment().add(-1, 'days');
&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;a href=&quot;http://momentjs.com/docs/#/manipulating/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-1&quot;&gt;문서&lt;/a&gt;에서 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 간단한 해결책&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모먼트를 사용하면 어제, 오늘, 내일 날짜를 쉽게 얻을 수 있습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1. 어제 날짜 가져오기:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;moment().subtract(1, &quot;days&quot;).format(&quot;YYYY-MM-DD&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2. 오늘 날짜 가져오기:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;moment().subtract(0, &quot;days&quot;).format(&quot;YYYY-MM-DD&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3. 내일 날짜 가져오기:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;moment().subtract(-1, &quot;days&quot;).format(&quot;YYYY-MM-DD&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용하여 일 단위를 쉽게 뺄 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;var yesterday = moment().subtract(1, 'days')&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 이전 날짜를 찾아 준 것에 대해.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;var previousDay = moment('2017/11/6', 'YYYY/MM/DD').subtract(1, 'days')&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DD-MM-YYYY 형식의 Momentjs로 된 어제 날짜.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const yesterdaydate = moment().subtract(1, &quot;days&quot;).format(&quot;DD-MM-YYYY&quot;);
console.log(yesterdaydate)
&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;var yesterday = new Date(dateInput.getTime());
yesterday.setDate(yesterday.getDate() - 1);
console.log(yesterday);

var tomorrow = new Date(dateInput.getTime());
tomorrow.setDate(tomorrow.getDate() + 1);
console.log(tomorrow);

dateB = moment(yesterday).format(&quot;YYYYMMDD&quot;);
dateA = moment(tomorrow).format(&quot;YYYYMMDD&quot;);
console.log(dateB);
console.log(dateA);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/31448557/how-to-get-yesterdays-date-with-momentjs&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>javascript</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/676</guid>
      <comments>https://javamemo.tistory.com/676#entry676comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:38:56 +0900</pubDate>
    </item>
    <item>
      <title>워드프레스에서 포스트 타이틀을 얻는 방법?</title>
      <link>https://javamemo.tistory.com/675</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스에서 포스트 타이틀을 얻는 방법?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WordPress 사이트가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 아랍어에서 영어로 번역하기 위해 코드를 만들지만 워드프레스에서 코드를 따옵니다.&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;저는 플러그인 올인원 SEO팩을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 모든 페이지의 플러그인에 제목을 추가합니다. 게시물의 제목이 아니라 입력된 제목을 모두 하나의 SEO 팩에 추가합니다.&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;All in one SEO pack이라는 타이틀을 받아서 변환하고 싶습니다.&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;functions.php&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;function arb2en_title($post=0)
{
  $text = get_the_title($_aioseop_title);
/*
function arb2en_title($post=0)
{
  $text = get_the_title($post);
*/
$arb_en_map=array(
           'د'=&amp;gt;']',
           'ج'=&amp;gt;'[',
           'ح'=&amp;gt;'p',
           'خ'=&amp;gt;'o',
           'ه'=&amp;gt;'i',
           'ع'=&amp;gt;'u',
           'غ'=&amp;gt;'y',
           'ف'=&amp;gt;'t',
           'ق'=&amp;gt;'r',
           'ث'=&amp;gt;'e',
           'ص'=&amp;gt;'w',
           'ض'=&amp;gt;'q',
           'ش'=&amp;gt;'a',
           'س'=&amp;gt;'s',
           'ي'=&amp;gt;'d',
           'ب'=&amp;gt;'f',
           'ل'=&amp;gt;'g',
           'ا'=&amp;gt;'h',
           'ت'=&amp;gt;'j',
           'ن'=&amp;gt;'k',
           'م'=&amp;gt;'l',
           'ك'=&amp;gt;';',
           'ط'=&amp;gt;'\'',
           'ظ'=&amp;gt;'/',
           'ز'=&amp;gt;'.',
           'و'=&amp;gt;',',
           'ة'=&amp;gt;'m',
           'ى'=&amp;gt;'n',
           'لا'=&amp;gt;'b',
           'ر'=&amp;gt;'v',
           'ؤ'=&amp;gt;'c',
           'ء'=&amp;gt;'x',
           'ئ'=&amp;gt;'z',
           'إ'=&amp;gt;'Y',
           'لإ'=&amp;gt;'T',
           'لأ'=&amp;gt;'G',
           'أ'=&amp;gt;'H',
           'لآ'=&amp;gt;'B',
           'آ'=&amp;gt;'N'
);
foreach($arb_en_map as $key=&amp;gt;$value)
{
    $text=preg_replace(&quot;/$key/&quot;,$value,$text);
}
return htmlentities($text);
}
&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;이 코드는 게시물의 제목을 얻지만 나는 입력된 제목을 모두 하나의 SEO 팩에 넣어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 어떻게 그럴 수 있을까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쉬워요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;?php echo get_the_title( $post_id ); ?&amp;gt;&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되기를 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오래된 질문인데 구글 검색 결과에 나오고 있어서 답변드립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모두 하나의 SEO 팩은 사용자 정의 필드를 사용하여 데이터베이스에 날짜를 저장합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;All in one SEO 플러그인의 title 필드에 대한 사용자 지정 필드 이름이 &quot;_aiosop_title&quot;이라고 가정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(플러그인이 _aiosop_title이 아닌 사용자 지정 파일 이름을 사용하는지 먼저 확인한 후 해당 이름으로 대체하십시오.)&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;그래서 seo plugin의 title field의 값을 얻기 위해서 함수에 이 코드 라인을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;php:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;get_post_meta( $post_id, $key, $single );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설명..&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$post_id:&lt;/font&gt;&lt;/strong&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;포스트 ID를 얻으려면 다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;global $post;
$post_id = $post-&amp;gt;ID;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$키:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$key  = “_aioseop_title”; //check if plugin is using same name for title field
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$싱글:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$single = true; // if true then it will return single value otherwise all values of _aioseop_title in an array.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조: https://codex.wordpress.org/Function_Reference/get_post_meta&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:: 테스트를 해본 적이 없어서 문제가 생기면 기꺼이 댓글을 남기겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/19792123/how-to-get-post-title-in-wordpress&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/675</guid>
      <comments>https://javamemo.tistory.com/675#entry675comment</comments>
      <pubDate>Sun, 22 Oct 2023 19:22:51 +0900</pubDate>
    </item>
    <item>
      <title>$.get()에서 오류를 처리하는 방법</title>
      <link>https://javamemo.tistory.com/674</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$.get()에서 오류를 처리하는 방법&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;get()을 사용하고 원격 url/file을 호출하는 jquery 코드가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 오는 오류를 해결하는 가장 좋은 방법이 무엇인지 알고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 하는 일은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   $(document).ready(function() {
        $.ajaxSetup({
            error: function(x, e) {

                if (x.status == 0) {
                    alert(' Check Your Network.');
                } 
                   else if (x.status == 404) {
                alert('Requested URL not found.');

                } else if (x.status == 500) {
                    alert('Internel Server Error.');
                }  else {
                    alert('Unknow Error.\n' + x.responseText);
                }
            }
        });

        $.get(&quot;HTMLPage.htm&quot;, function(data) {
            alert(data);
            $('#mydiv').html(data);

        });
    });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 잘 되네요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 좋은 방법이 없을까요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ref:http://www.maheshchari.com/jquery-ajax-error-handling/&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 1.5부터는 모든 jQuery의 Ajax 메서드가 XMLHTTPRequest 개체의 상위 집합을 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;$.get()에서 반환되는 이 jQuery XHR 개체 또는 &quot;jqXHR&quot;은 Promise 인터페이스를 구현하여 Promise의 모든 속성, 메서드 및 동작을 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var jqxhr = $.get( &quot;example.php&quot;, function() {
    alert( &quot;success&quot; );
})
.done(function() {
    alert( &quot;second success&quot; );
})
.fail(function() {
    alert( &quot;error&quot; );
})
.always(function() {
    alert( &quot;finished&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;$.ajaxSetup을 사용하는 것은 모든 ajax 호출에 대해 전역적입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;$.get 함수에는 오류 콜백이 없으므로 $.ajaxSetup에서 오류 처리기를 정의하는 것이 오류를 처리할 수 있는 유일한 방법입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;$.ajax를 사용하면 $.ajax 호출에서 오류 처리기를 이렇게 정의할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
  url: &quot;HTMLPage.htm&quot;,
  success: function(data) {
    alert(data);
    $('#mydiv').html(data);        
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) { 
    if (XMLHttpRequest.status == 0) {
      alert(' Check Your Network.');
    } else if (XMLHttpRequest.status == 404) {
      alert('Requested URL not found.');
    } else if (XMLHttpRequest.status == 500) {
      alert('Internel Server Error.');
    }  else {
       alert('Unknow Error.\n' + XMLHttpRequest.responseText);
    }     
  }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 이 ajax 호출에만 해당하므로 보다 구체적인 오류 메시지를 가질 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 글로벌 오류 처리기를 사용하는 것도 효과가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$(문서) 외부에서 함수를 정의할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 준비된 ()&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).ready(function() {
    $.ajaxSetup({
        error: AjaxError
    });

    $.get(&quot;HTMLPage.htm&quot;, GetSuccess);
});

function AjaxError(x, e) {
  if (x.status == 0) {
    alert(' Check Your Network.');
  } else if (x.status == 404) {
    alert('Requested URL not found.');
  } else if (x.status == 500) {
    alert('Internel Server Error.');
  }  else {
     alert('Unknow Error.\n' + x.responseText);
  }
}

function GetSuccess(data) {
  alert(data);
  $('#mydiv').html(data);
}
&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;http://api.jquery.com/jQuery.ajax/ 에서 복사/paste:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;statusCode(1.5 추가) {}&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응답에 해당 코드가 있을 때 호출되는 숫자 HTTP 코드와 함수의 맵입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 응답 상태가 404일 때 다음이 경고합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;$.ajax({
  statusCode: {404: function() {
    alert('page not found');
  }
});
&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;/blockquote&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/2175756/how-to-handle-error-in-get&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Ajax</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/674</guid>
      <comments>https://javamemo.tistory.com/674#entry674comment</comments>
      <pubDate>Sun, 22 Oct 2023 19:22:44 +0900</pubDate>
    </item>
    <item>
      <title>AngularJS $resource 오류 - TypeError: 개체 #에 'push' 메서드가 없습니다.</title>
      <link>https://javamemo.tistory.com/673</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AngularJS $resource 오류 - TypeError: 개체 #에 '&lt;g papago-id=&quot;0-1&quot;&gt;push' 메서드가 없습니다&lt;/g&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;var Subject = $resource('/api/TestAccounts/:action', { applicationId: 3 }, {
   'getSelect': { method: 'GET', params: { action: 'GetSelect' } }
});

Subject.getSelect({ applicationId: 3 },
   function (resp) {
      $scope.testAccounts = resp;
      gridData = null;
   }
);
&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;[{&quot;id&quot;:5,&quot;name&quot;:&quot;xxx&quot;},{&quot;id&quot;:6,&quot;name&quot;:&quot;yyy&quot;}]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 다음 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;TypeError: Object #&amp;lt;g&amp;gt; has no method 'push'
    at copy (http://127.0.0.1:81/Scripts/angular.js:577:21)
&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&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;isArray&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버에서 배열을 반환하는 경우 리소스 정의에서 true로 변경합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var Subject = $resource('/api/TestAccounts/:action', { applicationId: 3 }, {
  'getSelect': { method: 'GET', isArray: true, params: { action: 'GetSelect' } }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조: &lt;a href=&quot;http://docs.angularjs.org/api/ngResource.$resource&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-1&quot;&gt;AngularJS $resource API&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 GET은 개체 {}을(를) 기대하고, QUREY는 배열[]을 기대합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자의 경우 Web API는 GET에 대한 배열을 반환하므로 GET에 대한 isArray 플래그를 true로 설정해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 API가 개체를 반환한 경우 GET의 기본 동작이므로 해당 플래그를 재설정할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옷을 갈아입었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyService.get(...)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyService.query(...)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜냐면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.get()&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;.query()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열을 기대합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 게시물이 좀 진부한 것은 알지만 오늘 이 문제에 부딪히면서 해결책을 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 게시물에 따라 조엘위드의 솔루션을 구현했습니다(실의 절반 아래).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;푸시를 시도하기 전에 대상이 배열인지 확인하여 문제를 해결합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/angular/angular.js/issues/1044&quot; rel=&quot;nofollow&quot; papago-id=&quot;15&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;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/15932422/angularjs-resource-error-typeerror-object-g-has-no-method-push&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/673</guid>
      <comments>https://javamemo.tistory.com/673#entry673comment</comments>
      <pubDate>Sun, 22 Oct 2023 19:22:37 +0900</pubDate>
    </item>
    <item>
      <title>printf 형식 지정(%d 대 %u)</title>
      <link>https://javamemo.tistory.com/672</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;printf 형식 지정(%d 대 %u)&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;%d&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;%u&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포인터 주소를 인쇄할 때?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int a = 5;
// check the memory address
printf(&quot;memory address = %d\n&quot;, &amp;amp;a); // prints &quot;memory address = -12&quot;
printf(&quot;memory address = %u\n&quot;, &amp;amp;a); // prints &quot;memory address = 65456&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;a href=&quot;https://cplusplus.com/reference/cstdio/printf/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;5-1&quot;&gt;페이지&lt;/a&gt;에서 찾을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;%d&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;%u&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;/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;%p&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;형식 지정자.&lt;/font&gt;&lt;/font&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;%u&lt;/strong&gt;는 부호 없는 정수를 인쇄합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;11-0&quot;&gt;%d&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;strong papago-id=&quot;12-1&quot;&gt;%p&lt;/strong&gt;를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 형식 지정 탈출 목록:&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포맷 이스케이프의 전체 목록은 다음과 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.cplusplus.com/reference/cstdio/printf/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;14-1&quot;&gt;저&lt;/a&gt;는 이 페이지에서 스크린샷을 제공하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VRH1V.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VRH1V.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 당신의 질문을 정확하게 이해했다면 당신은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%p&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포인터가 사용 중인 주소를 표시하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int main() {
    int a = 5;
    int *p = &amp;amp;a;
    printf(&quot;%d, %u, %p&quot;, p, p, p);

    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 다음과 같은 것을 출력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-1083791044, 3211176252, 0xbf66a93c
&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;%u는 부호 없는 정수에 사용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;부호가 있는 정수 주소 연산자 %d에서 지정한 메모리 주소는 -12이므로, 이 값을 부호가 없는 정수로 얻기 위해 컴파일러는 이 주소의 부호가 없는 정수 값을 반환합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;차이점은 간단합니다. 컴파일할 때 다른 경고 메시지가 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-none prettyprint-override&quot;&gt;&lt;code&gt;1156942.c:7:31: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
     printf(&quot;memory address = %d\n&quot;, &amp;amp;a); // prints &quot;memory add=-12&quot;
                               ^
1156942.c:8:31: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘int *’ [-Wformat=]
     printf(&quot;memory address = %u\n&quot;, &amp;amp;a); // prints &quot;memory add=65456&quot;
                               ^
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 당신의 포인터를 a로 넘기게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;void*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%p&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변환 지정자로 다음과 같은 오류 메시지가 표시되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

int main()
{
    int a = 5;
    // check the memory address
    printf(&quot;memory address = %d\n&quot;, &amp;amp;a); /* wrong */
    printf(&quot;memory address = %u\n&quot;, &amp;amp;a); /* wrong */
    printf(&quot;memory address = %p\n&quot;, (void*)&amp;amp;a); /* right */
}
&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;형식 지정자 %u는 서명되지 않은 정수를 인쇄하는 데 사용되는 반면 %d은 서명된 정수에 사용됩니다.&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/1156942/printf-formatting-d-versus-u&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/672</guid>
      <comments>https://javamemo.tistory.com/672#entry672comment</comments>
      <pubDate>Sun, 22 Oct 2023 19:22:30 +0900</pubDate>
    </item>
    <item>
      <title>워드프레스 크론은 wp_mail()을 발사하지 않고 php mail() 기능을 합니다.</title>
      <link>https://javamemo.tistory.com/671</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스 크론은 wp_mail()을 발사하지 않고 php mail() 기능을 합니다.&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;cronjob 작업에 wp_mail을 사용하려고 하는데 메일이 오지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 순수 php 함수 메일()이 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문 1):&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메일()은 작동하지만 wp_mail은 작동하지 않는 이유는 무엇입니까?&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;질문 2): www.domain.de/wp-cron.php 에 전화하면 이메일이 수동으로 전송됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 받은 이메일의 html 이메일 본문은 여전히 문자열이고 html로 번역되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;왠지 알아?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책을 찾고 몇 가지를 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 게시물(&lt;a href=&quot;https://stackoverflow.com/questions/25752854/cron-job-in-wordpress-not-working&quot; papago-id=&quot;4-1&quot;&gt;워드프레스&lt;/a&gt;의 크론 &lt;a href=&quot;https://stackoverflow.com/questions/25752854/cron-job-in-wordpress-not-working&quot; papago-id=&quot;4-1&quot;&gt;작업이 작동&lt;/a&gt;하지 않음)에 따라 나는 다음과 같이 크론 작업을 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 지정 간격 설정:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function example_add_cron_interval( $schedules ) {
$schedules['five_seconds'] = array(
    'interval' =&amp;gt; 5,
    'display'  =&amp;gt; esc_html__( 'Every Five Seconds' ),
);
$schedules['daily'] = array(
    'display' =&amp;gt; esc_html__( 'Once Daily' ) 
);
return $schedules;
}
add_filter( 'cron_schedules', 'example_add_cron_interval', 999 );
&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;cronjob 활성화:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function cron_activation() {
    if( !wp_next_scheduled( 'dbs_cron_hook' ) ) {  
        wp_schedule_event(time(), 'daily', 'dbs_cron_hook' );  
    }
}
add_action('init', 'cron_activation');
&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;논리 실행: 함수 my_task_function() {&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$max_hours = 336; // entspricht 2 Wochen
global $post;
$args = array( 'post_type' =&amp;gt; 'bookings', );
$booking_listing = new WP_Query( $args );
$mail_body = '&amp;lt;table&amp;gt;';

if( $booking_listing-&amp;gt;have_posts() ) :
    while( $booking_listing-&amp;gt;have_posts() ) : $booking_listing-&amp;gt;the_post();

        $post_id = get_the_ID();
        $email_sent_timestamp = intval( get_post_meta( $post_id, 'approvement_email_sent', true ) );
        $event_id = intval( get_post_meta( $post_id, 'event_id', true ) );

        if( $email_sent_timestamp != 0 ){

            $date = date_create();
            $now_timestamp = date_timestamp_get($date);
            $hoursPassed = diff_timestamp( $now_timestamp, $email_sent_timestamp );

            var_dump($hoursPassed[&quot;full_hours&quot;] &amp;gt;= $max_hours);

            if( $hoursPassed &amp;gt;=  $max_hours ){

                update_post_meta( $event_id, 'event_reserved', intval(0) );
                $mail_body .= '&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BuchungsNr ' . $post_id . ': 2 Wochen sind abgelaufen.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Der Termin ' . $event_id . ' wurde wieder aktiviert.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;';

            }
        }

    endwhile;
else:
    wp_send_json_error( &quot;No events found&quot; );
endif;

$mail_body .= '&amp;lt;/table&amp;gt;';

var_dump($max_hours);

// wp_mail( 'xxxxx@xxxxxxx.xxx', 'Rervierung ' . $post_id . ' abgelaufen', $mail_body );

mail( 'xxxxx@xxxxxxx.xxx', 'Rervierung ' . $post_id . ' abgelaufen', $mail_body );

}
add_action( 'dbs_cron_hook', 'my_task_function' );
&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;구성에서 wpcron을 비활성화했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 php&lt;/font&gt;&lt;/font&gt;&lt;code&gt;define('DISABLE_WP_CRON', true);&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 이렇게 서버에 cronjob을 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;* */1 * * * /vrmd/webserver/php70/bin/php-cli /homepages/xxxxxx/wp-cron.php &amp;gt; /dev/null &lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저를 도와주시기 바랍니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문 2에 대한 편집: 메일()에서 $header를 사용하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$headers = &quot;MIME-Version: 1.0\r\n&quot;;
$headers .= &quot;Content-Type: text/html; charset=UTF-8\r\n&quot;;
mail( $to, $subject, $mail_body, $headers );
&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;1번 질문은 아직도 궁금하군요...&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/50057615/wordpress-cron-doesnt-fire-wp-mail-but-php-mail-function&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>javamemo</author>
      <guid isPermaLink="true">https://javamemo.tistory.com/671</guid>
      <comments>https://javamemo.tistory.com/671#entry671comment</comments>
      <pubDate>Sun, 22 Oct 2023 19:22:22 +0900</pubDate>
    </item>
  </channel>
</rss>