<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>copyscript</title>
    <link>https://copyscript.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Fri, 10 Apr 2026 12:37:34 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>copyscript</managingEditor>
    <item>
      <title>MySQL에서 쿼리에 의해 반환되는 각 행에 대해 저장 프로시저 호출</title>
      <link>https://copyscript.tistory.com/1665</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL에서 쿼리에 의해 반환되는 각 행에 대해 저장 프로시저 호출&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음을 효과적으로 수행하는 MySQL 저장 프로시저를 원합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;foreach id in (SELECT id FROM objects WHERE ... ) CALL testProc(id)&lt;/code&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;a href=&quot;https://stackoverflow.com/questions/886293/how-do-i-execute-a-stored-procedure-once-for-each-row-returned-by-query&quot;&gt;쿼리에서 반환되는 각 행에 대해 저장 프로시저를 한 번 실행하려면 어떻게 해야 합니까?&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;loops&quot;(각자에 대한 loops, while 등) 및 &quot;branching&quot;(if-else, call 등)과 같은 개념은 &lt;em&gt;절차적&lt;/em&gt;이며 SQL과 같은 &lt;em&gt;선언&lt;/em&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;testProc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;호출될 절차는 주어진 방법을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;id&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 테이블에 대한 조회 키로서, 대신에 당신은 간단하게(그리고 그렇게) 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JOIN&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블을 함께 사용할 수 있습니다. 예:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT ...
FROM   objects JOIN other USING (id)
WHERE  ...
&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;em&gt;프로시저&lt;/em&gt;는 MySQL에서 프로시저 코드를 실행할 수 있는 유일한 방법입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 루프 내에서 현재 논리를 수행하도록 기존 스프록을 수정하거나 루프 내에서 기존 스프록을 호출하는 새 스프록을 만들어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE PROCEDURE foo() BEGIN
  DECLARE done BOOLEAN DEFAULT FALSE;
  DECLARE _id BIGINT UNSIGNED;
  DECLARE cur CURSOR FOR SELECT id FROM objects WHERE ...;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done := TRUE;

  OPEN cur;

  testLoop: LOOP
    FETCH cur INTO _id;
    IF done THEN
      LEAVE testLoop;
    END IF;
    CALL testProc(_id);
  END LOOP testLoop;

  CLOSE cur;
END
&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/14326775/call-a-stored-procedure-for-each-row-returned-by-a-query-in-mysql&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>MySQL</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1665</guid>
      <comments>https://copyscript.tistory.com/1665#entry1665comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:56:42 +0900</pubDate>
    </item>
    <item>
      <title>데이터베이스 연결이 항상 열려 있어야 합니까, 아니면 필요할 때만 열려 있어야 합니까?</title>
      <link>https://copyscript.tistory.com/1664</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터베이스 연결이 항상 열려 있어야 합니까, 아니면 필요할 때만 열려 있어야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터베이스 연결이 필요한 부킷 플러그인(마인크래프트)이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터베이스 연결이 항상 열려 있어야 합니까, 아니면 필요할 때 열고 닫아야 합니까?&lt;/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;Java 7 이전 버전:&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;  Connection con = null;
  try {
      con = ... //retrieve the database connection
      //do your work...
  } catch (SQLException e) {
      //handle the exception
  } finally {
      try {
          if (con != null) {
              con.close();
          }
      } catch (SQLException shouldNotHandleMe) {
          //...
      }
  }
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Java 7:&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;  try (Connection con = ...) {
  } catch (SQLException e) {
  }
  //no need to call Connection#close since now Connection interface extends Autocloseable
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 데이터베이스 연결을 수동으로 여는 것은 비용이 너무 많이 들기 때문에 인터페이스가 있는 Java로 표시되는 &lt;a href=&quot;https://docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html&quot; rel=&quot;noreferrer&quot;&gt;데이터베이스 연결 풀&lt;/a&gt;을 사용하는 것이 좋습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 물리적 데이터베이스 연결이 처리되며, 이를 &lt;em&gt;닫을&lt;/em&gt; 때(즉, 호출)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Connection#close&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;), 물리적 데이터베이스 연결은 SLEEP 모드로 유지되고 계속 열려 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;관련 Q/A:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/q/16028947/1065197&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Java 연결 풀링&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;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://jolbox.com/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;본CP&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://sourceforge.net/projects/c3p0/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;c3po&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://commons.apache.org/proper/commons-dbcp/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아파치 커먼즈 DBCP&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/brettwooldridge/HikariCP&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;히카리CP&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;/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;/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;이때 동일한 트랜잭션에 대해 쿼리를 실행하고 커밋하면 오류가 발생하면 롤백합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JDBC에서는 기본적으로 자동 커밋이 사용되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://www.tutorialspoint.com/jdbc/commit-rollback.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;예시&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연결 풀링을 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;웹 애플리케이션을 개발하는 경우 앱 서버 연결 풀링을 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;앱 서버는 각 응용 프로그램에 대해 동일한 풀링을 사용하므로 한 지점에서 연결 수를 제어할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Apache Tomcat Connection 풀링을 적극 권장합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://dzone.com/articles/connection-pooling-tomcat-nb&quot; rel=&quot;nofollow noreferrer&quot;&gt;예시&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;추가 정보로 연결, 문장 및 결과 집합.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1.연결을 닫으면 가까운 문장이나 결과 집합이 필요 없습니다.&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;2.Statement를 닫으면 ResultSet도 닫힙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;3. 이런 트라이위드 resources를 사용한다면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;try (Connection con = ...) {
} catch (SQLException e) {
}
&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;a href=&quot;https://stackoverflow.com/questions/8066501/how-should-i-use-try-with-resources-with-jdbc&quot;&gt;여기&lt;/a&gt;에서 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사실, 지원서를 어떻게 쓰느냐가 중요한 문제랍니다!&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 예술이지만 슬프게도 모든 사람들이 마이크로소프트의 튜토리얼과 같은 좋은 연습을 위해 튜토리얼을 듣습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코딩할 내용을 알고 있으면 응용프로그램의 평생 동안 연결을 열어 둡니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 간단합니다. 아침에 출근해야 해서가 아니라 매일 우리는 당신만을 위한 특별한 경로를 만들어야 합니다!&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 다른 사람들처럼 그 길을 2~4번 가잖아요!&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;교통을 판단하고 필요에 따라 2, 4, 6개의 루트를 만듭니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 이 4개 혹은 6개의 노선으로 교통이 막히면, 당신은 기다려요!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해피 코딩.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필요한 경우에만 연결을 열어야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제 필요하기 전에 열려 있으면 연결 풀에서 활성 연결이 하나 줄어듭니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 궁극적으로 애플리케이션 사용자에게 영향을 미칩니다.&lt;/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;finally
{
connection.close()
}
&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/18962852/should-a-database-connection-stay-open-all-the-time-or-only-be-opened-when-neede&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>MySQL</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1664</guid>
      <comments>https://copyscript.tistory.com/1664#entry1664comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:56:36 +0900</pubDate>
    </item>
    <item>
      <title>R: 빈 데이터 프레임에 행을 추가할 때 열 이름이 손실됨</title>
      <link>https://copyscript.tistory.com/1663</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;R: 빈 데이터 프레임에 행을 추가할 때 열 이름이 손실됨&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 막 R부터 시작하는데 이상한 동작을 당했습니다. 빈 데이터 프레임에 첫 번째 행을 삽입하면 원래 열 이름이 손실됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a&amp;lt;-data.frame(one = numeric(0), two = numeric(0))
a
#[1] one two
#&amp;lt;0 rows&amp;gt; (or 0-length row.names)
names(a)
#[1] &quot;one&quot; &quot;two&quot;
a&amp;lt;-rbind(a, c(5,6))
a
#  X5 X6
#1  5  6
names(a)
#[1] &quot;X5&quot; &quot;X6&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보시다시피 열 이름 &lt;strong&gt;1&lt;/strong&gt;과 &lt;strong&gt;2&lt;/strong&gt;는 &lt;strong&gt;X5&lt;/strong&gt;와 &lt;strong&gt;X6&lt;/strong&gt;로 대체되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;누가 왜 이런 일이 생기는지 그리고 칼럼 이름을 잃지 않고 이것을 할 수 있는 올바른 방법이 있는지 알려주실 수 있나요?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;산탄총 솔루션은 이름을 보조 벡터에 저장했다가 데이터 프레임 작업이 끝나면 다시 추가하는 것입니다.&lt;/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;데이터 프레임을 만들고 데이터 소스를 반복하여 각 함수 호출에 data.frame을 전달하여 결과를 채웁니다.&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;rbind&lt;/code&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;'cbind'('rbind')의 경우 S 호환성의 경우 결과에 행(열)이 0이 아닌 한 0 길이의 벡터('NULL' 포함)는 무시됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(제로 익스텐트 행렬은 S3에서는 발생하지 않으며 R에서는 무시되지 않습니다.)&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;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;rbind&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;rbind&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수는 다음과 같이 불립니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rbind.data.frame&lt;/code&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;rbind.data.frame(c(5,6))
#  X5 X6
#1  5  6
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;행을 삽입하는 한 가지 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a[nrow(a)+1,] &amp;lt;- c(5,6)
a
#  one two
#1   5   6
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 코드에 따라 더 좋은 방법이 있을지도 모릅니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 문제에 거의 굴복하고 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1) 데이터 프레임 생성:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;stringsAsFactor&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로 설정.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FALSE&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면 다음 호로 곧장 달려가거나&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2) 쓰지 마&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rbind&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;code&gt;df[nrow(df)+1,] &amp;lt;- c(&quot;d&quot;,&quot;gsgsgd&quot;,4)&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df &amp;lt;- data.frame(a = character(0), b=character(0), c=numeric(0))

df[nrow(df)+1,] &amp;lt;- c(&quot;d&quot;,&quot;gsgsgd&quot;,4)

#Warnmeldungen:
#1: In `[&amp;lt;-.factor`(`*tmp*`, iseq, value = &quot;d&quot;) :
#  invalid factor level, NAs generated
#2: In `[&amp;lt;-.factor`(`*tmp*`, iseq, value = &quot;gsgsgd&quot;) :
#  invalid factor level, NAs generated

df &amp;lt;- data.frame(a = character(0), b=character(0), c=numeric(0), stringsAsFactors=F)

df[nrow(df)+1,] &amp;lt;- c(&quot;d&quot;,&quot;gsgsgd&quot;,4)

df
#  a      b c
#1 d gsgsgd 4
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해결 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a &amp;lt;- rbind(a, data.frame(one = 5, two = 6))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;?rbind&lt;/code&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;그런 다음 첫 번째 데이터 프레임에서 열의 클래스를 가져와 위치별이 아닌 이름별로 열을 매칭합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;FWIW, 대체 설계에서는 데이터 프레임에 바인딩하는 대신 두 열에 대한 벡터를 생성하는 함수를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ones &amp;lt;- c()
twos &amp;lt;- c()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수의 벡터를 수정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ones &amp;lt;- append(ones, 5)
twos &amp;lt;- append(twos, 6)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필요에 따라 반복한 다음 data.frame을 한 번에 생성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a &amp;lt;- data.frame(one=ones, two=twos)
&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;이 방법은 NA나 0을 해킹할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;rs &amp;lt;- data.frame(i=numeric(), square=numeric(), cube=numeric())
for (i in 1:4) {
    calc &amp;lt;- c(i, i^2, i^3)
    # append calc to rs
    names(calc) &amp;lt;- names(rs)
    rs &amp;lt;- rbind(rs, as.list(calc))
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;rs는 정확한 이름을 가질 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; rs
    i square cube
1   1      1    1
2   2      4    8
3   3      9   27
4   4     16   64
&amp;gt; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 작업을 보다 깨끗하게 수행하는 또 다른 방법은 data.table을 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; df &amp;lt;- data.frame(a=numeric(0), b=numeric(0))
&amp;gt; rbind(df, list(1,2)) # column names are messed up
&amp;gt;   X1 X2
&amp;gt; 1  1  2

&amp;gt; df &amp;lt;- data.table(a=numeric(0), b=numeric(0))
&amp;gt; rbind(df, list(1,2)) # column names are preserved
   a b
1: 1 2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;data.table도 data.frame입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; class(df)
&quot;data.table&quot; &quot;data.frame&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;초기 데이터 프레임에 행 하나를 지정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; df=data.frame(matrix(nrow=1,ncol=length(newrow))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 행을 추가하고 NAS를 꺼냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;newdf=na.omit(rbind(newrow,df))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 새 행에 NA가 없거나 삭제될 수 있으니 주의하시기 바랍니다.&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;d_dataset &amp;lt;- 
  data.frame(
    variable = character(),
    before = numeric(),
    after = numeric(),
    stringsAsFactors = FALSE)

d_dataset &amp;lt;- 
  rbind(
    d_dataset,
      data.frame(
        variable = &quot;test&quot;,
        before = 9,
        after = 12,
        stringsAsFactors = FALSE))  

print(d_dataset)

variable before after  
1     test      9    12
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTH.&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;data.frame을 구성하는 대신&lt;/font&gt;&lt;/font&gt;&lt;code&gt;numeric(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;as.numeric(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;pre&gt;&lt;code&gt;a&amp;lt;-data.frame(one=as.numeric(0), two=as.numeric(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;a
#    one two
#1   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;pre&gt;&lt;code&gt;a&amp;lt;-rbind(a,c(5,6))
a
#    one two
#1   0   0
#2   5   6
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 네거티브 인덱싱을 사용하여 첫 번째(보기) 행을 제거합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a&amp;lt;-a[-1,]
a

#    one two
#2   5   6
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고: 인덱스(맨 왼쪽)를 엉망으로 만듭니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 그것을 예방하는 방법을 찾지 못했지만(다른 사람은?), 대부분의 경우 그것은 아마 중요하지 않을 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 존경할 만한 R의 귀찮음을 조사하는 것이 나를 이 페이지로 이끌었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;OP(losing 필드명)가 제기하는 문제를 해결할 뿐만 아니라 모든 분야가 원치 않게 인자로 전환되는 것을 막아주는 Georg의 훌륭한 답변(https://stackoverflow.com/a/41609844/2757825), 에 조금 더 설명을 덧붙이고 싶었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 그 두 가지 문제가 잘 맞습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 추가 코드를 작성하는 것을 수반하지 않지만 두 가지 다른 연산을 보존하는 R 기반 솔루션을 원했습니다. 데이터 프레임을 정의하고 행을 추가합니다. 이것이 Georg의 대답이 제공하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래의 첫 두 예는 문제를 설명하고 세 번째와 네 번째는 Georg의 해결책을 보여줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예제 1: 새 행을 벡터로 추가하고 rbind를 사용합니다.&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;/ul&gt; 
&lt;pre&gt;&lt;code&gt;my.df &amp;lt;- data.frame(
    table = character(0),
    score = numeric(0),
    stringsAsFactors=FALSE
    )
my.df &amp;lt;- rbind(
    my.df, 
    c(&quot;Bob&quot;, 250) 
    )
    
my.df
  X.Bob. X.250.
1    Bob    250

str(my.df)
'data.frame':   1 obs. of  2 variables:
 $ X.Bob.: Factor w/ 1 level &quot;Bob&quot;: 1
 $ X.250.: Factor w/ 1 level &quot;250&quot;: 1

&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예제 2: 새 행을 rbind 내부의 데이터 프레임으로 추가&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;/ul&gt; 
&lt;pre&gt;&lt;code&gt;my.df &amp;lt;- data.frame(
    table = character(0),
    score = numeric(0),
    stringsAsFactors=FALSE
    )
my.df &amp;lt;- rbind(
    my.df, 
    data.frame(name=&quot;Bob&quot;, score=250) 
    )
    
my.df
      name score
1 Bob  250

str(my.df)
'data.frame':   1 obs. of  2 variables:
 $ name : Factor w/ 1 level &quot;Bob&quot;: 1
 $ score: num 250
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예제 3: rbind 내부의 새 행을 데이터 프레임으로 추가하고 문자열AsFactors= false&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;/ul&gt; 
&lt;pre&gt;&lt;code&gt;my.df &amp;lt;- data.frame(
    table = character(0),
    score = numeric(0),
    stringsAsFactors=FALSE
    )
my.df &amp;lt;- rbind(
    my.df, 
    data.frame(name=&quot;Bob&quot;, score=250, stringsAsFactors=FALSE) 
    )
    
my.df
      name score
1 Bob  250

str(my.df)
'data.frame':   1 obs. of  2 variables:
 $ name : chr &quot;Bob&quot;
 $ score: num 250
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예제 4: 예제 3처럼 여러 행을 한 번에 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;my.df &amp;lt;- data.frame(
    table = character(0),
    score = numeric(0),
    stringsAsFactors=FALSE
    )
my.df &amp;lt;- rbind(
    my.df, 
    data.frame(
        name=c(&quot;Bob&quot;, &quot;Carol&quot;, &quot;Ted&quot;), 
        score=c(250, 124, 95), 
        stringsAsFactors=FALSE) 
    )

str(my.df)
'data.frame':   3 obs. of  2 variables:
 $ name : chr  &quot;Bob&quot; &quot;Carol&quot; &quot;Ted&quot;
 $ score: num  250 124 95

my.df
   name score
1   Bob   250
2 Carol   124
3   Ted    95

&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;add_row&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로부터&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tibble&lt;/code&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;tibble::add_row(a, one = c(5, 10), two = c(6, 8))
&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;  one two
1   5   6
2  10   8
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/5231540/r-losing-column-names-when-adding-rows-to-an-empty-data-frame&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>DataFrame</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1663</guid>
      <comments>https://copyscript.tistory.com/1663#entry1663comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:56:29 +0900</pubDate>
    </item>
    <item>
      <title>입력 type= 텍스트를 비활성화하는 방법?</title>
      <link>https://copyscript.tistory.com/1662</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;입력 type= 텍스트를 비활성화하는 방법?&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;text&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;document.getElementById('foo').disabled = true;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.getElementById('foo').readOnly = 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;readOnly&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Firefox(마법)에서 올바르게 작동하려면 camelCase에 있어야 합니다.&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;데모: https://jsfiddle.net/L96svw3c/ -- 간의 차이점을 어느 정도 설명합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;disabled&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;readOnly&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터베이스에 값이 있기 때문에 그런 것처럼 들리는 페이지를 렌더링할 때 알고 있다면 자바스크립트 대신 렌더링할 때 비활성화하는 것이 좋습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하려면 속성(또는 양식 제출에서 제거하려는 경우)을 에 추가하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 다음과 같이:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;text&quot; disabled=&quot;disabled&quot; /&amp;gt;
//or...
&amp;lt;input type=&quot;text&quot; readonly=&quot;readonly&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;em&gt;경우에는&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;태그를 표시합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그럼에도 불구하고 태그에서 바로 비활성화할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type='text' value='${magic.database.value}' disabled&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나중에 자바스크립트로 비활성화해야 할 경우 &quot;disabled&quot; 속성을 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.getElementById('theInput').disabled = 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;&amp;lt;input&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 경험으로는 배치 문제를 일으킨다는 겁니다&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;텍스트가 길다면, 다음은.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자는 텍스트를 스크롤해야 하는데, 이것은 일반적인 사람들이 추측하는 것이 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 당신이 그것을 A로 떨어뜨린다면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;좀 더 유연한 스타일링을 할 수 있을 것 같아요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원하는 대로 입력 상자에 대한 참조 가져오기(예:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;document.getElementById('mytextbox')&lt;/code&gt;&lt;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;/p&gt; 
&lt;pre&gt;&lt;code&gt;myInputBox.readonly = true;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 이 속성을 인라인으로 추가할 수도 있습니다(JavaScript는 필요 없음).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;text&quot; value=&quot;from db&quot; readonly=&quot;readonly&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jquery를 사용할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#foo')[0].disabled = true;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작동 예:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/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;$('#foo')[0].disabled = true;&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;input id=&quot;foo&quot; placeholder=&quot;placeholder&quot; value=&quot;value&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DOM 요소를 가져와 &lt;strong&gt;비활성화&lt;/strong&gt;된 속성을 &lt;strong&gt;true&lt;/strong&gt;/&lt;strong&gt;false&lt;/strong&gt;로 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://vuejs.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;vue&lt;/a&gt; framework를 사용한다면, 여기 아주 쉬운 데모가 있습니다.&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;  let vm = new Vue({
        el: &quot;#app&quot;,
        data() {
            return { flag: true }
        },
        computed: {
            btnText() {
                return this.flag ? &quot;Enable&quot; : &quot;Disable&quot;;
            }
        }
    })&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js&quot;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;div id=&quot;app&quot;&amp;gt;
    &amp;lt;input type=&quot;text&quot; value=&quot;something&quot; :disabled=&quot;flag&quot; /&amp;gt;
    &amp;lt;input type=&quot;button&quot; :value=&quot;btnText&quot; @click=&quot;flag=!flag&quot;&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;// CSS Markup
        .disabled-input {
                     pointer-events: none;
                    }
// HTML
    &amp;lt;input class=&quot;disabled-input&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;순수 CSS 접근 방식을 찾고 있다면 클래스에 다음 속성을 부여하여 비활성화할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/2874688/how-to-disable-an-input-type-text&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>JavaScript</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1662</guid>
      <comments>https://copyscript.tistory.com/1662#entry1662comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:56:19 +0900</pubDate>
    </item>
    <item>
      <title>현재 디렉터리에서 .tar.gz를 추출하는 방법? (하위 폴더 없음)</title>
      <link>https://copyscript.tistory.com/1661</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 디렉터리에서 .tar.gz를 추출하는 방법? (하위 폴더 없음)&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;topic&lt;/a&gt; 외의&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 답변을 받지 않고 있습니다.&lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;hr class=&quot;my12 outline-none baw0 bb bc-powder-400&quot;&gt; 
  &lt;div class=&quot;fw-nowrap fc-black-600&quot;&gt; 
   &lt;div class=&quot;d-flex fd-column lh-md&quot;&gt; 
    &lt;div class=&quot;mb0 d-flex&quot;&gt; 
     &lt;div class=&quot;flex--item mr8&quot;&gt; 
      &lt;svg aria-hidden=&quot;true&quot; class=&quot;svg-icon iconLightbulb&quot; width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 18 18&quot;&gt;
       &lt;path d=&quot;M15 6.38A6.48 6.48 0 0 0 7.78.04h-.02A6.49 6.49 0 0 0 2.05 5.6a6.31 6.31 0 0 0 2.39 5.75c.49.39.76.93.76 1.5v.24c0 1.07.89 1.9 1.92 1.9h2.75c1.04 0 1.92-.83 1.92-1.9v-.2c0-.6.26-1.15.7-1.48A6.32 6.32 0 0 0 15 6.37ZM4.03 5.85A4.49 4.49 0 0 1 8 2.02a4.48 4.48 0 0 1 5 4.36 4.3 4.3 0 0 1-1.72 3.44c-.98.74-1.5 1.9-1.5 3.08v.1H7.2v-.14c0-1.23-.6-2.34-1.53-3.07a4.32 4.32 0 0 1-1.64-3.94ZM10 18a1 1 0 0 0 0-2H7a1 1 0 1 0 0 2h3Z&quot;&gt;&lt;/path&gt;
      &lt;/svg&gt; 
     &lt;/div&gt; 
     &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;이 질문을 개선하고 싶으십니까?&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스택 오버플로의 &lt;a href=&quot;/help/on-topic&quot;&gt;주제가&lt;/a&gt; 되도록 &lt;a href=&quot;/posts/11362273/edit&quot;&gt;질문을 업데이트&lt;/a&gt;합니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;mb0 mt6 d-flex&quot;&gt; 
     &lt;p class=&quot;ml24 pl2&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;span class=&quot;relativetime&quot; title=&quot;2012-07-07 05:49:01Z&quot; papago-attr-id=&quot;1&quot;&gt;11년 전&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/11362273/edit&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 질문을 개선합니다.&lt;/font&gt;&lt;/a&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 셸에서 Wordpress latest.tar.gz 파일을 추출할 때는 내부에서 추출합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/wordpress/&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;폴더.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일을 실제 현재 디렉터리에 배치하도록 하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 자동 대본을 만들어서 제가 할 생각이었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mv /wordpress/* ./*&lt;/code&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;--strip-components=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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;부터&lt;/font&gt;&lt;/font&gt;&lt;code&gt;man tar&lt;/code&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;--strip-components NUMBER, --strip-path NUMBER
strip NUMBER  of    leading  components  from  file  names  before
extraction

(1) tar-1.14 uses --strip-path, tar-1.14.90+ uses --strip-compo-
nents
&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;tar --version
&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;tar zxvf --strip-components 1 YOURTARFILE.tar.gz
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;버전 1.14.90+ 또는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;tar zxvf --strip-path 1 YOURTARFILE.tar.gz
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전 버전의 경우.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론 간단한 명령어 체인을 만들 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;tar zxvf YOURTARFILE.tar.gz &amp;amp;&amp;amp; mv wordpress/* . &amp;amp;&amp;amp; rmdir wordpress
&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;gunzip latest.tar.gz
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최신 .tar 파일이 남아있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작업 폴더에 해당 파일을 추출하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;tar -x --xform s/wordpress// -f latest.tar
&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/11362273/how-to-extract-tar-gz-on-current-directory-no-subfolder&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>WordPress</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1661</guid>
      <comments>https://copyscript.tistory.com/1661#entry1661comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:56:12 +0900</pubDate>
    </item>
    <item>
      <title>데이터베이스, 테이블 및 열 이름 지정 규칙?</title>
      <link>https://copyscript.tistory.com/1660</link>
      <description>&lt;h2&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;b&gt;이 질문을 개선하고 싶으십니까?&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;/posts/7662/edit&quot;&gt;이 게시물을 편집&lt;/a&gt;하여 사실과 인용으로 답변할 수 있도록 질문을 업데이트합니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;mb0 mt6 d-flex&quot;&gt; 
     &lt;p class=&quot;ml24 pl2&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;span class=&quot;relativetime&quot; title=&quot;2013-07-2907:14:27Z&quot; papago-attr-id=&quot;1&quot;&gt;10년 전&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/7662/edit&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 질문을 개선합니다.&lt;/font&gt;&lt;/a&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터베이스를 설계할 때마다 데이터베이스에 항목 이름을 지정하는 가장 좋은 방법이 있는지 항상 고민합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 종종 다음과 같은 질문을 합니다.&lt;/font&gt;&lt;/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;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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Microsoft SQL Server 샘플 데이터베이스를 확인하는 것이 좋습니다. https://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;AdventureWorks 샘플은 데이터베이스 개체 구성에 스키마 이름을 사용하는 매우 명확하고 일관된 명명 규칙을 사용합니다.&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;font papago-translate=&quot;translated&quot;&gt;스킴 이름.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블 이름)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파스칼 케이싱(일명 상부 낙타 케이스)&lt;/font&gt;&lt;/li&gt; 
&lt;/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;strong&gt;복수의 테이블 이름:&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;저&lt;/em&gt;의 취향은 복수입니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;단수&lt;/strong&gt; 열 &lt;strong&gt;이름:&lt;/strong&gt; 예&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;접두사 테이블 또는 열:&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;표&lt;/em&gt;: *일반적으로* 접두사가 없는 것이 가장 좋습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&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;/li&gt; 
&lt;/ul&gt; 
&lt;ol start=&quot;4&quot;&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;표&lt;/strong&gt;와 열 모두 항목 &lt;strong&gt;이름을 지정&lt;/strong&gt;할 때 &lt;strong&gt;PascalCase&lt;/strong&gt;를 사용합니다&lt;strong&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정교화:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(1) &lt;em&gt;&lt;strong&gt;당신이 해야&lt;/strong&gt;&lt;/em&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;em&gt;해야&lt;/em&gt; 할 일은 매우 적지만, 몇 가지가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;[[singularOfTableName]]을(를) 사용하여 &lt;strong&gt;기본&lt;/strong&gt; 키 &lt;strong&gt;이름&lt;/strong&gt; 지정&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ID&quot; 형식입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 테이블 이름이 &lt;em&gt;고객&lt;/em&gt;이든 &lt;em&gt;고객&lt;/em&gt;이든 기본 키는 &lt;em&gt;고객&lt;/em&gt;이어야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;신분증&lt;/em&gt;.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 &lt;strong&gt;외부 키의 이름&lt;/strong&gt;은 서로 다른 테이블에서 &lt;strong&gt;일관&lt;/strong&gt;되게 지정해야 &lt;strong&gt;&lt;em&gt;합니다&lt;/em&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;em&gt;종종&lt;/em&gt; 중요하지만 일관된 외국 키 명명은 항상 &lt;em&gt;중요&lt;/em&gt;하다고 제출할 것입니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터베이스에 &lt;strong&gt;내부 규약&lt;/strong&gt;이 있어야 합니다.&lt;/font&gt;&lt;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;em&gt;고객&lt;/em&gt;이라고 부르든 고객이라고 부르든 동일한 데이터베이스를 통해 동일한 방식으로 테이블을 수행하는 것보다 덜 중요합니다.&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;이렇게 하지 않으면 자존감이 낮아야 할 나쁜 사람입니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(2) &lt;em&gt;&lt;strong&gt;당신이 해야&lt;/strong&gt;&lt;/em&gt; 할 일&lt;em&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&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;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블 또는 열 이름에서 단어를 구분하려면 PascalCasing을 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;낙타 케이싱을 사용하는 것은 본질적으로 문제가 되지는 않겠지만, 그것은 관습이 아니며 재미있어 보일 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;잠시후에 밑줄을 다루겠습니다. (옛날처럼 ALLCAPS를 사용할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;불쾌할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NOTRAY_COLUMN은 20년 전 DB2에서는 괜찮았지만 지금은 아닙니다.)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단어를 인위적으로 줄이거나 축약하지 마십시오.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이름은 짧고 헷갈리는 것보다 길고 명확한 것이 더 좋습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아주 짧은 이름들은 더 어둡고 야만적인 시대로부터 오는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Cus_AddRef.&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;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(3) &lt;em&gt;&lt;strong&gt;당신이 고려&lt;/strong&gt;&lt;/em&gt;해야 할 것&lt;em&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/em&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;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;em&gt;프로모션&lt;/em&gt; 및 &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;내가 생각하는 아이템(일대다 관계 반영)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;밑줄을 특정 용도로 일관되게 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파스칼케이싱을 사용하면 일반 테이블 이름이 충분히 명확해야 합니다. 단어를 구분하기 위해 밑줄이 필요하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;밑줄을 저장하여 연관표를 나타내거나 접두사를 붙이기 위해 (a) 밑줄을 저장합니다. 다음 글에서 다룰 것입니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;접두사는 좋지도 나쁘지도 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 &lt;em&gt;보통&lt;/em&gt; 최고가 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 첫번째 db나 두개의 db에서, 저는 표의 일반적인 주제 그룹화를 위해 접두사를 사용하는 것을 제안하지 않습니다.&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;경험을 통해 해보다 해를 끼치는 접두사 계획을 계획하고 적용할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터 테이블이 &lt;em&gt;tbl&lt;/em&gt;로 시작되는 db, &lt;em&gt;ctbl&lt;/em&gt;로 시작되는 config tables, views with &lt;em&gt;views&lt;/em&gt;, proc'&lt;em&gt;s&lt;/em&gt; sp, udf'&lt;em&gt;s&lt;/em&gt; fn 등에서 작업한 적이 있는데 꼼꼼하고 일관성 있게 적용되어 잘 되었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;접두사가 필요한 유일한 경우는 어떤 이유에서인지 동일한 DB에 상주하는 개별 솔루션이 있을 때입니다. 접두사를 붙이면 테이블을 그룹화하는 데 매우 도움이 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;눈에 띄고 싶은 임시 테이블과 같은 특수한 상황에서는 접두사를 붙여도 좋습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열 앞에 붙는 경우는 거의 없습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/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;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;쿼리에서 단수의 &quot;엔트리 이름&quot;을 보기를 원하는 사람들을 위해 테이블 별칭을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT person.Name
FROM People person
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;린큐의 &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;2, 3, 4에 대해서는 @Lars에 동의합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;3명의 DBA와 함께 데이터베이스 지원 팀에서 일하고 있으며 고려되는 옵션은 다음과 같습니다.&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;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이미 표준이 마련되어 있는 경우 이를 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 기준을 만들거나 기존 기준을 흐리게 해서는 안 됩니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우리는 테이블에 단수의 이름을 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표 앞에는 시스템 이름(또는 해당 약어)이 붙는 경향이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표를 논리적으로 그룹화하기 위해 접두사를 변경할 수 있으므로 시스템이 복잡한 경우에 유용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;reg_customer, reg_booking 및 regadmin_limits).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필드의 경우 필드 이름에 테이블의 접두사/아크릴론(즉, cust_address1)이 포함되어야 하며 표준 접미사 집합(PK의 경우 _id, &quot;코드&quot;의 경우 _cd, &quot;이름&quot;의 경우 _nm, &quot;숫자&quot;의 경우 _nb, &quot;날짜&quot;의 경우 _dt)을 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Forigen key 필드의 이름은 Primary key 필드와 같아야 합니다.&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;SELECT cust_nm, cust_add1, booking_dt
FROM reg_customer
INNER JOIN reg_booking
ON reg_customer.cust_id = reg_booking.cust_id
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새로운 프로젝트를 개발할 때, 선호하는 엔티티 이름, 접두사, 두문자어를 모두 적어 이 문서를 개발자들에게 주는 것을 추천합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음, 새로운 테이블을 만들기로 결정할 때, 테이블과 필드의 이름을 &quot;추측&quot;하는 대신 문서를 참조할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니요. 테이블은 해당 테이블이 나타내는 엔터티의 이름을 따서 명명해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사람이 아니라 기록 중 한 사람이 누구를 대표하는지를 말하는 것입니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다시 한 번, 똑같은 거.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;FirstName 열의 이름을 FirstName이라고 부르면 안 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 모든 것은 열로 무엇을 표현할 것인가에 달려 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니요.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네, 명확하게 설명해 주세요&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;FirstName&quot;과 같은 열이 필요한 경우에는 케이싱을 사용하면 읽기가 쉬워집니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;알겠습니다. 제 0.02달러입니다.&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;특히 DBA가 아닌 프로그래머로서는 사실이 아니라고 생각합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 알기로는 &quot;객체의 집합체이기 때문에 이해가 되는 것일 뿐&quot; 이외에 표명을 복수화할 정당한 이유가 없는 반면, 단수의 표명을 가짐으로써 코드상 정당한 이득이 있는 것으로 알고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어,&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 여러 가지 모호함으로 인한 버그와 실수를 방지합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로그래머들은 맞춤법 전문성으로 정확히 알려져 있지 않고, 몇몇 단어들을 복수화하는 것은 혼란스럽습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 복수형 단어는 'es'로 끝나나요, 아니면 그냥 's'로 끝나나요?&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;이것과 아주 비슷한 일이 저에게 일어났습니다.&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;/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;테이블 이름이 포함된 변수를 지정하고 &quot;Id&quot;를 끝까지 연결하면 추가 쿼리를 수행할 필요 없이 코드를 통해 테이블의 기본 키를 얻을 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 기본 키 끝에서 &quot;Id&quot;를 잘라내어 코드를 통해 테이블 이름을 결정할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 키에 테이블 이름이 없는 &quot;id&quot;를 사용하면 코드를 통해 기본 키에서 테이블 이름을 결정할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 테이블 이름과 접두사 PK 열을 복수화하는 대부분의 사람들은 PK에서 테이블 이름의 단수 버전(예: status, status_id)을 사용하므로 이 작업을 전혀 수행할 수 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블 이름을 단수로 만들 경우, 테이블 이름이 나타내는 클래스 이름과 일치하도록 할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다시 한 번 말하지만, 이것은 코드를 단순화할 수 있고 테이블 이름만 가지고 클래스를 인스턴스화하는 것과 같은 정말 깔끔한 일을 할 수 있게 해줍니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드의 일관성을 더 높여줄 뿐이고 그래서...&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블 이름을 단수로 만들면 모든 위치에서 일관성 있고 체계적이며 유지보수가 용이합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열 이름이든 클래스 이름이든 테이블 이름이든 코드의 모든 경우에 정확한 이름이 동일하다는 것을 알고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 데이터가 사용되는 모든 곳을 확인하기 위해 전역 검색을 수행할 수 있습니다.&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;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요약하자면, 테이블 이름을 복수화하면 코드를 더 똑똑하고 쉽게 만들 수 있는 모든 이점을 잃게 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블 이름을 객체 또는 로컬 코드 이름으로 변환하기 위해 룩업 테이블/어레이가 있어야 하는 경우도 있을 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단수 테이블 이름은 처음에는 좀 이상하게 느껴질지 몰라도 복수화된 이름에 비해 상당한 이점을 제공하며 최선의 방법이라고 생각합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 ISO/IEC 11179 스타일의 명명 규칙을 찬성하며, 규정적이라기 보다는 지침적인 것에 주목합니다.&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/Data_element_name&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;&quot;표는 개체 모음이며, 집합 명명 지침을 따릅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이상적으로, 집합적인 이름이 사용됩니다: 예를 들어, 인사.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;복수형도 맞습니다: 사원.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;잘못된 이름에는 다음과 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;직원, tbl 직원 및 직원 테이블&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;/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;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;절대 아닙니다. 컬렉션이라는 주장은 일리가 있지만 테이블에 무엇이 포함될지(0,1 또는 많은 항목) 알 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;복수의 규칙들은 명명을 불필요하게 복잡하게 만듭니다. 1 하우스, 2 하우스, 마우스 대 마우스, 사람 대 사람, 그리고 우리는 다른 언어들을 살펴보지도 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;Update person set property = 'value'&lt;/code&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;code&gt;Select * from person where person.name = 'Greg'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자 행 집합/행 집합을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열 이름은 단수여야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;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;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블이나 열 앞에 접두사를 붙여야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;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 papago-translate=&quot;translated&quot;&gt;테이블을 접두사하지는 않지만 접두사 뷰(v_) 및 저장 프로시저(sp_ 또는 f_(함수))를 수행합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;v_person.age를 업데이트하려는 사용자에게 도움이 됩니다. v_person.age는 보기에서 실제로 계산된 필드입니다(어쨌든 업데이트할 수 없습니다).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;키워드 충돌(delivery.from breaks, delivery_from)을 피할 수 있는 좋은 방법이기도 합니다.&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;code&gt;bob = new person()&lt;/code&gt;&lt;br&gt; &lt;code&gt;bob.person_name = 'Bob'&lt;/code&gt;&lt;br&gt; &lt;code&gt;bob.person_dob = '1958-12-21'&lt;/code&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;/p&gt; &lt;p&gt;&lt;code&gt;customer.customer_customer_type_id&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;customer와 customer_type 테이블 간의 관계를 나타내고 customer_type 테이블(customer_type_id)의 기본 키(customer_type_id)를 나타내며 쿼리를 디버깅하는 동안 'customer_customer_type_id'가 표시되면 해당 테이블의 위치를 즉시 알 수 있습니다(고객 테이블).&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 customer_type과 customer_category 간에 M-M 관계가 있는 경우(특정 카테고리에서만 사용 가능)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;customer_category_customer_type_id&lt;/code&gt;&lt;/p&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;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;위의 3개를 함께 사용하는 것도 합리적입니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 이런 것들은 대부분 선호하는 것들입니다. - 독자 분이 일관성을 유지하는 한, 이 책을 읽어야 하는 사람이라면 누구에게나 예측 가능합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ISO 11179-5: 이름 지정 및 식별 원칙 여기에서 확인할 수 있습니다: http://metadata-standards.org/11179/ #&lt;a href=&quot;http://metadata-standards.org/11179/#11179-5&quot; rel=&quot;noreferrer&quot;&gt;11179-5&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://sqlservercode.blogspot.com/2006/11/iso-11179-naming-conventions.html&quot; rel=&quot;noreferrer&quot;&gt;ISO-11179 Naming Conventions&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;게임이 늦었다는 것을 알고 있고, 질문은 이미 아주 잘 답했지만, 칼럼 이름의 접두사와 관련하여 #3에 대한 제 의견을 말씀드리고 싶습니다.&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;예: 표 &quot;customer&quot;와 &quot;address&quot;가 주어졌을 때, 각각 &quot;cust&quot;와 &quot;addr&quot;의 접두사를 사용해 보겠습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;customer&quot;는 &quot;cust_id&quot;, &quot;cust_name&quot; 등을 포함합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;address&quot;는 &quot;addr_id&quot;, &quot;addr_cust_id&quot;(고객에게 다시 돌려주는 FK), &quot;addr_street&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;이제 다시는 돌아갈 수 없을 만큼 충분히 경험했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 데이터베이스 스키마의 모든 열이 고유하게 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기에는 한 가지 주요 이점이 있는데, 이는 모든 반대 주장을 압도합니다. (물론 제 생각에는)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전체 코드 베이스를 검색하고 특정 열에 닿는 모든 코드 라인을 안정적으로 찾을 수 있습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;#1의 이점은 엄청나게 큽니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열을 삭제하고 스키마에서 안전하게 제거하기 전에 업데이트해야 할 파일을 정확히 알 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 열의 의미를 바꿀 수 있고 어떤 코드를 리팩토링해야 하는지 정확하게 알 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 열의 데이터가 시스템의 특정 부분에서 사용되고 있는지 여부를 간단히 알 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 잠재적으로 거대한 프로젝트를 단순한 프로젝트로 바꾼 횟수도, 개발 작업에 필요한 시간도 셀 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또 다른 비교적 작은 이점은 셀프 조인을 할 때 테이블 별칭만 사용하면 된다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT cust_id, cust_name, addr_street, addr_city, addr_state
    FROM customer
        INNER JOIN address ON addr_cust_id = cust_id
    WHERE cust_name LIKE 'J%';
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이에 대한 제 의견은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1) 아니요, 테이블 이름은 단수여야 합니다.&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 * from Orders&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;) OO 등가물에 대해서는 말이 안 됩니다 (&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Orders x = new Orders&lt;/code&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;DB의 테이블은 실제로 해당 엔티티의 집합입니다. set-logic을 사용하면 더욱 합리적입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select Orders.*
from Orders inner join Products
    on Orders.Key = Products.Key
&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;2) 그들은 하나의 속성만 보유하고 있으므로 단수여야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;3) 열 이름이 모호할 경우(위에서 둘 다 [Key]라는 열이 있는 경우) 테이블의 이름(또는 별칭)은 충분히 잘 구분할 수 있습니다.&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) 당신이 원하는게 뭐든 간에 캐피털 케이스는&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;애플리케이션이나 DB에서 선택하는 것이 일관성이 있다면 별로 중요하지 않다고 생각합니다.&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;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블 이름과 열 이름 모두에 대해 CamelCase(기본 설정) 또는 undercore_separated입니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 이미 언급했듯이, 어떤 컨벤션이라도 컨벤션이 없는 것보다는 낫습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;선택 방법에 상관없이 문서화하여 향후 수정사항이 동일한 규칙을 따르도록 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 각각의 질문에 대한 최선의 답변은 당신과 당신의 팀이 할 것이라고 생각합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;명명 규칙이 정확히 어떤 것인지 보다 명명 규칙을 갖는 것이 훨씬 더 중요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그에 대한 올바른 답은 없으므로, 시간을 갖고 (너무 많이는 아니지만) 자신만의 관습을 선택해야 하며,&lt;em&gt; 여기&lt;/em&gt;에 중요한 부분이를 고수해야 합니다.&lt;/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;ol&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;em&gt;배우들&lt;/em&gt;로 구성된 집합체를..&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;복수형.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안 써요.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 더 자주 사용하는 데이터베이스인 파이어버드는 모든 것을 대문자로 저장하므로 상관없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어쨌든 제가 프로그래밍을 할 때는 &lt;em&gt;Release&lt;/em&gt; Year처럼 읽기 쉽게 이름을 씁니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&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;ol start=&quot;2&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;아니요. 끔찍한 접두사를 봤는데, 테이블(tbl_)이나 사용자 스토어 절차(usp_)를 다루고 있다고까지 했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터베이스 이름 뒤에...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지 마!&lt;/font&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네. 저는 파스칼 케이스를 이용합니다. 제 테이블 이름은 모두&lt;/font&gt;&lt;/li&gt; 
  &lt;/ol&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;명명 규칙을 통해 개발 팀은 프로젝트의 핵심에서 발견 가능성과 유지보수성을 설계할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;좋은 명명 규칙은 진화하는 데 시간이 걸리지만 일단 실행되면 팀이 공통 언어를 사용하여 앞으로 나아갈 수 있습니다.&lt;/font&gt;&lt;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;em&gt;거래&lt;/em&gt;, 증권 &lt;em&gt;또는&lt;/em&gt; 거래 상대방을 &lt;em&gt;지칭&lt;/em&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;예. SQL 테이블에는 tb_, 뷰에는 vw_, 저장 프로시저에는 usp_, 트리거에는 tg_, 데이터베이스 이름 앞에 접두사가 붙습니다.&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;em&gt;sec_id&lt;/em&gt;, &lt;em&gt;sec_value&lt;/em&gt; 및 &lt;em&gt;security_id&lt;/em&gt;와 같은 이름 지정 문제가 프로젝트에 적용되기 전에 조기에 해결되도록 하는 사람이 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇다면 좋은 명명 규칙과 표준의 기본 원칙은 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;고객과 솔루션 도메인의 언어 사용&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;설명적이 되라.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일관성을&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;명확하지 않음, 반사 및 리팩터&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 사람에게 명확하지 않은 경우 약어를 사용하지 마십시오.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SQL 예약 키워드를 열 이름으로 사용 안 함&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;저는 부분적으로 정의된 사양에 의존하기보다는 제가 따를 수 있는 간단한 사양을 찾고 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://justinsomnia.org/writings/naming_conventions.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://justinsomnia.org/writings/naming_conventions.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;SELECT 
   UserID, FirstName, MiddleInitial, LastName
FROM Users
ORDER BY LastName
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블 이름은 개체 집합을 나타내므로 항상 단수여야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여러분이 말하는 양떼나 떼는 새떼를 가리킵니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;복수는 필요 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표 이름이 두 개의 이름으로 구성되어 있고 명명 규칙이 복수일 때 복수의 이름이 첫 번째 단어인지 두 번째 단어인지 아니면 둘 다인지 알 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;논리입니다 – Object.instance, object.instance가 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 TableName.column이 아니라 TableName.column입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Microsoft SQL은 대소문자를 구분하지 않으므로 대문자를 사용하는 경우 테이블 이름을 읽기 쉬우며 둘 이상의 이름으로 구성된 테이블 또는 열 이름을 구분할 수 있습니다.&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;/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;그러나 동일한 유형의 속성이 n개인 경우에는 1, 2, ..., n 등으로 접미사를 붙여야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표 / 열 접두사:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 엄청난 주제입니다, 나중에 논의하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;케이스: 카멜 케이스여야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저의 친구 패트릭 카처(&lt;strong&gt;Patrick Karcher&lt;/strong&gt;)는 &quot;•또한 외국어 키는 서로 다른 표에 일관되게 이름을 붙여야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하지 않는 사람을 때리는 것은 합법적이어야 합니다.&quot;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;친구 패트릭이 이런 실수를 한 적은 없지만, 전반적으로 글을 쓰고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 그들이 함께 이것 때문에 당신을 이길 계획이라면요? :)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파티에 매우 늦었지만 나는 여전히 칼럼 접두사에 대한 나의 2센트를 추가하고 싶었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열 이름 자체가 전체 데이터베이스에서 고유하다는 사실에 근거하여 열에 대해 table_column(또는 tableColumn) 명명 표준을 사용하는 데는 두 가지 주요 논거가 있는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1) 쿼리에서 항상 테이블 이름 및/또는 열 별칭을 지정할 필요는 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2) 열 이름에 대한 전체 코드를 쉽게 검색할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 두 주장 모두 결함이 있다고 생각합니다.&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;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SQL에서 항상 테이블 이름을 사용합니다. 예를 들어, 항상 컬럼 대신 table.column을 사용합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 table_column 대신 table.column을 검색하면 되기 때문에 2)를 해결할 수 있습니다.&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 papago-translate=&quot;translated&quot;&gt;정확히 이것을 피하는 것이었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네, 그렇습니다. 하지만 해결책이 끔찍할 정도로 결함이 많았습니다. 왜죠?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;접두사 솔루션은 다음과 같이 요약됩니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모호성이 있을 때 table.column을 지정할 필요가 없도록 모든 열 이름을 table_column으로 지정합니다!&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;하지만 어쨌든 그렇게 해야 한다면, 항상 명확하게 table.column을 쓰는 것이 어떤 이점이 있습니까?&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;edit: 예, 접두사를 사용하여 열 이름을 지정하면 올바른 사용법이 적용되는 반면, 제 접근 방식은 프로그래머에 의존한다는 것을 알고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://justinsomnia.org/2003/04/essential-database-naming-conventions-and-style/&quot; rel=&quot;nofollow&quot;&gt;필수 데이터베이스 이름&lt;/a&gt; 지정 &lt;a href=&quot;http://justinsomnia.org/2003/04/essential-database-naming-conventions-and-style/&quot; rel=&quot;nofollow&quot;&gt;규칙(및&lt;/a&gt; 스타일&lt;a href=&quot;http://justinsomnia.org/2003/04/essential-database-naming-conventions-and-style/&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;테이블 이름은 짧고 모호하지 않은 이름을 선택합니다. 한 두 단어 이하의 단어를 사용하는 구별된 테이블은 고유한 필드 이름의 명명을 용이하게 할 뿐만 아니라 조회 및 연결 테이블은 테이블에 결코 복수가 아닌 단수 이름을 부여합니다. (업데이트: 나는 여전히 이 관례에 주어진 이유에 동의하지만, 대부분의 사람들은 정말로 복수의 테이블 이름을 좋아합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 입장을 누그러뜨렸습니다).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위의 링크를 따라주시기 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블 이름은 단수입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 누군가와 그들의 주소 사이의 관계를 모델링했다고 가정해 보겠습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 데이터 모델을 읽는 경우 '각 사람은 0, 1 또는 여러 주소에 거주할 수 있습니다' 또는 '각 사람은 0, 1 또는 여러 주소에 거주할 수 있습니다'를 선호합니다.&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;
--Example SQL

CREATE TABLE D001_Students
(
    StudentID INTEGER CONSTRAINT nnD001_STID NOT NULL,
    ChristianName NVARCHAR(255) CONSTRAINT nnD001_CHNA NOT NULL,
    Surname NVARCHAR(255) CONSTRAINT nnD001_SURN NOT NULL,
    CONSTRAINT pkD001 PRIMARY KEY(StudentID)
);

CREATE INDEX idxD001_STID on D001_Students;

CREATE TABLE D002_Classes
(
    ClassID INTEGER CONSTRAINT nnD002_CLID NOT NULL,
    StudentID INTEGER CONSTRAINT nnD002_STID NOT NULL,
    ClassName NVARCHAR(255) CONSTRAINT nnD002_CLNA NOT NULL,
    CONSTRAINT pkD001 PRIMARY KEY(ClassID, StudentID),
    CONSTRAINT fkD001_STID FOREIGN KEY(StudentID) 
        REFERENCES D001_Students(StudentID)
);

CREATE INDEX idxD002_CLID on D002_Classes;

CREATE VIEW V001_StudentClasses
(
    SELECT
        D001.ChristianName,
        D001.Surname,
        D002.ClassName
    FROM
        D001_Students D001
            INNER JOIN
        D002_Classes D002
            ON
        D001.StudentID = D002.StudentID
);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것들은 제가 배운 관습들이지만, 여러분은 개발 호스가 무엇을 사용하든 적응해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;복수. 개체들의 집합체입니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예. 속성은 개체의 특이한 속성을 나타냅니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예, 접두사 테이블 이름을 사용하면 모든 제약 조건 인덱스와 테이블 별칭을 쉽게 추적할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블 및 열 이름은 Pascal Case, 인덱스 및 제약 조건은 접두사 + ALL 캡.&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/7662/database-table-and-column-naming-conventions&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>database</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1660</guid>
      <comments>https://copyscript.tistory.com/1660#entry1660comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:56:06 +0900</pubDate>
    </item>
    <item>
      <title>formData 개체가 jquery AJAX post와 함께 작동하지 않습니까?</title>
      <link>https://copyscript.tistory.com/1659</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;formData 개체가 jquery AJAX post와 함께 작동하지 않습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드로 바로 이동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var formData = new FormData();

formData.append('name', dogName);
formData.append('weight', dogWeight);
formData.append('activity', dogActivity);
formData.append('age', dogAge);
formData.append('file', document.getElementById(&quot;dogImg&quot;).files[0]);
console.log(formData);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서버에 비동기적인 모든 정보를 보내기 위해 formData 객체에 몇 가지 문자열과 하나의 파일 객체를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 직후에 저는 jquery ajax 요청이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
  type: &quot;POST&quot;,
  url: &quot;/foodoo/index.php?method=insertNewDog&quot;,
  data: JSON.stringify(formData),
  processData: false,  // tell jQuery not to process the data
  contentType: &quot;multipart/form-data; charset=utf-8&quot;,
  success: function(response){
     console.log(response);
  },
  error: function(){
  }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 나는 여기서 서버에 정보를 게시하려고 하는데, 서버 php 파일에 POST의 간단한 print_r을 가지고 있어서 무엇이 통과하고 무엇이 되지 않는지 봅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유감스럽게도 console.log(데이터)의 응답이 비어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 Network(네트워크) 탭에서 Header(헤더)를 선택하면 다음과 같은 빈 출력이 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kT9ED.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kT9ED.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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery를 통해 ajax 요청을 보낼 때 FormData를 보낼 필요가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JSON.stringify&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;multipart/form-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;boundry&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;- 이와 같은 것&lt;/font&gt;&lt;/font&gt;&lt;code&gt;multipart/form-data; boundary=----WebKitFormBoundary0BPm0koKA&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery ajax를 통해 일부 파일을 포함한 FormData를 보내려면 다음 작업을 수행해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;세트&lt;/font&gt;&lt;/font&gt;&lt;code&gt;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;/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;processData&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;false&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(jQuery가 자동으로 데이터를 쿼리 문자열로 변환하는 것을 방지할 수 있습니다.)&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;셋 더&lt;/font&gt;&lt;/font&gt;&lt;code&gt;contentType&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;false&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(그렇지 않으면 jQuery가 잘못 설정하기 때문에 이 작업이 필요합니다.)&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요청 내용은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var formData = new FormData();

formData.append('name', dogName);
// ... 
formData.append('file', document.getElementById(&quot;dogImg&quot;).files[0]);


$.ajax({
    type: &quot;POST&quot;,
    url: &quot;/foodoo/index.php?method=insertNewDog&quot;,
    data: formData,
    processData: false,
    contentType: false,
    success: function(response) {
        console.log(response);
    },
    error: function(errResponse) {
        console.log(errResponse);
    }
});
&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;its working&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;intelligence and quick wath&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신에게 그것을 말하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;not working&lt;/code&gt; &lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ydoCS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ydoCS.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 걱정하지마, 봐봐요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;network tap&lt;/code&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;a href=&quot;https://i.stack.imgur.com/hCXvl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hCXvl.png&quot; alt=&quot;enter image description here&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;그것의 작용.&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 당신의 시간을 절약하길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;//For those who use plain javascript

var form = document.getElementById('registration-form'); //id of form
var formdata = new FormData(form);
var xhr = new XMLHttpRequest();
xhr.open('POST','form.php',true);
// xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
//if you have included the setRequestHeader remove that line as you need the 
// multipart/form-data as content type.
xhr.onload = function(){
 console.log(xhr.responseText);
}
xhr.send(formdata);
&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/32421527/formdata-object-not-working-with-jquery-ajax-post&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>Ajax</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1659</guid>
      <comments>https://copyscript.tistory.com/1659#entry1659comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:55:54 +0900</pubDate>
    </item>
    <item>
      <title>Oracle 데이터베이스를 Mathematica에 연결하는 방법은?</title>
      <link>https://copyscript.tistory.com/1658</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle 데이터베이스를 Mathematica에 연결하는 방법은?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오라클 데이터베이스를 Mathematica 8에 연결하려고 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 &lt;a href=&quot;https://stackoverflow.com/questions/6863566/using-mathematica-in-mysql-databases&quot;&gt;질문&lt;/a&gt;은 이미 MySQL &lt;a href=&quot;https://stackoverflow.com/questions/6863566/using-mathematica-in-mysql-databases&quot;&gt;데이터베이스&lt;/a&gt;에 대해 어떻게 처리할 수 있는지를 알려주었지만 저에게는 통하지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Needs[&quot;DatabaseLink&quot;] AND conn = OpenSQLConnection[JDBC[&quot;MySQL(Connector/J)&quot;, 
&quot;yourserver/yourdatabase&quot;], &quot;Username&quot; -&amp;gt; &quot;yourusername&quot;, &quot;Password&quot; -&amp;gt; &quot;yourpassword&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;filepath = &quot;C:\oracle\ora92\network\ADMIN\tnsnames.ora&quot;; HOST; PORT; username; password;

conn = OpenSQLConnection[JDBC[&quot;MySQL(Connector/J)&quot;, HOST], &quot;Username&quot; -&amp;gt; username, &quot;Password&quot; -&amp;gt; password]

Error message: JDBC::error: 
    Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. 
    The driver has not received any packets from the server. &amp;gt;&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;Mathematica 8에는 Oracle 드라이버가 미리 장착되어 있지 않습니다. 이 사실은 다음 식을 평가하여 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Needs[&quot;DatabaseLink`&quot;]
JDBCDriverNames[]
(*
Out[2]= {Microsoft Access(ODBC),hsqldb,HSQL(Memory),HSQL(Server),
         HSQL(Server+TLS),HSQL(Standalone),HSQL(Webserver),HSQL(Webserver+TLS),
         jtds_sqlserver,jtds_sybase,mysql,MySQL(Connector/J),ODBC(DSN),odbc,
         PostgreSQL,Microsoft SQL Server(jTDS),Sybase(jTDS),HSQL 2.0.1}
*)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 JDBC 드라이버를 설치하는 방법을 설명하는 Mathematica &lt;a href=&quot;http://reference.wolfram.com/mathematica/DatabaseLink/tutorial/DatabaseResources.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;설명서&lt;/a&gt;의 지침을 따라야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;먼저 필요한 JDBC 드라이버 JAR 파일을 배치할 새 리소스 디렉토리를 생성해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$jarDirectory =
  CreateDirectory @
    FileNameJoin @
      {$UserBaseDirectory, &quot;Applications&quot;, &quot;Oracle&quot;, &quot;Java&quot;}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음으로 사용할 JDBC 드라이버를 선택해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;관련 &lt;a href=&quot;http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Oracle 페이지&lt;/a&gt;를 방문하여 데이터베이스에 맞는 올바른 JDBC 드라이버를 찾습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Mathematica 8이 내부적으로 사용하는 버전인 Java 6와 호환되는 드라이버 버전을 선택했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 예에서는 Java 6용 Oracle 11.2.0.2.0 드라이버를 사용하기로 했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일을 다운로드한 다음 방금 만든 리소스 디렉토리로 이동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SystemOpen[$jarDirectory]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음으로 새 드라이버가 Mathematica에 등록되도록 JDBC 드라이버 구성 파일을 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$configDirectory =
  CreateDirectory @
    FileNameJoin @
      {$UserBaseDirectory, &quot;Applications&quot;, &quot;Oracle&quot;, &quot;DatabaseResources&quot;}

Export[
  FileNameJoin @ {$configDirectory, &quot;Oracle.m&quot;}
, JDBCDriver[
    &quot;Name&quot; -&amp;gt; &quot;Oracle&quot;
  , &quot;Driver&quot; -&amp;gt; &quot;oracle.jdbc.driver.OracleDriver&quot;
  , &quot;Protocol&quot; -&amp;gt; &quot;jdbc:oracle:thin:@&quot;
  , &quot;Version&quot; -&amp;gt; 1
  ]
, &quot;Text&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;JDBCDriverNames[]
(*
Out[9]= {Oracle,Microsoft Access(ODBC),hsqldb,HSQL(Memory),HSQL(Server),
         HSQL(Server+TLS),HSQL(Standalone),HSQL(Webserver),HSQL(Webserver+TLS),
         jtds_sqlserver,jtds_sybase,mysql,MySQL(Connector/J),ODBC(DSN),odbc,
         PostgreSQL,Microsoft SQL Server(jTDS),Sybase(jTDS),HSQL 2.0.1}
*)
&lt;/code&gt;&lt;/pre&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;$connection =
  OpenSQLConnection[
    JDBC[&quot;Oracle&quot;, &quot;myserver:1521:mysid&quot;]
  , &quot;Username&quot; -&amp;gt; &quot;scott&quot;
  , &quot;Password&quot; -&amp;gt; &quot;tiger&quot;
  ]

SQLExecute[$connection, &quot;SELECT 'success!' FROM DUAL&quot;]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;... 여기서 &lt;em&gt;myserver&lt;/em&gt;는 데이터베이스 서버 이름, &lt;em&gt;1521&lt;/em&gt;은 수신기 포트 번호, &lt;em&gt;mysid&lt;/em&gt;는 Oracle System ID(SID)입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle JDBC URL은 다양한 형태로 제공됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자세한 내용은 &lt;a href=&quot;http://www.orafaq.com/wiki/JDBC#Thin_driver&quot; rel=&quot;nofollow noreferrer&quot;&gt;Oracle FAQ&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;JDBC 드라이버를 잘못 사용하고 있는 것 같습니다. MySQL 드라이버가 아닌 Oracle JDBC 드라이버를 사용해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용할 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DatabaseLink&lt;/code&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;OpenSQLConnection[
  JDBC[
   &quot;oracle.jdbc.driver.OracleDriver&quot;, 
   &quot;jdbc:oracle:thin:@server:port:dbname&quot;
  ], 
  &quot;Name&quot; -&amp;gt; &quot;dbname&quot;, 
  &quot;Username&quot; -&amp;gt; &quot;YourUserName&quot;, 
  &quot;Password&quot; -&amp;gt; &quot;YourPassword&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;Mathematica가 찾을 수 있는 곳에 적절한 Oracle JDBC 드라이버(Oracle db 버전에 해당)를 넣어야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 절차는 DatabaseLink, &lt;a href=&quot;http://reference.wolfram.com/mathematica/DatabaseLink/tutorial/DatabaseConnections.html&quot; rel=&quot;noreferrer&quot;&gt;섹션&lt;/a&gt;에 대한 설명서에 설명되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JDBC Connections&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 를 실행하여 Mathematica에 어떤 JDBC 드라이버가 보이는지 테스트할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JDBCDrivers[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. DB 버전인 b.t.w.에 해당하는 올바른 드라이버를 설치하고 사용하는지 확인하십시오. 드라이버 버전을 잘못 사용하면 매우 고약하고 명확하지 않은 버그가 발생할 수 있습니다(이는 Mathematica와 무관함).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle의 경우 MySQL JBDC 연결을 사용하지 않는 것이 좋을 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Mathematica 5.2를 위한 것이기는 하지만, 여기 당신이 무언가로 사용할 수 있는 &lt;a href=&quot;http://reference.wolfram.com/legacy/v5_2/Add-onsLinks/DatabaseLink/DatabaseConnections/DatabaseResources/DatabaseLink2.3.1.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;저는 Mathematica를 거의 사용하지 않았습니다. 그리고 확실히 데이터베이스를 사용하지는 않았지만, 그 페이지를 보면 다음을 수행할 수 있을 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;OpenSQLConnection[JDBC[&quot;oracle&quot;,&quot;server.business.com:1999&quot;],
    Username -&amp;gt; &quot;you&quot;]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위의 WRach의 답변은 맞지만, Jlink가 로드되고 Java ClassPath가 올바른지 확인하고 오라클 jdbc6.jar 파일을 가리키는 2개의 추가 라인이 있다는 것을 아는 것도 도움이 될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Needs[&quot;JLink`&quot;]
AddToClassPath[
FileNameJoin[{$UserBaseDirectory, &quot;Applications&quot;, &quot;Oracle&quot;, 
&quot;Java&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;Needs[&quot;JLink`&quot;]
AddToClassPath[$jarDirectory];
&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/7178647/how-to-connect-an-oracle-database-to-mathematica&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>oracle</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1658</guid>
      <comments>https://copyscript.tistory.com/1658#entry1658comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:55:46 +0900</pubDate>
    </item>
    <item>
      <title>최대 MySQL 사용자 암호 길이</title>
      <link>https://copyscript.tistory.com/1657</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최대 MySQL 사용자 암호 길이&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 사용자 암호의 최대 길이는 얼마입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL은 클리어 텍스트 암호를 암호화하는 데 사용합니다.&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;. 해시된 이 암호 문자열은 에 저장됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql.user&lt;/code&gt;&lt;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(41)&lt;/code&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;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 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://dev.mysql.com/doc/refman/5.5/en/set-password.html&quot; rel=&quot;noreferrer&quot;&gt;Link1&lt;/a&gt; and &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.6/en/user-names.html&quot; rel=&quot;noreferrer&quot;&gt;Link2&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 복제를 사용하는 경우, 현재 복제 슬레이브가 CHANGE MASTER TO 문의 일부로 사용하는 암호의 길이가 32자로 효과적으로 제한되어 있습니다. 암호가 더 길면 초과 문자가 잘립니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 일반적으로 MySQL Server에 의해 부과된 제한 때문이 아니라 MySQL Replication과 관련된 문제입니다(자세한 내용은 &lt;a href=&quot;https://bugs.mysql.com/bug.php?id=43439&quot; rel=&quot;noreferrer&quot;&gt;버그 43439&lt;/a&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;https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-5.html&quot; rel=&quot;noreferrer&quot;&gt;5.7.5&lt;/a&gt; 변경 &lt;a href=&quot;https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-5.html&quot; rel=&quot;noreferrer&quot;&gt;로그&lt;/a&gt;에 기록된 내용을 다음과 같이 수정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CHANGE MASTER TO 문에서 암호에 사용할 수 있는 최대 길이는 32자입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전에는 더 긴 비밀번호를 사용할 경우, 서버에서 초과 길이가 자동으로 잘렸습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 암호 길이가 32자를 초과하면 CHANGE MASTER TO가 실패하고 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 저는 제 비밀번호가 32자를 넘지 않아야 한다고 생각합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 &quot;최대 MySQL pwd 길이가 얼마인지...&quot;에 대해 완전히 대답하지는 못하겠지만, 최근에 발견한 내용은 알려드릴 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;-- Windows 10에 설치: &quot;서버 버전: 8.0.24 MySQL Community Server - GPL&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;-- 설치 후 &quot;사용자 'root'@'localhost'에 대한 액세스 거부(암호 예 사용)&quot; 메시지가 표시되고, CLI가 암호를 입력하고 Enter 키를 누르면 바로 닫힐 뿐만 아니라 루트로 연결할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;-- 웹에서 몇가지 해결책을 시도해보았는데 루트 비밀번호일 수도 있다는 생각이 들었습니다. 최대 32자로 알고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;-- 최대 32자가 아닐 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;4번째 설치 시도에서 32자 루트 비밀번호를 30자 비밀번호로 교체한 것만 변경되었고, 지금은 모두 작동합니다.&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;-- 실제로 최대 32자인 경우 잘라내기가 발생하거나 MySQL이 원래 루트 암호의 32자 중 하나 이상에 만족하지 않는 경우도 있지만 테스트 연결이 작동하여 설치하는 동안 오류가 발생하지 않았습니다.&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/7465204/maximum-mysql-user-password-length&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>MySQL</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1657</guid>
      <comments>https://copyscript.tistory.com/1657#entry1657comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:55:39 +0900</pubDate>
    </item>
    <item>
      <title>실패 - EPLus.dll에서 만든 Excel 파일을 다운로드할 때 네트워크 오류 발생</title>
      <link>https://copyscript.tistory.com/1656</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실패 - EPLus.dll에서 만든 Excel 파일을 다운로드할 때 네트워크 오류 발생&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;EPPlus.dll&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;asp.net c# 웹 양식 응용 프로그램에서.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실패했습니다. 네트워크 오류입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급된 오류는 크롬에서만 발생하며 다른 브라우저에서도 성공적으로 작업을 수행할 수 있음을 유의해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런데 이 오류는 내 로컬 호스트에서 발생하지 않고 메인 서버에서만 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;누군가가 이 문제에 대한 해결책을 설명해 준다면 매우 도움이 될 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.irandnn.ir/blog/PostId/29/epplus&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://www.irandnn.ir/blog/PostId/29/epplus&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;응답을 사용할 때도 같은 문제가 있었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지우기() 및 응답.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;닫기()하고 아래와 같은 내 코드를 보기 위해 피해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Response.Buffer = true;
Response.ContentType = mimeType;
Response.AddHeader(&quot;Content-Disposition&quot;, &quot;attachment; filename=&quot; + nameOfFile);
Response.BinaryWrite(bytes);
Response.End();
&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;using (ExcelPackage p = new ExcelPackage())
{
    //Code to fill Excel file with data.


    Byte[] bin = p.GetAsByteArray();

    Response.ClearHeaders();
    Response.ClearContent();
    Response.ContentType = &quot;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&quot;;
    Response.AddHeader(&quot;Content-Disposition&quot;, string.Format(&quot;attachment;filename={0}&quot;, Nombre_Del_Libro + &quot;.xlsx&quot;));
    Response.BinaryWrite(bin);
    Response.Flush();
    Response.End();
}   
&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;    protected void DownloadFile(FileInfo downloadFile, string downloadFilename, string downloadContentType)
    {
        Byte[] bin = File.ReadAllBytes(downloadFile.FullName); 

        Response.ClearHeaders();
        Response.ClearContent();
        Response.ContentType = downloadContentType;
        Response.AddHeader(&quot;Content-Disposition&quot;, string.Format(&quot;attachment;filename={0}&quot;, downloadFilename ));
        Response.BinaryWrite(bin);
        Response.Flush();
        Response.SuppressContent = true; 
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저도 같은 문제가 있어서 아래 코드로 해결했습니다. filename=\&quot;Name.xlsx\&quot;:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Response.Buffer = true;
Response.ContentType = &quot;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&quot;;
Response.AppendHeader(&quot;content-disposition&quot;, &quot;attachment; filename=\&quot;Name.xlsx\&quot;&quot;);
//Writeout the Content  
Response.BinaryWrite(bytes);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열 변수 HTML에 있는 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;byte[] myFile = Encoding.ASCII.GetBytes(HTML);
        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader(&quot;Content-Type&quot;, &quot;application/excel&quot;);
        Response.AddHeader(&quot;Content-Disposition&quot;, string.Format(&quot;attachment;filename={0};&quot;, &quot;BAGrowthReport.xls&quot;));
        Response.AddHeader(&quot;content-length&quot;, myFile.Length.ToString()); //Here is the additional header which is required for Chrome.
        Response.BinaryWrite(myFile);
        Response.Flush();
        Response.Close();
&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/39617706/failed-network-error-when-downloading-excel-file-made-by-epplus-dll&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>Excel</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1656</guid>
      <comments>https://copyscript.tistory.com/1656#entry1656comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:55:32 +0900</pubDate>
    </item>
    <item>
      <title>브레인포크 인터프리터 최적화</title>
      <link>https://copyscript.tistory.com/1655</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;통역사와 최적화에 대해 배우는 데 도움이 되는 연습으로, 저는 C에서 브레인포크 통역사를 썼습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아직까지는 완벽하게 작동하는 것처럼 보이지만, 다른 빠른 인터프리터에 비해 실행 속도에서 경쟁이 잘 되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 인터프리터를 변경하여 성능을 향상시킬 수 있는 방법은 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 인터프리터의 한 가지 흥미로운 측면은 (대부분의 다른 사람들도 아마 이것을 할 것이지만) 소스 입력을 읽고 각 명령을 하나의 루프로 변환하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;struct { long instruction; long loop; }
&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;loop&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;value는 일치하는 항목의 인덱스입니다.&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;명령어, 명령어가 a인 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그리고 일치하는 색인.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[&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;]&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;++++++++[-&amp;gt;-[-&amp;gt;-[-&amp;gt;-[-]&amp;lt;]&amp;lt;]&amp;lt;]&amp;gt;++++++++[&amp;lt;++++++++++&amp;gt;-]&amp;lt;[&amp;gt;+&amp;gt;+&amp;lt;&amp;lt;-]&amp;gt;-.&amp;gt;-----.&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;a href=&quot;http://azabani.com/cgit.cgi/brief/plain/brief.c?id=0884ccb22287158fd3664eb83427444644aaa328&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;통역의 제1판&lt;/font&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;Runtime loop의 거대 스위치를 &lt;a href=&quot;https://stackoverflow.com/questions/6853548/optimisation-for-a-brainfuck-interpreter/6853750#6853750&quot;&gt;제거하는 Jerry Copin&lt;/a&gt;의 답변을 실행한 후 &lt;a href=&quot;http://azabani.com/cgit.cgi/brief/plain/brief.c?id=92a1dc40c549e25927831fee469429a9ab3be293&quot; rel=&quot;nofollow noreferrer&quot;&gt;통역사&lt;/a&gt;는 다음과 같이 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;instruction&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구조의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;instruction&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;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://azabani.com/cgit.cgi/brief/plain/brief.c?id=c7fd6e04a88a60bd9ec480c00718ca7d91834898&quot; rel=&quot;nofollow noreferrer&quot;&gt;이전&lt;/a&gt; &lt;strong&gt;변경&lt;/strong&gt; 사항을 &lt;strong&gt;반대&lt;/strong&gt;로 변경하고 '&lt;a href=&quot;http://azabani.com/cgit.cgi/brief/plain/brief.c?id=c7fd6e04a88a60bd9ec480c00718ca7d91834898&quot; rel=&quot;nofollow noreferrer&quot;&gt;collapse&lt;/a&gt;' 다중 연속 비루프 작동에 최적화를 추가하여 루프 주기를 줄인 후 &lt;a href=&quot;http://azabani.com/cgit.cgi/brief/plain/brief.c?id=c7fd6e04a88a60bd9ec480c00718ca7d91834898&quot; rel=&quot;nofollow noreferrer&quot;&gt;인터프리터&lt;/a&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;음, 이건 C가 아닙니다.&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;그러나 그것이 무엇인지는, C++0x 가변 템플릿을 사용하는 완벽하게 휴대 가능한 브레인포크 컴파일러입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 해야합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#define PROGRAM&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 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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;g++ 4.5.2로 테스트, 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;g++ -std=c++0x -O2 -Wall&lt;/code&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;#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;vector&amp;gt;

#define PROGRAM '+', '+', '+', '+', '+', '+', '+', '+', '[', '-', '&amp;gt;',  \
        '-', '[', '-', '&amp;gt;', '-', '[', '-', '&amp;gt;', '-', '[', '-', ']', '&amp;lt;', \
        ']', '&amp;lt;', ']', '&amp;lt;', ']', '&amp;gt;', '+', '+', '+', '+', '+', '+', '+', \
        '+', '[', '&amp;lt;', '+', '+', '+', '+', '+', '+', '+', '+', '+', '+', \
        '&amp;gt;', '-', ']', '&amp;lt;', '[', '&amp;gt;', '+', '&amp;gt;', '+', '&amp;lt;', '&amp;lt;', '-', ']', \
        '&amp;gt;', '-', '.', '&amp;gt;', '-', '-', '-', '-', '-', '.', '&amp;gt;'

template&amp;lt;char... all&amp;gt;
struct C;

template&amp;lt;char... rest&amp;gt;
struct C&amp;lt;'&amp;gt;', rest...&amp;gt; {
    typedef C&amp;lt;rest...&amp;gt; rest_t;
    typedef typename rest_t::remainder remainder;
    static char *body(char *p) {
        return rest_t::body(p+1);
    }
};

template&amp;lt;char... rest&amp;gt;
struct C&amp;lt;'&amp;lt;', rest...&amp;gt; {
    typedef C&amp;lt;rest...&amp;gt; rest_t;
    typedef typename rest_t::remainder remainder;
    static char *body(char *p) {
        return rest_t::body(p-1);
    }
};

template&amp;lt;char... rest&amp;gt;
struct C&amp;lt;'+', rest...&amp;gt; {
    typedef C&amp;lt;rest...&amp;gt; rest_t;
    typedef typename rest_t::remainder remainder;
    static char *body(char *p) {
        ++*p;
        return rest_t::body(p);
    }
};


template&amp;lt;char... rest&amp;gt;
struct C&amp;lt;'-', rest...&amp;gt; {
    typedef C&amp;lt;rest...&amp;gt; rest_t;
    typedef typename rest_t::remainder remainder;
    static char *body(char *p) {
        --*p;
        return rest_t::body(p);
    }
};

template&amp;lt;char... rest&amp;gt;
struct C&amp;lt;'.', rest...&amp;gt; {
    typedef C&amp;lt;rest...&amp;gt; rest_t;
    typedef typename rest_t::remainder remainder;
    static char *body(char *p) {
        putchar(*p);
        return rest_t::body(p);
    }
};

template&amp;lt;char... rest&amp;gt;
struct C&amp;lt;',', rest...&amp;gt; {
    typedef C&amp;lt;rest...&amp;gt; rest_t;
    typedef typename rest_t::remainder remainder;
    static char *body(char *p) {
        *p = getchar();
        return rest_t::body(p);
    }
};

template&amp;lt;char... rest&amp;gt;
struct C&amp;lt;'[', rest...&amp;gt; {
    typedef C&amp;lt;rest...&amp;gt; rest_t;
    typedef typename rest_t::remainder::remainder remainder;
    static char *body(char *p) {
        while (*p) {
            p = rest_t::body(p);
        }
        return rest_t::remainder::body(p);
    }
};


template&amp;lt;char... rest&amp;gt;
struct C&amp;lt;']', rest...&amp;gt; {
    typedef C&amp;lt;rest...&amp;gt; rest_t;
    struct remainder_hack {
        typedef typename rest_t::remainder remainder;
        static char *body(char *p) {
            return rest_t::body(p);
        }
    };
    typedef remainder_hack remainder;
    static char *body(char *p) {
        return p;
    }
};

template&amp;lt;&amp;gt;
struct C&amp;lt;&amp;gt; {
    static char *body(char *p) {
        return p;
    }
    struct remainder {
        static char *body(char *p) {
            return p;
        }
    };
};

int
main(int argc, char *argv[])
{
    std::vector&amp;lt;char&amp;gt; v(30000, 0);
    C&amp;lt;PROGRAM&amp;gt; thing;

    thing.body(&amp;amp;v[0]);
    return 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;제가 가고 싶은 길은 직접 스레드 코드를 생성하는 컴파일러로 바꾸는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 입력을 읽을 때, 대부분의 &quot;명령어&quot;를 그대로 메모리에 복사하는 대신, 저는 대신 각 명령어를 함수로 구현하기 위한 코드를 작성하고, 각 함수에 대한 포인터를 메모리에 복사합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 코드를 실행하는 것은 순서대로 함수를 호출하는 것으로 구성됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 함수를 실행할 다음 명령의 인덱스(또는 주소)를 반환하도록 하면 다음과 같은 결과를 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;typedef int return_type;
typedef return_type (*f)(void);

f *im = malloc(sizeof(f) * ia);

ci = (*(im[ci]))();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 명령에 대해 BF마다 하나씩 세 개의 다른 기능도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;END_* 모드이므로 &quot;컴플리케이션&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;pre&gt;&lt;code&gt;for (ii = 0; (i = getc(fp)) != EOF; ++ii) {
    if (++in &amp;gt; ia) {
        ia *= 2;
        im = realloc(im, sizeof(*im) * ia);
        loops = realloc(loops, sizeof(*loops) * ia);
    }
    im[in-1] = i;
    switch (i) {
        case BF_OP_LSTART:
            if (ln &amp;gt;= la)
                ls = realloc(ls, sizeof(*ls) * (la *= 2));
            ls[ln++] = ii;
            break;
        case BF_OP_LEND:
            loops[in-1] = ls[--ln];
            loops[ls[ln]] = ii;
            break;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 속도에 실질적인 차이를 주지는 않지만, 코드를 훨씬 더 짧게 만들고 (적어도 제 생각에는) 이해하기 쉽게 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편집2:&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;컴파일러는 대소문자 값이 밀도가 높은 스위치 문에 대해 약간 더 나은 코드를 생성하는 경우가 많기 때문에 이를 변환해 보았는데 9-10% 정도의 향상도를 얻었습니다(컴파일러의 비트에 따라 다름).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;stdarg.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;lt;unistd.h&amp;gt;
#include &amp;lt;errno.h&amp;gt;
#define BF_END_ERROR    'e'
#define BF_END_IGNORE   'i'
#define BF_END_WRAP     'w'
#define BF_OP_VINC      '+'
#define BF_OP_VDEC      '-'
#define BF_OP_PINC      '&amp;gt;'
#define BF_OP_PDEC      '&amp;lt;'
#define BF_OP_LSTART    '['
#define BF_OP_LEND      ']'
#define BF_OP_IN        ','
#define BF_OP_OUT       '.'

enum { 
    C_OP_VINC, 
    C_OP_VDEC, 
    C_OP_PINC, 
    C_OP_PDEC, 
    C_OP_LSTART, 
    C_OP_LEND, 
    C_OP_IN, 
    C_OP_OUT 
};

typedef struct {
    long instruction;       /* instruction type */
    long loop;              /* 'other' instruction index in a loop */
} instruction;
void die(const char *s, ...) {
    va_list a;
    va_start(a, s);
    fprintf(stderr, &quot;brief: error: &quot;);
    vfprintf(stderr, s, a);
    putchar(10);
    va_end(a);
    exit(1);
}
int main(int argc, char **argv) {
    unsigned instruction_count = 0;
    long
        ci = 0,             /* current cell index */
        cn = 4096,          /* number of cells to allocate */
        cw = BF_END_WRAP,   /* cell wrap behaviour */
        ia = 4096,          /* number of allocated instructions */
        ii = 0,             /* current instruction index */
        in = 0,             /* number of used instructions */
        la = 4096,          /* loop stack allocation */
        ln = 0,             /* loop stack used */
        va = 0,             /* minimum value */
        vb = 255,           /* maximum value */
        vw = BF_END_WRAP    /* value wrap behaviour */
    ;
    instruction *im = malloc(sizeof(instruction) * ia); /* instruction memory */
    long *cm = NULL;        /* cell memory */
    long *ls = malloc(sizeof(long) * la);               /* loop stack */
    FILE *fp = NULL;
    int i;
    while ((i = getopt(argc, argv, &quot;a:b:c:f:hv:w:&quot;)) != -1) {
        switch (i) {
            case 'a': va = atol(optarg); break;
            case 'b': vb = atol(optarg); break;
            case 'c': cn = atol(optarg); break;
            case 'f':
                fp = fopen(optarg, &quot;r&quot;);
                if (!fp)
                    die(&quot;%s: %s&quot;, optarg, strerror(errno));
                break;
            case 'h':
                fputs(
                    &quot;brief: a flexible brainfuck interpreter\n&quot;
                    &quot;usage: brief [options]\n\n&quot;
                    &quot;options:\n&quot;
                    &quot;   -a  set minimum cell value (default 0)\n&quot;
                    &quot;   -b  set maximum cell value (default 255)\n&quot;
                    &quot;   -c  set cells to allocate (default 4096)\n&quot;
                    &quot;   -f  source file name (required)\n&quot;
                    &quot;   -h  this help output\n&quot;
                    &quot;   -v  value over/underflow behaviour\n&quot;
                    &quot;   -w  cell pointer over/underflow behaviour\n\n&quot;
                , stderr);
                fputs(
                    &quot;cells are 'long int' values, so do not use -a with a &quot;
                    &quot;value less than -2^31 or -2^63, and do not use -b with a &quot;
                    &quot;value more than 2^31-1 or 2^63-1, depending on your &quot;
                    &quot;architecture's 'long int' size.\n\n&quot;
                    &quot;over/underflow behaviours can be one of:\n&quot;
                    &quot;   e   throw an error and quit upon over/underflow\n&quot;
                    &quot;   i   do nothing when attempting to over/underflow\n&quot;
                    &quot;   w   wrap-around to other end upon over/underflow\n&quot;
                , stderr);
                exit(1);
                break;
            case 'v': vw = optarg[0]; break;
            case 'w': cw = optarg[0]; break;
            default: break;
        }
    }
    if (!fp)
        die(&quot;no source file specified; use -f&quot;);
    for (ii = 0; (i = getc(fp)) != EOF; ++ii) {
        if (++in &amp;gt; ia) {
            ia *= 2;
            im = realloc(im, sizeof(*im) * ia);
        }
        switch (i) {
            case BF_OP_LSTART:
                if (ln &amp;gt;= la)
                    ls = realloc(ls, sizeof(*ls) * (la *= 2));
                ls[ln++] = ii;
                im[in-1].instruction = C_OP_LSTART;
                break;
            case BF_OP_LEND:
                im[in-1].loop = ls[--ln];
                im[ls[ln]].loop = ii;
                im[in-1].instruction = C_OP_LEND;
                break;
            case BF_OP_VINC:
                im[in-1].instruction = C_OP_VINC;
                break;
            case BF_OP_VDEC:
                im[in-1].instruction = C_OP_VDEC;
                break;
            case BF_OP_PINC:
                im[in-1].instruction = C_OP_PINC;
                break;
            case BF_OP_PDEC:
                im[in-1].instruction = C_OP_PDEC;
                break;
            case BF_OP_IN:
                im[in-1].instruction = C_OP_IN;
                break;
            case BF_OP_OUT:
                im[in-1].instruction = C_OP_OUT;
                break;
        }
    }
    cm = memset(malloc(cn * sizeof(long)), 0, cn * sizeof(long));
    for (ii = 0; ii &amp;lt; in; ii++) {
        ++instruction_count;
        switch (im[ii].instruction) {
            case C_OP_VINC:
                if (cm[ci] == vb)
                    switch (vw) {
                        case BF_END_ERROR:
                            die(&quot;value overflow&quot;);
                            break;
                        case BF_END_IGNORE: break;
                        case BF_END_WRAP: cm[ci] = 0; break;
                    }
                else ++cm[ci];
                break;
            case C_OP_VDEC:
                if (cm[ci] == 0)
                    switch (vw) {
                        case BF_END_ERROR:
                            die(&quot;value underflow&quot;);
                            break;
                        case BF_END_IGNORE: break;
                        case BF_END_WRAP: cm[ci] = vb; break;
                    }
                else --cm[ci];
                break;
            case C_OP_PINC:
                if (ci == cn - 1)
                    switch (cw) {
                        case BF_END_ERROR:
                            die(&quot;cell index overflow&quot;);
                            break;
                        case BF_END_IGNORE: break;
                        case BF_END_WRAP: ci = 0; break;
                    }
                else ++ci;
                break;
            case C_OP_PDEC:
                if (ci == 0)
                    switch (cw) {
                        case BF_END_ERROR:
                            die(&quot;cell index underflow&quot;);
                            break;
                        case BF_END_IGNORE: break;
                        case BF_END_WRAP: ci = cn - 1; break;
                    }
                else --ci;
                break;
            case C_OP_IN:
                cm[ci] = getchar();
                break;
            case C_OP_OUT:
                putchar(cm[ci]);
                break;
            case C_OP_LSTART:
                if (!cm[ci])
                    ii = im[ii].loop;
                break;
            case C_OP_LEND:
                if (cm[ci])
                    ii = im[ii].loop;
                break;
            default: break;
        }
    }
    fprintf(stderr, &quot;Executed %d instructions\n&quot;, instruction_count);
    free(cm);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;브레인포크는 C 코드로 컴파일하기가 꽤 쉬워야 하고, 그런 다음 컴파일하고 실행합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 아마도 매우 빠른 BF &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;+와 -의 시퀀스를 쉽게 최적화할 수 있습니다. 마찬가지로 최근에 접한 각각의 카운트를 캐싱하여 &amp;lt;과 &amp;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;다음은 컴파일러 초안으로, 명령줄에서 BF 코드를 받아들이고 컴파일된 프로그램을 콘솔에 인쇄하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int increments;  // holds pending increment operations

void flush_increments(){
   if (increments==0) return;
   printf(&quot;  *ptr+=%d;\n&quot;,increments);
   increments=0;
}

int steps; // holds pending pointer steps

void flush_steps(){
   if (steps==0) return;
   printf(&quot;  ptr+=%d;\n&quot;,steps);
   steps=0;
}

int main(int argc, char **argv){
    // Brainfuck compiler
    if( !(argc &amp;gt; 1) )
        return 1;
    unsigned char *code = argv[1];
    int nesting=0;
    printf(&quot;int main(){\n&quot;);
    printf(&quot;  #define CELLSPACE 1000\n&quot;);
    printf(&quot;  unsigned char *ptr = malloc(sizeof(char)*CELLSPACE);\n&quot;);
    printf(&quot;  if(ptr == NULL) return 1;\n&quot;)
    printf(&quot;  for(int i=0;i&amp;lt;CELLSPACED;i++) ptr[i]=0; // reset cell space to zeros&quot;);
    increments=0;
    steps=0;
    for(;;) {
        switch(*code++) {
            case '+':
                flush_steps();
                ++increments;
                break;
            case '-':
                flush_steps();
                --increments;
                break;
            case '&amp;gt;':
                flush_increments();
                ++steps;
                break;
            case '&amp;lt;':
                flush_increments();
                --steps;
                break;
            case '[':
                flush_increments();
                flush_steps();
                printf(&quot;while(*ptr){&quot;);
                ++nesting;
                break;
            case ']': 
                flush_increments();
                flush_steps();
                if (--nesting&amp;lt;0)
                   { printf(&quot;Unmatched ']'\n&quot;);
                     return 1;
                   }
                printf(&quot;}\n&quot;;);
                break;
            case '.':
                flush_increments();
                flush_steps();
                printf(&quot; putc(*ptr, stdout);\n&quot;);
                break;
            case ',':
                increments=0;
                flush_steps();
                printf(&quot;*ptr = getc(stdin);&quot;);
                break;
            case '\0':
                 printf(&quot;}&quot;);
                 if (nesting&amp;gt;0)
                   { printf(&quot;Unmatched '['\n&quot;);
                     return 1;
                   }
                return 0;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 Matthew Blanchard의 코드에서 영감을 받아 제 머릿속에 떠올랐지만(Matthew 감사합니다!), 테스트는 되지 않았습니다.&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;[저는 http://en.wikipedia.org/wiki/Brainfuck 기사를 코드가 생성할 수 있는 확실한 영감으로 사용했습니다.]&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;OP의 BF 프로그램:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;++++++++[-&amp;gt;-[-&amp;gt;-[-&amp;gt;-[-]&amp;lt;]&amp;lt;]&amp;lt;]&amp;gt;++++++++[&amp;lt;++++++++++&amp;gt;-]&amp;lt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;[&amp;gt;+&amp;gt;+&amp;lt;&amp;lt;-]&amp;gt;-.&amp;gt;-----.&amp;gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음으로 컴파일해야 합니다(indent 추가).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; int main(){
 #define CELLSPACE 1000
   unsigned char *ptr = malloc(sizeof(char)*CELLSPACE);
   if(ptr == NULL) return 1;
   for(int i=0;i&amp;lt;CELLSPACED;i++) ptr[i]=0; // reset cell space to zeros
   *ptr+=8;
   while(*ptr) {
      *ptr+=-1;
      ptr+=1;
      *ptr+=-1;
     while(*ptr) {
       *ptr+=-1;
       ptr+=1;
       *ptr+=-1;
       while(*ptr) {
         *ptr+=-1;
         ptr+=1;
         *ptr+=-1;
         while(*ptr) {
            *ptr+=-1;
         }
         ptr+=-1;
       }
       ptr+=-1;
     }
     ptr+=1;
     *ptr+=8;
     while (*ptr) {
        ptr+=-1;
        *ptr+=10;
        ptr+=1;
        *ptr+=-1;
     }
     ptr+=-1;
     while (*ptr) {
        ptr+=1;
        *ptr+=1;
        ptr+=1;
        *ptr+=1;
        ptr+=-2;
        *ptr+=-1;
     }
     ptr+=1;
     *ptr+=-1;
     putc(*ptr,stdout);
     ptr+=1;
     *ptr+=-5;
     putc(*ptr,stdout);
     ptr+=1;
 }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 아마도 BF op 당 하나의 기계 명령에 상당히 가까운 평균일 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정말 야심이 많은 사람이라면 프로그램의 각 지점에서 ptr에 대한 가능한 값을 계산할 것입니다. 많은 경우 일정한 셀을 의미한다고 생각합니다.&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;정말로 미쳐가고 싶다면, 첫 번째 입력 요청까지 BF 명령이 무엇을 하는지 알아낼 수 있습니다. 그것은 &quot;상수&quot; 초기 메모리 구성이어야 하고, 그 상수를 가진 CELLSPACE intitializer를 생성하고, 제가 보여준 것처럼 나머지 프로그램에 대한 코드를 생성할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇게 하면 OP의 예제 프로그램은 한 번의 CELLSPACE 이니셜저와 몇 번의 퍼치콜로 사라집니다.&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;저는 x86 프로그래머가 아닙니다. 저는 임베디드 환경에서 상당한 작업을 해왔고 이제는 (휴대폰으로) ARM 칩을 사용했습니다.&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;통역사를 빠르게 만드는 두 가지 기본적인 방법이 있습니다. BF 코드 자체를 최적화하는 것과 통역사 자체를 최적화하는 것입니다.&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;x86은 비교적 인상적인 빠른 분기 특성을 제공하는 데 많은 염료 공간을 사용하는 것으로 알고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아마도 이것 때문에 여러 컴파일러(gcc 포함)가 x86용 실제 점프 테이블을 선호하여 중첩 분기를 생성하는 것을 본 적이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;점프 테이블은 이론적으로 매력적으로 들리지만, 실제로 x86은 레거시 기술에 매우 잘 최적화되어 기존의 big-O 사고 방식은 대부분의 경우 적용되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇기 때문에 코드가 얼마나 빠른지 계산하려면 코드를 작성하고 실행하고 시간을 정해야 한다고 장기 x86 개발자들이 알려줄 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;x86에서 분기가 발생할 수 있는 속도에도 불구하고 분기하지 않는 것은 여전히 약간의 오버헤드를 들일 가치가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어차피 BF 지시는 너무 간단하기 때문에, 그것은 &quot;다른 지점보다 빠르니까 대부분의 지시를 한꺼번에 한다&quot;는 형태를 취할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 중 일부는 분기가 불가능한 프로세서에 의해 병렬로 수행될 수도 있습니다. (x86은 단일 코어에 충분한 디코딩 및 실행 유닛을 가지고 있으므로 이것이 가능할 가능성이 높습니다.)&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;2의 거듭제곱이라면 비교 및 분기 대신 래핑(wrapping)과 동등한 수준의 AND(거의 모든 최신 플랫폼에서 CPU 사이클 하나이므로 매우 빠름)를 수행할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;악마는 정말 빠른 통역사를 쓰기 위한 세부사항에 있습니다. 여러분이 덧붙이는 작은 것 하나하나가 그것을 훨씬 더 복잡하게 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 위해 BF 인터프리터가 수행하는 작업을 간소화할 것을 권장합니다(예를 들어 값에 대해 2의 거듭제곱으로 래핑합니다).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비트 와이즈 AND 트릭 단독 및 강제 랩 옵션(오버플로/언더플로의 현대 프로그래밍 언어의 경우 대부분)은 이미 최소한 두 개의 분기를 제거합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;BF 명령을 처리하면 흥미로운 최적화가 가능합니다. BF 명령을 버리고 대신 기계가 통역사에게 적합한 다양한 명령을 수행하도록 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Java를 고려합니다. Java는 해석하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 완전히 다른 언어로 JIT를 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 같은 논리를 적용하는 것을 추천합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 작업은 지침과 관련된 값을 제공함으로써 이미 어느 정도 완료되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 정보를 사용하여 명령어를 만드는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터 &lt;strong&gt;포인터&lt;/strong&gt;의 값에 추가할 양(또는 뺄셈 -- 뺄셈은 음수만 추가하는 것입니다)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터 포인터의 &lt;strong&gt;값&lt;/strong&gt;에 추가할 양(다시 또는 빼기)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행할 다음 지시를 가리키는 지시자.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&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;인터프리터 루프는 다음과 같이 로직으로 바뀝니다. 명령어의 데이터 값을 데이터 포인터의 값에 추가하고 만약 데이터 포인터의 값이 우리의 비교 값과 일치한다면 명령어의 데이터 &lt;em&gt;주소&lt;/em&gt; 값을 데이터 포인터 자체에 추가합니다. 명령어 포인터를 새 명령어 포인터로 계속 설정합니다(다음 int까지).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;rpreter loop) 비교값이 특별한 값일 경우(예: 0x80000000을 선택할 수 있음) 핸들 입력/출력 항목은 명령어 주소를 1씩 증가시킵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 초기 해석이 더 까다로워졌습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 명령어는 +, -, &amp;lt;, &amp;gt; 그리고 때로는 [, 그리고 보통은 ]까지도 동일한 단일 명령어로 결합할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 당신이 그것에 대해 영리하다면, 루프의 첫 번째 분기는 분기 없이 표현될 수 있습니다. (그리고 일부 어셈블리가 끼어 있거나 컴파일러 고유성이 있는 상태에서 훨씬 더 효율적으로 표현될 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컴파일러에게 두 번째 분기가 적중할 가능성이 낮다고 알리는 것이 좋을 수도 있습니다(입력/출력은 해석 속도가 아니라 병목 현상이므로 많은 입력/출력을 수행하더라도 최적화되지 않은 분기 하나로는 차이가 나지 않습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주행 종료 상태에 주의해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 해석된 BF 프로그램의 마지막 명령은 루프가 종료되도록 명령 포인터를 항상 NULL로 만들어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해석이 수행되는 순서는 중요한데, 이는 I/O가 수행되기 전에 &amp;lt;&amp;lt;&amp;gt;&amp;gt;이 수행되기 전에 수행되기 때문입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 &amp;gt;+는 두 개의 해석 명령어이고 +&amp;gt;는 하나입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이와 같이 빠른 속도로 순환하는 인터프리터를 설계하는 것을 넘어, 보다 복잡한 코드 분석을 검토하게 될 것이며, 이 경우 컴파일러 설계에 참여하게 될 것이며, 직관적인 인터프리터에서 벗어나게 될 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 제가 매일 하는 일은 아니지만, Louden의 &quot;Compiler Construction&quot; 책은 제게 아주 잘 읽혔지만, 그렇게 해서 작은 프로젝트가 되지는 않을 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 이 일을 말도 안되게 빨리 만들고 결국에는 코드가 컴파일되지 않는 한, 저는 그것에 큰 타격을 주는 최적화 작업을 하지 않을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 많은 최적화 단계로 이어질 수 있도록 시도하고 테스트할 수 있는 아이디어를 제안해 드렸기를 바랍니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 직접 해본 적이 없어서 아직도 다 과거 경험에 의한 추측입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 속도가 빨라지지 않더라도 바닐라 BF 인터프리터와는 비교적 다른 아키텍처로 BF 코드를 다시 작성하는 경험을 쌓을 수 있을 것입니다.&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;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;LLVM JIT 인프라스트럭처를 사용하여 코드를 최적화하고...&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;edit: 실제로 그것은 이미 여러 번 행해졌습니다; 컴파일러: http://www.remcobloemen.nl/2010/02/brainfuck-using-llvm/ J&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IT: https://github.com/resistor/BrainFTracing (&quot;compiler&quot;의 길이가 230줄이고 공백 줄, 댓글, #includes 등을 세는 방법 참조)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;edit2: 다운보터의 경우: 놓친 것 같으니 내 대답의 의미는 &quot;바퀴를 재창조하지 말라&quot;였습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여러 가지를 볼 수 있을 겁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;switch&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오류 처리 때문에 상당히 복잡합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스위치 내부에 빠른 경로만 있다고 재구성하고 오류가 발생하면 하나 또는 여러 개의 함수를 호출합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로 조금만 더 짧게 하면 내부에 코드가 들어옵니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;switch&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변수를 적게 사용할수록 옵티마이저가 더 효과적으로 작동할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 방향이 너무 많습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 색인&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ci&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;별로 도움이 되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제 셀을 가리키는 포인터가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 레지스터를 저장할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 당신과 비슷한 일을 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ii&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 명령어의 숫자를 유지하는 대신에 위치에 포인터만 있으면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;cm&lt;/code&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;어떠한 경우에도 생성된 Assembler를 확인합니다.&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;다음은 빠른 BF 인터프리터를 만드는 방법의 예입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int main(int argc, char **argv)
{
    if( !(argc &amp;gt; 1) )
        return 1;
    unsigned char *progmem = argv[1];
    unsigned char *cellmem = malloc(sizeof(char)*CELLSPACE);
    if(cellmem == NULL)
        return 1; 
    unsigned char **loopdepth = malloc(sizeof(char*)*MAXLOOPDEPTH);
    if(loopdepth == NULL)
        return 1;

    unsigned char *origcellmem = cellmem;
    unsigned char **origloopdepth = loopdepth;

    for(;;)
    {
        switch(*progmem)
        {
            case '+':
                ++*cellmem;
                break;
            case '-':
                --*cellmem;
                break;
            case '&amp;gt;':
                cellmem++;
                break;
            case '&amp;lt;':
                cellmem--;
                break;
            case '[':
                *loopdepth = progmem-1;
                loopdepth++;
                break;
            case ']':
                loopdepth--;
                if(*cellmem)
                {
                    progmem = *loopdepth;
                }
                break;
            case '.':
                putc(*cellmem, stdout);
                break;
            case ',':
                *cellmem = getc(stdin);
                break;
            case '\0':
                free(origcellmem);
                free(origloopdepth);
                return 0;
        }
        progmem++;
    }
}
&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;저는 각 루프를 확인하는 일을 전혀 하지 않고 있습니다. 컴파일러는 여기서 원시 무조건 루프를 생성할 가능성이 높습니다(또는 C 마법사가 알려줍니다).&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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;루프를 유지하기 위해 간단한 '스택'을 사용하고 있는데, 이것은 당신이 가질 수 있는 최대 루프 깊이를 제한하지만 32개면 대부분의 브레인포크 프로그램에 충분하고 소스를 조정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 스위치 케이스를 주문하여 사물이 얼마나 자주 나타나는지를 + 와 - 가 가장 흔한 뇌섹 캐릭터이고, 그 다음에 &amp;gt; 와 &amp;lt; 그리고 그 다음에 [ 그리고 ] 그리고 마지막으로 입력된 캐릭터라고 봅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 이것에 대해 100% 확신하지는 않지만 스위치의 순서가 아주 조금만 중요하다고 확신합니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오류 검사는 안 하고 있고, 사용자 입력이 완벽하다고 가정하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 경계를 초과하는 등의 좋은 오류를 제공하지는 않을 수 있지만, 실행 시 언어가 수행하는 작업은 정확합니다. C 프로그램은 segfault를 쉽게 생성할 수 있지만, 아마도 이러한 오류를 확인해서는 안 될 것입니다. (간단한 말씀이지만, 제가 이 글을 쓰면서 segfault를 많이 생성했습니다 :P)&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;브레인포크를 간단한 형식으로 길이 부호화할 수 있습니다. +++가 3+로 바뀌면 인터프리터가 3개를 더하는 대신 3개를 한 번 더 추가합니다.&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를 놀라울 정도로 잘 몰라서 실수를 좀 했을 수도 있지만 최선을 다했습니다. 제공된 코드를 자유롭게 벤치마킹해보세요. 얼마나 빨리 실행되는지 정확하게 알지 못합니다.&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/6853548/optimisation-for-a-brainfuck-interpreter&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>C</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1655</guid>
      <comments>https://copyscript.tistory.com/1655#entry1655comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:55:26 +0900</pubDate>
    </item>
    <item>
      <title>로보카피가 파일을 덮어쓰도록 하려면 어떻게 해야 합니까?</title>
      <link>https://copyscript.tistory.com/1654</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로보카피가 파일을 덮어쓰도록 하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로 로보카피는 마지막으로 쓴 날짜와 파일 크기가 같은 파일을 무시합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떻게 하면 이 디자인에서 벗어날 수 있을까요?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로보카피로 덮어쓰기를 강요하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 그 dst\sample을 예상했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;txt는 test001로 적어야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 이 파일들은 로보카피가 동일한 파일로 인식하고 덮어쓰지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 경우 &quot;/IS&quot; 옵션은 유효하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;New-Item src -itemType Directory
New-Item dst -itemType Directory
New-Item src\sample.txt -itemType File -Value &quot;test001&quot;
New-Item dst\sample.txt -itemType File -Value &quot;test002&quot;
Set-ItemProperty src\sample.txt -Name LastWriteTime -Value &quot;2016/1/1 15:00:00&quot;
Set-ItemProperty dst\sample.txt -Name LastWriteTime -Value &quot;2016/1/1 15:00:00&quot;

ROBOCOPY.exe src dst /COPYALL /MIR
Get-Content src\sample.txt, dst\sample.txt
&amp;gt; test001
&amp;gt; test002

ROBOCOPY.exe src dst /COPYALL /MIR /IS
Get-Content src\sample.txt, dst\sample.txt
&amp;gt; test001
&amp;gt; test002
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://technet.microsoft.com/en-us/library/cc733145.aspx&quot; rel=&quot;noreferrer&quot;&gt;설명서&lt;/a&gt;에서:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;code&gt;/is&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동일한 파일을 포함합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/it&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;tweaked&quot; 파일을 포함합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;Same files&quot;는 동일한 파일(이름, 크기, 시간, 속성)을 의미합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;Tweaked files&quot;는 이름, 크기, 시간은 같지만 속성은 다른 파일을 의미합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;robocopy src dst sample.txt /is      # copy if attributes are equal
robocopy src dst sample.txt /it      # copy if attributes differ
robocopy src dst sample.txt /is /it  # copy irrespective of attributes
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Super User에 대한 &lt;a href=&quot;https://superuser.com/a/445137&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;robocopy&lt;/code&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;font papago-translate=&quot;translated&quot;&gt;PSC:\temp&amp;gt; 새 &lt;b&gt;항목 src&lt;/b&gt; - &lt;b&gt;유형 디렉터리&lt;/b&gt; &amp;gt; &lt;b&gt;$null&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PSC:\temp &amp;gt; &lt;b&gt;New-Item dst -Type Directory &amp;gt;$null&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PSC:\temp&amp;gt; &lt;b&gt;New-Item src\sample.&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;txt -Type File - 값 &quot;test001&quot; &amp;gt; $null&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PSC:\temp&amp;gt; &lt;b&gt;New-Item dst\sample.&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;txt -Type 파일 - 값 &quot;test002&quot; &amp;gt; $null&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PSC:\temp&amp;gt; &lt;b&gt;Set-ItemProperty src\sample.&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;txt - 이름 마지막 쓰기 시간 - 값 &quot;2016/1/11 15:00:00&quot;&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PSC:\temp&amp;gt; &lt;b&gt;Set-ItemProperty dst\sample.&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;txt - 이름 마지막 쓰기 시간 - 값 &quot;2016/1/11 15:00:00&quot;&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PSC:\temp&amp;gt; &lt;b&gt;robocopy srcdst 샘플.&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;txt /is /it /copyall /mir&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;옵션 : /S/E/COPYALL/PURGE/MIR/IS/R:1000000/W:30&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;------------------------------------------------------------------------------&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1 C:\temp\src\&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;&lt;i&gt;수정된 샘플 7개.&lt;/i&gt;&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;&lt;i&gt;txt&lt;/i&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;b&gt;&lt;i&gt;복사&lt;/i&gt;&lt;/b&gt;된 총 건너뛰기 불일치 오류 추가 항목&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Dirs : 1000 000&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일 : 110000&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;바이트 수 : 77000000&lt;b&gt;&lt;i&gt;&lt;/i&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;PSC:\temp&amp;gt; &lt;b&gt;robocopy srcdst 샘플.&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;txt /is /it /copyall /mir&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;옵션 : /S/E/COPYALL/PURGE/MIR/IS/R:1000000/W:30&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;------------------------------------------------------------------------------&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1 C:\temp\src\&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;&lt;i&gt;똑같은 7개의 샘플.&lt;/i&gt;&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;&lt;i&gt;txt&lt;/i&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;b&gt;&lt;i&gt;복사&lt;/i&gt;&lt;/b&gt;된 총 건너뛰기 불일치 오류 추가 항목&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Dirs : 1000 000&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일 : 110000&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;바이트 수 : 77000000&lt;b&gt;&lt;i&gt;&lt;/i&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;PSC:\temp&amp;gt; &lt;b&gt;Get-Content .\src\sample.&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;txt&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;test001&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PSC:\temp&amp;gt; &lt;b&gt;Get-Content .\dst\sample.&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;txt&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;test002&lt;/font&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;robocopy&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;그러나 출력에 따라 7바이트가 복사되었지만 데이터 플래그가 설정되어 있음에도 불구하고 두 경우 모두 대상 파일에 실제로 데이터가 기록되지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/copyall&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;). 데이터 플래그를 명시적으로 설정해도 동작이 변하지 않습니다(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/copy:d&lt;/code&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;robocopy&lt;/code&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;font papago-translate=&quot;translated&quot;&gt;PSC:\temp&amp;gt; &lt;b&gt;Set-ItemProperty src\sample.&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;txt - 이름 마지막 쓰기 시간 - 값(Get-Date)&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PSC:\temp&amp;gt; &lt;b&gt;robocopy srcdst 샘플.&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;txt /is /it /copyall /mir&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;옵션 : /S/E/COPYALL/PURGE/MIR/IS/R:1000000/W:30&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;------------------------------------------------------------------------------&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1 C:\temp\src\&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;&lt;i&gt;100% 새로운 7 샘플.&lt;/i&gt;&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;&lt;i&gt;txt&lt;/i&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;b&gt;&lt;i&gt;복사&lt;/i&gt;&lt;/b&gt;된 총 건너뛰기 불일치 오류 추가 항목&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Dirs : 1000 000&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일 : 110000&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;바이트 수 : 77000000&lt;b&gt;&lt;i&gt;&lt;/i&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;PSC:\temp&amp;gt; &lt;b&gt;Get-Content .\dst\sample.&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;txt&lt;/b&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;test001&lt;/font&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;robocopy&lt;/code&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;amp; robocopy src dst /is /it /l /ndl /njh /njs /ns /nc |
  Where-Object { $_.Trim() } |
  ForEach-Object {
    $f = Get-Item $_
    $f.LastWriteTime = $f.LastWriteTime.AddSeconds(1)
  }
&amp;amp; robocopy src dst /copyall /mir
&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;amp; xcopy src dst /k/r/e/i/s/c/h/f/o/x/y
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정말 이상한데, 왜 아무도 /IM 스위치를 언급하지 않습니까?!&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://learn.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy&quot; rel=&quot;noreferrer&quot;&gt;MS 웹사이트&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;font papago-translate=&quot;translated&quot;&gt;소스 또는 대상의 크기나 시간에 상관없이 로보카피를 사용하여 모든 &lt;em&gt;것&lt;/em&gt;을 덮어쓰려면 명령에 이 세 개의 스위치를 포함해야 합니다(/IS/IT/IM).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/IS :: Include Same files. (Includes same size files)
/IT :: Include Tweaked files. (Includes same files with different Attributes)
/IM :: Include Modified files (Includes same files with different times).
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대부분 1GB 이상의 파일(ISO - Disk Images - 4K Videos)의 몇 테라바이트 전송에 사용하는 정확한 명령어입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;robocopy B:\Source D:\Destination /E /J /COPYALL /MT:1 /DCOPY:DATE /IS /IT /IM /X /V /NP /LOG:A:\ROBOCOPY.LOG
&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;               Total    Copied   Skipped  Mismatch    FAILED    Extras
    Dirs :      1028      1028         0         0         0       169
   Files :      8053      8053         0         0         0         1
   Bytes : 649.666 g 649.666 g         0         0         0   1.707 g
   Times :   2:46:53   0:41:43                       0:00:00   0:41:44


   Speed :           278653398 Bytes/sec.
   Speed :           15944.675 MegaBytes/min.
   Ended : Friday, August 21, 2020 7:34:33 AM
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대상, 디스크: &lt;a href=&quot;https://documents.westerndigital.com/content/dam/doc-library/en_us/assets/public/western-digital/product/internal-drives/wd-gold/product-brief-wd-gold-2579-810192.pdf&quot; rel=&quot;noreferrer&quot;&gt;WD Gold 6TB&lt;/a&gt;(쓰기 속도와 내 결과 비교)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;Extras&quot;를 사용하더라도, 이는 &quot;/X&quot; 스위치 때문에 보고하기 위한 것입니다.&lt;/font&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;또한 대상에 있는 모든 파일을 검색하고 모든 타임스탬프의 보고서를 생성하는 PowerShell 스크립트를 실행하여 한 번 확인했습니다.&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;. 대부분의 온라인 사용자들이 최대 쓰레드 &quot;/MT:128&quot;을 사용할 것을 권하고 있지만, 이는 최고의 성능을 얻기 위한 일반적인 방법이기 때문입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;&lt;strong&gt;파일&lt;/strong&gt;&lt;/strong&gt; &lt;strong&gt;&lt;strong&gt;크기가 매우&lt;/strong&gt;&lt;/strong&gt; 큰 &lt;strong&gt;&lt;strong&gt;&quot;/MT:128&quot;을 사용하지 마십시오.&lt;/strong&gt;&lt;/strong&gt; 이는 큰 실수이며 여러 번 실행하면 드라이브 성능이 크게 저하됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 매우 높은 조각화를 일으키거나 심지어 파일 시스템에 장애를 초래할 수도 있으며, 결국 RAW 파티션을 복구하는 데 귀중한 시간을 소비하게 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 무엇보다도 4-6배 더 느린 성능을 보여줄 것입니다!!&lt;/font&gt;&lt;/p&gt; 
&lt;h1&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매우 큰 파일의 경우:&lt;/font&gt;&lt;/strong&gt;&lt;/h1&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;하나&quot; 스레드 &quot;/MT:1&quot;만 사용 | 영향: &lt;strong&gt;BIG&lt;/strong&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;버퍼링을 사용하지 않으려면 &quot;/J&quot;를 사용해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;| 영향: 높음&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;/LOG:file&quot;과 함께 &quot;/NP&quot;를 사용하고 &quot;/TEE&quot;가 콘솔에 출력하지&lt;strong&gt; 않음&lt;/strong&gt; | 영향:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;중간의.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;소스 또는 대상과 별도의 드라이브에 &quot;/LOG:file&quot;을 놓습니다. | Impact: Low.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h1&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적인 빅 파일의 경우:&lt;/font&gt;&lt;/strong&gt;&lt;/h1&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다중 스레드를 사용하면 &quot;/MT:4&quot;를 초과하지 않습니다. | 영향: &lt;strong&gt;BIG&lt;/strong&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대상 디스크의 캐시 사양이 낮은 경우 &quot;/J&quot;를 사용하여 버퍼링을 사용하지 않도록 설정합니다. | 영향: 높음&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;amp; 위와 같은 4.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h1&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수천 개의 작은 파일의 경우:&lt;/font&gt;&lt;/strong&gt;&lt;/h1&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;미친 듯이 :) 다중 스레드를 사용하면 디스크 성능을 모니터링하면서 처음에는 16개로 시작하고 2개로 다중화할 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일단 떨어지기 시작하면 다시 이전 값으로 돌아가 계속 사용할 것입니다. | 영향: &lt;strong&gt;BIG&lt;/strong&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;/J를 사용하지 않음 | &lt;strong&gt;임팩트:&lt;/strong&gt; 높음&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;/LOG:file&quot;과 함께 &quot;/NP&quot;를 사용하고 &quot;/TEE&quot; | Impact:&lt;strong&gt;HIGH&lt;/strong&gt;&quot;로 콘솔에 출력하지&lt;strong&gt; 않습니다&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;소스 또는 대상과 별도의 드라이브에 &quot;/LOG:file&quot;을 넣습니다. | Impact:&lt;strong&gt;HIGH.&lt;/strong&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;홈 폴더의 경우 모든 폴더가 해당 사용자의 데스크톱에 있고 적절한 권한이 없는 바로 가기를 통해 도달할 수 있어 사용자가 있어도 볼 수 없는 홈 폴더에 대해 이 작업을 수행했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 매개 변수와 함께 로보카피를 사용하여 파일을 올바른 설정으로 덮어씁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;FOR /F &quot;tokens=*&quot; %G IN ('dir /b') DO robocopy  &quot;\\server02\Folder with shortcut&quot; &quot;\\server02\home\%G\Desktop&quot; /S /A /V /log+:C:\RobocopyShortcut.txt /XF *.url *.mp3 *.hta *.htm *.mht *.js *.IE5 *.css *.temp *.html *.svg *.ocx *.3gp *.opus *.zzzzz *.avi *.bin *.cab *.mp4 *.mov *.mkv *.flv *.tiff *.tif *.asf *.webm *.exe *.dll *.dl_ *.oc_ *.ex_ *.sy_ *.sys *.msi *.inf *.ini *.bmp *.png *.gif *.jpeg *.jpg *.mpg *.db *.wav *.wma *.wmv *.mpeg *.tmp *.old *.vbs *.log *.bat *.cmd *.zip /SEC /IT /ZB /R: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;윈도우 서버 2012에서 테스트되었으며, 모든 스위치는 마이크로소프트 사이트 등에 문서화되어 있습니다.&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/40744335/how-do-i-force-robocopy-to-overwrite-files&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>Powershell</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1654</guid>
      <comments>https://copyscript.tistory.com/1654#entry1654comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:55:08 +0900</pubDate>
    </item>
    <item>
      <title>사용되지 않는 명령줄 인수 오류를 비활성화하지 않고 clang으로 침묵시키는 방법은 무엇입니까?</title>
      <link>https://copyscript.tistory.com/1653</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용되지 않는 명령줄 인수 오류를 비활성화하지 않고 clang으로 침묵시키는 방법은 무엇입니까?&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;-Werror&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;clang을 사용하면 &quot;경고: 컴파일 중에 사용되지 않은 인수&quot; 메시지를 오류로 변환하는데, 이는 일리가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;뭐가 있어요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-Qunused-arguments&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그들을 완전히 잠재우려고 깃발을 올렸습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 질문은, 어떤 것들이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-Wno-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;/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;-Wno-error=unused-command-line-argument&lt;/code&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;-Wno-unused-command-line-argument
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저의 경우 ./configure에서 clang-8 컴파일러를 사용하면서 autoconf와 비슷한 문제가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;*clang-8: error: unknown argument: '-ftree-loop-distribute-patterns'*
*clang-8: error: unknown argument: '-fno-semantic-interposition'*
&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;./configure CC=clang-8 CXX=clang++-8 LD=clang++-8 CFLAGS=-Qunused-arguments
&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;#pragma clang diagnostic ignored &quot;-Wunused-parameter&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Visual Studio 2019에서 C++ Project의 속성 페이지를 열고 Configuration Properties -&amp;gt; C/C++ -&amp;gt; CommandLine으로 이동합니다.&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;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;-사용하지 않음-명령줄-인수&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;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;--start-no-unused-arguments&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--end-no-unused-arguments&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;일부&lt;/em&gt; 논쟁에 대해서만 경고를 잠재우는 것.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 깃발에 편리합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-stdlib&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;-rtlib&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-unwindlib&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(링크가 아닌 컴파일 중에 사용되는 경우 warn).&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/21617158/how-to-silence-unused-command-line-argument-error-with-clang-without-disabling-i&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>C</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1653</guid>
      <comments>https://copyscript.tistory.com/1653#entry1653comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:55:00 +0900</pubDate>
    </item>
    <item>
      <title>javascript로 XML을 예쁘게 인쇄</title>
      <link>https://copyscript.tistory.com/1652</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;javascript로 XML을 예쁘게 인쇄&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프리 프린트하고 싶은 비인덴트 XML을 나타내는 문자열이 있습니다.&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;root&amp;gt;&amp;lt;node/&amp;gt;&amp;lt;/root&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음이 되어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;root&amp;gt;
  &amp;lt;node/&amp;gt;
&amp;lt;/root&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구문 강조 표시는 필수 사항이 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 문제를 해결하기 위해 나는 먼저 캐리지 리턴과 화이트 스페이스를 추가하기 위해 XML을 변환한 다음 &lt;a href=&quot;http://www.w3.org/TR/html401/struct/text.html#h-9.3.4&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;프리태그&lt;/em&gt;&lt;/a&gt;를 사용하여 XML을 출력합니다. 나는 새 행과 화이트 스페이스를 추가하기 위해 다음과 같은 함수를 썼습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function formatXml(xml) {
    var formatted = '';
    var reg = /(&amp;gt;)(&amp;lt;)(\/*)/g;
    xml = xml.replace(reg, '$1\r\n$2$3');
    var pad = 0;
    jQuery.each(xml.split('\r\n'), function(index, node) {
        var indent = 0;
        if (node.match( /.+&amp;lt;\/\w[^&amp;gt;]*&amp;gt;$/ )) {
            indent = 0;
        } else if (node.match( /^&amp;lt;\/\w/ )) {
            if (pad != 0) {
                pad -= 1;
            }
        } else if (node.match( /^&amp;lt;\w[^&amp;gt;]*[^\/]&amp;gt;.*$/ )) {
            indent = 1;
        } else {
            indent = 0;
        }

        var padding = '';
        for (var i = 0; i &amp;lt; pad; i++) {
            padding += '  ';
        }

        formatted += padding + node + '\r\n';
        pad += indent;
    });

    return formatted;
}
&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;jQuery('pre.formatted-xml').text(formatXml('&amp;lt;root&amp;gt;&amp;lt;node1/&amp;gt;&amp;lt;/root&amp;gt;'));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 저에게 완벽하게 잘 작동하지만, 이전 기능을 쓰는 동안 더 좋은 방법이 있을 것이라 생각했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 제 질문은 XML 문자열을 HTML 페이지에 예쁘게 인쇄할 수 있는 더 좋은 방법을 알고 계십니까?&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;이는 서드파티 립 없이 네이티브 자바스크립트 도구를 사용하여 @Dimtre Novatchev의 답변을 확장할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;var prettifyXml = function(sourceXml)
{
    var xmlDoc = new DOMParser().parseFromString(sourceXml, 'application/xml');
    var xsltDoc = new DOMParser().parseFromString([
        // describes how we want to modify the XML - indent everything
        '&amp;lt;xsl:stylesheet xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&amp;gt;',
        '  &amp;lt;xsl:strip-space elements=&quot;*&quot;/&amp;gt;',
        '  &amp;lt;xsl:template match=&quot;para[content-style][not(text())]&quot;&amp;gt;', // change to just text() to strip space in text nodes
        '    &amp;lt;xsl:value-of select=&quot;normalize-space(.)&quot;/&amp;gt;',
        '  &amp;lt;/xsl:template&amp;gt;',
        '  &amp;lt;xsl:template match=&quot;node()|@*&quot;&amp;gt;',
        '    &amp;lt;xsl:copy&amp;gt;&amp;lt;xsl:apply-templates select=&quot;node()|@*&quot;/&amp;gt;&amp;lt;/xsl:copy&amp;gt;',
        '  &amp;lt;/xsl:template&amp;gt;',
        '  &amp;lt;xsl:output indent=&quot;yes&quot;/&amp;gt;',
        '&amp;lt;/xsl:stylesheet&amp;gt;',
    ].join('\n'), 'application/xml');

    var xsltProcessor = new XSLTProcessor();    
    xsltProcessor.importStylesheet(xsltDoc);
    var resultDoc = xsltProcessor.transformToDocument(xmlDoc);
    var resultXml = new XMLSerializer().serializeToString(resultDoc);
    return resultXml;
};

console.log(prettifyXml('&amp;lt;root&amp;gt;&amp;lt;node/&amp;gt;&amp;lt;/root&amp;gt;'));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;root&amp;gt;
  &amp;lt;node/&amp;gt;
&amp;lt;/root&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://jsfiddle.net/klesun/sgeryvyu/369/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JSFiddle&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;@jat255에서 지적한 바와 같이 firefox에서는 예쁜 인쇄를 지원하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 크롬, 오페라 그리고 아마도 나머지 웹킷 기반 브라우저에서만 작동하는 것으로 보입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;질문의 본문에서 &lt;strong&gt;HTML&lt;/strong&gt; 형식의 결과가 아닌 &lt;strong&gt;문자열 결과가 예상된다는 인상을 받습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 그렇다면, &lt;strong&gt;이를 달성하는 가장 간단한&lt;/strong&gt; 방법은 다음과 같은 &lt;strong&gt;명령을 사용&lt;/strong&gt;하여 &lt;strong&gt;&lt;a href=&quot;http://www.w3.org/TR/xslt#copying&quot; rel=&quot;noreferrer&quot;&gt;ID 변환&lt;/a&gt;&lt;/strong&gt;을 &lt;strong&gt;통해 XML 문서를 처리하는 것&lt;/strong&gt;입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;lt;xsl:스타일시트 버전=&quot;1.0&quot;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform &quot;&amp;gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;lt;xsl:outputomit-xml-declar화=&quot;yes&quot; endent=&quot;yes&quot;/&amp;gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;lt;xsl:template match=&quot;노드 ()|@*&quot;&amp;gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;lt;xsl:copy&amp;gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;lt;xsl:apply-templates 선택=&quot;노드 ()|@*&quot;/&amp;gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;lt;/xsl:copy&amp;gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;lt;/xsl: template&amp;gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;lt;/xsl:스타일시트&amp;gt;&lt;/font&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제공된 XML 문서에 이 변환을 적용할 때:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;lt;root&amp;gt;&amp;lt;node/&amp;gt;&amp;lt;/root&amp;gt;&lt;/font&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대부분의 XSLT 프로세서(.)&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NET XslCompiled Transform, Saxon 6.5.4 및 Saxon 9.0.0.2, AltovaXML)에서 원하는 결과를 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;lt;뿌리&amp;gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;lt;노드 /&amp;gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&amp;lt;/root&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유사한 요구 사항이 있을 때 이 스레드를 찾았지만 OP의 코드를 다음과 같이 단순화했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function formatXml(xml, tab) { // tab = optional indent value, default is tab (\t)
    var formatted = '', indent= '';
    tab = tab || '\t';
    xml.split(/&amp;gt;\s*&amp;lt;/).forEach(function(node) {
        if (node.match( /^\/\w/ )) indent = indent.substring(tab.length); // decrease indent by one 'tab'
        formatted += indent + '&amp;lt;' + node + '&amp;gt;\r\n';
        if (node.match( /^&amp;lt;?\w[^&amp;gt;]*[^\/]$/ )) indent += tab;              // increase indent
    });
    return formatted.substring(1, formatted.length-3);
}
&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;efnx clckclcks의 javascript 기능을 약간 수정했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서식을 공백에서 탭으로 변경했지만 가장 중요한 것은 텍스트를 한 줄에 유지할 수 있도록 허용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var formatXml = this.formatXml = function (xml) {
        var reg = /(&amp;gt;)\s*(&amp;lt;)(\/*)/g; // updated Mar 30, 2015
        var wsexp = / *(.*) +\n/g;
        var contexp = /(&amp;lt;.+&amp;gt;)(.+\n)/g;
        xml = xml.replace(reg, '$1\n$2$3').replace(wsexp, '$1\n').replace(contexp, '$1\n$2');
        var pad = 0;
        var formatted = '';
        var lines = xml.split('\n');
        var indent = 0;
        var lastType = 'other';
        // 4 types of tags - single, closing, opening, other (text, doctype, comment) - 4*4 = 16 transitions 
        var transitions = {
            'single-&amp;gt;single': 0,
            'single-&amp;gt;closing': -1,
            'single-&amp;gt;opening': 0,
            'single-&amp;gt;other': 0,
            'closing-&amp;gt;single': 0,
            'closing-&amp;gt;closing': -1,
            'closing-&amp;gt;opening': 0,
            'closing-&amp;gt;other': 0,
            'opening-&amp;gt;single': 1,
            'opening-&amp;gt;closing': 0,
            'opening-&amp;gt;opening': 1,
            'opening-&amp;gt;other': 1,
            'other-&amp;gt;single': 0,
            'other-&amp;gt;closing': -1,
            'other-&amp;gt;opening': 0,
            'other-&amp;gt;other': 0
        };

        for (var i = 0; i &amp;lt; lines.length; i++) {
            var ln = lines[i];

            // Luca Viggiani 2017-07-03: handle optional &amp;lt;?xml ... ?&amp;gt; declaration
            if (ln.match(/\s*&amp;lt;\?xml/)) {
                formatted += ln + &quot;\n&quot;;
                continue;
            }
            // ---

            var single = Boolean(ln.match(/&amp;lt;.+\/&amp;gt;/)); // is this line a single tag? ex. &amp;lt;br /&amp;gt;
            var closing = Boolean(ln.match(/&amp;lt;\/.+&amp;gt;/)); // is this a closing tag? ex. &amp;lt;/a&amp;gt;
            var opening = Boolean(ln.match(/&amp;lt;[^!].*&amp;gt;/)); // is this even a tag (that's not &amp;lt;!something&amp;gt;)
            var type = single ? 'single' : closing ? 'closing' : opening ? 'opening' : 'other';
            var fromTo = lastType + '-&amp;gt;' + type;
            lastType = type;
            var padding = '';

            indent += transitions[fromTo];
            for (var j = 0; j &amp;lt; indent; j++) {
                padding += '\t';
            }
            if (fromTo == 'opening-&amp;gt;closing')
                formatted = formatted.substr(0, formatted.length - 1) + ln + '\n'; // substr removes line break (\n) from prev loop
            else
                formatted += padding + ln + '\n';
        }

        return formatted;
    };
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;개인적으로 구글 코드 &lt;a href=&quot;https://github.com/google/code-prettify&quot; rel=&quot;nofollow noreferrer&quot;&gt;프리티파이&lt;/a&gt;는 다음과 같은 기능은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prettyPrintOne('&amp;lt;root&amp;gt;&amp;lt;node1&amp;gt;&amp;lt;root&amp;gt;', 'xml')
&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;var formatXml = this.formatXml = function (xml) {
    var reg = /(&amp;gt;)(&amp;lt;)(\/*)/g;
    var wsexp = / *(.*) +\n/g;
    var contexp = /(&amp;lt;.+&amp;gt;)(.+\n)/g;
    xml = xml.replace(reg, '$1\n$2$3').replace(wsexp, '$1\n').replace(contexp, '$1\n$2');
    var pad = 0;
    var formatted = '';
    var lines = xml.split('\n');
    var indent = 0;
    var lastType = 'other';
    // 4 types of tags - single, closing, opening, other (text, doctype, comment) - 4*4 = 16 transitions 
    var transitions = {
        'single-&amp;gt;single'    : 0,
        'single-&amp;gt;closing'   : -1,
        'single-&amp;gt;opening'   : 0,
        'single-&amp;gt;other'     : 0,
        'closing-&amp;gt;single'   : 0,
        'closing-&amp;gt;closing'  : -1,
        'closing-&amp;gt;opening'  : 0,
        'closing-&amp;gt;other'    : 0,
        'opening-&amp;gt;single'   : 1,
        'opening-&amp;gt;closing'  : 0, 
        'opening-&amp;gt;opening'  : 1,
        'opening-&amp;gt;other'    : 1,
        'other-&amp;gt;single'     : 0,
        'other-&amp;gt;closing'    : -1,
        'other-&amp;gt;opening'    : 0,
        'other-&amp;gt;other'      : 0
    };

    for (var i=0; i &amp;lt; lines.length; i++) {
        var ln = lines[i];
        var single = Boolean(ln.match(/&amp;lt;.+\/&amp;gt;/)); // is this line a single tag? ex. &amp;lt;br /&amp;gt;
        var closing = Boolean(ln.match(/&amp;lt;\/.+&amp;gt;/)); // is this a closing tag? ex. &amp;lt;/a&amp;gt;
        var opening = Boolean(ln.match(/&amp;lt;[^!].*&amp;gt;/)); // is this even a tag (that's not &amp;lt;!something&amp;gt;)
        var type = single ? 'single' : closing ? 'closing' : opening ? 'opening' : 'other';
        var fromTo = lastType + '-&amp;gt;' + type;
        lastType = type;
        var padding = '';

        indent += transitions[fromTo];
        for (var j = 0; j &amp;lt; indent; j++) {
            padding += '    ';
        }

        formatted += padding + ln + '\n';
    }

    return formatted;
};
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기에 주어진 모든 자바스크립트 함수는 끝 태그 '&amp;gt;'와 시작 태그 '&amp;lt;' 사이에 지정되지 않은 공백이 있는 xml 문서에서는 작동하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것들을 고치기 위해서는, 함수들의 첫번째 줄을 바꾸기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var reg = /(&amp;gt;)(&amp;lt;)(\/*)/g;
&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 reg = /(&amp;gt;)\s*(&amp;lt;)(\/*)/g;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;stub 노드(document.createElement('div'))를 생성하거나 라이브러리 등가물을 사용하여 xml 문자열로 채웁니다(내부를 통해).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;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;그런 다음 구문을 강조하여 마크업이 잘 형성되었는지 확인할 수 있습니다(내부를 통해 추가할 때 브라우저에서 자동으로 수행됨).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;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;JavaScript 솔루션을 찾고 계신다면 http://prettydiff.com/ ?m=&lt;a href=&quot;http://prettydiff.com/?m=beautify&quot; rel=&quot;nofollow noreferrer&quot;&gt;beautify&lt;/a&gt;의 Pretty Diff 툴에서 코드를 가져오시면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;s 파라미터를 사용하여 다음과 같은 도구로 파일을 보낼 수도 있습니다. http://prettydiff.com/ ?&lt;a href=&quot;http://prettydiff.com/?m=beautify&amp;amp;s=https://stackoverflow.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;m&lt;/a&gt;=&lt;a href=&quot;http://prettydiff.com/?m=beautify&amp;amp;s=https://stackoverflow.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;beautify&amp;amp;s&lt;/a&gt;=https://stackoverflow.com/&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/riversun/xml-beautify&quot; rel=&quot;nofollow noreferrer&quot;&gt;xml-beautify&lt;/a&gt;로 꽤 포맷된 xml을 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var prettyXmlText = new XmlBeautify().beautify(xmlText, 
                    {indent: &quot;  &quot;,useSelfClosingElement: true});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;들여쓰기&lt;/strong&gt;:백자 같은 &lt;strong&gt;indent&lt;/strong&gt; 패턴&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;selfClosingElement&lt;/strong&gt;: true&lt;strong&gt;=&lt;/strong&gt;&amp;gt; 요소가 비어있는 경우 self-&lt;strong&gt;closing&lt;/strong&gt; 요소를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://jsfiddle.net/zr9s5fLn/8/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JSFiddle&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;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&amp;lt;example version=&quot;2.0&quot;&amp;gt;
  &amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Original aTitle&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;
  &amp;lt;body info=&quot;none&quot; &amp;gt;&amp;lt;/body&amp;gt;
&amp;lt;/example&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;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;example version=&quot;2.0&quot;&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Original aTitle&amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body info=&quot;none&quot; /&amp;gt;
&amp;lt;/example&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 프로젝트에서는 별도의 라이브러리 없이 XML을 예쁘게 하고 색상을 조정해야 했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음의 자체 포함 코드는 꽤 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function formatXml(xml,colorize,indent) { 
  function esc(s){return s.replace(/[-\/&amp;amp;&amp;lt;&amp;gt; ]/g,function(c){         // Escape special chars
    return c==' '?'&amp;amp;nbsp;':'&amp;amp;#'+c.charCodeAt(0)+';';});}            
  var sm='&amp;lt;div class=&quot;xmt&quot;&amp;gt;',se='&amp;lt;div class=&quot;xel&quot;&amp;gt;',sd='&amp;lt;div class=&quot;xdt&quot;&amp;gt;',
      sa='&amp;lt;div class=&quot;xat&quot;&amp;gt;',tb='&amp;lt;div class=&quot;xtb&quot;&amp;gt;',tc='&amp;lt;div class=&quot;xtc&quot;&amp;gt;',
      ind=indent||'  ',sz='&amp;lt;/div&amp;gt;',tz='&amp;lt;/div&amp;gt;',re='',is='',ib,ob,at,i;
  if (!colorize) sm=se=sd=sa=sz='';   
  xml.match(/(?&amp;lt;=&amp;lt;).*(?=&amp;gt;)|$/s)[0].split(/&amp;gt;\s*&amp;lt;/).forEach(function(nd){
    ob=('&amp;lt;'+nd+'&amp;gt;').match(/^(&amp;lt;[!?\/]?)(.*?)([?\/]?&amp;gt;)$/s);             // Split outer brackets
    ib=ob[2].match(/^(.*?)&amp;gt;(.*)&amp;lt;\/(.*)$/s)||['',ob[2],''];            // Split inner brackets 
    at=ib[1].match(/^--.*--$|=|('|&quot;).*?\1|[^\t\n\f \/&amp;gt;&quot;'=]+/g)||['']; // Split attributes
    if (ob[1]=='&amp;lt;/') is=is.substring(ind.length);                     // Decrease indent
    re+=tb+tc+esc(is)+tz+tc+sm+esc(ob[1])+sz+se+esc(at[0])+sz;
    for (i=1;i&amp;lt;at.length;i++) re+=(at[i]==&quot;=&quot;?sm+&quot;=&quot;+sz+sd+esc(at[++i]):sa+' '+at[i])+sz;
    re+=ib[2]?sm+esc('&amp;gt;')+sz+sd+esc(ib[2])+sz+sm+esc('&amp;lt;/')+sz+se+ib[3]+sz:'';
    re+=sm+esc(ob[3])+sz+tz+tz;
    if (ob[1]+ob[3]+ib[2]=='&amp;lt;&amp;gt;') is+=ind;                             // Increase indent
  });
  return re;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://jsfiddle.net/dkb0La16/ 참조&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Or just print out the special HTML characters?

Ex: &amp;lt;xmlstuff&amp;gt;&amp;amp;#10; &amp;amp;#09;&amp;lt;node /&amp;gt;&amp;amp;#10;&amp;lt;/xmlstuff&amp;gt;   


&amp;amp;#09;   Horizontal tab  
&amp;amp;#10;   Line feed
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;XML &lt;a href=&quot;https://github.com/pgfearo/xmlspectrum&quot; rel=&quot;nofollow noreferrer&quot;&gt;스펙트럼&lt;/a&gt; 포맷 XML은 속성 들여쓰기를 지원하며 XML 및 내장된 XPath 식에 대해 구문 강조 표시를 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/WULv5.png&quot; alt=&quot;XMLSpectrum formatted XML&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;XMLSpectrum은 XSLT 2.0으로 코딩된 오픈 소스 프로젝트이므로 Saxon-HE(권장)와 같은 프로세서 또는 Saxon-CE를 사용하여 클라이언트 측에서 이 서버 측을 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;XML 스펙트럼은 아직 브라우저에서 실행할 수 있도록 최적화되어 있지 않으므로 이 서버측에서 실행하는 것이 좋습니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 xml을 포맷하는 다른 함수가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function formatXml(xml){
    var out = &quot;&quot;;
    var tab = &quot;    &quot;;
    var indent = 0;
    var inClosingTag=false;
    var dent=function(no){
        out += &quot;\n&quot;;
        for(var i=0; i &amp;lt; no; i++)
            out+=tab;
    }


    for (var i=0; i &amp;lt; xml.length; i++) {
        var c = xml.charAt(i);
        if(c=='&amp;lt;'){
            // handle &amp;lt;/
            if(xml.charAt(i+1) == '/'){
                inClosingTag = true;
                dent(--indent);
            }
            out+=c;
        }else if(c=='&amp;gt;'){
            out+=c;
            // handle /&amp;gt;
            if(xml.charAt(i-1) == '/'){
                out+=&quot;\n&quot;;
                //dent(--indent)
            }else{
              if(!inClosingTag)
                dent(++indent);
              else{
                out+=&quot;\n&quot;;
                inClosingTag=false;
              }
            }
        }else{
          out+=c;
        }
    }
    return out;
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;var formatXml = this.formatXml = function (xml) {
        var reg = /(&amp;gt;)(&amp;lt;)(\/*)/g;
        var wsexp = / *(.*) +\n/g;
        var contexp = /(&amp;lt;.+&amp;gt;)(.+\n)/g;
        xml = xml.replace(reg, '$1\n$2$3').replace(wsexp, '$1\n').replace(contexp, '$1\n$2');
        var pad = 0;
        var formatted = '';
        var lines = xml.split('\n');
        var indent = 0;
        var lastType = 'other';
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;xml 포맷은 xml을 구문 분석하여 들여쓰기를 위해 돔 트리의 텍스트 노드를 추가하거나 변경한 다음 dom을 xml로 다시 직렬화함으로써 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://jsonbrowser.sourceforge.io/formatxml.js 에서 &lt;strong&gt;formatxml&lt;/strong&gt; 기능을 확인하십시오. Xml 탭 아래에 있는 https://jsonbrowser.sourceforge.io/ 에서 실행 중인 기능을 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래는 간소화된 코드입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;formatxml.js&lt;/strong&gt;는 오류 검사, 주석 제거(선택 사항), 매개 변수로 들여쓰기를 추가하고 부모 노드 사이의 공백 없는 텍스트를 처리합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const parser = new DOMParser();

const serializer = new XMLSerializer();

function formatXml(xml) {
  let xmlDoc = parser.parseFromString(xml, 'application/xml');
  let rootElement = xmlDoc.documentElement;
  indentChildren(xmlDoc, rootElement, &quot;\n&quot;, &quot;\n  &quot;);
  xml = serializer.serializeToString(xmlDoc);
  return xml;
}

function indentChildren(xmlDoc, node, prevPrefix, prefix) {
  let children = node.childNodes;
  let i;
  let prevChild = null;
  let prevChildType = 1;
  let child = null;
  let childType;
  for (i = 0; i &amp;lt; children.length; i++) {
    child = children[i];
    childType = child.nodeType;
    if (childType != 3) {
      if (prevChildType == 3) {
        // Update prev text node with correct indent
        prevChild.nodeValue = prefix;
      } else {
        // Create and insert text node with correct indent
        let textNode = xmlDoc.createTextNode(prefix);
        node.insertBefore(textNode, child);
        i++;
      }
      if (childType == 1) {
        let isLeaf = child.childNodes.length == 0 || child.childNodes.length == 1 &amp;amp;&amp;amp; child.childNodes[0].nodeType != 1;
        if (!isLeaf) {
          indentChildren(xmlDoc, child, prefix, prefix + &quot;  &quot;);
        }
      }
    }
    prevChild = child;
    prevChildType =childType;
  }
  if (child != null) {
    // Previous level indentation after last child
    if (childType == 3) {
      child.nodeValue = prevPrefix;
    } else {
      let textNode = xmlDoc.createTextNode(prevPrefix);
      node.append(textNode);
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참조 : https://www.w3schools.com/XML/dom_intro.asp&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;var reg = /(&amp;gt;)\s*(&amp;lt;)(\/*)/g;
xml = xml.replace(/\r|\n/g, ''); //deleting already existing whitespaces
xml = xml.replace(reg, '$1\r\n$2$3');
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예쁜 인쇄를 위해 위의 방법을 사용한 다음 jquery &lt;strong&gt;text()&lt;/strong&gt; 방법을 사용하여 div에 추가합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 divis의 id&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xmldiv&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;$(&quot;#xmldiv&quot;).text(formatXml(youXmlString));&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Saxon-JS 클라이언트 측을 사용할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;SaxonJS/SaxonJS2.js&quot;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;script&amp;gt;
let myXML = `&amp;lt;root&amp;gt;&amp;lt;node/&amp;gt;&amp;lt;/root&amp;gt;`;

SaxonJS.getResource({
   text: myXML.replace(`xml:space=&quot;preserve&quot;`, ''),
   type: &quot;xml&quot;
}).then(doc =&amp;gt; {
   const output = SaxonJS.serialize(doc, {method: &quot;xml&quot;, indent: true, &quot;omit-xml-declaration&quot;:true});
   console.log(output);
})
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.saxonica.com/saxon-js/documentation/index.html#!starting/installing&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Saxon-JS 설치 클라이언트 측&lt;/font&gt;&lt;/a&gt;&lt;br&gt; &lt;a href=&quot;https://www.saxonica.com/download/javascript.xml&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;색슨-JS 다운로드 페이지&lt;/font&gt;&lt;/a&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;translated&quot;&gt;다음은 새 줄 구분 기호 &quot;\n&quot;으로 가입할 수 있는 줄의 문자열 배열을 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/**
 * The child of an XML node can be raw text or another xml node.
 */
export type PossibleNode = XmlNode | string;

/**
 * Base XML Node type.
 */
export interface XmlNode {
  tag: string;
  attrs?: { [key: string]: string };
  children?: PossibleNode[];
}

/**
 * Exports the given XML node to a string array.
 * 
 * @param node XML Node
 * @param autoClose Auto close the tag
 * @param indent Indentation level
 * @returns String array
 */
export function xmlNodeToString(
  node: XmlNode,
  autoClose: boolean = true,
  indent: number = 0
): string[] {
  const indentStr = &quot; &quot;.repeat(indent);
  const sb: string[] = [];
  sb.push(`${indentStr}&amp;lt;${node.tag}`);
  if (node.attrs) {
    for (const key in node.attrs) {
      sb.push(`${indentStr} ${key}=&quot;${node.attrs[key]}&quot;`);
    }
  }
  if (node.children) {
    if (node.children.length === 1 &amp;amp;&amp;amp; typeof node.children[0] === &quot;string&quot;) {
      sb[sb.length - 1] += &quot;&amp;gt;&quot; + node.children[0];
    } else {
      sb.push(`${indentStr}&amp;gt;`);
      for (const child of node.children) {
        if (typeof child === &quot;string&quot;) {
          sb.push(`${indentStr}  ${child}`);
        } else {
          const lines = xmlNodeToString(child, autoClose, indent + 1);
          sb.push(...lines.map((line) =&amp;gt; `${indentStr}  ${line}`));
        }
      }
    }
    if (autoClose) {
      if (node.children.length === 1 &amp;amp;&amp;amp; typeof node.children[0] === &quot;string&quot;) {
        sb[sb.length - 1] += `&amp;lt;/${node.tag}&amp;gt;`;
      } else {
        sb.push(`${indentStr}&amp;lt;/${node.tag}&amp;gt;`);
      }
    }
  } else {
    if (autoClose) {
      sb.push(`${indentStr}/&amp;gt;`);
    } else {
      sb.push(`${indentStr}&amp;gt;`);
    }
  }
  return sb;
}

&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주요 내용에 대한 업데이트 감사: https://gist.github.com/rodydavis/acd609560ab0416b60681fddabc43eee&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/javadev/xml-to-json&quot; rel=&quot;nofollow noreferrer&quot;&gt;XML-to-json&lt;/a&gt; 라이브러리에 메서드가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;formatXml(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;/p&gt; 
&lt;pre&gt;&lt;code&gt;var prettyXml = formatXml(&quot;&amp;lt;a&amp;gt;&amp;lt;b/&amp;gt;&amp;lt;/a&amp;gt;&quot;);

// &amp;lt;a&amp;gt;
//   &amp;lt;b/&amp;gt;
// &amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 버전은 다른 사람들에게 유용할지도 모릅니다. 누군가가 같은 코드를 가지고 있는 String Builder Saw를 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    public String FormatXml(String xml, String tab)
    {
        var sb = new StringBuilder();
        int indent = 0;
        // find all elements
        foreach (string node in Regex.Split(xml,@&quot;&amp;gt;\s*&amp;lt;&quot;))
        {
            // if at end, lower indent
            if (Regex.IsMatch(node, @&quot;^\/\w&quot;)) indent--;
            sb.AppendLine(String.Format(&quot;{0}&amp;lt;{1}&amp;gt;&quot;, string.Concat(Enumerable.Repeat(tab, indent).ToArray()), node));
            // if at start, increase indent
            if (Regex.IsMatch(node, @&quot;^&amp;lt;?\w[^&amp;gt;]*[^\/]$&quot;)) indent++;
        }
        // correct first &amp;lt; and last &amp;gt; from the output
        String result = sb.ToString().Substring(1);
        return result.Remove(result.Length - Environment.NewLine.Length-1);
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/376373/pretty-printing-xml-with-javascript&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>xml</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1652</guid>
      <comments>https://copyscript.tistory.com/1652#entry1652comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:54:54 +0900</pubDate>
    </item>
    <item>
      <title>Excel에서 csv 빈 행 문제 발생</title>
      <link>https://copyscript.tistory.com/1651</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Excel에서 csv 빈 행 문제 발생&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;sqlite3 데이터베이스의 행이 포함된 csv 파일이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;python을 사용하여 csv 파일에 행을 작성했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Ms Excel로 csv 파일을 열면 모든 행 아래에 빈 행이 나타나지만 메모장의 파일은 비어 있지 않습니다.&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;편집: 행을 쓰기 전에 모든 속성에 대해 strip() 함수를 사용했습니다.&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;open('file.csv', 'w')&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;-- 시도해 봅니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;open('file.csv', 'wb')&lt;/code&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;Python csv 모듈에서는 출력 파일을 이진 모드로 열어야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫 번째로 떠오르는 생각은 &quot;\r\n&quot;을 행 구분 기호로 사용했을 수도 있다는 것입니다(메모장에 한 줄 구분 기호로 표시됨). 그러나 Excel은 &quot;\n&quot;만 얻을 것으로 예상하거나 &quot;\r&quot;만 얻을 것으로 예상하므로 이를 두 줄 breaks로 해석합니다.&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/4122794/csv-blank-rows-problem-with-excel&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>Excel</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1651</guid>
      <comments>https://copyscript.tistory.com/1651#entry1651comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:54:38 +0900</pubDate>
    </item>
    <item>
      <title>Swift 4에서 Json 문자열을 Json 개체로 변환</title>
      <link>https://copyscript.tistory.com/1650</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Swift 4에서 Json 문자열을 Json 개체로 변환&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;JSON 문자열을 JSON 개체로 변환하려고 하지만 그 후에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JSONSerialization&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;nil&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JSON에서.&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;[{\&quot;form_id\&quot;:3465,\&quot;canonical_name\&quot;:\&quot;df_SAWERQ\&quot;,\&quot;form_name\&quot;:\&quot;Activity 4 with Images\&quot;,\&quot;form_desc\&quot;:null}]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 코드로 이 문자열을 변환하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let jsonString = response.result.value
let data: Data? = jsonString?.data(using: .utf8)
let json = (try? JSONSerialization.jsonObject(with: data, options: [])) as? [String:AnyObject]
 print(json ?? &quot;Empty Data&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;문제는 당신의 jsonString이 사전이라고 생각했다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런거 아냐.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 &lt;strong papago-id=&quot;3-1&quot;&gt;사전들&lt;/strong&gt;의 배열입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;raw json 문자열에서 배열은 다음과 같이 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 사전은 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;{&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;hr&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 코드와 함께 당신의 json 문자열을 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let string = &quot;[{\&quot;form_id\&quot;:3465,\&quot;canonical_name\&quot;:\&quot;df_SAWERQ\&quot;,\&quot;form_name\&quot;:\&quot;Activity 4 with Images\&quot;,\&quot;form_desc\&quot;:null}]&quot;
let data = string.data(using: .utf8)!
do {
    if let jsonArray = try JSONSerialization.jsonObject(with: data, options : .allowFragments) as? [Dictionary&amp;lt;String,Any&amp;gt;]
    {
       print(jsonArray) // use the json here     
    } else {
        print(&quot;bad json&quot;)
    }
} catch let error as NSError {
    print(error)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력을 얻고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[[&quot;form_desc&quot;: &amp;lt;null&amp;gt;, &quot;form_name&quot;: Activity 4 with Images, &quot;canonical_name&quot;: df_SAWERQ, &quot;form_id&quot;: 3465]]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JSONSerialization&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;Codable&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&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&gt;&lt;code&gt;[String:Any]&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;struct&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 ...할 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다쳤어요 놀이터에서 이걸 확인해보세요&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import Cocoa

let data = &quot;[{\&quot;form_id\&quot;:3465,\&quot;canonical_name\&quot;:\&quot;df_SAWERQ\&quot;,\&quot;form_name\&quot;:\&quot;Activity 4 with Images\&quot;,\&quot;form_desc\&quot;:null}]&quot;.data(using: .utf8)!

struct Form: Codable {
    let id: Int
    let name: String
    let description: String?

    private enum CodingKeys: String, CodingKey {
        case id = &quot;form_id&quot;
        case name = &quot;form_name&quot;
        case description = &quot;form_desc&quot;
    }
}

do {
    let f = try JSONDecoder().decode([Form].self, from: data)
    print(f)
    print(f[0])
} catch {
    print(error)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최소한의 노력만으로 훨씬 더 편안하게 느낄 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;17-1&quot;&gt;그리고&lt;/em&gt; JSON이 제대로 파싱되지 않는다면 당신은 훨씬 더 많은 정보를 얻게 될 것입니다.&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;써봤는데요?&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;18-1&quot;&gt; [스트링:&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;18-1&quot;&gt;AnyObject]&lt;/strong&gt;가 효과적이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;do{
    if let json = stringToParse.data(using: String.Encoding.utf8){
        if let jsonData = try JSONSerialization.jsonObject(with: json, options: .allowFragments) as? [String:AnyObject]{
            let id = jsonData[&quot;id&quot;] as! String
            ...
        }
    }
}catch {
    print(error.localizedDescription)

}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 코드를 사용했는데 잘 작동합니다. :&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let jsonText = &quot;{\&quot;userName\&quot;:\&quot;Bhavsang\&quot;}&quot;
var dictonary:NSDictionary?
    
if let data = jsonText.dataUsingEncoding(NSUTF8StringEncoding) {
        
     do {
            dictonary =  try NSJSONSerialization.JSONObjectWithData(data, options: [.allowFragments]) as? [String:AnyObject]
        
            if let myDictionary = dictonary
              {
                  print(&quot; User name is: \(myDictionary[&quot;userName&quot;]!)&quot;)
              }
            } catch let error as NSError {
            
            print(error)
         }
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;static func getJSONStringFromObject(object: Any?) -&amp;gt; String? {
    do {
        let jsonData = try JSONSerialization.data(withJSONObject: object ?? DUMMY_STRING, options: [])
        return String(data: jsonData, encoding: .utf8) ?? DUMMY_STRING
    } catch {
        print(error.localizedDescription)
    }
    return DUMMY_STRING
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/47281375/convert-json-string-to-json-object-in-swift-4&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>swift</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1650</guid>
      <comments>https://copyscript.tistory.com/1650#entry1650comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:33:31 +0900</pubDate>
    </item>
    <item>
      <title>std::string의 컨텍스트에서 약자 SSO의 의미</title>
      <link>https://copyscript.tistory.com/1649</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;std::string의 컨텍스트에서 약자 SSO의 의미&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/10231349/are-the-days-of-passing-const-stdstring-as-a-parameter-over&quot; papago-id=&quot;1-1&quot;&gt;최적화와 코드 스타일에 대한 C++ 질문&lt;/a&gt;에서, 몇몇 답변들은 복사본을 최적화하는 맥락에서 &quot;SSO&quot;를 언급했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::string&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; SSO는 그러한 맥락에서 무엇을 의미합니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분명히 &quot;싱글 사인 온&quot;은 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;공유 문자열 최적화&quot;?&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;호출하지 않고 생성하는 변수인 자동 변수(&quot;스택에서&quot;)에 대한 작업&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&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;new&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;)는 일반적으로 다음을 사용하여 생성되는 변수인 free store(&quot;heap&quot;)와 관련된 것보다 훨씬 빠릅니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;new&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;또한 스택 크기는 제한적이며(일반적으로 몇 개의 MiB), 무료 저장소는 시스템의 메모리에 의해서만 제한됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; SSO는 숏/스몰 스트링 최적화입니다 A&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::string&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;일반적으로 문자열을 무료 저장소(&quot;heap&quot;)의 포인터로 저장합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이는 마치 호출하는 것처럼 유사한 성능 특성을 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;new char [size]&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최적화를 위해, 많은 구현이&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작은 자동 배열을 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char [20]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인 경우가 다양함)&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 문자열이 20자 이하인 경우(이 예에서는 실제 크기가 다양함) 해당 배열에 직접 저장됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 전화할 필요가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;new&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일이 좀 빨라지는 것 같아요&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 답변이 그렇게 인기가 있을 줄은 예상하지 못했지만, 실제로 &quot;야생에서&quot; SSO의 구현을 읽어본 적이 없다는 점에 주의하면서, 좀 더 현실적인 구현을 해보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구현내역&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, a.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 정보를 저장해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사이즈를&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용량을&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 위치&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사이즈는 a로 저장할 수 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::string::size_type&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;끝을 가리킬 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유일한 차이점은 사용자가 호출할 때 두 개의 포인터를 빼야 하는지 여부입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;size&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 a를 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;size_type&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 호출할 때 포인터로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;end&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 수 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 용량은 어느 쪽이든 저장할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;28&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;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저, 위에서 설명한 내용을 바탕으로 순진한 구현을 고려해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class string {
public:
    // all 83 member functions
private:
    std::unique_ptr&amp;lt;char[]&amp;gt; m_data;
    size_type m_size;
    size_type m_capacity;
    std::array&amp;lt;char, 16&amp;gt; m_sso;
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;64비트 시스템의 경우 일반적으로 다음을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 문자열당 24바이트의 '오버헤드'를 가지며, SSO 버퍼에 대해서는 16바이트를 더합니다(패딩 요구사항으로 인해 20개가 아닌 여기서 16개를 선택함).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단순화된 예처럼 세 개의 데이터 멤버와 로컬 문자 배열을 저장한다는 것은 정말 말이 안 될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;m_size &amp;lt;= 16&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;m_sso&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;code&gt;m_size &amp;gt; 16&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그럼 난 필요 없어요&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;m_sso&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로 하는 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 제가 필요로 하는 곳에는 절대 중복이 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공간을 낭비하지 않는 현명한 솔루션은 다음과 같습니다(검증되지 않은 예제 용도만 해당).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class string {
public:
    // all 83 member functions
private:
    size_type m_size;
    union {
        class {
            // This is probably better designed as an array-like class
            std::unique_ptr&amp;lt;char[]&amp;gt; m_data;
            size_type m_capacity;
        } m_large;
        std::array&amp;lt;char, sizeof(m_large)&amp;gt; m_small;
    };
};
&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;SSO는 &quot;Small String Optimization&quot;의 줄임말로, 작은 문자열이 별도로 할당된 버퍼를 사용하지 않고 문자열 클래스 본문에 포함되는 기법입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 답변에서 이미 설명한 바와 같이 SSO는 &lt;strong papago-id=&quot;38-1&quot;&gt;Small/Short String Optimization&lt;/strong&gt;을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 최적화의 동기는 일반적으로 애플리케이션이 긴 문자열보다 훨씬 짧은 문자열을 더 많이 처리한다는 부인할 수 없는 증거입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이비드 스톤이 &lt;a href=&quot;https://stackoverflow.com/a/10319672/4289700&quot; papago-id=&quot;25-1&quot;&gt;위의 답변&lt;/a&gt;에서 설명한 바와 같이,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;class는 내부 버퍼를 사용하여 주어진 길이까지 콘텐츠를 저장하므로 동적으로 메모리를 할당할 필요가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 코드가 더 &lt;em papago-id=&quot;26-1&quot;&gt;효율적&lt;/em&gt;이고 &lt;em papago-id=&quot;26-3&quot;&gt;빨라집니다&lt;/em&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;a href=&quot;https://stackoverflow.com/a/28003328/4289700&quot; papago-id=&quot;27-0&quot;&gt;다른 관련 답변&lt;/a&gt;은 내부 버퍼의 크기가 다음에 따라 달라진다는 것을 명확하게 보여줍니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플랫폼마다 다른 구현(아래 벤치마크 결과 참조).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;43&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;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;길이가 = 1인 1000만 문자열 복사 시간 인쇄를 시작합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 길이 = 2의 문자열로 반복합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;길이가 50까지 계속됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;string&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;chrono&amp;gt;

static const char CHARS[] = &quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&quot;;
static const int ARRAY_SIZE = sizeof(CHARS) - 1;

static const int BENCHMARK_SIZE = 10000000;
static const int MAX_STRING_LENGTH = 50;

using time_point = std::chrono::high_resolution_clock::time_point;

void benchmark(std::vector&amp;lt;std::string&amp;gt;&amp;amp; list) {
    std::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();

    // force a copy of each string in the loop iteration
    for (const auto s : list) {
        std::cout &amp;lt;&amp;lt; s;
    }

    std::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();
    const auto duration = std::chrono::duration_cast&amp;lt;std::chrono::milliseconds&amp;gt;(t2 - t1).count();
    std::cerr &amp;lt;&amp;lt; list[0].length() &amp;lt;&amp;lt; ',' &amp;lt;&amp;lt; duration &amp;lt;&amp;lt; '\n';
}

void addRandomString(std::vector&amp;lt;std::string&amp;gt;&amp;amp; list, const int length) {
    std::string s(length, 0);
    for (int i = 0; i &amp;lt; length; ++i) {
        s[i] = CHARS[rand() % ARRAY_SIZE];
    }
    list.push_back(s);
}

int main() {
    std::cerr &amp;lt;&amp;lt; &quot;length,time\n&quot;;

    for (int length = 1; length &amp;lt;= MAX_STRING_LENGTH; length++) {
        std::vector&amp;lt;std::string&amp;gt; list;
        for (int i = 0; i &amp;lt; BENCHMARK_SIZE; i++) {
            addRandomString(list, length);
        }
        benchmark(list);
    }

    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 프로그램을 실행하려면 다음과 같이 해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;./a.out &amp;gt; /dev/null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열을 인쇄하는 시간이 계산되지 않도록 해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중요한 숫자가 인쇄되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;stderr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 콘솔에 나타날 겁니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MacBook과 Ubuntu 머신의 출력으로 차트를 만들었습니다.&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;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 리눅스 머신에서는 문자열의 길이가 16에 도달할 때 점프가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;맥북에서는 길이가 23이 되면 점프가 일어납니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 SSO가 플랫폼 구현에 따라 다름을 확인해 줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우분투&lt;/font&gt;&lt;/strong&gt; &lt;a href=&quot;https://i.stack.imgur.com/KsRWO.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KsRWO.png&quot; alt=&quot;SSO benchmark on Ubuntu&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;맥북 프로&lt;/font&gt;&lt;/strong&gt; &lt;a href=&quot;https://i.stack.imgur.com/evYbn.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/evYbn.png&quot; alt=&quot;SSO benchmark on Macbook Pro&quot;&gt;&lt;/a&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/10315041/meaning-of-acronym-sso-in-the-context-of-stdstring&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>string</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1649</guid>
      <comments>https://copyscript.tistory.com/1649#entry1649comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:33:23 +0900</pubDate>
    </item>
    <item>
      <title>sequelize Unknown 열 '*.createdAt'이 '필드 목록'에 있습니다.</title>
      <link>https://copyscript.tistory.com/1648</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sequelize Unknown 열 '*.createdAt'이 '필드 목록'에 있습니다.&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;연관된 항목을 가져오려고 할 때 '필드 목록'에 알 수 없는 열 'userDetails.createdAt'이 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;findAll&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 class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;var userDetails = sequelize.define('userDetails', {
    userId :Sequelize.INTEGER,
    firstName : Sequelize.STRING,
    lastName : Sequelize.STRING,
    birthday : Sequelize.DATE
});

var user = sequelize.define('user', {
    email: Sequelize.STRING,
    password: Sequelize.STRING
});

user.hasOne(userDetails, {foreignKey: 'userId'});

user.findAll({include: [userDetails] }).success(function(user) {
    console.log(user)
});
&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;오류는 sequelize에서 타임스탬프가 활성화되어 있지만 DB의 실제 테이블 정의에 타임스탬프 열이 포함되어 있지 않다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 때.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것으로 충분하다는 것을 깨닫습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SELECT user.*&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;pre&gt;&lt;code&gt;SELECT `users`.*, `userDetails`.`userId` AS `userDetails.userId`,`userDetails`.`firstName` AS `userDetails.firstName`,`userDetails`.`lastName` AS `userDetails.lastName`, `userDetails`.`birthday` AS `userDetails.birthday`, `userDetails`.`id` AS `userDetails.id`, `userDetails`.`createdAt` AS `userDetails.createdAt`, `userDetails`.`updatedAt` AS `userDetails.updatedAt` FROM `users` LEFT OUTER JOIN `userDetails` AS `userDetails` ON `users`.`id` = `userDetails`.`userId`;
&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;수정 방법은 userDetails 모델에 대한 타임스탬프를 비활성화하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var userDetails = sequelize.define('userDetails', {
    userId :Sequelize.INTEGER,
    firstName : Sequelize.STRING,
    lastName : Sequelize.STRING,
    birthday : Sequelize.DATE
}, {
    timestamps: false
});
&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;var sequelize = new Sequelize('sequelize_test', 'root', null, {
    host: &quot;127.0.0.1&quot;,
    dialect: 'mysql',
    define: {
        timestamps: false
    }
});
&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;우리 프로젝트를 laravel에서 federjs로 마이그레이션할 때도 같은 오류가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블에 생성된 열 이름 대신 생성된 열 이름, 업데이트된 열 이름, 업데이트된 열 이름이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래와 같이 Sequelize 모델에서 필드 이름 매핑을 사용해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  const users = sequelize.define('users', {
     id: {
         type: Sequelize.INTEGER,
         primaryKey: true
     },
     createdAt: {
         field: 'created_at',
         type: Sequelize.DATE,
     },
     updatedAt: {
         field: 'updated_at',
         type: Sequelize.DATE,
     },
     ..
     ..
     ..
     ..
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 오류가 발생했습니다. 두 가지 해결책이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블을 작성할 때 created_at 및 update_at 열을 추가합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code&gt;CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key',
  `name` varchar(30) DEFAULT NULL COMMENT 'user name',
  `created_at` datetime DEFAULT NULL COMMENT 'created time',
  `updated_at` datetime DEFAULT NULL COMMENT 'updated time',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='user';
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타임스탬프 사용 안 함&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code&gt;const Project = sequelize.define('project', {
   title: Sequelize.STRING,
   description: Sequelize.TEXT
 },{
   timestamps: false
 })

&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;{
  timestamps: true,
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;끝나고&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{
  timestamps: true,
  underscored: true,
}
&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;postgresql의 경우:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const sequelize = new Sequelize('postgres://user:pass@url:port/dbname',{ 
    define:{
        timestamps: false
    }
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;말할 것도 없이 교체&lt;/font&gt;&lt;/font&gt;&lt;code&gt;user&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pass&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;url&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;port&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;dbname&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성 값을 입력합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타임스탬프 사용 안 함 Ex:-&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const User = sequelize.define('user', {
    firstName : Sequelize.STRING,
    lastName : Sequelize.STRING,
}, {
    timestamps: false
});
&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;음, 너무 늦었을 수도 있지만, 마이그레이션할 때 createdAt, updateAt를 생성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;      createdAt: {
        allowNull: false,
        defaultValue: Sequelize.fn('now'),
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        defaultValue: Sequelize.fn('now'),
        type: Sequelize.DATE
      }
&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;express와 sequelize mysql을 사용하고 모델은 ex에 대해 보통처럼 정의합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;module.exports = (sequelize, DataTypes) =&amp;gt; {
  const Customer = sequelize.define('customer', {
    name: DataTypes.STRING,
    email: DataTypes.STRING,
    phone: DataTypes.TEXT,
    consider: DataTypes.TEXT,
    otherQuestion: DataTypes.TEXT
  }, {})
  return Customer
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/20386402/sequelize-unknown-column-createdat-in-field-list&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>node.js</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1648</guid>
      <comments>https://copyscript.tistory.com/1648#entry1648comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:33:14 +0900</pubDate>
    </item>
    <item>
      <title>문자열에서 새 줄(\n)을 사용하고 HTML에서 동일하게 렌더링</title>
      <link>https://copyscript.tistory.com/1647</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열에서 새 줄(\n)을 사용하고 HTML에서 동일하게 렌더링&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 말이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string display_txt = &quot;1st line text&quot; +&quot;\n&quot; + &quot;2nd line text&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;Jquery에서, 나는 사용하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;('#somediv').html(display_txt).css(&quot;color&quot;, &quot;green&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;분명히 저는 제 msg가 2줄로 표시될 것으로 예상하고 있지만, 대신 메시지에 \n이 표시되고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것에 대한 빠른 해결책이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블 셀의 CSS를 다음으로 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;white-space:pre-wrap;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;document.body.innerHTML = 'First line\nSecond line\nThird line';&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;body{ white-space:pre-wrap; }&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;br /&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;html의 새 행에 대해:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;display_txt = display_txt.replace(/\n/g, &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;font class=&quot;papago-parent&quot;&gt;이렇게 하면 자동으로 올바른 방법으로 \n이 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script&amp;gt;
$(document).ready(function(){
         var display_txt = &quot;1st line text&quot; +&quot;\n&quot; + &quot;2nd line text&quot;;
         $('#somediv').html(display_txt).css(&quot;color&quot;, &quot;green&quot;);
});
&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;

&amp;lt;pre&amp;gt;
&amp;lt;p id=&quot;somediv&quot;&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/pre&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; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마도요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.text&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.html&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스에서 데이터를 가져오는 중에 다음과 같은 문제가 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;\n&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 위의 어떤 솔루션도 저에게 적합하지 않았고 저는 마침내 다음과 같은 솔루션을 생각해냈습니다. https://stackoverflow.com/a/61484190/7251208&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;URL : https://stackoverflow.com/questions/8573890/using-new-line-n-in-string-and-rendering-the-same-in-html&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>jquery</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1647</guid>
      <comments>https://copyscript.tistory.com/1647#entry1647comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:33:06 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트:변수에 할당된 콜백 함수에 변수를 전달할 수 있습니까?</title>
      <link>https://copyscript.tistory.com/1646</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수에 할당된 콜백 함수에 변수를 전달할 수 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 사람들이 댓글에서 이 질문이 너무 많다고 해서 이 질문을 하는 것을 망설이게 되었지만, 저는 여전히 그들의 답변에서 해결책을 찾지 못했습니다. 주로 (1) 그들이 일반적으로 jQuery를 사용하고 있고 (2) 질문에 제가 이해할 수 없는 기술적인 부분이 포함되어 있기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 변수가 포함된 기능이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수에 함수가 할당됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 개념이 AJAX만의 개념은 아니라고 확신합니다. 하지만 그것이 변화를 가져온다면, 제가 사용하고 있는 맥락입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function iClick(this)
{
    var foo = &quot;I would like to pass this.&quot;;

    ajax.onreadystatechange = function (foo) { alert(foo); }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수에 변수를 전달하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런데 원래 함수 선언이 없는데 파라미터는 어떻게 지정해야 하나요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 할 수 있나요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 익명 함수에서 해당 변수를 매개 변수로 선언하지 마십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function iClick(this)
{
    var foo = &quot;I would like to pass this.&quot;;
    ajax.onreadystatechange = function () { alert(foo); }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫번째 파라미터를 호출할 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;1-1&quot;&gt;콜백&lt;/em&gt;이 지나가는 건 뭐든 간에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 내부에&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전에 선언된 변수를 참조하려면 같은 이름의 매개 변수를 사용하지 &lt;em papago-id=&quot;2-1&quot;&gt;않아야&lt;/em&gt; 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 같은 기능을 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var c=&quot;hello&quot;;

(function(b){
   alert(b) 
})(c);
&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;결과는 &quot;안녕하세요&quot; 입니다.&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;function iClick(this)
{
    var foo = &quot;I would like to pass this.&quot;;

    ajax.onreadystatechange = (function(thevar) {
        return function () { alert(thevar); };
      })(foo);
}
&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;@John Hartsock이 언급했듯이, 모든 사람들이 정말로 기억해야 할 답은 이것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var c=&quot;hello&quot;;

(function(b){
   alert(b) 
})(c);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 그것은 매우 중요합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;for&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 안에 비동기 기능이 있을 때 loop을 실행합니다. 그렇지 않으면 올바른 항목을 얻을 수 없기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 뭐가 나오냐고요?&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;for (var i=0; i&amp;lt;5; i++){
  setTimeout(function(){ 
    console.log(i); 
    }, 1000);
}&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정확히: 모든 5, 왜냐하면 모든 타이머가 1초 후에 트리거되면 변수가 발생하기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i&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;5&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 이렇게 SIAF(&lt;strong papago-id=&quot;18-1&quot;&gt;Self-Invocated Anonymous Function&lt;/strong&gt;)를 사용하면&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;for (var i=0; i&amp;lt;5; i++){
  (function (j){
    setTimeout(function(){ 
      console.log(j); 
      }, 1000);
   })(i);
}&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수가 호출될 때마다 함수의 다른 인스턴스를 실행하고 다른 함수와 마찬가지로 고유한 로컬 변수가 있기 때문에 실제로 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단순히 함수를 정의하는 것이 아니라, 바로 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;();&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막)을 실행할 때마다 다른 변수를 함수에 구문 분석하기 때문에 내부적으로 다른 내부 로컬 변수를 사용하여 함수의 새로운 인스턴스가 생성됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 걸 원하셨을 겁니다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function handleAjaxRequest(params) {
    var context = {'b':'inner', 'c': params['c']};
    function rendered(html) {
      // render
    }
    function gotPart(part) {
        context['a'] = part;
        engine.render(context).addCallback(rendered);
    }
    ajax.getPart(params).addCallback(gotPart);
}
&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;URL : https://stackoverflow.com/questions/3946177/javascript-is-it-possible-to-pass-a-variable-into-a-callback-function-that-is-a&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>Ajax</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1646</guid>
      <comments>https://copyscript.tistory.com/1646#entry1646comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:32:59 +0900</pubDate>
    </item>
    <item>
      <title>배열 값별 MySQL 정렬 순서</title>
      <link>https://copyscript.tistory.com/1645</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열 값별 MySQL 정렬 순서&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열 값으로 순서가 결정되는 MySQL 쿼리를 실행해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 배열은 가변적이지만 배열의 값은 '라는 내 DB 테이블의 필드에 해당합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;신분증을 가지고 9, 1, 4번 신분증 순서로 결과를 돌려주길 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Array ( [0] =&amp;gt; 9 [1] =&amp;gt; 1 [2] =&amp;gt; 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;MySQL에서 가능한가요 아니면 이후 배열을 사용하여 MySQL $결과를 정렬하는 것이 가능한가요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;반환되는 값은 배열에 있는 값뿐이라고 가정할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;ORDER BY field(id, 9, 1, 4);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_field&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_field&lt;/font&gt;&lt;/a&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;ID가 있는 항목 목록을 가져오려는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;5, 2, 1, 3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 순서로 출력합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 선택 쿼리를 실행하기만 하면 순서대로 항목이 반환됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1, 2, 3, 5&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;ORDER BY&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ID들의 무게를 설명하는 항목들.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 보일 겁니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ORDER BY id = 5 DESC, id = 2 DESC, id = 1 DESC, id = 3 DESC
&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/8055138/mysql-sort-order-by-array-value&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>MySQL</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1645</guid>
      <comments>https://copyscript.tistory.com/1645#entry1645comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:32:52 +0900</pubDate>
    </item>
    <item>
      <title>JavaBeanExecutable HV000254에 Java Enum에 대한 매개 변수 메타데이터가 없습니다.</title>
      <link>https://copyscript.tistory.com/1644</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JavaBeanExecutable HV000254에 Java Enum에 대한 매개 변수 메타데이터가 없습니다.&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;스프링 부트 응용 프로그램을 1.5에서 2.3.5로 업그레이드했습니다(스프링 부트 그라들 플러그인 사용).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스프링 부트 응용 프로그램이 시작되면 다음 경고가 4번 표시됩니다.&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;2020-11-05 13:29:19.432 WARN 3931 --- [nio-8080-exec-4] o.h.v.i.p.javabean.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Java Bean 실행 파일: HV000254:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;암시적 또는 합성 매개 변수를 선언하는 FacetField(String, int, String, String, String, int, Class)에 대한 매개 변수 메타데이터가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메서드 매개 변수에 대한 일반 유형 정보를 자동으로 확인하면 여러 매개 변수의 소거가 동일한 경우 잘못된 결과가 나올 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 해결하려면 '-parameters' 플래그로 코드를 컴파일합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;My FacetField 열거는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public enum FacetField {

    CONST_1(&quot;KEY&quot;, &quot;ESFIELD&quot;, &quot;RESOURCEKEY&quot;),
    CONST_2(&quot;KEY&quot;, &quot;ESFIELD&quot;, &quot;RESOURCEKEY&quot;),
    CONST_3(&quot;KEY&quot;, &quot;ESFIELD&quot;, &quot;&quot;),

    CONST_4(&quot;KEY&quot;, &quot;ESFIELD&quot;, &quot;ESMAXFIELD&quot;, &quot;RESOURCEKEY&quot;, Hours.class),
    CONST_5(&quot;KEY&quot;, &quot;ESFIELD&quot;, &quot;RESOURCEKEY&quot;, Experience.class),
    CONST_6(&quot;KEY&quot;, &quot;ESFIELD&quot;, &quot;&quot;, Distance.class);

    private String key;
    private String esField;
    private String esMaxField;
    private String resourcekey;
    private Class&amp;lt;? extends RangeFacet&amp;gt; rangeFacet;

    FacetField(final String key, final String esField, final String resourcekey) {
        this.key = key;
        this.esField = esField;
        this.resourcekey = resourcekey;
        this.rangeFacet = null;
    }

    FacetField(final String key, final String esField, final String resourcekey, final Class&amp;lt;? extends RangeFacet&amp;gt; rangeFacet) {
        this.key = key;
        this.esField = esField;
        this.resourcekey = resourcekey;
        this.rangeFacet = rangeFacet;
    }

    FacetField(final String key, final String esMinField, final String esMaxField, final String resourcekey, final Class&amp;lt;? extends RangeFacet&amp;gt; rangeFacet) {
        this.key = key;
        this.esField = esMinField;
        this.esMaxField = esMaxField;
        this.resourcekey = resourcekey;
        this.rangeFacet = rangeFacet;
    }


    public String getKey() {
        return key;
    }

    public String getEsField(final FieldProperty fieldProperty) {
        return esField + fieldProperty.getEsFieldProperty();
    }

    public String getEsMinField() {
        return esField;
    }

    public String getEsMaxField() {
        return esMaxField;
    }

    public String getResourcekey() {
        return resourcekey;
    }

    public enum Distance implements RangeFacet {

        FROM_0_TO_5(0d, 5d, &quot;5&quot;),
        FROM_0_TO_10(0d, 10d, &quot;10&quot;),
        FROM_0_TO_20(0d, 20d, &quot;20&quot;),
        FROM_0_TO_30(0d, 30d, &quot;30&quot;),
        FROM_0_TO_50(0d, 50d, &quot;50&quot;);

        private final Double min;
        private final Double max;
        private final String selectableDescription;

        Distance(final Double min, final Double max, final String selectableDescription) {
            this.min = min;
            this.max = max;
            this.selectableDescription = selectableDescription;
        }

        @Override
        public Double getMin() {
            return this.min;
        }

        @Override
        public Double getMax() {
            return this.max;
        }

        @Override
        public String getSelectableDescription() {
            return this.selectableDescription;
        }
    }

    public enum Experience implements RangeFacet {

        TO_1(0d, 1d, &quot;1&quot;),
        FROM_1_TO_2(1d, 2d, &quot;2&quot;),
        FROM_2_TO_5(2d, 5d, &quot;5&quot;),
        FROM_5_TO_10(5d, 10d, &quot;10&quot;),
        FROM_10(10d, null, &quot;10+&quot;);

        private final Double min;
        private final Double max;
        private final String selectableDescription;

        Experience(final Double min, final Double max, final String selectableDescription) {
            this.min = min;
            this.max = max;
            this.selectableDescription = selectableDescription;
        }

        @Override
        public Double getMin() {
            return this.min;
        }

        @Override
        public Double getMax() {
            return this.max;
        }

        @Override
        public String getSelectableDescription() {
            return this.selectableDescription;
        }
    }

    public enum Hours implements RangeFacet {

        FROM_0_TO_8(0d, 8d, &quot;8&quot;),
        FROM_9_TO_16(9d, 16d, &quot;16&quot;),
        FROM_17_TO_24(17d, 24d, &quot;24&quot;),
        FROM_25_TO_32(25d, 32d, &quot;32&quot;),
        FROM_33_TO_36(33d, 36d, &quot;36&quot;),
        FROM_37(37d, null, &quot;40&quot;);

        private final Double min;
        private final Double max;
        private final String selectableDescription;
        
        Hours(final Double min, final Double max, final String selectableDescription) {
            this.min = min;
            this.max = max;
            this.selectableDescription = selectableDescription;
        }

        @Override
        public Double getMin() {
            return this.min;
        }

        @Override
        public Double getMax() {
            return this.max;
        }

        @Override
        public String getSelectableDescription() {
            return this.selectableDescription;
        }
    }

}
&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;제가 이것과 관련된 것을 찾을 수 있는 유일한 것은 github: https://github.com/oracle/graal/issues/1941 에서 이 graal 문제입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 설명해 줄 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;spring-boot-parent&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;maven-compiler-plugin&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/spring-projects/spring-boot/blob/2.2.x/spring-boot-project/spring-boot-parent/pom.xml#L392&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;2.2.x&lt;/a&gt; 버전까지.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 직접 깃발을 추가해야 할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;maven-compiler-plugin&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;build&amp;gt;
    &amp;lt;plugins&amp;gt;
        &amp;lt;plugin&amp;gt;
            &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;3.8.1&amp;lt;/version&amp;gt;
            &amp;lt;configuration&amp;gt;
                &amp;lt;parameters&amp;gt;true&amp;lt;/parameters&amp;gt;
            &amp;lt;/configuration&amp;gt;
        &amp;lt;/plugin&amp;gt;
    &amp;lt;/plugins&amp;gt;
&amp;lt;/build&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 대답은 경고를 제거하는 방법을 설명합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-paramaters&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만국의 국기&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring Boot 2를 사용하면 더 &lt;a href=&quot;https://stackoverflow.com/questions/31845676/how-to-compile-spring-boot-applications-with-java-8-parameter-flag/49316086#49316086&quot; papago-id=&quot;5-1&quot;&gt;이상 그렇게 &lt;/a&gt;할 &lt;a href=&quot;https://stackoverflow.com/questions/31845676/how-to-compile-spring-boot-applications-with-java-8-parameter-flag/49316086#49316086&quot; papago-id=&quot;5-1&quot;&gt;필요&lt;/a&gt;가 없습니다(Maven과 Gradle 둘 다 사용하지 않음).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열거 상수에 대한 경고가 계속 표시되는 경우, 이는 &lt;a href=&quot;https://hibernate.atlassian.net/browse/HV-1852&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;12-1&quot;&gt;Hibernate Validator의 버그&lt;/a&gt;로 보입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/64699000/javabeanexecutable-hv000254-missing-parameter-metadata-for-java-enum&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>Spring-Boot</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1644</guid>
      <comments>https://copyscript.tistory.com/1644#entry1644comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:32:46 +0900</pubDate>
    </item>
    <item>
      <title>오류 수정 방법: '오류: 부트스트랩 툴팁에는 테더가 필요합니다(http://github.hubspot.com/tether/)' .</title>
      <link>https://copyscript.tistory.com/1643</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 수정 방법: '오류: 부트스트랩 툴팁에는 테더가 필요합니다(http://github.hubspot.com/tether/)' .&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;Bootstrap V4를 사용하고 있는데 콘솔에 다음 오류가 기록됩니다.&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;오류: 부트스트랩 툴팁에 테더가 필요합니다(http://github.hubspot.com/tether/) .&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테더를 설치하여 오류를 제거하려고 했지만 작동하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드 줄을 포함하여 테더를 '설치'했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;http://www.atlasestateagents.co.uk/css/tether.min.css&quot;&amp;gt;
&amp;lt;script src=&quot;http://www.atlasestateagents.co.uk/javascript/tether.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테더를 올바르게 '설치'했습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류를 제거하는 것을 도와줄 수 있는 사람?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 사이트에서 오류를 보려면 &lt;a href=&quot;https://www.atlasestateagents.co.uk&quot; papago-id=&quot;6-1&quot;&gt;여기&lt;/a&gt;를 클릭하고 콘솔을 로드하십시오.&lt;/font&gt;&lt;/p&gt;&lt;h3 papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩 4 안정기의 경우:&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;베타 부트스트랩 4는 테더가 아닌 &lt;strong papago-id=&quot;8-1&quot;&gt;Popper.js&lt;/strong&gt;에 의존하기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 스크립트(&lt;strong papago-id=&quot;8-3&quot;&gt;다음 순서&lt;/strong&gt;여야 함):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;https://code.jquery.com/jquery-3.3.1.slim.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js&quot;&amp;gt;&amp;lt;/script&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;최신 스크립트 버전은 최신 &lt;a href=&quot;https://getbootstrap.com/docs/4.1/getting-started/introduction/#js&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;설명서&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h3 papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩 4알파만:&lt;/font&gt;&lt;/h3&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;strong papago-id=&quot;11-1&quot;&gt;4알파&lt;/strong&gt;는 &lt;a href=&quot;http://tether.io/&quot; papago-id=&quot;11-3&quot; rel=&quot;noreferrer&quot;&gt;테더&lt;/a&gt;가 필요하므로 다음을 포함해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tether.min.js&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;strong papago-id=&quot;12-0&quot;&gt;전에&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;bootstrap.min.js&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 예를 들면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;https://npmcdn.com/tether@1.2.4/dist/js/tether.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;https://npmcdn.com/bootstrap@4.0.0-alpha.5/dist/js/bootstrap.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹팩을 사용하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩 로더를 문서에 설명된 대로 설정합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;npm을 통해 tether.js를 설치합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 팩 ProviderPlugin 플러그인에 tether.js를 추가합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;webpack.config.js:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;plugins: [
        &amp;lt;... your plugins here&amp;gt;,
        new webpack.ProvidePlugin({
            $: &quot;jquery&quot;,
            jQuery: &quot;jquery&quot;,
            &quot;window.jQuery&quot;: &quot;jquery&quot;,
            &quot;window.Tether&quot;: 'tether'
        })
    ]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/shakacode/bootstrap-loader/issues/48&quot; papago-id=&quot;19&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;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;npm을 사용하는 경우 다음을 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// es6 imports
import tether from 'tether';
global.Tether = tether;

// require
global.Tether = require('tether');
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개인적으로 저는 부트스트랩 기능의 작은 부분집합을 사용하며 테더를 부착할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 다음과 같은 이점을 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;window.Tether = function () {
  throw new Error('Your Bootstrap may actually need Tether.');
};
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 메시지를 방지하고 부트스트랩 도구 팁을 사용하지 않는 경우 창을 정의할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩을 로드하기 전에 테더.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
  window.Tether = {};
&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;js/bootstrap.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; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 내 지침을 따라야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&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; Gem파일에 bellow source 추가&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;source 'https://rails-assets.org' do
  gem 'rails-assets-tether', '&amp;gt;= 1.1.0'
end
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령 실행:&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;묶음 설치&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;application.js에서 jQuery 뒤에 이 행을 추가합니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;//= 잡동사니가 필요한&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;//= 테더가 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레일 서버를 다시 시작합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래와 같이 npm 경유로 테더 설치&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npm install tether --save-dev
&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;그런 다음 아래와 같이 html 위의 부트스트랩에 테더를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;node_modules/tether/dist/js/tether.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;jspm_packages/github/twbs/bootstrap@4.0.0-alpha.2/js/bootstrap.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹팩의 경우 이 문제를 해결했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;webpack.config.js&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;new webpack.ProvidePlugin({
  $: 'jquery',
  jQuery: 'jquery',
  &quot;window.jQuery&quot;: &quot;jquery&quot;,
  Tether: 'tether'
})
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가 메모.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;압축되지 않은 자바스크립트 파일을 확인하면 다음과 같은 조건이 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if(window.Tether === undefined) {
     throw new Error('Bootstrap tooltips require Tether (http://github.hubspot.com/tether)')
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 오류 메시지에는 필요한 정보가 포함되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 &lt;a href=&quot;http://github.hubspot.com/tether/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;38-1&quot;&gt;&lt;strong papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;링크&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;에서 아카이브를 다운로드할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;압축되지 않은 버전:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://rawgit.com/HubSpot/tether/master/src/js/tether.js&quot; rel=&quot;noreferrer&quot; papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://rawgit.com/HubSpot/tether/master/src/js/tether.js&lt;/font&gt;&lt;/a&gt; &lt;a href=&quot;https://rawgit.com/HubSpot/tether/master/dist/css/tether.css&quot; rel=&quot;noreferrer&quot; papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://rawgit.com/HubSpot/tether/master/dist/css/tether.css&lt;/font&gt;&lt;/a&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;webpack.config.js&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var plugins = [

    ...

    new webpack.ProvidePlugin({
        $: &quot;jquery&quot;,
        jQuery: &quot;jquery&quot;,
        'window.jQuery': 'jquery',
        'window.Tether': 'tether',
        tether: 'tether',
        Tether: 'tether'
    })
];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 같아요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Tether&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;찾고 있던 사람이 바로 그 사람이었군요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var Tooltip = function ($) {

  /**
   * Check for Tether dependency
   * Tether - http://tether.io/
   */
  if (typeof Tether === 'undefined') {
    throw new Error('Bootstrap tooltips require Tether (http://tether.io/)');
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최신 부스트랩 4 빌드를 사용하는 requirejs에 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 결국 정의를 내렸습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
  window.Tether = {};
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 html 헤드 태그에 부트스트랩의 수표를 속이기 위해.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 앱을 로드하는 요구 사항 직전에 두 번째 요구 사항을 추가했고, 그 후 부트스트랩 의존성을 추가했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;require(['tether'], function (Tether) {
  window.Tether = Tether;
});

require([
  &quot;app&quot;,
], function(App){
  App.initialize();
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 두 가지를 함께 사용하면 현재 부트스트랩 4 알파 빌드를 사용하는 데 문제가 없을 것입니다.&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;제너레이터-aspnetcore-spa 및 부트스트랩 4에서 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// ===== file: webpack.config.vendor.js =====    
module.exports = (env) =&amp;gt; {
...
    plugins: [
        new webpack.ProvidePlugin({ $: 'jquery', 
                                    jQuery: 'jquery',
                                    'window.jQuery': 'jquery',
                                    'window.Tether': 'tether',
                                    tether: 'tether', 
                                    Tether: 'tether' }), 
// Maps these identifiers to the jQuery package 
// (because Bootstrap expects it to be a global variable)
            ...
        ]
};
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩 4가 탑재된 웹팩 1 또는 2의 경우 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;new webpack.ProvidePlugin({
   $: 'jquery',
   jQuery: 'jquery',
   Tether: 'tether'
})
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브런치를 사용하는 경우 마지막에 추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;brunch-config.js&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npm: {
    enabled: true,
    globals: {
        $: 'jquery', jQuery: 'jquery', 'Tether': 'tether'
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;require.js AMD 로더를 사용하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// path config
requirejs.config({
  paths: {
    jquery: '//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/core.js',
    tether: '//cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min',
    bootstrap: '//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/js/bootstrap.min',
  },
  shim: {
    bootstrap: {
      deps: ['jquery']
    }
  }
});

//async loading
requirejs(['tether'], function (Tether) {
  window.Tether = Tether;
  requirejs(['bootstrap']);
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩4를 실행하는 Laravel Mix 사용자의 경우 실행해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npm installer tether --save
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 업데이트 해주세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;resources/assets/js/bootstrap.js&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테더를 적재하고 창 객체로 가져오는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 제 모습입니다. (참고로 저도 실행해야 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm install popper.js --save&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;window.$ = window.jQuery = require('jquery');
window.Popper = require('popper.js').default;
window.Tether = require('tether');
require('bootstrap');
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@adilapapaya의 답변에 덧붙이기.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ember-cli&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자별, 설치&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tether&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bower install --save tether
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 당신의 것에 그것을 포함합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ember-cli-build.js&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 부트스트랩 전에 파일을 작성합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// tether (bootstrap 4 requirement)
app.import('bower_components/tether/dist/js/tether.min.js');

// bootstrap
app.import('bower_components/bootstrap/scss/bootstrap-flex.scss');
app.import('bower_components/bootstrap/dist/js/bootstrap.js');
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 웹팩을 사용하는 경우 노출 플러그인이 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;webpack.config.js에서 이 로더를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{
   test: require.resolve(&quot;tether&quot;),
   loader: &quot;expose?$!expose?Tether&quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 문제가 있었는데 이렇게 해결했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;5.1.0rc1 레일 위에 있습니다.&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;application.js 파일 안에 require jquery와 tether를 추가해야 합니다. 그들은 이렇게 맨 위에 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//= require jquery
//= require tether
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테더를 장착해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;68&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;68-0&quot;&gt;방법 #1&lt;/strong&gt;: &lt;a href=&quot;https://github.com/HubSpot/tether/tree/master/dist/js&quot; papago-id=&quot;68-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;여기&lt;/a&gt;서 다운로드하여 프로젝트에 삽입하거나,&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;69&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;69-0&quot;&gt;메서드 #2&lt;/strong&gt;: 부트스트랩 스크립트 소스 전에 아래 코드를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;https://npmcdn.com/tether@1.2.4/dist/js/tether.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://v4-alpha.getbootstrap.com/getting-started/introduction/#quick-start&quot; papago-id=&quot;70-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;부트스트랩&lt;/a&gt; 4 &lt;a href=&quot;http://v4-alpha.getbootstrap.com/getting-started/introduction/#quick-start&quot; papago-id=&quot;70-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;설명서&lt;/a&gt;의 지침을 따를 것을 권장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;&amp;lt;link&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 안으로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS를 로드할 다른 모든 스타일시트보다 먼저.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css&quot; integrity=&quot;sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ&quot; crossorigin=&quot;anonymous&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지의 끝, 마감 태그 바로 앞에 자바스크립트 플러그인, jQuery 및 Tether를 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery와 Tether를 먼저 배치해야 합니다. 우리의 코드는 그것들에 달려있기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서에 jQuery의 슬림 빌드를 사용하는 한편, 풀 버전도 지원됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;https://code.jquery.com/jquery-3.1.1.slim.min.js&quot; integrity=&quot;sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n&quot; crossorigin=&quot;anonymous&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js&quot; integrity=&quot;sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb&quot; crossorigin=&quot;anonymous&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js&quot; integrity=&quot;sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn&quot; crossorigin=&quot;anonymous&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UMD/AMD 솔루션&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;76&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;76-1&quot;&gt;UMD&lt;/strong&gt;를 통해 작업을 하고 있는 사람들을 위해, 그리고 다음을 통해 컴파일을 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;require.js&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 라코닉한 해결책이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음이 필요한 모듈에서&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tether&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부하가 걸리는 종속성으로서.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Tooltip&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모듈 정의 앞에 UMD로서 테더의 정의에 대한 간단한 토막글을 붙입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// First load the UMD module dependency and attach to global scope
require(['tether'], function(Tether) {
    // @todo: make it properly when boostrap will fix loading of UMD, instead of using globals
    window.Tether = Tether; // attach to global scope
});

// then goes your regular module definition
define([
    'jquery',
    'tooltip',
    'popover'
], function($, Tooltip, Popover){
    &quot;use strict&quot;;
    //...
    /*
        by this time, you'll have window.Tether global variable defined,
        and UMD module Tooltip will not throw the exception
    */
    //...
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 짧은 토막글은 맨 처음에 실제로 응용 프로그램의 더 높은 수준, 즉 가장 중요한 것을 실제로 사용하기 전에 호출할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;bootstrap&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성 요소가 있는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Tether&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의존.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// ===== file: tetherWrapper.js =====
require(['./tether'], function(Tether) {
    window.Tether = Tether; // attach to global scope
    // it's important to have this, to keep original module definition approach
    return Tether;
});

// ===== your MAIN configuration file, and dependencies definition =====
paths: {
    jquery: '/vendor/jquery',
    // tether: '/vendor/tether'
    tether: '/vendor/tetherWrapper'  // @todo original Tether is replaced with our wrapper around original
    // ...
},
shim: { 
     'bootstrap': ['tether', 'jquery']       
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;84-0&quot;&gt;업데이트:&lt;/strong&gt; Boostrap 4.1 Stable에서 &lt;em papago-id=&quot;84-2&quot;&gt;Tether&lt;/em&gt;를 &lt;a href=&quot;https://popper.js.org/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;84-4&quot;&gt;Popper.js&lt;/a&gt;로 대체했습니다. &lt;a href=&quot;https://getbootstrap.com/docs/4.1/getting-started/introduction/#js&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;84-6&quot;&gt;사용 설명서&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;85&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 문제가 있었는데 js를 포함하기 전에 jquery-3.1.1.min을 포함해서 해결했는데 매력적으로 효과가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/34567939/how-to-fix-the-error-error-bootstrap-tooltips-require-tether-http-github-h&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>JavaScript</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1643</guid>
      <comments>https://copyscript.tistory.com/1643#entry1643comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:32:36 +0900</pubDate>
    </item>
    <item>
      <title>AJAX 호출 보안 설정</title>
      <link>https://copyscript.tistory.com/1642</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;이로부터 보호하는 방법은 웹 &lt;em papago-id=&quot;2-1&quot;&gt;요청&lt;/em&gt;으로부터 보호하는 방법과 다르지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사이트가 어떤 형태의 인증을 요구하는지(즉, 사용자가 로그인해야 함) 확인하고 요청이 제대로 인증되지 않으면 아무런 조치도 취하지 않도록 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 AJAX 요청을 할 때 쿠키도 요청과 함께 전송되므로 AJAX 요청과 함께 일반 요청에 사용하는 것과 동일한 인증 방법을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;codeka에 따르면, 누군가가 당신의 자바스크립트 요청에 있는 것과 동일한 그들만의 Ajax 쿼리를 만드는 것을 막을 방법이 없습니다.&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;서버 측에서 Ajax 쿼리를 통해 제공되는 입력 및 매개 변수의 유효성을 검사하는 것이 유일한 보호 방법입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각각의 PHP나 Python, 또는 어떤 응답 스크립트도 매우 특정한 작업으로 제한하고, 서버측의 입력을 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제가 있으면 오류로 대응합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단히 말해, 다른 사용자가 요청을 보내는 것을 방지할 방법은 없지만, 사용자의 서버에서 사용자가 원하지 않는 작업을 수행하는 것을 방지할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 형식의 인증이 필요하다고 가정하면 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스 세션을 유지하여 위조된 사용자로부터 요청이 오는지 확인할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호화된 쿠키를 사용하여 세션 ID를 저장하고 쿠키 세션 ID를 데이터베이스에 참조하여 사용자의 유효성을 검사합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2971826/making-ajax-calls-secure&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>Ajax</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1642</guid>
      <comments>https://copyscript.tistory.com/1642#entry1642comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:32:26 +0900</pubDate>
    </item>
    <item>
      <title>WP 플러그인 Polylang 기사를 기본적으로 모든 언어로 &amp;quot;복사&amp;quot;</title>
      <link>https://copyscript.tistory.com/1641</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WP 플러그인 Polylang 기사를 기본적으로 모든 언어로 &quot;복사&quot;&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;Polylang&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(또는 WordPress용 다른 번역 플러그인) 한 언어(기본 언어)로 기사나 페이지를 작성할 때 정확한 사본을 만들어 다른 언어로 설정할 수 있도록 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 적어도 번역가에게 번역을 시키기 전까지는 기사/페이지가 보일 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 기사를 다시 복사하거나 쓸 필요가 없고 번역만 하면 훨씬 편리합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 매체의 번역에도 어려움을 겪고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;끌 수 있다는 것은 알지만, 언어별로 같은 이미지를 올리고 설명만 바꾸는 것이 아니라, 같은 이미지를 사용하고 다른 번역만 추가할 수 있다면 정말 멋질 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시간 내주셔서 감사합니다 :)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/31193629/wp-plugin-polylang-copy-articles-to-all-languages-by-default&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>WordPress</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1641</guid>
      <comments>https://copyscript.tistory.com/1641#entry1641comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:32:19 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 오류 #1071 - 지정한 키가 너무 깁니다. 최대 키 길이는 767바이트입니다.</title>
      <link>https://copyscript.tistory.com/1640</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 오류 #1071 - 지정한 키가 너무 깁니다. 최대 키 길이는 767바이트입니다.&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;ALTER TABLE `mytable` ADD UNIQUE (
`column1` ,
`column2`
);
&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;#1071 - Specified key was too long; max key length is 767 bytes
&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;열 1 및 열 2에 대한 정보:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;column1 varchar(20) utf8_general_ci
column2  varchar(500) utf8_general_ci
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;생각합니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;varchar(20)&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;21바이트만 필요한 반면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;varchar(500)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;501바이트만 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 총 바이트 수는 767보다 적은 522개입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런데 왜 오류 메시지가 나왔을까요?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#1071 - Specified key was too long; max key length is 767 bytes
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;7-0&quot;&gt;MySQL 버전 5.6&lt;/strong&gt;(및 이전 버전)의&lt;strong papago-id=&quot;7-0&quot;&gt; 767바이트&lt;/strong&gt;는 InnoDB 테이블에 대한 &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/create-index.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-2&quot;&gt;명시된 접두사 제한&lt;/a&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;My ISAM 테이블의 길이는 1,000바이트입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;7-4&quot;&gt;MySQL 버전 5.7&lt;/strong&gt;(이상)에서는 이&lt;strong papago-id=&quot;7-4&quot;&gt; 제한이 3072바이트&lt;/strong&gt;로 증가되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 또한 당신이 큰 차르에 지수를 설정하는 것을 알아야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;varchar&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필드는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8mb4&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인코딩된 경우, 최대 인덱스 접두사 길이인 767 바이트(또는 3072 바이트)를 4로 나누어 &lt;strong papago-id=&quot;10-1&quot;&gt;191&lt;/strong&gt;을 생성해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 a의 최대 길이가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8mb4&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;문자는 4바이트입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일단은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8&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;strong papago-id=&quot;12-1&quot;&gt;255&lt;/strong&gt;(또는 - null-terminator 제외, 254자)가 되는 3바이트가 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 가지 선택 사항은 제한을 더 낮게 두는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;VARCHAR&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;들녘&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(이&lt;a href=&quot;http://bugs.mysql.com/bug.php?id=6604&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15-1&quot;&gt; 문제에 대한 응답&lt;/a&gt;에 따라) 또 다른 옵션은 전체 양이 아닌 열의 부분 집합을 얻는 것입니다. 즉:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
&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;키를 가져와야 지원할 수 있기 때문에 조정하지만, MySQL 제한에 영향을 주지 않고 의도한 비즈니스 규칙을 구현할 수 있는 개선 사항이 있는지 이 엔티티와 관련된 데이터 모델을 검토해 볼 가치가 있는지 궁금합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한계에 다다르면.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이노드비&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8&lt;/code&gt; &lt;code&gt;VARCHAR(255)&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이노드비&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8mb4&lt;/code&gt; &lt;code&gt;VARCHAR(191)&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;InnoDB에 문제가 있는 사람이 있다면 그리고&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8&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;A를 넣으려고 하는 charset&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UNIQUE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;색인을 보다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;VARCHAR(256)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필드, 로 전환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;VARCHAR(255)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 것 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 255가 한계인 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL은 문자열의 문자당 바이트 수에 대해 최악의 경우를 가정합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 'utf8' 인코딩의 경우, 해당 인코딩은 다음을 초과하는 문자를 허용하지 않으므로 문자당 3바이트입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;U+FFFF&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 MySQL이 실제 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; MySQL 'utf8mb4' 인코딩의 경우 문자당 4바이트인데, 이는 MySQL이 실제 UTF-8이라고 부르는 것이기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 'utf8'을 사용한다고 가정하면 첫 번째 열은 인덱스의 60바이트, 두 번째 열은 1500바이트가 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리 전에 다음 쿼리를 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SET @@global.innodb_large_prefix = 1;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 제한을 증가시킬 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;3072 bytes&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Laravel 프레임워크를 위한 솔루션&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://laravel.com/docs/5.4/migrations#creating-indexes&quot; papago-id=&quot;32-1&quot; rel=&quot;noreferrer&quot;&gt;Laravel 5.4.* 설명서&lt;/a&gt;에 따르면, 기본 문자열 길이를 설정해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;boot&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;app/Providers/AppServiceProvider.php&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;use Illuminate\Support\Facades\Schema;

public function boot() 
{
    Schema::defaultStringLength(191); 
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://laravel.com/docs/5.4/migrations#creating-indexes&quot; rel=&quot;noreferrer&quot; papago-id=&quot;35-1&quot;&gt;Laravel 5.4.* 설명서&lt;/a&gt;에 의해 제공된 이 수정에 대한 설명:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라라벨은 다음을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8mb4&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;기본적으로 설정된 문자로, 데이터베이스에 emojis를 저장하기 위한 지원이 포함합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 버전의 하는 경우 이 마이그레이션에  인덱스를 해야 할 수 5.7.7의 MySQL하거나 10.2&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2 릴리스보다 이전 버전의 MariaDB를 실행하는 경우 MySQL이 마이그레이션에 대한 인덱스를 생성하려면 마이그레이션에 의해 생성된 기본 문자열 길이를 수동으로 구성해야 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 호출하여 이를 구성할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Schema::defaultStringLength&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신 안의 메소드&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AppServiceProvider&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 다음을 활성화할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;innodb_large_prefix&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스에 대한 옵션입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 옵션을 올바르게 사용 가능으로 설정하는 방법에 대한 지침은 데이터베이스 설명서를 참조하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;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;UTF-16 등과 같은 일부 문자 집합은 문자당 1바이트 이상을 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;교체하다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8mb4&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;utf8&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 수입 파일에.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/W1AoE.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W1AoE.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;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;utf8&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;charset은 더 이상 사용되지 않으며 이모지와 같은 모든 유니코드 문자를 지원하지 않으므로 이렇게 하면 전체 유니코드 지원을 잃게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;varchar(20)는 21바이트만 필요하고 varchar(500)는 501바이트만 필요하다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 총 바이트 수는 767보다 적은 522개입니다.&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;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;49-0&quot;&gt;UTF8&lt;/strong&gt;의 경우 문자열을 저장하려면 &lt;strong papago-id=&quot;49-0&quot;&gt;문자당 3바이트가 필요&lt;/strong&gt;하므로 20+500자 &lt;strong papago-id=&quot;49-0&quot;&gt;=&lt;/strong&gt; 20*3+500*3 &lt;strong papago-id=&quot;49-0&quot;&gt;=&lt;/strong&gt; 1560바이트로 허용된 767바이트보다 많습니다.&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;UTF8의 제한은 767/3 = &lt;strong papago-id=&quot;50-1&quot;&gt;255자&lt;/strong&gt;이며, UTF8mb4의 &lt;strong papago-id=&quot;50-3&quot;&gt;경우&lt;/strong&gt; 문자당 4바이트를 사용하면 767/4 = 191자입니다&lt;strong papago-id=&quot;50-3&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h1 papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제한보다 긴 열을 사용해야 하는 경우 이 문제에 대한 두 가지 해결책이 있습니다.&lt;/font&gt;&lt;/h1&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;더 저렴한&quot; 인코딩을 사용합니다(문자당 바이트 수가 적은 인코딩).&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 경우, 기사의 SEO 문자열이 포함된 열에 유니크 인덱스를 추가해야 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 왜냐하면 저는 오직 제가 사용하기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[A-z0-9\-]&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;SEO의 캐릭터, 제가 사용했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;latin1_general_ci&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 문자당 한 바이트만 사용하므로 열의 길이는 767바이트가 될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열에서 해시를 생성하고 해당 열에만 고유 인덱스를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 선택한 다른 방법은 SEO의 해시를 저장할 다른 컬럼을 만드는 것이었습니다. 이 컬럼은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UNIQUE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SEO 값이 고유한지 확인하는 키.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 또한 덧붙이고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;KEY&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;검색 속도를 높이기 위해 원래 SEO 열에 인덱스를 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 메시지가 표시되는 이유에 대한 답변은 이미 많은 사용자가 답변했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 대답은 그것을 어떻게 고치고 그대로 사용할 것인가에 관한 것입니다.&lt;/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;a href=&quot;https://answers.launchpad.net/maria/+question/241612&quot; rel=&quot;noreferrer&quot; papago-id=&quot;61-1&quot;&gt;이 링크&lt;/a&gt;에서 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 클라이언트(또는 MariaDB 클라이언트)를 엽니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령줄 도구입니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비밀번호를 묻습니다. 정확한 비밀번호를 입력하세요.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 명령을 사용하여 데이터베이스 선택&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;use my_database_name;&lt;/code&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스가 변경됨&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol start=&quot;4&quot;&gt; 
 &lt;li&gt;&lt;code&gt;set global innodb_large_prefix=on;&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리 확인, 영향을 받는 행 0개(0.00초)&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol start=&quot;5&quot;&gt; 
 &lt;li&gt;&lt;code&gt;set global innodb_file_format=Barracuda;&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리 확인, 영향을 받는 행 0개(0.02초)&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol start=&quot;6&quot;&gt; 
 &lt;li papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쉬운 관리를 위해 phpMyAdmin 등에서 데이터베이스로 이동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&amp;gt; database &amp;gt; View table &lt;strong papago-id=&quot;68-1&quot;&gt;structure&lt;/strong&gt; &amp;gt; Go to &lt;strong papago-id=&quot;68-3&quot;&gt;Operations&lt;/strong&gt; 탭을 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&amp;gt; &lt;strong papago-id=&quot;68-5&quot;&gt;ROW_FORMAT&lt;/strong&gt;을 &lt;strong papago-id=&quot;68-7&quot;&gt;Dynamic&lt;/strong&gt;으로 변경하고 변경사항을 저장합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블 &lt;strong papago-id=&quot;69-1&quot;&gt;구조&lt;/strong&gt; 탭으로 이동 &amp;gt; &lt;strong papago-id=&quot;69-3&quot;&gt;유니크&lt;/strong&gt; 버튼 클릭&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;70&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;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 수정의 문제는 다른 서버(예: localhost에서 realhost로)에 db를 내보내고 해당 서버에서 MySQL 명령줄을 사용할 수 없는 경우입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 거기서 그것을 작동시킬 수 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Specified key was too long; max key length is 767 bytes
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 당신이 사용할 경우에만 1바이트가 1문자이기 때문에 그 메시지를 받았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;latin-1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;캐릭터 세트&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하는 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 키열을 정의할 때 각 문자는 3바이트로 간주됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하는 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8mb4&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 키열을 정의할 때 각 문자는 4바이트로 간주됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 키 필드에서 허용하려는 바이트 수를 결정하려면 키 필드의 문자 제한에 1, 3 또는 4(예:)를 곱해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;uft8mb4를 사용하는 경우 기본 키 필드인 InnoDB에 대해 191자만 정의할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;767바이트를 위반하지 마십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;5가지 해결 방법:&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;5.7.7(MariaDB 10.2.2?)에서 제한이 상향 조정되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 5.6(10.1)에서 약간의 작업을 통해 증가할 수 있습니다.&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;CHARKER SET utf8mb4를 사용하려고 해서 한계에 도달한 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 오류를 방지하기 위해 다음 중 하나를 수행합니다(각각 단점이 있음).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;⚈  Upgrade to 5.7.7 for 3072 byte limit -- your cloud may not provide this;
⚈  Change 255 to 191 on the VARCHAR -- you lose any values longer than 191 characters (unlikely?);
⚈  ALTER .. CONVERT TO utf8 -- you lose Emoji and some of Chinese;
⚈  Use a &quot;prefix&quot; index -- you lose some of the performance benefits.
⚈  Or... Stay with older version but perform 4 steps to raise the limit to 3072 bytes:

SET GLOBAL innodb_file_format=Barracuda;
SET GLOBAL innodb_file_per_table=1;
SET GLOBAL innodb_large_prefix=1;
logout &amp;amp; login (to get the global values);
ALTER TABLE tbl ROW_FORMAT=DYNAMIC;  -- (or COMPRESSED)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-- &lt;a href=&quot;http://mysql.rjweb.org/doc.php/limits#767_limit_in_innodb_indexes&quot; rel=&quot;noreferrer&quot; papago-id=&quot;79-1&quot;&gt;http://mysql.rjweb.org/doc.php/limits#767_limit_in_innodb_indexes&lt;/a&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;긴 열의 md5 열을 추가할 수 있습니다.&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;Laravel &lt;strong papago-id=&quot;81-1&quot;&gt;5.7&lt;/strong&gt; ~ &lt;strong papago-id=&quot;81-3&quot;&gt;9.0&lt;/strong&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;따라야 할 단계&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 가다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;App\Providers\AppServiceProvider.php&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공급자에 추가&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;use Illuminate\Support\Facades\Schema;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;맨 위에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부팅 기능 내부에 추가&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Schema::defaultStringLength(191);&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&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;utf8mb4를 사용하여 VARCHAR(255) 필드에 유니크 인덱스를 추가하려고 할 때 이 문제가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 이미 문제의 개요를 잘 설명하고 있지만, 이 문제를 어떻게 파악하고 해결했는지에 대한 실용적인 조언을 덧붙이고 싶었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;90&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;utf8mb4를 사용할 경우 문자는 4바이트로 계산되지만 utf8에서는 3바이트로 계산됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;InnoDB 데이터베이스에는 인덱스가 767바이트만 포함할 수 있다는 제한이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 utf8을 사용하면 255자(767/3 = 255)를 저장할 수 있지만 utf8mb4를 사용하면 191자(767/4 = 191)만 저장할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음에 대한 정규 인덱스를 추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;VARCHAR(255)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;utf8mb4를 사용하는 필드이지만 인덱스 크기가 191자로 자동으로 잘립니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;unique_key&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3hGHE.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3hGHE.png&quot; alt=&quot;Sequel Pro screenshot showing index truncated at 191 characters&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL이 데이터를 보다 빠르게 검색할 수 있도록 일반 인덱스를 사용하기 때문에 이는 괜찮습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;전체 필드는 색인화할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;95&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 MySQL은 일반 인덱스의 경우 인덱스를 자동으로 잘라내지만 고유한 인덱스의 경우에는 명시적 오류를 발생시키는 이유는 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL이 삽입되거나 업데이트되는 값이 이미 존재하는지 확인하려면 실제로 값의 일부가 아니라 전체 값을 인덱싱해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;96&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로, 필드에 고유한 색인을 가지려면, 필드의 전체 내용이 색인에 들어가야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;utf8mb4의 경우 VARCHAR 필드 길이가 191자 이하로 줄어듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 테이블이나 필드에 utf8mb4가 필요하지 않다면 utf8로 다시 떨어뜨려 255개 길이의 필드를 유지할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;97&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 문제를 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;varchar(200) 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로 대체된&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;varchar(191)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;99&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;200개 이상의 고유 또는 기본 varchar 키는 모두 191개로 대체하거나 텍스트로 설정합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;100&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 원래 대답은 이렇습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;101&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;drop database if exists rhodes; create database rhodes default CHARACTER set utf8 default COLLATE utf8_general_ci;&lt;/code&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;102&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;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로 VARCHAR 열에서 문자 집합으로 인덱스를 사용하는 문제입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(또는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8mb4&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 길이 이상의 문자를 가진 VARCHAR 열이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8mb4&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그 특정 길이는 191입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;107&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 데이터베이스에서 긴 인덱스를 사용하는 방법에 대한 자세한 내용은 이 문서의 긴 인덱스 섹션을 참조하십시오. http://hanoian.com/content/index.php/24-automate-the-converting-a-mysql-database-character-set-to-utf8mb4&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;108&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 고치기 위해서, 이것은 나에게 매력적으로 작용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALTER DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;109&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;110&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 워크벤치용 6.3.7 버전 그래픽 인터페이즈 사용 가능&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;111&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Workbench를 시작하고 연결을 선택합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;112&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;관리 또는 인스턴스(Instance)로 이동하고 옵션 파일(Options File)을 선택합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;113&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Workbench에서 구성 파일을 읽을 수 있는 권한을 요청한 경우 OK를 두 번 눌러 허용합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;114&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중앙에 Administrator 옵션 파일 창이 나타납니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;115&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;InnoDB 탭으로 이동하여 General 섹션에서 innodb_large_prefix가 확인되지 않은 경우 확인합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;116&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;innodb_default_row_format 옵션 값을 Dynamic으로 설정합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;117&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;6.3.7 이하 버전의 경우 직접 옵션을 사용할 수 없으므로 명령 프롬프트를 사용해야 합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;118&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CMD를 관리자로 시작합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;119&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql 서버가 설치되어 있는 디렉터로 이동대부분의 경우 &quot;C:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;\Program Files\My&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL\MySQL Server 5.7\bin&quot; 따라서 명령어는 &quot;cd&quot; &quot;cd Program Files\My&quot;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL\MySQL Server 5.7\bin&quot;.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;120&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Now Run command mysql -u userName -p databascheme Now 각 사용자의 비밀번호를 요청했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호를 입력하고 mysql 프롬프트에 입력합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;121&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 글로벌 설정을 해야 하기 때문에 아래 명령어를 하나씩 글로벌 innodb_large_prefix=on으로 설정하고, 글로벌 innodb_file_format=barracuda으로 설정하고, 글로벌 innodb_file_per_table=true로 설정하고,&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;122&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 마지막으로 필요한 테이블의 ROW_FORMAT을 기본적으로 COMPRATE로 변경해야 합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;123&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 명령 변경 테이블_name ROW_FORMAT=Dynamic을 사용합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;124&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다 했어요.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;strong papago-id=&quot;125&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인덱스 길이 &amp;amp; MySQL / Maria&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DB&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;126&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Laravel은 기본적으로 &lt;strong papago-id=&quot;126-1&quot;&gt;utf8mb4 문자&lt;/strong&gt; 집합을 사용하며, 여기에는 &quot;emoji&lt;strong papago-id=&quot;126-3&quot;&gt;&quot;&lt;/strong&gt;를 데이터베이스에 저장할 수 있는 지원이 포함됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;5.7.7 릴리스보다 이전 버전의 MySQL을 실행하거나 10.2.2 릴리스보다 이전 버전의 MariaDB를 실행하는 경우 MySQL이 마이그레이션에 대한 인덱스를 생성하려면 마이그레이션에 의해 생성된 기본 문자열 길이를 수동으로 구성해야 할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;126-7&quot;&gt;AppServiceProvider&lt;/strong&gt; 내에서 &lt;strong papago-id=&quot;126-5&quot;&gt;Schema::defaultStringLength&lt;/strong&gt; 메서드를 호출하여 이를 구성할 수 있습니다&lt;strong papago-id=&quot;126-7&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt; &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;use Illuminate\Support\Facades\Schema;

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Schema::defaultStringLength(191);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;127&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 &lt;strong papago-id=&quot;127-1&quot;&gt;데이터베이스에 대해 innodb_large_prefix 옵션을 사용&lt;/strong&gt; 가능으로 &lt;strong papago-id=&quot;127-1&quot;&gt;설정&lt;/strong&gt;할 수도 있습니다&lt;strong papago-id=&quot;127-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 옵션을 올바르게 사용 가능으로 설정하는 방법에 대한 지침은 데이터베이스 설명서를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;128&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;블로그의 참조:&lt;/font&gt;&lt;/strong&gt; &lt;a href=&quot;https://www.scratchcode.io/specified-key-too-long-error-in-laravel/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;129&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://www.scratchcode.io/specified-key-too-long-error-in-laravel/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;130&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공식 래브라도 문서에서 참조:&lt;/font&gt;&lt;/strong&gt; &lt;a href=&quot;https://laravel.com/docs/5.7/migrations&quot; rel=&quot;noreferrer&quot; papago-id=&quot;131&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://laravel.com/docs/5.7/migrations&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;132&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콜렉션을 바꿉니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;거의 모든 기능을 지원하는 &lt;strong papago-id=&quot;132-1&quot;&gt;utf8_general_ci&lt;/strong&gt;를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥바꾸기&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8mb4&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블을 만들때 나의 문제를 해결했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CREATE TABLE ... DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CREATE TABLE ... DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;64&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;138&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것으로 나의 문제가 해결되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;139&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ALTER DATABASTER dbname Character Set utf8 COLATE utf8_general_ci;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;65&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래에 주어진 열을 기준으로, 그 2개의 가변 문자열 열은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8_general_ci&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대조()&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자 집합이 암시됨).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;68&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; MySQL 에서,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;69&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;charset은 각 문자에 대해 최대 &lt;strong papago-id=&quot;69-1&quot;&gt;3바이트&lt;/strong&gt;를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 MySQL에서 허용하는 767바이트보다 훨씬 많은 500*3= 1500바이트를 할당해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 이 1071 오류가 발생하는 겁니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;70&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 모든 문자 집합이 (추정한 대로) 단일 바이트 표현이 아니기 때문에 문자 집합의 바이트 표현을 기반으로 문자 수를 계산해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL은 최대 문자당 3바이트, 767/3 ≈255 문자를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf8mb4&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;72&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 최대 4바이트, 767/4≈191 문자로 표현할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;148&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 MySQL은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;column1 varchar(20) utf8_general_ci
column2  varchar(500) utf8_general_ci
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;149&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 경우 리눅스 리디렉션 출력/입력 문자를 사용하여 데이터베이스를 백업할 때 이 문제가 발생했습니다.&lt;/font&gt;&lt;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;150&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;백업( &amp;gt; 리디렉션 없음)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# mysqldump -u root -p databasename -r bkp.sql
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;151&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;복원(&amp;lt; 재연결 없이)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# mysql -u root -p --default-character-set=utf8 databasename
mysql&amp;gt; SET names 'utf8'
mysql&amp;gt; SOURCE bkp.sql
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;152&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;지정된 키가 너무 길었습니다. 최대 키 길이는 767바이트입니다&quot;라는 오류가 사라졌습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;153&quot; papago-translate=&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
  c.TABLE_NAME As TableName,
  c.COLUMN_NAME AS ColumnName,
  c.DATA_TYPE AS DataType,
  c.CHARACTER_MAXIMUM_LENGTH AS ColumnLength,
  s.INDEX_NAME AS IndexName
FROM information_schema.COLUMNS AS c
INNER JOIN information_schema.statistics AS s
  ON s.table_name = c.TABLE_NAME
 AND s.COLUMN_NAME = c.COLUMN_NAME 
WHERE c.TABLE_SCHEMA = DATABASE()
  AND c.CHARACTER_MAXIMUM_LENGTH &amp;gt; 191 
  AND c.DATA_TYPE IN ('char', 'varchar', 'text')
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확인 부탁드립니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sql_mode&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;74&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마치&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;156&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 다음으로 바꿉니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sql_mode=NO_ENGINE_SUBSTITUTION
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;157&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오어&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;158&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버를 재시작하여 my.cnf 파일을 변경합니다(다음 putting).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;innodb_large_prefix=on
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;159&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;접두사 제한으로 인해 이 오류가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 5.7 이전 버전의 InnoDB 테이블에 대해 명시된 접두사 제한은 767바이트이며 MyISAM 테이블의 경우 1,000바이트 길이입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 버전 5.7 이상에서는 이 제한이 3072바이트로 증가했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;160&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 발생하는 서비스에서 다음을 실행하면 문제가 해결됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 MYSQL CLI에서 실행되어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SET GLOBAL innodb_file_format=Barracuda;
SET GLOBAL innodb_file_per_table=on;
SET GLOBAL innodb_large_prefix=on;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 papago-id=&quot;161&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;162&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL에는 최대 키 길이 제한이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;163&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;InnoDB — 최대 키 길이는 1,536바이트(8kb 페이지 크기의 경우) 및 768(4kb 페이지 크기의 경우)입니다(출처: Dev.MySQL.com .&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;164&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;My ISAM — 최대 키 길이는 1,000바이트입니다(Source &lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html#:%7E:text=The%20maximum%20number%20of%20indexes,key%20length%20is%201000%20bytes&quot; papago-id=&quot;164-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dev).&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html#:%7E:text=The%20maximum%20number%20of%20indexes,key%20length%20is%201000%20bytes&quot; papago-id=&quot;164-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;MySQL.com&lt;/a&gt; ).&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;165&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;165-1&quot;&gt;바이트 단위&lt;/em&gt;로 계산됩니다&lt;em papago-id=&quot;165-1&quot;&gt;.&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 UTF-8 문자가 키에 저장되는 데 1바이트 이상이 걸릴 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;166&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 두 가지 솔루션만 즉시 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;167&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 유형의 첫 번째 n번째 문자만 색인화합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;75&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만들기&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FULL TEXT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;76&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;search — ElasticSearch와 유사한 방식으로 텍스트 내의 모든 것을 검색할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3 papago-id=&quot;170&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 유형의 첫 번째 N번째 문자 색인화&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;77&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표를 작성할 경우, 다음 구문을 사용하여 일부 필드의 처음 255자를 색인화합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;KEY &lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;78&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 텍스트 키&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt; (&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;79&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 텍스트&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(255))&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;80&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 거죠&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이와 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE TABLE `MyTable` (
    `id` int(11) NOT NULL auto_increment,
    `SomeText` TEXT NOT NULL,
    PRIMARY KEY  (`id`),
    KEY `sometextkey` (`SomeText`(255))
);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;81&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블이 이미 있는 경우, 다음을 사용하여 필드에 고유 키를 추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ADD UNIQUE(&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;82&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 값&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(20));&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;83&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 거죠&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이와 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALTER TABLE
MyTable
ADD UNIQUE(`ConfigValue`(20));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;178&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필드 이름이 예약된 &lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/keywords.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;178-1&quot;&gt;MySQL 키워드&lt;/a&gt;가 아닌 경우 필드 이름 주변에 백틱('``)이 필요하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;179&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전체 텍스트 검색 만들기&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;84&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Full Text(전체 텍스트) 검색을 사용하면 해당 파일의 전체 값을 검색할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TEXT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;85&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; field를 시킬 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 를 사용하면 단어 전체를 일치시킬 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NATURAL LANGUAGE MODE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;86&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 다른 모드 중 하나를 사용하는 경우 부분 단어 일치를 선택할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;FullText 옵션에 대한 자세한 내용은 여기에서 확인하십시오. Dev.MySQL.com&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;183&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트를 사용하여 표를 작성한 후 전체 텍스트 색인을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALTER TABLE
        MyTable
ADD FULLTEXT INDEX
        `SomeTextKey` (`SomeTextField` DESC);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;184&quot; papago-translate=&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
        MyTable.id, MyTable.Title,
MATCH
        (MyTable.Text)
AGAINST
        ('foobar' IN NATURAL LANGUAGE MODE) AS score
FROM
        MyTable
HAVING
        score &amp;gt; 0
ORDER BY
        score DESC;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;185&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 varchar에서 nvarchar로 변화가 있어, 나에게 적합합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;186&quot; papago-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/38659010/specified-key-too-long-using-utf8mb4-general-ci-with-myisam&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>MariaDB</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1640</guid>
      <comments>https://copyscript.tistory.com/1640#entry1640comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:32:13 +0900</pubDate>
    </item>
    <item>
      <title>PowerShell에서 Write-Debug 출력을 콘솔에 표시하려면 어떻게 해야 합니까?</title>
      <link>https://copyscript.tistory.com/1639</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell에서 Write-Debug 출력을 콘솔에 표시하려면 어떻게 해야 합니까?&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;저는 PowerShell을 배우고 있으며 &lt;a href=&quot;https://learn.microsoft.com/en-gb/powershell/module/Microsoft.PowerShell.Utility/Write-Host&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;Write-Host&lt;/a&gt;를 사용하여 새로운 PowerShell 스크립트 파일에서 변수 할당을 확인하고 있었습니다.&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;그래서 나는 .ps1 파일에서 다음과 같은 문장을 바꿨습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Write-Host &quot;Start&quot;
Write-Host &quot;End&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;Write-Debug &quot;Start&quot;
Write-Debug &quot;End&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows PowerShell ISE에서 저장된 스크립트를 실행했을 때 콘솔에 출력이 기록되지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첨부했습니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-debug&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 스크립트를 호출하는 문장에 대해 설명합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;PS E:\trialrun&amp;gt; .\MyScript.ps1 -debug
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 역시 출력이 콘솔에 기록되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Write-Debug를 잘못 사용하고 있는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;디버그 출력을 콘솔에 기록하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;7-0&quot;&gt;tl;dr&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;달려.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$DebugPreference = 'Continue'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;산출량을 보기 시작하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Write-Debug&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;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업이 완료되면 기본 설정 변수 복원&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$DebugPreference&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;$DebugPreference = 'SilentlyContinue'&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주어진 cmdlet 또는 고급 기능에 대해서만 디버그 출력을 켜려면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-Debug&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공통 파라미터&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주의 &lt;em papago-id=&quot;15-0&quot;&gt;사항&lt;/em&gt;: &lt;em papago-id=&quot;15-2&quot;&gt;Windows PowerShell&lt;/em&gt;(PowerShell [Core] v6+에서는 더 이상 사용되지 않음)에서는 다음과 같은 대화형 디버깅 프롬프트가 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Write-Debug&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;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr&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;Write-Debug&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;ul&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;19-0&quot;&gt;Scope-wide&lt;/strong&gt;: &lt;strong papago-id=&quot;19-2&quot;&gt;선호도 변수&lt;/strong&gt;의 값에 의해 결정됩니다. -&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;cmdlet 또는 &lt;em papago-id=&quot;20-2&quot;&gt;고급&lt;/em&gt; 스크립트/함수를 호출할 때 명령 &lt;strong papago-id=&quot;20-0&quot;&gt;범위&lt;/strong&gt;가 지정된 &lt;strong papago-id=&quot;20-0&quot;&gt;Ad-hoc.&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$DebugPreference&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;value)에 &lt;strong papago-id=&quot;21-1&quot;&gt;공통 파라미터&lt;/strong&gt;를 사용합니다. 참조.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;code&gt;$DebugPreference&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;SilentlyContinue&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;Write-Debug&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 문장이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;25-1&quot;&gt;common&lt;/strong&gt; parameter를 사용할 때, 당신은 효과적으로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$DebugPreference&lt;/code&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;26-0&quot;&gt;호출된 명령에 한해&lt;/em&gt; 다음을 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;27-1&quot;&gt;Windows PowerShell&lt;/strong&gt;에서는 &lt;strong papago-id=&quot;27-3&quot;&gt;&lt;em papago-id=&quot;27-3-0&quot;&gt;항상&lt;/em&gt;&lt;/strong&gt; 이 &lt;strong papago-id=&quot;27-3&quot;&gt;값을 값으로 설정&lt;/strong&gt;합니다. 이 값은 &lt;strong papago-id=&quot;27-5&quot;&gt;메시지&lt;/strong&gt;를 &lt;strong papago-id=&quot;27-5&quot;&gt;&lt;em papago-id=&quot;27-5-1&quot;&gt;인쇄&lt;/em&gt;&lt;/strong&gt;할&lt;strong papago-id=&quot;27-5&quot;&gt; 뿐&lt;/strong&gt;만 아니라 &lt;strong papago-id=&quot;27-5&quot;&gt;이러한 문&lt;/strong&gt;이 있을 &lt;strong papago-id=&quot;27-5&quot;&gt;때&lt;/strong&gt;마다 일시 &lt;strong papago-id=&quot;27-5&quot;&gt;&lt;em papago-id=&quot;27-5-5&quot;&gt;중지&lt;/em&gt;&lt;/strong&gt;되어 &lt;strong papago-id=&quot;27-5&quot;&gt;어떻게 진행할지 묻습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;28-1&quot;&gt;PowerShell [Core] v6+&lt;/strong&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&gt;&lt;/font&gt;&lt;code&gt;-Debug&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;common parameter, 고급 &lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_functions_advanced&quot; papago-id=&quot;30-1&quot; rel=&quot;noreferrer&quot;&gt;&lt;em papago-id=&quot;30-1-0&quot;&gt;매개&lt;/em&gt;&lt;/a&gt; 변수여야 하며, 다음과 함께 선언됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[CmdletBinding()]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것의 속성&lt;/font&gt;&lt;/font&gt;&lt;code&gt;param()&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;a href=&quot;https://stackoverflow.com/a/45289842/45375&quot; papago-id=&quot;32-1&quot;&gt;마티아스의 대답&lt;/a&gt;이 보여주듯, 블록.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;33-0&quot;&gt;&lt;em papago-id=&quot;33-0-1&quot;&gt;Windows PowerShell&lt;/em&gt;에서는 이러한 모든 상황에서의&lt;code papago-id=&quot;33-0-3&quot;&gt;Write-Debug&lt;/code&gt; 신속한 호출 동작이 &lt;em papago-id=&quot;33-0-5&quot;&gt;중단적&lt;/em&gt;일 수 있으므로 더 나은 접근 방식이 될 수 있습니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;명시된 바와 같이 PowerShell [Core] v6+에서는 이 문제가 더 이상 관심사가 아닙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 고급 기능 또는 스크립트 내부에서 다음을 구분하려는 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$DebugPreference&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;호출자 대 &lt;em papago-id=&quot;35-3&quot;&gt;공통 파라미터&lt;/em&gt;에 의해 &lt;em papago-id=&quot;35-1&quot;&gt;선호 변수&lt;/em&gt;로 설정된 경우&lt;/font&gt;&lt;/font&gt; &lt;code&gt;-Debug&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전달되었습니다(함수/스크립트-로 번역됨).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$DebugPreference&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수), 사용&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$PSBoundParameters.ContainsKey('Debug')&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 것을 나타냅니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-Debug&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고 공문서 : https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-debug&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 디버그 메시지는 콘솔에 표시되지 않지만 디버그 매개 변수 또는 $DebugPreference 변수를 사용하여 표시할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 필요할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CmdletBinding&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공통 매개 변수를 지원하려면 스크립트에 속성을 지정합니다(다음 포함).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-Debug&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;):&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[CmdletBinding()]
param()

Write-Debug Start
Write-Debug End
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움 파일을 한 번 보는 게 좋을 것 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배치하면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$DebugPreference = 'Continue'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 모듈 기능의 프로세스 블록에서 의도한 대로 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;약간의 중복은 있지만, 다른 솔루션들이 제안한 것들보다 훨씬 쉽습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/45289719/with-powershell-how-can-i-get-write-debug-output-to-appear-in-the-console&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>Powershell</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1639</guid>
      <comments>https://copyscript.tistory.com/1639#entry1639comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:32:02 +0900</pubDate>
    </item>
    <item>
      <title>변수의 대문자 첫번째 문자</title>
      <link>https://copyscript.tistory.com/1638</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수의 대문자 첫번째 문자&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 인터넷으로 찾아봤지만 저를 도와줄 만한 것을 찾을 수가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 단어의 첫 글자를 변수 안에 넣으려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금까지 시도해 본 결과:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;toUpperCase();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 운이 없었어요. 모든 글자를 앞에 놓았기 때문이죠.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;.replace&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;false&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 str = &quot;hello, world!&quot;;
str = str.toLowerCase().replace(/\b[a-z]/g, function(letter) {
    return letter.toUpperCase();
});
alert(str); //Displays &quot;Hello, World!&quot;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 a-z가 아닌 단어 문자를 다루고 있다면, 다음의 (더 복잡한) 정규 표현식이 당신의 목적에 더 적합할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;false&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var str = &quot;петр данилович björn über ñaque αλφα&quot;;
str = str.toLowerCase().replace(/^[\u00C0-\u1FFF\u2C00-\uD7FF\w]|\s[\u00C0-\u1FFF\u2C00-\uD7FF\w]/g, function(letter) {
    return letter.toUpperCase();
});
alert(str); //Displays &quot;Петр Данилович Björn Über Ñaque Αλφα&quot;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;훨씬 더 쉬운 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;$('#test').css('textTransform', 'capitalize');&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/5122402/uppercase-first-letter-of-variable/6897635#6897635&quot; papago-id=&quot;7-1&quot;&gt;라파엘 허스코비치&lt;/a&gt;가 나를 올바른 길로 인도한 &lt;a href=&quot;https://stackoverflow.com/questions/5122402/uppercase-first-letter-of-variable/6897635#6897635&quot; papago-id=&quot;7-1&quot;&gt;공로&lt;/a&gt;를 인정해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신들이 제안하는 것보다 훨씬 간단합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://phpjs.org/functions/ucwords:569&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-0&quot;&gt;http://phpjs.org/functions/ucwords:569&lt;/a&gt; 은 좋은 예시를 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function ucwords (str) {
    return (str + '').replace(/^([a-z])|\s+([a-z])/g, function ($1) {
        return $1.toUpperCase();
    });
}
&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;(간단한 설명을 위해 출처의 기능 설명을 omitted합니다.&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;EDIT: 이 함수는 문자열의 첫 번째 문자(질문 제목이 질문하는 대로)가 아니라 각 단어의 첫 번째 문자를 대문자로 쓴다는 점에 유의하십시오.&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;순수 자바스크립트 솔루션(jQuery 없음)은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;function capitalize(str) {
  strVal = '';
  str = str.split(' ');
  for (var chr = 0; chr &amp;lt; str.length; chr++) {
    strVal += str[chr].substring(0, 1).toUpperCase() + str[chr].substring(1, str[chr].length) + ' '
  }
  return strVal
}

console.log(capitalize('hello world'));&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부분 문자열()과 대문자()를 사용하여 첫 번째 문자를 뽑아 대문자로 쓴 다음 문자열의 첫 번째 문자를 결과로 바꿀 수 있다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;myString = &quot;cheeseburger&quot;;
firstChar = myString.substring( 0, 1 ); // == &quot;c&quot;
firstChar.toUpperCase();
tail = myString.substring( 1 ); // == &quot;heeseburger&quot;
myString = firstChar + tail; // myString == &quot;Cheeseburger&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그것이 당신에게 도움이 될 것이라고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 고려 사항은 이 데이터가 표시되는 경우 CSS 속성 &quot;text-transform: capitalize&quot;를 가진 클래스를 컨테이너에 추가할 수 있다는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string = 'test';
newString = string[0].toUpperCase() + string.slice(1);
alert(newString);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위해서는 자바스크립트가 필요하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-javascript prettyprint-override&quot;&gt;&lt;code&gt;$('#test').css('text-transform', 'capitalize');
&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;다음과 같이 CSS로 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;#test,h1,h2,h3 { text-transform: capitalize; }
&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 class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;.ucwords { text-transform: capitalize; }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;들어본적이 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;substr()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;$(&quot;#test&quot;).text($(&quot;#test&quot;).text().substr(0,1).toUpperCase()+$(&quot;#test&quot;).text().substr(1,$(&quot;#test&quot;).text().length));
&lt;/code&gt;&lt;/pre&gt; 
&lt;br&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/5122402/javascript-jquery-uppercase-first-letter-of-variable#comment5753220_5122567&quot; papago-id=&quot;21-1&quot;&gt;@FelixKling&lt;/a&gt; 님께 감사드립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#test&quot;).text(function(i, text) {
    return text.substr(0,1).toUpperCase() + text.substr(1);
});
&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;a href=&quot;https://stackoverflow.com/questions/5122402/uppercase-first-letter-of-variable/5122461#5122461&quot; papago-id=&quot;22-1&quot;&gt;Peter Olson의 답변&lt;/a&gt;을 바탕으로, 저는 jQuery가 없는 보다 객체 지향적인 접근법을 취했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String.prototype.ucwords = function() {
    return this.toLowerCase().replace(/\b[a-z]/g, function(letter) {
        return letter.toUpperCase();
    });
}

alert(&quot;hello, world!&quot;.ucwords()); // Displays &quot;Hello, World!&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예: http://jsfiddle.net/LzaYH/1/&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 간단한 방법&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let str = &quot;hiren raiyani&quot;
str.toLowerCase().replace(/(?&amp;lt;= )[^\s]|^./g, a =&amp;gt; a.toUpperCase());
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 정의 함수:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function capitalize(str){
    return str.toLowerCase().replace(/(?&amp;lt;= )[^\s]|^./g, a =&amp;gt; a.toUpperCase());
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력 : &lt;strong papago-id=&quot;26-1&quot;&gt;하이렌 라이야니&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드를 사용자 정의 함수로 사용하거나 직접 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;var mystring = &quot;hello World&quot;
mystring = mystring.substring(0,1).toUpperCase() + 
mystring.substring(1,mystring.length)

console.log(mystring) //gives you Hello World
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;var ar = 'foo bar spam egg'.split(/\W/);
for(var i=0; i&amp;lt;ar.length; i++) {
  ar[i] = ar[i].substr(0,1).toUpperCase() + ar[i].substr(1,ar[i].length-1) 
}
ar.join(' '); // Foo Bar Spam Egg
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 PHP에 있는 ucwords의 기능으로 이 간단한 코드를 사용해 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function ucWords(text) {
    return text.split(' ').map((txt) =&amp;gt; (txt.substring(0, 1).toUpperCase() + txt.substring(1, txt.length))).join(' ');
}
ucWords('hello WORLD');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대문자를 변경하지 않고 그대로 유지됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/5122402/uppercase-first-letter-of-variable/6897635#6897635&quot; papago-id=&quot;30-1&quot;&gt;라파엘 허스코비치의 대답&lt;/a&gt;에 기반을 둔 이 솔루션은 간단한 jQuery 방법으로 'ucwords'를 부를 준비가 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.extend({
    ucwords : function(str) {
        strVal = '';
        str = str.split(' ');
        for (var chr = 0; chr &amp;lt; str.length; chr++) {
            strVal += str[chr].substring(0, 1).toUpperCase() + str[chr].substring(1, str[chr].length) + ' '
        }
        return strVal
    }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;31&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;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메소드를 사용하여 호출할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var string = &quot;this is a test&quot;;
string = $.ucwords(string); // Returns &quot;This Is A Test&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 기능을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const capitalize = (s) =&amp;gt; {
  if (typeof s !== 'string')
    return ''
  return s.charAt(0).toUpperCase() + s.slice(1)
}

capitalize('test') // 'Test'
capitalize('name') // 'Name'
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용가능&lt;/font&gt;&lt;/font&gt;&lt;code&gt;text-transform: capitalize;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 일에 있어서는&lt;/font&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;HTML&lt;/font&gt;&lt;/h3&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;input type=&quot;text&quot; style=&quot;text-transform: capitalize;&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;$(document).ready(function (){
    var asdf = &quot;WERTY UIOP&quot;;
    $('input').val(asdf.toLowerCase());
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/w4WqQ/1/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;38&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;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;이 문자열을 &lt;em papago-id=&quot;39-1&quot;&gt;알림()&lt;/em&gt;하면 항상 문자열의 원래 값이 표시됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JQuery 미포함&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String.prototype.ucwords = function() {
    str = this.trim();
    return str.replace(/(^([a-zA-Z\p{M}]))|([ -][a-zA-Z\p{M}])/g, function(s){
        return s.toUpperCase();
    });
};

console.log('hello world'.ucwords()); // Display Hello World
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 할 수 있는 많은 방법들이 있습니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 생각하기에 사람들이 잊어버린 한 가지는 문자열은 문자의 배열이라는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 문자열의 첫 글자는 배열의 '0' 요소가 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let word = 'interesting';
console.log(word[0]);
// 'i'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 사실을 이용하여 첫 글자를 대문자로 쓰는 가장 간단한 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let word = 'interesting';
let titleCase = word[0].toUpperCase() + word.substr(1);
console.log(titleCase);
// 'Interesting'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;...또는 함수로서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function toTitleCase(word) {
    return word[0].toUpperCase() + word.substr(1);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;짧고 간단한 답:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;let str = 'this is a string';

let result = str.replace(/\b\w/g, x =&amp;gt; x.toUpperCase());

console.log(result); // This Is A String
&lt;/code&gt;&lt;/pre&gt;&lt;h3 papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트에서 첫 글자를 대문자로 쓰는 가장 쉬운 방법&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;var string = &quot;made in india&quot;;

string = string.toLowerCase().replace(/\b[a-z]/g, function(letter){return letter.toUpperCase();});

alert(string);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;메이드 인디아&quot;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이 코드를 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function ucword(str){
    str = str.toLowerCase().replace(/(^([a-zA-Z\p{M}]))|([ -][a-zA-Z\p{M}])/g, function(replace_latter) { 
        return replace_latter.toUpperCase();
    });  //Can use also /\b[a-z]/g
    return str;  //First letter capital in each word
}

var uc = ucword(&quot;good morning. how are you?&quot;);
alert(uc);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각에는, 그 방법은 어떤 글자들 중 첫 글자나 첫 글자 외에 다른 글자들을 변환해서는 안 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위한 제 솔루션은 다음과 같은 정규화입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;function capitalize( str ){
    return str.replace(/^\w/, (s) =&amp;gt; s.toUpperCase() );
}

function capitalizeAll( str ){
    return str.replace(/(\b\w)/g, (s) =&amp;gt; s.toUpperCase() );
}

let test = 'hello world';

capitalize( test ); // Hello world
capitalizeAll( test ); // Hello World
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 글자를 대문자로 쓰기 전에 내릴 문자열입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(둘 다 jQuery 구문 사용)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function CapitaliseFirstLetter(elementId) {
    var txt = $(&quot;#&quot; + elementId).val().toLowerCase();
    $(&quot;#&quot; + elementId).val(txt.replace(/^(.)|\s(.)/g, function($1) {
        return $1.toUpperCase();
    }));
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 전체 문자열을 대문자로 만드는 함수:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function CapitaliseAllText(elementId) {
    var txt = $(&quot;#&quot; + elementId).val();
    $(&quot;#&quot; + elementId).val(txt.toUpperCase());
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 상자의 클릭 이벤트에 사용할 구문:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;onClick=&quot;CapitaliseFirstLetter('TextId'); return false&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;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 str = &quot;HELLO WORLD HELLO WORLD HELLO WORLD HELLO WORLD&quot;;
str = str.replace(
        /([A-Z])([A-Z]+)/g,
        function (a, w1, w2) {
            return w1 + w2.toLowerCase();
        });
alert(str);&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;다음은 유니코드 안전 ucwords() 함수로, 러시아 з асс-р анцев와 같은 이중 이름과 Honoré de Balzac, D'Artagnan, Vincent van Gogh, Otto von Bismarck, Sulaymann Ibn Dāwud 등과 같은 고귀한 이름을 추가적으로 존중합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String.prototype.ucwords = function() {
  return this.toLowerCase()
    .replace(/(^|\s|\-)[^\s$]/g, function(m) {
       return m.toUpperCase();
    })
    // French, Arabic and some noble names...
    .replace(/\s(Of|De|Van|Von|Ibn|Из|Ван|Фон|Ибн)\s/g, function(m) { // Honoré de Balzac, Vincent van Gogh, Otto von Bismarck, Sulaymān ibn Dāwūd etc.
       return m.toLowerCase();
    })
    .replace(/(^|\s)(D|Д)(['’][^\s$])/g, function(m, p1, p2, p3) { // D'Artagnan or d'Artagnan / Д’Артаньян или д’Артаньян
       return p1 + (p1 === &quot;&quot; ? p2/*.toUpperCase()*/ : p2.toLowerCase()) + p3.toUpperCase();
    });
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;var country = $('#country').val();

var con = country[0].toUpperCase();

ctr = country.replace(country[0], con);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 기능도 만들 필요가 없고, 그냥 jugaaraar.&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;HTML:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;input class=&quot;capitalize&quot; name=&quot;Address&quot; type=&quot;text&quot; value=&quot;&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery가 포함된 자바스크립트:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-javascript prettyprint-override&quot;&gt;&lt;code&gt;$(&quot;.capitalize&quot;).bind(&quot;keyup change&quot;, function (e) {
    if ($(this).val().length == 1)
        $(this).val($(this).val().toUpperCase());
    $(this).val($(this).val().toLowerCase().replace(/\s[\p{L}a-z]/g, function (letter) {
        return letter.toUpperCase();
    }))
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/5122402/uppercase-first-letter-of-variable&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>jquery</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1638</guid>
      <comments>https://copyscript.tistory.com/1638#entry1638comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:31:55 +0900</pubDate>
    </item>
    <item>
      <title>심포니 CSRF and Ajax</title>
      <link>https://copyscript.tistory.com/1637</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;심포니 CSRF and 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;심포니 2 프로젝트에 아약스 기능을 구현하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;jquery의 $.post를 사용하여 컨트롤러로 데이터를 다시 보내고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 데이터를 게시만 하면 symphony의 crf 보호는 양식에만 적용되는 것처럼 보이기 때문에 CSRF 보호가 적용되지 않습니다.&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;양식을 사용할 때 CSRF 토큰이 통과하는지 여부를 확인하기 위해 $form-&amp;gt; is Valid()만 하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 현재 제가 포스팅하고 싶은 모든 것을 양식에 담아 포스팅하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 저는 CSRF 보호를 구현하기 위해서만 그 양식을 사용하고 있다는 것을 의미합니다. 이것은 해킹된 것처럼 보입니다.&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;Symfony2 CSRF 토큰은 기본적으로 세션을 기반으로 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;생성하려면 다음과 같은 서비스와 호출 생성 방법을 얻기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//Symfony\Component\Form\Extension\Csrf\CsrfProvider\SessionCsrfProvider by default
$csrf = $this-&amp;gt;get('form.csrf_provider');
//Intention should be empty string, if you did not define it in parameters
$token = $csrf-&amp;gt;generateCsrfToken($intention); 

return new Response($token);
&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://stackoverflow.com/q/11466837/970721&quot; papago-id=&quot;5-0&quot;&gt;이 질문&lt;/a&gt;은 당신에게 유용할 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간헐적으로 이런 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;알고 보니 그건 내 아약스 때문이 아니라 실렉스가 당신에게 감가상각금을 주었기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DefaultCsrfProvider&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;세션 ID 자체를 토큰의 일부로 사용하고 보안을 위해 임의로 ID를 변경합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에, 새로운 것을 사용하라고 명시적으로 말하는 것.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CsrfTokenManager&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;strong papago-id=&quot;8-1&quot;&gt;세션&lt;/strong&gt;에 저장하므로 토큰의 유효성에 영향을 주지 않고 세션 ID를 변경할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/** Use a CSRF provider that does not depend on the session ID being constant. We change the session ID randomly */
$app['form.csrf_provider'] = $app-&amp;gt;share(function ($app) {
    $storage = new Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage($app['session']);
    return new Symfony\Component\Security\Csrf\CsrfTokenManager(null, $storage);
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 토막글을 사용해 보세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Symfony 양식은 포스트 요청과 함께 전송해야 하는 특수 _csrf_token을 생성해야 합니다.&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;물론 #targetForm은 formid로, /endpoint는 targetajaxurl로 대체해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#targetForm').bind('submit', function(e) {

    e.preventDefault();
    var data = $(this).serialize();

    $.post('/endpoint', data, function(data) {
        // some logic here
    });

});
&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;Symfony 4+에서는 컨트롤러나 작업에 바로 의존성 주입을 사용할 수 있습니다. 예를 들어 양식을 제출하고 같은 양식의 토큰을 새로 고치고 싶다면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$tokenId&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 폼 유형 클래스의 FQDN입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;namespace App\Controller;

use App\Form\MyFormType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;

class MyController extends AbstractController
{
    public function submit(CsrfTokenManagerInterface $tokenManager): JsonResponse
    {
        // ...
        $token = $tokenManager-&amp;gt;refreshToken(MyFormType::class);
        return new JsonResponse(['token' =&amp;gt; $token-&amp;gt;getValue()]);
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 자바스크립트에서는 기존 토큰을 업데이트 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const token = document.getElementById('_token');
fetch(url, opts)
    .then(resp =&amp;gt; resp.json())
    .then(response =&amp;gt; {
        if (response.token) {
            token.value = response.token;
        }
    });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/12054449/symfony-csrf-and-ajax&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>Ajax</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1637</guid>
      <comments>https://copyscript.tistory.com/1637#entry1637comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:31:45 +0900</pubDate>
    </item>
    <item>
      <title>how to toggle attr() in jquery</title>
      <link>https://copyscript.tistory.com/1636</link>
      <description>&lt;h2 papago-id=&quot;0&quot;&gt;how to toggle attr() in jquery&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot;&gt;I have a simple add attribute function:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.list-toggle&quot;).click(function() {
    $(&quot;.list-sort&quot;).attr('colspan', 6);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 질문은 어떻게 하면 이걸 토글로 바꿀 수 있을까요?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;colspan=&quot;6&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 클릭 시 요소에서 제거됩니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot;&gt;If you're feeling fancy:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('.list-sort').attr('colspan', function(index, attr){
    return attr == 6 ? null : 6;
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;kbd&gt;&lt;strong&gt;&lt;a href=&quot;http://jsfiddle.net/gBrA8/1/&quot; rel=&quot;noreferrer&quot;&gt;Working Fiddle&lt;/a&gt;&lt;/strong&gt;&lt;/kbd&gt;&lt;/p&gt; 
&lt;p&gt;&lt;sub papago-id=&quot;5&quot;&gt;ES6 Syntax (2021):&lt;/sub&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;$('.list-sort').attr('colspan', (_, attr) =&amp;gt; attr == 6 ? null : 6));
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;$('.list-toggle').click(function() {
    var $listSort = $('.list-sort');
    if ($listSort.attr('colspan')) {
        $listSort.removeAttr('colspan');
    } else {
        $listSort.attr('colspan', 6);
    }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/49u2q/5/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6&quot;&gt;Here's a working fiddle example.&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot;&gt;See the answer by @RienNeVaPlus below for a more elegant solution.&lt;/p&gt;&lt;p papago-id=&quot;8&quot;&gt;For readonly/disabled and other attributes with true/false values&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(':submit').attr('disabled', function(_, attr){ return !attr});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;9&quot;&gt;I know this is old and answered but I recently had to implement this and decided to make 2 simple jQuery plugins that might help for those interested&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot;&gt;usage:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// 1
$('.container').toggleAttr('aria-hidden', &quot;true&quot;);
// 2
$('.container').toggleAttrVal('aria-hidden', &quot;true&quot;, &quot;false&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot;&gt;1 - Toggles the entire attribute regardless if the original value doesn't match the one you provided.&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot;&gt;2 - Toggles the value of the attribute between the 2 provided values.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; // jquery toggle whole attribute
  $.fn.toggleAttr = function(attr, val) {
    var test = $(this).attr(attr);
    if ( test ) { 
      // if attrib exists with ANY value, still remove it
      $(this).removeAttr(attr);
    } else {
      $(this).attr(attr, val);
    }
    return this;
  };

  // jquery toggle just the attribute value
  $.fn.toggleAttrVal = function(attr, val1, val2) {
    var test = $(this).attr(attr);
    if ( test === val1) {
      $(this).attr(attr, val2);
      return this;
    }
    if ( test === val2) {
      $(this).attr(attr, val1);
      return this;
    }
    // default to val1 if neither
    $(this).attr(attr, val1);
    return this;
  };
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot;&gt;This is how you would use it in the original example:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.list-toggle&quot;).click(function() {
    $(&quot;.list-sort&quot;).toggleAttr('colspan', 6);
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot;&gt;This would be a good place to use a &lt;a href=&quot;https://stackoverflow.com/questions/111102/how-do-javascript-closures-work&quot; papago-id=&quot;14-1&quot;&gt;closure&lt;/a&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(function() {
  var toggled = false;
  $(&quot;.list-toggle&quot;).click(function() {
    toggled = !toggled;
    $(&quot;.list-sort&quot;).attr(&quot;colspan&quot;, toggled ? 6 : null);
  });
})();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;toggled&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;variable은 정의된 스코프 내부에만 존재하며 한 번의 클릭 이벤트에서 다음 이벤트로 토글의 상태를 저장하는 데 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$(&quot;.list-toggle&quot;).click(function() {
    $(this).hasAttr('colspan')
        ? $(this).removeAttr('colspan')
        : $(this).attr('colspan', 6);
});
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;$(&quot;.list-toggle&quot;).click(function() {
    $(this).attr('colspan')
        ? $(this).removeAttr('colspan')
        : $(this).attr('colspan', 6);
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;17&quot;&gt;This answer is counting that the second parameter is useless when calling removeAttr! &lt;em papago-id=&quot;17-1&quot;&gt;&lt;/em&gt;&lt;/strong&gt;&lt;em papago-id=&quot;18&quot;&gt;(as it was when this answer was posted)&lt;strong papago-id=&quot;18-1&quot;&gt;&lt;/strong&gt;&lt;/em&gt;&lt;strong papago-id=&quot;19&quot;&gt; Do not use this otherwise!&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot;&gt;Can't beat &lt;a href=&quot;https://stackoverflow.com/a/18665152/2128271&quot; papago-id=&quot;20-1&quot;&gt;RienNeVaPlus's clean answer&lt;/a&gt;, but it does the job as well, it's basically a more compressed way to do the ternary operation:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('.list-sort')[$('.list-sort').hasAttr('colspan') ? 
    'removeAttr' : 'attr']('colspan', 6);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot;&gt;an extra variable can be used in these cases, when you need to use the reference more than once:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var $listSort = $('.list-sort'); 
$listSort[$listSort.hasAttr('colspan') ? 'removeAttr' : 'attr']('colspan', 6);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;22&quot;&gt;ReferenceURL : &lt;a href=&quot;https://stackoverflow.com/questions/18665031/how-to-toggle-attr-in-jquery&quot; target=&quot;_blank&quot; papago-id=&quot;22-1&quot;&gt;https://stackoverflow.com/questions/18665031/how-to-toggle-attr-in-jquery&lt;/a&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>jquery</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1636</guid>
      <comments>https://copyscript.tistory.com/1636#entry1636comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:31:38 +0900</pubDate>
    </item>
    <item>
      <title>콘솔에서 프로그램이 실행되는지 확인하는 방법은 무엇입니까?</title>
      <link>https://copyscript.tistory.com/1635</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콘솔에서 프로그램이 실행되는지 확인하는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;진단서를 표준 출력에 덤핑하는 애플리케이션을 쓰고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;애플리케이션을 다음과 같은 방식으로 작동시키고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;독립 실행형 명령 프롬프트에서 실행되는 경우(를 통해)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;cmd.exe&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 또는 표준 출력을 파일로 리디렉션/파이프 처리하여 완료되는 즉시 깨끗하게 종료합니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;5&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;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 그 구별을 할 수 있을까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;6-1&quot;&gt;부모 프로세스를 검토하는 것이 방법이 될 수 있다고 생각하지만 저는 WinAPI에 관심이 없어서 의문입니다.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 MinGW GCC입니다.&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;ol&gt; 
 &lt;li&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;GetConsoleWindow&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;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 콘솔 창의 핸들에 대한 프로세스 소유자를 얻게 됩니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 반환된 PID를 응용 프로그램의 PID와 비교합니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 샘플 확인(VS C++)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &quot;stdafx.h&quot;
#include &amp;lt;iostream&amp;gt;
using namespace std;
#if       _WIN32_WINNT &amp;lt; 0x0500
  #undef  _WIN32_WINNT
  #define _WIN32_WINNT   0x0500
#endif
#include &amp;lt;windows.h&amp;gt;
#include &quot;Wincon.h&quot; 

int _tmain(int argc, _TCHAR* argv[])
{   
    HWND consoleWnd = GetConsoleWindow();
    DWORD dwProcessId;
    GetWindowThreadProcessId(consoleWnd, &amp;amp;dwProcessId);
    if (GetCurrentProcessId()==dwProcessId)
    {
        cout &amp;lt;&amp;lt; &quot;I have my own console, press enter to exit&quot; &amp;lt;&amp;lt; endl;
        cin.get();
    }
    else
    {
        cout &amp;lt;&amp;lt; &quot;This Console is not mine, good bye&quot; &amp;lt;&amp;lt; endl;   
    }


    return 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 papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;if( isatty(STDOUT_FILENO)) {&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;/* 이것은 터미널입니다 */&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;}&lt;/font&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C#에서 이걸 필요로 했어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;번역은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[DllImport(&quot;kernel32.dll&quot;)]
static extern IntPtr GetConsoleWindow();

[DllImport(&quot;kernel32.dll&quot;)]
static extern IntPtr GetCurrentProcessId();

[DllImport(&quot;user32.dll&quot;)]
static extern int GetWindowThreadProcessId(IntPtr hWnd, ref IntPtr ProcessId);

static int Main(string[] args)
{
    IntPtr hConsole = GetConsoleWindow();
    IntPtr hProcessId = IntPtr.Zero;
    GetWindowThreadProcessId(hConsole, ref hProcessId);

    if (GetCurrentProcessId().Equals(hProcessId))
    {
        Console.WriteLine(&quot;I have my own console, press any key to exit&quot;);
        Console.ReadKey();
    }
    else
        Console.WriteLine(&quot;This console is not mine, good bye&quot;);

    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;Microsoft의 I18N 전문가 Michael Kaplan은 &lt;a href=&quot;http://www.siao2.com/2010/05/07/10008232.aspx&quot; papago-id=&quot;17-1&quot; rel=&quot;nofollow&quot;&gt;자신의 블로그&lt;/a&gt;에 콘솔의 리디렉션 여부를 포함하여 콘솔의 여러 가지 사항을 확인할 수 있는 &lt;a href=&quot;http://www.siao2.com/2010/05/07/10008232.aspx&quot; papago-id=&quot;17-1&quot; rel=&quot;nofollow&quot;&gt;일련&lt;/a&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;C#로 작성되어 있지만, C나 C++로 포팅하는 것은 Win32 API에 대한 호출을 모두 수행하기 때문에 매우 간단할 것입니다.&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;여러 가지 API와 호출을 시도해 본 결과, 작동하는 방법은 단 한 가지에 불과했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// #include &amp;lt;io.h&amp;gt;
bool isConsole = isatty(fileno(stdin));
&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;콘솔 응용 프로그램을 실행하고 출력을 다음을 사용하여 파일로 리디렉션할 수 있으므로 stdout을 사용할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;gt;log.txt&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 class=&quot;papago-parent&quot;&gt;입력을 리디렉션하는 것도 가능하지만 콘솔 응용 프로그램을 실행할 때는 거의 사용되지 않는 기능인 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/9009333/how-to-check-if-the-program-is-run-from-a-console&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>C</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1635</guid>
      <comments>https://copyscript.tistory.com/1635#entry1635comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:22:27 +0900</pubDate>
    </item>
    <item>
      <title>mysql 쿼리에서 일련 번호 생성</title>
      <link>https://copyscript.tistory.com/1634</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql 쿼리에서 일련 번호 생성&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 테이블이 있습니다: student_marks.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;marks
-----
  44
  55
  64
  98
  76
&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;serial_number|marks
--------------------
  1          | 44
  2          | 55
  3          | 64
  4          | 98
  5          | 76
&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;mysql 사용자 정의 변수를 사용하면 쿼리를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; set  @a:=0;select @a:=@a+1 serial_number, marks from student_marks;
&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;사용자 정의 변수를 사용하지 않고 msyql에서 이를 달성할 수 있는 방법이 있습니까?&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;SELECT  @a:=@a+1 serial_number, 
        marks 
FROM    student_marks,
        (SELECT @a:= 0) AS a;
&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;SET @count:=0;
SELECT  (@count:=@count+1) AS serial_number, 
        marks 
FROM    student_marks
&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;열(c5)이 있는 테이블에 숫자 x가 포함되어 있습니다. 같은 행 x를 여러 번 반복하는 sql 식을 필요로 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 테이블 A에는 다음이 포함됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;c1  c2  c3  c4  c5
16  1   2   16  3
16  1   2   17  2 
16  1   2   18  1
&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;c1  c2  c3  c4  c5  n
16  1   2   16  3   1
16  1   2   16  3   2
16  1   2   16  3   3
16  1   2   17  2   1
16  1   2   17  2   2
16  1   2   18  1   1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 다음과 같은 표현으로 그것을 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT
    c1, c2, c3, c4, c5, row_number AS n
FROM
    (
        SELECT
            @curRow := @curRow + 1 AS row_number
        FROM
            tablea
        JOIN (SELECT @curRow := 0) r
        WHERE
            @curRow &amp;lt; (
                SELECT
                    max(field1)
                FROM
                    tablea
            )
    ) AS vwtable2
LEFT JOIN tablea d ON vwtable2.row_number &amp;lt;= tablea.field1;
&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;mysql 5.6에서 테스트됨:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT
    @a:=@a+1 as serial_number,
    student.* 
FROM
    student
join (SELECT @a:= 0) a
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;serial number&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;set @counter=0;
SELECT  @counter:=@counter+1 as serial_number from &amp;lt;table_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   |...............................|
   | serial_number  |   first_name |
   |...............................|
   |      1         |    mojtaba   |
   |      2         |    athena    |
   |      3         |     azin     |
   |      4         |     ava      |
   |      5         |    arash     |
   |...............................|
&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;where&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;set @counter=0;
select serial_number from (SELECT  @counter:=@counter+1 as serial_number 
from &amp;lt;table_name&amp;gt;) as tbl_counter where serial_number &amp;gt; 3
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   |...............................|
   | serial_number  |   first_name |
   |...............................|
   |      4         |     ava      |
   |      5         |    arash     |
   |...............................|
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일련번호를 생성하는 간단한 방법을 찾았습니다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select ROW_NUMBER() over (PARTITION by '1') AS serial_number,customer_id from users;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 페이지화를 지원합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;없어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 데이터베이스가 아닌 프로그램 쪽에서 serial_number를 생성할 수 있습니다.&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;다른 쿼리에서 변수를 null로 초기화해야 하므로 위의 답변 중 어느 것도 만족스럽지 않은 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 아래의 모든 포괄적인 솔루션을 게시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT ROUND(@a:=@a+1,0) sr_num, t.* from (select @a:=0) initvars, your_table t;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@a:=@a+1 serial_no,&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;크로스조인(SELECT @a:= 0) ASA&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT @a:=@a+1 serial_no, sc.id, sc.name, sc.address, c.country,s.state 
FROM oc_table1 sc CROSS JOIN (SELECT @a:= 0) AS a LEFT JOIN oc_table2 .......
&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;ALTER TABLE_name ADD COLUMN sr_nINT UNIQUE NOT NULL AUTO_INCREMENT FIRST;&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;또한 이 방법을 사용하여 sr_no 열을 두 개의 다른 열에 추가하고 쉽게 결합할 수 있습니다(또는 두 열을 모두 사용하여 새 테이블을 만들 수도 있습니다).&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자동증강장으로 만드는 게 어때요?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니요, 이 숫자들이 들어 있는 열이 없는 한요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;답변이 매우 늦었지만, 두 개의 쿼리를 사용하지 않고 조인을 사용하지 않고 하위 쿼리를 사용하지 않고 순차 ID를 생성하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT *, (@cnt := if(@cnt IS NULL, 0,  @cnt) + 1) AS id FROM table_name;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;건배.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/11094466/generate-serial-number-in-mysql-query&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>MySQL</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1634</guid>
      <comments>https://copyscript.tistory.com/1634#entry1634comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:22:19 +0900</pubDate>
    </item>
    <item>
      <title>Oracle to Excel - PL/SQL 내보내기 절차</title>
      <link>https://copyscript.tistory.com/1633</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle to Excel - PL/SQL 내보내기 절차&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle에서 Excel로 데이터를 내보내는 pl/sql procedure를 작성하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSV를 사용할 수 없도록 데이터 포맷이 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML로 이미 시도해 보았지만 열이 50개인 70000개 행(거의 300MB!!!)을 내보내려고 할 때 너무 큰 파일이 생성됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 바로 HTML 태그를 사용하여 XLS 파일을 생성하기로 결정한 이유입니다. XML보다 크기가 작고 일부 특수 열의 형식만 직접 정의해야 합니다( 문자열, 숫자 및 날짜는 Excel에서 자동으로 형식 지정됨).&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;HTML로 작성한 엑셀 파일에 워크시트를 둘 이상 추가/정의하는 방법을 알고 계십니까? &amp;lt;% ActiveWorkbook&amp;gt;과 같은 VBScript 수식을 사용해 보았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업 계획표.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;%&amp;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;Oracle 서버에서 Excel 또는 HTML 파일을 작성하는 대신 ODBC 또는 OLEDB를 통해 기존 Excel 문서로 Oracle 데이터를 가져올 수 있습니다.&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://www.youtube.com/watch?v=Adz0zZFePf8&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://www.youtube.com/watch?v=Adz0zZFePf8&lt;/font&gt;&lt;/a&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;저도 비슷한 문제를 겪었고 결국 스프레드시트를 조회하고 채워주는 VBA 코드로 스프레드시트를 만들었습니다.&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;TableSQL 문자열을 원하는 대로 변경하기만 하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;반환되는 각 레코드는 시트에 행으로 삽입됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 결정한 플래그에 따라 다음 시트로 이동할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 많은 정보가 필요하시면 말씀해주세요(이 예는 고객님이 하고 있는 일이 아니기 때문에).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Private Sub getMyRows(inSchema As String, InTable As String)
    Dim RS As Object
    Dim TableSQL As String
    Dim DataType As String
    Dim DataLength As String
    Dim DataPrecision As String
    Dim DataScale As String
    Dim ColCount As Integer
    Dim WS As Worksheet
' create a sheet with the current table as name
    Worksheets.Add().Name = InTable
    Set RS = CreateObject(&quot;ADODB.recordset&quot;)
    TableSQL = &quot;Select * from &quot; &amp;amp; inSchema &amp;amp; &quot;.&quot; &amp;amp; InTable
' grab the data
    RS.Open TableSQL, conn, adOpenStatic
    For ColCount = 0 To RS.Fields.Count - 1
' set column headings to match table
       ActiveSheet.Cells(1, ColCount + 1).Value = RS.Fields(ColCount).Name
    Next

' copy table data to sheet
     With Worksheets(InTable).Range(&quot;A2&quot;)
        .CopyFromRecordset RS
    End With
    RS.Close

  End Sub
&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;.xls 형식 기능의 하위 집합을 지원하는 Tom Kyte의 &lt;a href=&quot;http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:728625409049&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;7-1&quot;&gt;OWA-SILK&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;font class=&quot;papago-parent&quot;&gt;타입은 훌륭한 해결책입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PL/SQL로 완벽하게 기능하는 멀티시트 엑셀 문서를 생성할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에서 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://radio.weblogs.com/0137094/2006/10/26.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://radio.weblogs.com/0137094/2006/10/26.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://radio.weblogs.com/0137094/2009/01/02.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://radio.weblogs.com/0137094/2009/01/02.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(제이슨 베넷의 개발자 코너)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PL/SQL만 사용하여 Oracle 데이터베이스에서 Excel 문서를 생성할 수 있는 다른 프로젝트 ORA_EXCEL(www.oraexcel.com )이 있습니다.&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;SQL plus를 사용하여 웹에서 이 솔루션을 찾았습니다(제가 발명한 것이 아닙니다).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;set feed off markup html on spool on
spool c:\table1.xls
select * from table1;
spool off
set markup html off spool off
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출처: &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms807027.aspx&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;14-1&quot;&gt;MSDN&lt;/a&gt;. 워크시트를 시스템 DSN에 의존하지 않고 휴대할 수 있도록 하려면 다음과 같은 연결 문자열을 사용하여 연결할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection

cnn.ConnectionString = &quot;Provider=OraOLEDB.Oracle.1;Password=&amp;lt;PASSWORD&amp;gt;;Persist Security Info=True;User ID=&amp;lt;USER ID&amp;gt;;Data Source=&amp;lt;DATABASE NAME&amp;gt;&quot;
cnn.Open
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;... 그럼 &lt;a href=&quot;https://stackoverflow.com/a/927673/638471&quot; papago-id=&quot;15-1&quot;&gt;몰보이의 솔루션&lt;/a&gt;을 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(작은) 엑셀 시트를 html로 엑셀에 저장한 후 그 형식을 재현할 수 있습니다.&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;SQL*XL이라는 제품이 있는데 엑셀 내에서 SQL 쿼리를 실행할 수 있으며 워크시트 내에 결과가 나타납니다(업데이트도 가능합니다).&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;무료가 아닌 상업적인 가격이지만, 50유로 정도밖에 되지 않기 때문에 비싸지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;꽤 많이 써요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 OOXML 방식을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저희는 처음에 PL/SQL로 진행하기 위한 방법을 작성하고 있었는데 동료가 Excellant라는 제품을 발견했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;열 매핑 및 스타일/공식(거의 모든 엑셀 공식이 작동함)이 있는 xml 사양을 전달하면 쿼리가 클롭백을 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 더 작게 만들고 싶다면 클롭에서 런지프를 실행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 매니저가 PC카드로 구매한 제품이 꽤 저렴합니다.&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;웹사이트는 www.peak42solutions.com 입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;네트워크 사용자가 데이터베이스에 직접 액세스할 수 없기 때문에 ODBC를 사용할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 우리는 지금 고객들에게 탁월한 인보이스를 이메일로 보내고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;청구서&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;귀사의 문제는 여기 SO의 스레드(&lt;a href=&quot;https://stackoverflow.com/questions/8414050/writing-in-excelsheet-using-utl-file-package-in-oracle/41356098#41356098&quot; papago-id=&quot;23-1&quot;&gt;Oracle의 UTL_FILE 패키지를 이용한 ExcelSheet 쓰기&lt;/a&gt;)와 비슷한 것 같습니다. 최근 이 문제에 대한 간단한 해결책을 찾을 수 있었습니다. 나는 다음의 패키지를 사용했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;as_xlsx&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Anton Scheffer가 만든 (&lt;a href=&quot;https://technology.amis.nl/2011/02/19/create-an-excel-file-with-plsql/&quot; papago-id=&quot;24-1&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;PL/SQL로 Excel 파일 만들기&quot; papago-attr-id=&quot;1&quot;&gt;PL/SQL로 Excel-file을 작성&lt;/a&gt;) 몇 가지 수정을 통해 루프를 통해 하나의 엑셀 워크북 안에 여러 장을 작성합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 셀 색상, 글꼴 스타일, 글꼴 크기, 테두리 등과 같은 기본 형식도 지원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;꽤 &lt;a href=&quot;https://stackoverflow.com/questions/41299024/create-an-excel-file-xlsx-using-pl-sqla&quot; papago-id=&quot;24-3&quot;&gt;예쁩니다&lt;/a&gt;. (PL&lt;a href=&quot;https://stackoverflow.com/questions/41299024/create-an-excel-file-xlsx-using-pl-sqla&quot; papago-id=&quot;24-3&quot;&gt;/SQL을 사용하여 Excel 파일&lt;/a&gt;(.&lt;a href=&quot;https://stackoverflow.com/questions/41299024/create-an-excel-file-xlsx-using-pl-sqla&quot; papago-id=&quot;24-3&quot;&gt;xlsx)&lt;/a&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;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/298648/oracle-to-excel-pl-sql-export-procedure&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>oracle</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1633</guid>
      <comments>https://copyscript.tistory.com/1633#entry1633comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:22:11 +0900</pubDate>
    </item>
    <item>
      <title>Laravel이 이미 백엔드로 사용되고 있다면 프론트엔드에서 AngularJs를 사용하는 이유는 무엇입니까?</title>
      <link>https://copyscript.tistory.com/1632</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Laravel이 이미 백엔드로 사용되고 있다면 프론트엔드에서 AngularJs를 사용하는 이유는 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;문&lt;/b&gt; 닫았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문은&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;/help/closed-questions&quot; papago-id=&quot;1-3&quot;&gt;의견&lt;/a&gt;에 입각한&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 답변을 받지 않고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;hr class=&quot;my12 outline-none baw0 bb bc-powder-400&quot;&gt; 
  &lt;div class=&quot;fw-nowrap fc-black-600&quot;&gt; 
   &lt;div class=&quot;d-flex fd-column lh-md&quot;&gt; 
    &lt;div class=&quot;mb0 d-flex&quot;&gt; 
     &lt;div class=&quot;flex--item mr8&quot;&gt; 
      &lt;svg aria-hidden=&quot;true&quot; class=&quot;svg-icon iconLightbulb&quot; width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 18 18&quot;&gt;
       &lt;path d=&quot;M15 6.38A6.48 6.48 0 0 0 7.78.04h-.02A6.49 6.49 0 0 0 2.05 5.6a6.31 6.31 0 0 0 2.39 5.75c.49.39.76.93.76 1.5v.24c0 1.07.89 1.9 1.92 1.9h2.75c1.04 0 1.92-.83 1.92-1.9v-.2c0-.6.26-1.15.7-1.48A6.32 6.32 0 0 0 15 6.37ZM4.03 5.85A4.49 4.49 0 0 1 8 2.02a4.48 4.48 0 0 1 5 4.36 4.3 4.3 0 0 1-1.72 3.44c-.98.74-1.5 1.9-1.5 3.08v.1H7.2v-.14c0-1.23-.6-2.34-1.53-3.07a4.32 4.32 0 0 1-1.64-3.94ZM10 18a1 1 0 0 0 0-2H7a1 1 0 1 0 0 2h3Z&quot;&gt;&lt;/path&gt;
      &lt;/svg&gt; 
     &lt;/div&gt; 
     &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;2-0&quot;&gt;이 질문을 개선하고 싶으십니까?&lt;/b&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;/posts/27098987/edit&quot; papago-id=&quot;2-2&quot;&gt;이 게시물을 편집&lt;/a&gt;하여 사실과 인용으로 답변할 수 있도록 질문을 업데이트합니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;mb0 mt6 d-flex&quot;&gt; 
     &lt;p class=&quot;ml24 pl2&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;3-1&quot; title=&quot;2015-07-03 16:03:02Z&quot; papago-attr-id=&quot;1&quot;&gt;8년 전&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/27098987/edit&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문을 개선합니다.&lt;/font&gt;&lt;/a&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AngularJs가 FrontEnd이고 Laravel이 BackEnd라는 것을 알고 있지만 제 질문은 다음과 같습니다.&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;Laravel을 통해 내가 필요한 모든 것을 하는 곳에서 AngularJs를 사용해야 하는 이유는 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 이해한 &lt;strong papago-id=&quot;7-1&quot;&gt;바&lt;/strong&gt;로는 JS나 &lt;strong papago-id=&quot;7-3&quot;&gt;PHP&lt;/strong&gt; 중 하나로 앱을 만들 수 있지만, 초보자인 저에게는 오버킬로 보이는 두 가지를 모두 사용하는 사용자가 많다는 것을 알게 되었습니다. 누군가 가능한 가장 간단한 형태의 답변으로 설명해주실 수 있나요?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 프로젝트에서 둘 다 사용하면 어떤 이점이 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 당신은 보통 어떻게 당신의 몸을&lt;/font&gt;&lt;/font&gt;&lt;code&gt;app/folders&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 다 MVC인 걸 특별히 사용할 때?&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;ol&gt; 
 &lt;li papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WEP 프로젝트에서 각도를 학습/사용하는 시기/사용법&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;폴더 구조 설정 방법&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;폴더 구조를 설정하려면 다음 리소스를 확인하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://scotch.io/tutorials/php/create-a-laravel-and-angular-single-page-comment-application&quot; papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://scotch.io/tutorials/php/create-a-laravel-and-angular-single-page-comment-application&lt;/font&gt;&lt;/a&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=hqAyiqUs93c&quot; papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://www.youtube.com/watch?v=hqAyiqUs93c&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;제가 angularjs로 laravel을 사용하는 이유를 말할 수 있을 뿐이고 각도 없이 laravel을 사용할 수 있다는 당신의 말이 맞지만, 제가 laravel뿐만 아니라 angular를 사용하는 이유는 서버 사이드 앱보다 javascript가 더 나은 위치에 있는 것들이 있기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ajax를 사용하고 사용자가 양식에 입력한 전자 메일 주소가 유효한지 여부와 같은 작은 것을 확인/처리하고 싶을 때마다 페이지를 다시 로드할 필요가 없습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버로 다시 아약스하면 전체 페이지를 로드할 필요가 없고 필요한 조각만 로드할 수 있기 때문에 더 빠릅니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 양식을 작성할 때와 같이 사용자에게 즉각적인 피드백을 제공할 수 있습니다. 사용자의 입력이 유효한지 확인하고 즉시 피드백을 제공할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;lavelvel을 사용하면 서버로 왕복 이동해야 하며 오류 메시지 모음을 반환해야 합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 웹 사이트/웹 앱에 이러한 이점이 있기를 원한다면 자바스크립트로 기능을 작성해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 프레임워크를 사용하여 앵글이 가장 좋다고 말할 수는 없지만, 앵글은 잘 작동하는 것처럼 보이는 아키텍처 외에도 통합 &lt;strong papago-id=&quot;20-1&quot;&gt;솔루션&lt;/strong&gt; 제품군과 다양한 문제에 대해 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 부분적으로 학습해야 할 새로운 개념이 상당히 많고 이러한 구성 요소에 대한 필요성이 즉각적으로 명백하지 않은 이유라고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 $scope 객체를 사용하여 컨트롤러와 뷰 사이의 데이터를 릴레이하는 등의 기능을 수행하는 데 사용하는 구성 요소가 코드, 테스트 가능성 및 기타 요소를 정리하는 데 도움이 되는 큰 그림의 기능을 수행하기 때문일 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Laravel만 사용하는 것이 아니라 Laravel만 사용하는 경우 사용자에게 이러한 이점을 제공할 수 있는 옵션이 더 많기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱과 사용자의 요구사항에 가장 적합한 곳에 라벨을 사용하거나 최고의 결과를 제공하는 곳에 각도를 사용하면 결국 더 나은 웹 앱을 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;백엔드에는 larravel을 사용하고 프론트엔드에는 angularjs를 사용하는 가장 큰 이유는 앱을 편안하게(백엔드와 프론트엔드 모두) 만들기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;백엔드는 json 형태로 데이터를 생산하고 소비할 뿐이며, 주로 json 때문에 애플리케이션의 모바일 앱 버전을 만드는 것과 같은 작업을 더 쉽게 할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/27098987/why-use-angularjs-in-frontend-if-laravel-is-already-used-as-backend&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>angularjs</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1632</guid>
      <comments>https://copyscript.tistory.com/1632#entry1632comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:22:04 +0900</pubDate>
    </item>
    <item>
      <title>Angular를 전개하는 것이 일반적인 선택입니까?바닐라 아파치 HTTP 서버에 JS 앱?</title>
      <link>https://copyscript.tistory.com/1631</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular를 전개하는 것이 일반적인 선택입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;바닐라 아파치 HTTP 서버에 JS 앱?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular가 어떤 서버인지 궁금했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS 앱은 대개 에 배포되었고, 구글은 만족스러운 답변을 주지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;특히 제가 보기에는 앵귤러가&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS 앱은 정적 파일의 모음일 뿐인데, 운영 중인 바닐라 아파치 HTTP 서버에 이러한 앱을 배포하는 것이 일반적입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 경량 Node.js 서버를 선호합니까?&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;정적 Angular를 서비스하기 위해 runx를 실행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS 콘텐츠.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;백엔드 기능은 노드가 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요한 모든 동적 컨텐츠를 제공하고 클라이언트 측의 REST 요청에 응답하는 JS 서버.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Nginx는 동적 쿼리를 NodeJS로 라우팅하고 정적 컨텐츠를 직접 서비스합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;클라이언트 측 논리와 서버 측 논리 모두 동일한 언어(JavaScript 또는 CoffeeScript)로 작성됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 큰 이점은 클라이언트 측 정적 컨텐츠와 백엔드 컨텐츠를 별도로 로드 밸런싱할 수 있다는 점입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱의 크기와 동적 컨텐츠 액세스에 대한 요구에 따라 달라집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular 배치를 주제로 한 다른 게시물들&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로덕션에서 '그룬트 서버'를 실행하지 않음: &lt;a href=&quot;https://stackoverflow.com/questions/22577336/can-grunt-server-use-for-production-application-deployment&quot; papago-id=&quot;6-1&quot;&gt;프로덕션 애플리케이션&lt;/a&gt; 배포를 &lt;a href=&quot;https://stackoverflow.com/questions/22577336/can-grunt-server-use-for-production-application-deployment&quot; papago-id=&quot;6-1&quot;&gt;위한 서버 사용&lt;/a&gt;을 그룬트할 수 &lt;a href=&quot;https://stackoverflow.com/questions/22577336/can-grunt-server-use-for-production-application-deployment&quot; papago-id=&quot;6-1&quot;&gt;있음&lt;/a&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;운영 환경에서 Apache/Nginx 실행:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/21745529/best-way-for-deploy-angular-js-application-made-with-yeoman&quot; papago-id=&quot;7-1&quot;&gt;요먼으로 만든 angular.js 애플리케이션을 배포하는 가장 좋은 방법은?&lt;/a&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버/클라이언트 측면을 함께 호스팅:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/19984830/the-best-deployment-architecture-for-angularjs-nodejs-app&quot; papago-id=&quot;8-1&quot;&gt;angularjs nodejs 앱을 위한 최적의 배포 아키텍처&lt;/a&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular와 같은 클라이언트 측 프레임워크&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS는 순수한 클라이언트측 자바스크립트이기 때문에 바닐라 아파치 설치만 사용해도 전혀 신경쓰지 않을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&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;궁극적으로 PHP, Python, Ruby, Node 등 서버측 기술이 가장 적합하다고 생각되는 모든 것을 사용하여 백엔드를 구축할 수 있으며, 서버를 선택하는 것은 클라이언트측 프레임워크를 선택하는 것보다 그에 따라 더 크게 좌우됩니다.&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;정적 파일의 경우 Nginx를 사용하고 동적 콘텐츠의 경우 Apache에 역방향 프록시를 사용하는 것이 가치 있을 정도로 Nginx가 정적 파일의 경우 Apache보다 빠르다는 이야기를 자주 들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 단일 페이지 웹 앱에 Apache보다 Nginx를 사용하는 것이 더 합리적일 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;개인적으로 장고 앱을 위해 구니콘과 함께 Nginx를 사용한 적이 있는데, 제가 듣기로는 루비와 Node.js 애플리케이션 모두에서 일반적으로 사용된다고 들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Node.js의 맥락에서, 저는 Node가 프로덕션에서 정적 파일을 제공하는 데 일반적으로 사용되지 않는다고 생각합니다. 그리고 제가 들은 바로는 더 일반적인 배열은 Nginx가 정적 파일을 제공하고 다른 모든 것에 대해 Node 앱에 프록시를 역방향으로 제공하도록 하는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/22224312/is-it-a-common-choice-to-deploy-an-angularjs-app-to-a-vanilla-apache-http-server&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>angularjs</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1631</guid>
      <comments>https://copyscript.tistory.com/1631#entry1631comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:21:57 +0900</pubDate>
    </item>
    <item>
      <title>form serialize javascript (framework 없음)</title>
      <link>https://copyscript.tistory.com/1630</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;form serialize javascript (framework 없음)&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jquery가 없는 javascript 기능이나 양식을 직렬화하고 직렬화된 버전에 접속할 수 있는 프레임워크가 있는지 궁금합니다.&lt;/font&gt;&lt;/p&gt;&lt;h2 papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용도:&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;const form = document.querySelector('form');
const params = new FormData(form);
const request = new XMLHttpRequest();
request.send(params);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 오직 그들을 위해서만 작동하는 것처럼 보이지만.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;POST&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요청한다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;h2 papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최신 브라우저 전용&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;API(최신 브라우저)를&lt;a href=&quot;https://caniuse.com/#search=URLSearchParams&quot; papago-id=&quot;6-3&quot; rel=&quot;noreferrer&quot;&gt; 지원&lt;/a&gt;하는 브라우저를 대상으로 하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FormData(formElement)&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;a href=&quot;https://caniuse.com/#search=FormData&quot; papago-id=&quot;7-1&quot; rel=&quot;noreferrer&quot;&gt;가장 최근&lt;/a&gt;의 브라우저), 다음을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;new URLSearchParams(new FormData(formElement)).toString()
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IE를 제외한 모든 곳&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;URLSearchParams&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 그렇지는 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FormData(formElement)&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;a href=&quot;https://github.com/jimmywarting/FormData&quot; papago-id=&quot;11-1&quot; rel=&quot;noreferrer&quot;&gt;다음 FormData 폴리필과&lt;/a&gt; 이 코드를 사용합니다(IE를 제외한 모든 곳에서 작동).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;new URLSearchParams(Array.from(new FormData(formElement))).toString()
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;true&quot; data-console=&quot;false&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code snippet-currently-hidden&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var form = document.querySelector('form');
var out = document.querySelector('output');

function updateResult() {
  try {
    out.textContent = new URLSearchParams(Array.from(new FormData(form)));
    out.className = '';
  } catch (e) {
    out.textContent = e;
    out.className = 'error';
  }
}

updateResult();
form.addEventListener('input', updateResult);&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;body { font-family: Arial, sans-serif; display: flex; flex-wrap: wrap; }
input[type=&quot;text&quot;] { margin-left: 6px; max-width: 30px; }
label + label { margin-left: 10px; }
output { font-family: monospace; }
.error { color: #c00; }
div { margin-right: 30px; }&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;!-- FormData polyfill for older browsers --&amp;gt;
&amp;lt;script src=&quot;https://unpkg.com/formdata-polyfill@3.0.17/formdata.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;div&amp;gt;
  &amp;lt;h3&amp;gt;Form&amp;lt;/h3&amp;gt;
  &amp;lt;form id=&quot;form&quot;&amp;gt;
    &amp;lt;label&amp;gt;x:&amp;lt;input type=&quot;text&quot; name=&quot;x&quot; value=&quot;1&quot;&amp;gt;&amp;lt;/label&amp;gt;
    &amp;lt;label&amp;gt;y:&amp;lt;input type=&quot;text&quot; name=&quot;y&quot; value=&quot;2&quot;&amp;gt;&amp;lt;/label&amp;gt;
    &amp;lt;label&amp;gt;
    z:
    &amp;lt;select name=&quot;z&quot;&amp;gt;
      &amp;lt;option value=&quot;a&quot; selected&amp;gt;a&amp;lt;/option&amp;gt;
      &amp;lt;option value=&quot;b&quot; selected&amp;gt;b&amp;lt;/option&amp;gt;
    &amp;lt;/select&amp;gt;
  &amp;lt;/label&amp;gt;
  &amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;
  &amp;lt;h3&amp;gt;Query string&amp;lt;/h3&amp;gt;
  &amp;lt;output for=&quot;form&quot;&amp;gt;&amp;lt;/output&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 papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IE 10과 호환 가능&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 오래된 브라우저(예: IE 10)의 경우 &lt;a href=&quot;https://github.com/jimmywarting/FormData&quot; papago-id=&quot;14-1&quot; rel=&quot;noreferrer&quot;&gt;FormData 폴리필&lt;/a&gt;을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Array.from&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;필요한 경우 폴리필(polyfill) 및 이 코드:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Array.from(
  new FormData(formElement),
  function(e) { return e.map(encodeURIComponent).join('='); }
).join('&amp;amp;')
&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;축소판 from &lt;a href=&quot;http://code.google.com/p/form-serialize/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;16-1&quot;&gt;serialize 라이브러리&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;(비록 1.2 킬로바이트의 무게이지만, 왜 사용하지 않습니까?)&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;function serialize (form) {
    if (!form || form.nodeName !== &quot;FORM&quot;) {
            return;
    }
    var i, j, q = [];
    for (i = form.elements.length - 1; i &amp;gt;= 0; i = i - 1) {
        if (form.elements[i].name === &quot;&quot;) {
            continue;
        }
        switch (form.elements[i].nodeName) {
            case 'INPUT':
                switch (form.elements[i].type) {
                    case 'text':
                    case 'tel':
                    case 'email':
                    case 'hidden':
                    case 'password':
                    case 'button':
                    case 'reset':
                    case 'submit':
                        q.push(form.elements[i].name + &quot;=&quot; + encodeURIComponent(form.elements[i].value));
                        break;
                    case 'checkbox':
                    case 'radio':
                        if (form.elements[i].checked) {
                                q.push(form.elements[i].name + &quot;=&quot; + encodeURIComponent(form.elements[i].value));
                        }                                               
                        break;
                }
                break;
                case 'file':
                break; 
            case 'TEXTAREA':
                    q.push(form.elements[i].name + &quot;=&quot; + encodeURIComponent(form.elements[i].value));
                    break;
            case 'SELECT':
                switch (form.elements[i].type) {
                    case 'select-one':
                        q.push(form.elements[i].name + &quot;=&quot; + encodeURIComponent(form.elements[i].value));
                        break;
                    case 'select-multiple':
                        for (j = form.elements[i].options.length - 1; j &amp;gt;= 0; j = j - 1) {
                            if (form.elements[i].options[j].selected) {
                                    q.push(form.elements[i].name + &quot;=&quot; + encodeURIComponent(form.elements[i].options[j].value));
                            }
                        }
                        break;
                }
                break;
            case 'BUTTON':
                switch (form.elements[i].type) {
                    case 'reset':
                    case 'submit':
                    case 'button':
                        q.push(form.elements[i].name + &quot;=&quot; + encodeURIComponent(form.elements[i].value));
                        break;
                }
                break;
            }
        }
    return q.join(&quot;&amp;amp;&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;출처 : http://code.google.com/p/form-serialize/source/browse/trunk/serialize-0.1.js&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;TibTibs의 약간 변형된 버전은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function serialize(form) {
    var field, s = [];
    if (typeof form == 'object' &amp;amp;&amp;amp; form.nodeName == &quot;FORM&quot;) {
        var len = form.elements.length;
        for (i=0; i&amp;lt;len; i++) {
            field = form.elements[i];
            if (field.name &amp;amp;&amp;amp; !field.disabled &amp;amp;&amp;amp; field.type != 'file' &amp;amp;&amp;amp; field.type != 'reset' &amp;amp;&amp;amp; field.type != 'submit' &amp;amp;&amp;amp; field.type != 'button') {
                if (field.type == 'select-multiple') {
                    for (j=form.elements[i].options.length-1; j&amp;gt;=0; j--) {
                        if(field.options[j].selected)
                            s[s.length] = encodeURIComponent(field.name) + &quot;=&quot; + encodeURIComponent(field.options[j].value);
                    }
                } else if ((field.type != 'checkbox' &amp;amp;&amp;amp; field.type != 'radio') || field.checked) {
                    s[s.length] = encodeURIComponent(field.name) + &quot;=&quot; + encodeURIComponent(field.value);
                }
            }
        }
    }
    return s.join('&amp;amp;').replace(/%20/g, '+');
}
&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;사용 불가능한 필드는 삭제되고 이름도 URL로 인코딩됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;%20 문자의 정규 교체는 문자열을 반환하기 전에 한 번만 수행됩니다.&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;쿼리 문자열은 jQuery의 $.serialize() 메서드의 결과와 동일한 형식입니다.&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;json 형식으로 POST를 사용하여 &quot;myForm&quot; 양식을 제출해야 하는 경우 다음 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const formEntries = new FormData(myForm).entries();
const json = Object.assign(...Array.from(formEntries, ([x,y]) =&amp;gt; ({[x]:y})));
fetch('/api/foo', {
  method: 'POST',
  body: JSON.stringify(json)
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째 줄은 배열에서 다음과 같이 변환됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[[&quot;firstProp&quot;, &quot;firstValue&quot;], [&quot;secondProp&quot;, &quot;secondValue&quot;], ...and so on... ]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;...일반적인 물체로:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{&quot;firstProp&quot;: &quot;firstValue&quot;, &quot;secondProp&quot;: &quot;secondValue&quot;, ...and so on ... }
&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;...맵 Fn을 Array.from()에 전달하여 이 변환을 수행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 맵Fn은 각 [&quot;a&quot;,b&quot;] 쌍에 적용되며, 이를 {&quot;a&quot;:&quot;b&quot;}개로 변환하여 어레이에 하나의 속성만 포함하는 많은 개체를 포함합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;맵Fn은 &quot;destructuring&quot;을 사용하여 쌍의 첫 번째 부분과 두 번째 부분의 이름을 가져옵니다. 또한 ES6 &quot;ComputedPropertyName&quot;을 사용하여 맵Fn이 반환하는 개체에 속성 이름을 설정합니다(이것은 &quot;x: something&quot;이 아니라 &quot;[x]: something&quot;이라고 표시되는 이유입니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 이 모든 단일 속성 개체가 모든 속성을 가진 단일 개체로 병합되는 Object.assign() 함수의 인수로 전달됩니다.&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;Array.from(): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from&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;매개 변수에서 파괴 중: https://simonsmith.io/destructuring-objects-as-function-parameters-in-es6/&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;https://stackoverflow.com/questions/11043026/variable-as-the-property-name-in-a-javascript-object-literal&quot; papago-id=&quot;28-1&quot;&gt;자바스크립트 객체 리터럴의 속성 이름으로 변수&lt;/a&gt;?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 존데이브 데카노의 답변부터 시작했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 그의 기능에 대한 답변에서 언급된 몇 가지 문제를 해결할 수 있을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;%20을 + 기호로 바꿉니다.&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;Submit/Button 유형은 양식을 제출하기 위해 클릭한 경우에만 제출됩니다.&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;li papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필드 유형에 관계없이 기본적으로 동일한 작업을 수행하기 때문에 코드가 중복되는 것처럼 보였습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;'tel', 'email' 등 HTML5 필드 타입과의 호환성이 떨어지는 것은 말할 것도 없고, 그래서 스위치 문에 있는 대부분의 세부 사항을 삭제했습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&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;function serialize(form, evt){
    var evt    = evt || window.event;
    evt.target = evt.target || evt.srcElement || null;
    var field, query='';
    if(typeof form == 'object' &amp;amp;&amp;amp; form.nodeName == 'FORM'){
        for(i=form.elements.length-1; i&amp;gt;=0; i--){
            field = form.elements[i];
            if(field.name &amp;amp;&amp;amp; field.type != 'file' &amp;amp;&amp;amp; field.type != 'reset' &amp;amp;&amp;amp; !field.disabled){
                if(field.type == 'select-multiple'){
                    for(j=form.elements[i].options.length-1; j&amp;gt;=0; j--){
                        if(field.options[j].selected){
                            query += '&amp;amp;' + field.name + &quot;=&quot; + encodeURIComponent(field.options[j].value).replace(/%20/g,'+');
                        }
                    }
                }
                else{
                    if((field.type != 'submit' &amp;amp;&amp;amp; field.type != 'button') || evt.target == field){
                        if((field.type != 'checkbox' &amp;amp;&amp;amp; field.type != 'radio') || field.checked){
                            query += '&amp;amp;' + field.name + &quot;=&quot; + encodeURIComponent(field.value).replace(/%20/g,'+');
                        }   
                    }
                }
            }
        }
    }
    return query.substr(1);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 이 기능을 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form onsubmit=&quot;myAjax('http://example.com/services/email.php', 'POST', serialize(this, event))&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 브라우저에서 작동합니다.&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;const formSerialize = formElement =&amp;gt; {
  const values = {};
  const inputs = formElement.elements;

  for (let i = 0; i &amp;lt; inputs.length; i++) {
    values[inputs[i].name] = inputs[i].value;
  }
  return values;
}

const dumpValues = form =&amp;gt; () =&amp;gt; {
  
  const r = formSerialize(form);
  console.log(r);
  console.log(JSON.stringify(r));
}

const form = document.querySelector('form');

dumpValues(form)();

form.addEventListener('change',dumpValues(form));&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;form action=&quot;/my-handling-form-page&quot; method=&quot;post&quot;&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;label for=&quot;name&quot;&amp;gt;Name:&amp;lt;/label&amp;gt;
    &amp;lt;input type=&quot;text&quot; id=&quot;name&quot; name=&quot;user_name&quot; value=&quot;John&quot;&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;label for=&quot;mail&quot;&amp;gt;E-mail:&amp;lt;/label&amp;gt;
    &amp;lt;input type=&quot;email&quot; id=&quot;mail&quot; name=&quot;user_mail&quot; value=&quot;john@jonhson.j&quot;&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;label for=&quot;interests&quot;&amp;gt;Interest:&amp;lt;/label&amp;gt;
    &amp;lt;select required=&quot;&quot;  id=&quot;interests&quot; name=&quot;interests&quot;&amp;gt;
      &amp;lt;option value=&quot;&quot; selected=&quot;selected&quot;&amp;gt;- None -&amp;lt;/option&amp;gt;
      &amp;lt;option value=&quot;drums&quot;&amp;gt;Drums&amp;lt;/option&amp;gt;
      &amp;lt;option value=&quot;js&quot;&amp;gt;Javascript&amp;lt;/option&amp;gt;
      &amp;lt;option value=&quot;sports&quot;&amp;gt;Sports&amp;lt;/option&amp;gt;
      &amp;lt;option value=&quot;trekking&quot;&amp;gt;Trekking&amp;lt;/option&amp;gt;
    &amp;lt;/select&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;label for=&quot;msg&quot;&amp;gt;Message:&amp;lt;/label&amp;gt;
    &amp;lt;textarea id=&quot;msg&quot; name=&quot;user_message&quot;&amp;gt;Hello My Friend&amp;lt;/textarea&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/form&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;HTMLElement.prototype.serialize = function(){
    var obj = {};
    var elements = this.querySelectorAll( &quot;input, select, textarea&quot; );
    for( var i = 0; i &amp;lt; elements.length; ++i ) {
        var element = elements[i];
        var name = element.name;
        var value = element.value;

        if( name ) {
            obj[ name ] = value;
        }
    }
    return JSON.stringify( obj );
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 사용하려면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var dataToSend = document.querySelector(&quot;form&quot;).serialize();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 도와드렸기를 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트에 대한 입력을 직렬화하려는 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 제가 사용하는 순수한 자바스크립트 접근법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// serialize form
var data = {};
var inputs = [].slice.call(e.target.getElementsByTagName('input'));
inputs.forEach(input =&amp;gt; {
  data[input.name] = input.value;
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터는 입력의 자바스크립트 객체가 될 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;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;@SimonSteinberger의 코드를 변수를 적게 사용하고 속도를 이용하여 리팩터한 버전&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;forEach&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;for&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;function serialize(form) {
    var result = [];
    if (typeof form === 'object' &amp;amp;&amp;amp; form.nodeName === 'FORM')
        Array.prototype.slice.call(form.elements).forEach(function(control) {
            if (
                control.name &amp;amp;&amp;amp; 
                !control.disabled &amp;amp;&amp;amp; 
                ['file', 'reset', 'submit', 'button'].indexOf(control.type) === -1
            )
                if (control.type === 'select-multiple')
                    Array.prototype.slice.call(control.options).forEach(function(option) {
                        if (option.selected) 
                            result.push(encodeURIComponent(control.name) + '=' + encodeURIComponent(option.value));
                    });
                else if (
                    ['checkbox', 'radio'].indexOf(control.type) === -1 || 
                    control.checked
                ) result.push(encodeURIComponent(control.name) + '=' + encodeURIComponent(control.value));
        });
        return result.join('&amp;amp;').replace(/%20/g, '+');
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 다음과 같이 매우 간단한 기능으로 이루어질 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;function serialize(form) {
        let requestArray = [];
        form.querySelectorAll('[name]').forEach((elem) =&amp;gt; {
            requestArray.push(elem.name + '=' + elem.value);
        });
        if(requestArray.length &amp;gt; 0)
            return requestArray.join('&amp;amp;');
        else
            return false;
    }

 serialized = serialize(document.querySelector('form'))
  console.log(serialized);&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;form&amp;gt;

  &amp;lt;input type='text' name='fname' value='Johne'/&amp;gt;
  &amp;lt;input type='text' name='lname' value='Doe'/&amp;gt;
  &amp;lt;input type='text' name='contact[]' value='99999999'/&amp;gt;
  &amp;lt;input type='text' name='contact[]' value='34423434345'/&amp;gt;

&amp;lt;/form&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 TibTibs의 답변을 읽기에 훨씬 더 명확한 것으로 재분류했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;80자 너비와 댓글 몇 개 때문에 조금 더 길어졌습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 공백 필드 이름과 공백 값을 무시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Serialize the specified form into a query string.
//
// Returns a blank string if +form+ is not actually a form element.
function $serialize(form, evt) {
  if(typeof(form) !== 'object' &amp;amp;&amp;amp; form.nodeName !== &quot;FORM&quot;)
    return '';

  var evt    = evt || window.event || { target: null };
  evt.target = evt.target || evt.srcElement || null;
  var field, query = '';

  // Transform a form field into a query-string-friendly
  // serialized form.
  //
  // [NOTE]: Replaces blank spaces from its standard '%20' representation
  //         into the non-standard (though widely used) '+'.
  var encode = function(field, name) {
    if (field.disabled) return '';

    return '&amp;amp;' + (name || field.name) + '=' +
           encodeURIComponent(field.value).replace(/%20/g,'+');
  }

  // Fields without names can't be serialized.
  var hasName = function(el) {
    return (el.name &amp;amp;&amp;amp; el.name.length &amp;gt; 0)
  }

  // Ignore the usual suspects: file inputs, reset buttons,
  // buttons that did not submit the form and unchecked
  // radio buttons and checkboxes.
  var ignorableField = function(el, evt) {
    return ((el.type == 'file' || el.type == 'reset')
        || ((el.type == 'submit' || el.type == 'button') &amp;amp;&amp;amp; evt.target != el)
        || ((el.type == 'checkbox' || el.type == 'radio') &amp;amp;&amp;amp; !el.checked))
  }

  var parseMultiSelect = function(field) {
    var q = '';

    for (var j=field.options.length-1; j&amp;gt;=0; j--) {
      if (field.options[j].selected) {
        q += encode(field.options[j], field.name);
      }
    }

    return q;
  };

  for(i = form.elements.length - 1; i &amp;gt;= 0; i--) {
    field = form.elements[i];

    if (!hasName(field) || field.value == '' || ignorableField(field, evt))
      continue;

    query += (field.type == 'select-multiple') ? parseMultiSelect(field)
                                               : encode(field);
  }

  return (query.length == 0) ? '' : query.substr(1);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@moison answer에서 formData의 엔트리() 메서드를 잡았는데 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/FormData/entries&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;48-1&quot;&gt;MDN&lt;/a&gt;에서 다음과 같이 말합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;FormData.entries() 메서드는 이 개체에 포함된 모든 키/값 쌍을 통과할 수 있는 반복기를 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 쌍의 키는 USV 문자열 개체입니다. 값은 USV 문자열 또는 Blob입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 유일한 문제는 모바일 브라우저(안드로이드와 사파리는 지원되지 않음)와 IE 및 사파리 데스크톱도 지원된다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 제 접근법은 이렇습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let theForm =  document.getElementById(&quot;contact&quot;); 

theForm.onsubmit = function(event) {
    event.preventDefault();

    let rawData = new FormData(theForm);
    let data = {};

   for(let pair of rawData.entries()) {
     data[pair[0]] = pair[1]; 
    }
    let contactData = JSON.stringify(data);
    console.warn(contactData);
    //here you can send a post request with content-type :'application.json'

};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드는 &lt;a href=&quot;https://jsfiddle.net/espyMur/vzLqf9co/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;52-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;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트 축소 기능을 사용하면 IE9 &amp;gt;를 포함한 모든 브라우저에 효과가 있을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Array.prototype.slice.call(form.elements) // convert form elements to array
    .reduce(function(acc,cur){   // reduce 
        var o = {type : cur.type, name : cur.name, value : cur.value}; // get needed keys
        if(['checkbox','radio'].indexOf(cur.type) !==-1){
            o.checked = cur.checked;
        } else if(cur.type === 'select-multiple'){
            o.value=[];
            for(i=0;i&amp;lt;cur.length;i++){
                o.value.push({
                    value : cur.options[i].value,
                    selected : cur.options[i].selected
                });
            }
        }
        acc.push(o);
        return acc;
 },[]);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래의 라이브 예시.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;true&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code snippet-currently-hidden&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var _formId = document.getElementById('formId'),
    formData = Array.prototype.slice.call(_formId.elements).reduce(function(acc,cur,indx,arr){
        var i,o = {type : cur.type, name : cur.name, value : cur.value};
        if(['checkbox','radio'].indexOf(cur.type) !==-1){
            o.checked = cur.checked;
        } else if(cur.type === 'select-multiple'){
            o.value=[];
            for(i=0;i&amp;lt;cur.length;i++){
                o.value.push({
                    value : cur.options[i].value,
                    selected : cur.options[i].selected
                });
            }
        }
        acc.push(o);
        return acc;
    },[]);

// view
document.getElementById('formOutput').innerHTML = JSON.stringify(formData, null, 4);&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;form id=&quot;formId&quot;&amp;gt;
    &amp;lt;input type=&quot;text&quot; name=&quot;texttype&quot; value=&quot;some text&quot;&amp;gt;
    &amp;lt;select&amp;gt;
        &amp;lt;option value=&quot;Opt 1&quot;&amp;gt;Opt 1&amp;lt;/option&amp;gt;
        &amp;lt;option value=&quot;Opt 2&quot; selected&amp;gt;Opt 2&amp;lt;/option&amp;gt;
        &amp;lt;option value=&quot;Opt 3&quot;&amp;gt;Opt 3&amp;lt;/option&amp;gt;
    &amp;lt;/select&amp;gt;
    &amp;lt;input type=&quot;checkbox&quot; name=&quot;checkboxtype&quot; value=&quot;Checkbox 1&quot; checked&amp;gt; Checkbox 1
    &amp;lt;input type=&quot;checkbox&quot; name=&quot;checkboxtype&quot; value=&quot;Checkbox 2&quot;&amp;gt; Checkbox 2
    &amp;lt;input type=&quot;radio&quot; name=&quot;radiotype&quot; value=&quot;Radio Btn 1&quot;&amp;gt; Radio Btn 1
    &amp;lt;input type=&quot;radio&quot; name=&quot;radiotype&quot; value=&quot;Radio Btn 2&quot; checked&amp;gt; Radio Btn 2
    &amp;lt;select multiple&amp;gt;
        &amp;lt;option value=&quot;Multi 1&quot; selected&amp;gt;Multi 1&amp;lt;/option&amp;gt;
        &amp;lt;option value=&quot;Multi 2&quot;&amp;gt;Saab&amp;lt;/option&amp;gt;
        &amp;lt;option value=&quot;Multi 3&quot; selected&amp;gt;Multi 3&amp;lt;/option&amp;gt;
    &amp;lt;/select&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;pre&amp;gt;&amp;lt;code id=&quot;formOutput&quot;&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&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;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 방식은...&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;const myForm = document.forms['form-name']

myForm.onsubmit=e=&amp;gt;
  {
  e.preventDefault()  // for testing...

  let data = Array.from(new FormData(myForm))
                  .reduce((r,[k,v])=&amp;gt;{r[k]=v;return r},{})

  /*_______________________________________ same code: for beginners 
  let data = {}
  Array.from(new FormData(myForm), (entry) =&amp;gt; { data[ entry[0] ] = entry[1]} )
  ________________________________________________________________*/
 
  console.log(data)
  
  //...
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Object.fromEntries를 다음과 같이 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;function parseForm(e) {
  const formData = new FormData(e.target);
  return Object.fromEntries(formData.entries());
}

&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;  // supports IE8 and IE9 
  function serialize(form) {
    var inputs = form.elements;
    var array = [];
    for(i=0; i &amp;lt; inputs.length; i++) {
      var inputNameValue = inputs[i].name + '=' + inputs[i].value;
      array.push(inputNameValue);
    }
    return array.join('&amp;amp;');
  }
 //using the serialize function written above
 var form = document.getElementById(&quot;form&quot;);//get the id of your form. i am assuming the id to be named form.
 var form_data = serialize(form);
 var xhr = new XMLHttpRequest();
 xhr.send(form_data);

 //does not work with IE8 AND IE9
 var form = document.querySelector('form');
 var data = new FormData(form);
 var xhr = new XMLHttpRequest();
 xhr.send(data);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이비드 레몬의 답변에 대한 개선.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;폼 데이터를 JSON으로 변환하고 데이터 개체에서 폼을 설정할 수 있습니다.&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;const main = () =&amp;gt; {
  const form = document.forms['info'];
  const data = {
    &quot;user_name&quot;       : &quot;John&quot;,
    &quot;user_email&quot;      : &quot;john@jonhson.com&quot;,
    &quot;user_created&quot;    : &quot;2020-03-24&quot;,
    &quot;user_age&quot;        : 42,
    &quot;user_subscribed&quot; : true,
    &quot;user_interests&quot;  : &quot;sports&quot;,
    &quot;user_message&quot;    : &quot;Hello My Friend&quot;
  };

  populateForm(form, data);
  updateJsonView(form);
  form.addEventListener('change', (e) =&amp;gt; updateJsonView(form));
}

const getFieldValue = (field, opts) =&amp;gt; {
  let type = field.getAttribute('type');
  if (type) {
    switch (type) {
      case 'checkbox':
        return field.checked;
      case 'number':
        return field.value.includes('.')
          ? parseFloat(field.value)
          : parseInt(field.value, 10);
    }
  }
  if (opts &amp;amp;&amp;amp; opts[field.name] &amp;amp;&amp;amp; opts[field.name].type) {
    switch (opts[field.name].type) {
      case 'int':
        return parseInt(field.value, 10);
      case 'float':
        return parseFloat(field.value);
    }
  }
  return field.value;
}

const setFieldValue = (field, value) =&amp;gt; {
  let type = field.getAttribute('type');
  if (type) {
    switch (type) {
      case 'checkbox':
        field.checked = value;
        break;
      default:
        field.value = value;
        break;
    }
  } else {
    field.value = value;
  }
}

const extractFormData = (form, opts) =&amp;gt; {
  return Array.from(form.elements).reduce((data, element) =&amp;gt; {
    return Object.assign(data, { [element.name] : getFieldValue(element, opts) });
  }, {});
};

const populateForm = (form, data) =&amp;gt; {
  return Array.from(form.elements).forEach((element) =&amp;gt; {
    setFieldValue(element, data[element.name]);
  });
};

const updateJsonView = (form) =&amp;gt; {
  let fieldOptions = {};
  let formData = extractFormData(form, fieldOptions);
  let serializedData = JSON.stringify(formData, null, 2);
  document.querySelector('.json-view').textContent = serializedData;
};

main();&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.form-field {
  margin-bottom: 0.5em;
}

.form-field label {
  display: inline-block;
  font-weight: bold;
  width: 7em;
  vertical-align: top;
}

.json-view {
  position: absolute;
  top: 0.667em;
  right: 0.667em;
  border: thin solid grey;
  padding: 0.5em;
  white-space: pre;
  font-family: monospace;
  overflow: scroll-y;
  max-height: 100%;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;form name=&quot;info&quot; action=&quot;/my-handling-form-page&quot; method=&quot;post&quot;&amp;gt;
  &amp;lt;div class=&quot;form-field&quot;&amp;gt;
    &amp;lt;label for=&quot;name&quot;&amp;gt;Name:&amp;lt;/label&amp;gt;
    &amp;lt;input type=&quot;text&quot; id=&quot;name&quot; name=&quot;user_name&quot;&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;form-field&quot;&amp;gt;
    &amp;lt;label for=&quot;mail&quot;&amp;gt;E-mail:&amp;lt;/label&amp;gt;
    &amp;lt;input type=&quot;email&quot; id=&quot;mail&quot; name=&quot;user_email&quot;&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;form-field&quot;&amp;gt;
    &amp;lt;label for=&quot;created&quot;&amp;gt;Date of Birth:&amp;lt;/label&amp;gt;
    &amp;lt;input type=&quot;date&quot; id=&quot;created&quot; name=&quot;user_created&quot;&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;form-field&quot;&amp;gt;
    &amp;lt;label for=&quot;age&quot;&amp;gt;Age:&amp;lt;/label&amp;gt;
    &amp;lt;input type=&quot;number&quot; id=&quot;age&quot; name=&quot;user_age&quot;&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;form-field&quot;&amp;gt;
    &amp;lt;label for=&quot;subscribe&quot;&amp;gt;Subscribe:&amp;lt;/label&amp;gt;
    &amp;lt;input type=&quot;checkbox&quot; id=&quot;subscribe&quot; name=&quot;user_subscribed&quot;&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;form-field&quot;&amp;gt;
    &amp;lt;label for=&quot;interests&quot;&amp;gt;Interest:&amp;lt;/label&amp;gt;
    &amp;lt;select required=&quot;&quot;  id=&quot;interests&quot; name=&quot;user_interests&quot;&amp;gt;
      &amp;lt;option value=&quot;&quot; selected=&quot;selected&quot;&amp;gt;- None -&amp;lt;/option&amp;gt;
      &amp;lt;option value=&quot;drums&quot;&amp;gt;Drums&amp;lt;/option&amp;gt;
      &amp;lt;option value=&quot;js&quot;&amp;gt;Javascript&amp;lt;/option&amp;gt;
      &amp;lt;option value=&quot;sports&quot;&amp;gt;Sports&amp;lt;/option&amp;gt;
      &amp;lt;option value=&quot;trekking&quot;&amp;gt;Trekking&amp;lt;/option&amp;gt;
    &amp;lt;/select&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;form-field&quot;&amp;gt;
    &amp;lt;label for=&quot;msg&quot;&amp;gt;Message:&amp;lt;/label&amp;gt;
    &amp;lt;textarea id=&quot;msg&quot; name=&quot;user_message&quot;&amp;gt;&amp;lt;/textarea&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;div class=&quot;json-view&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;순수 자바스크립트 접근법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var form = document.querySelector('form');
var data = new FormData(form);

  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 &amp;amp;&amp;amp; this.status == 200) {
       console.log(this.responseText);
    }
  };
  xhttp.open(&quot;POST&quot;, &quot;&amp;lt;YOUR-URL&amp;gt;&quot;, true);
  xhttp.send(data);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;60&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;JsonStringifyForm: function(formId) {
      let myForm = document.getElementById(formId);
      let formData = new FormData(myForm);
      const data = {}; // need to convert it before using not with XMLHttpRequest
      for (let [key, val] of formData.entries()) {
        Object.assign(data, { [key]: val });
      }
      return JSON.stringify(data);
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 잘 됐으면 좋겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var serializeForm = (formElement) =&amp;gt; {
  const formData = {};
  const inputs = formElement.elements;

  for (let i = 0; i &amp;lt; inputs.length; i++) {
    if(inputs[i].name!==&quot;&quot;)
        formData[inputs[i].name] = inputs[i].value;
  }
  return formData;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디버깅을 위해 다음과 같은 도움이 될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function print_form_data(form) {
    const form_data = new FormData(form);

    for (const item of form_data.entries()) {
        console.log(item);
    }

    return false;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 미쳤을 수도 있지만 이 답변들은 심각하게 비대하다는 것을 알게 되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 해결책은 이렇습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function serialiseForm(form) {
  var input = form.getElementsByTagName(&quot;input&quot;);
  var formData = {};
  for (var i = 0; i &amp;lt; input.length; i++) {
    formData[input[i].name] = input[i].value;
  }
  return formData = JSON.stringify(formData);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이 도서관을 좋아합니다: https://github.com/macek/jquery-serialize-object (1.7)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;크기 KB)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 HTML 양식이 주어지면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;form id=&quot;contact&quot;&amp;gt;
  &amp;lt;input name=&quot;user[email]&quot; value=&quot;jsmith@example.com&quot;&amp;gt;
  &amp;lt;input name=&quot;user[pets][]&quot; type=&quot;checkbox&quot; value=&quot;cat&quot; checked&amp;gt;
  &amp;lt;input name=&quot;user[pets][]&quot; type=&quot;checkbox&quot; value=&quot;dog&quot; checked&amp;gt;
  &amp;lt;input name=&quot;user[pets][]&quot; type=&quot;checkbox&quot; value=&quot;bird&quot;&amp;gt;
  &amp;lt;input type=&quot;submit&quot;&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;66-0&quot;&gt;.serializeObject&lt;/strong&gt; — 선택한 양식을 JavaScript 개체로 직렬화합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;$('form#contact').serializeObject();
//=&amp;gt; {user: {email: &quot;jsmith@example.com&quot;, pets: [&quot;cat&quot;, &quot;dog&quot;]}}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;키스타일&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;68-0&quot;&gt;push&lt;/strong&gt; — 값을 배열에 푸시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;input name=&quot;foo[]&quot; value=&quot;a&quot;&amp;gt;
&amp;lt;input name=&quot;foo[]&quot; value=&quot;b&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;$(&quot;form&quot;).serializeObject();
//=&amp;gt; {foo: [a, b]}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;69-0&quot;&gt;fixed&lt;/strong&gt; — 지정된 인덱스의 배열에 값을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;input name=&quot;foo[2]&quot; value=&quot;a&quot;&amp;gt;
&amp;lt;input name=&quot;foo[4]&quot; value=&quot;b&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;$(&quot;form&quot;).serializeObject();
//=&amp;gt; {foo: [, , &quot;a&quot;, , &quot;b&quot;]}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;70-0&quot;&gt;nameed&lt;/strong&gt; - 지정한 키에 값을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;input name=&quot;foo[bar]&quot; value=&quot;a&quot;&amp;gt;
&amp;lt;input name=&quot;foo[bof]&quot; value=&quot;b&quot;&amp;gt;
&amp;lt;input name=&quot;hello&quot; value=&quot;world&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;$(&quot;form&quot;).serializeObject();
//=&amp;gt; {foo: {bar: &quot;a&quot;, bof: &quot;b&quot;}, hello: &quot;world&quot;}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유사도서관 (more live) : https://github.com/marioizquierdo/jquery.serializeJSON&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유사 라이브러리(&lt;strong papago-id=&quot;72-1&quot;&gt;very alive&lt;/strong&gt;): https://github.com/brainfoolong/form-data-json 마지막 라이브러리에서는 데이터를 단순히 직렬화하는 것에 그치지 않고, 그 반대 versa: 폼 필드의 값을 설정합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/11661187/form-serialize-javascript-no-framework&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>JavaScript</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1630</guid>
      <comments>https://copyscript.tistory.com/1630#entry1630comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:21:51 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 오류 1436:스레드 스택 오버런(간단한 쿼리 포함</title>
      <link>https://copyscript.tistory.com/1629</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 오류 1436:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스레드 스택 오버런(간단한 쿼리 포함&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 테이블에 대해 매우 간단한 업데이트를 수행하고 있는데, 이것은 또한 정말 간단한 트리거를 트리거하고, 그것은 저에게 오류를 줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#1436 - Thread stack overrun:  6136 bytes used of a 131072 byte stack, and 128000 bytes needed.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행하는 쿼리:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UPDATE field_values SET value = 'asaf' WHERE field_values.id =1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값 필드는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;text&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 이론적으로는 조용해질 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 상황에서는 그렇지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p 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;DELIMITER $$
    CREATE TRIGGER field_value_update_trigger BEFORE UPDATE ON community_fields_values
    FOR EACH ROW BEGIN
      INSERT INTO user_field_log (user_id, field_id, value) VALUES (NEW.user_id, NEW.field_id, NEW.value);
    END;
$$
DELIMITER ;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류가 표시되는 이유는 무엇입니까?&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;무거운 질문이 관련된 것은 아닙니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 데이터베이스가 거의 비어있고, 단지 2개의 행에 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;community_fields_values&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;user_field_log&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;MySQL 버전: 5.1.44&lt;/font&gt;&lt;/p&gt;&lt;h1 papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1436 - 스레드 스택 오버런: 131072 바이트 스택에 사용되는 6136 바이트, 그리고 128,000 바이트가 필요합니다.&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 1436은 ER_에 해당합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql 5.1 코드의 STACK_OVERRUN_NEED_MORE:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;malff@linux-8edv:include&amp;gt; pwd
/home/malff/BZR_TREE/mysql-5.1/include
malff@linux-8edv:include&amp;gt; grep 1436 mysqld_error.h
#define ER_STACK_OVERRUN_NEED_MORE 1436
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 표시된 코드 인쇄는 sql/sql_parse.cc, 함수 check_stack_overrun():&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bool check_stack_overrun(THD *thd, long margin,
                         uchar *buf __attribute__((unused)))
{
  long stack_used;
  DBUG_ASSERT(thd == current_thd);
  if ((stack_used=used_stack(thd-&amp;gt;thread_stack,(char*) &amp;amp;stack_used)) &amp;gt;=
      (long) (my_thread_stack_size - margin))
  {
    char ebuff[MYSQL_ERRMSG_SIZE];
    my_snprintf(ebuff, sizeof(ebuff), ER(ER_STACK_OVERRUN_NEED_MORE),
                stack_used, my_thread_stack_size, margin);
    my_message(ER_STACK_OVERRUN_NEED_MORE, ebuff, MYF(ME_FATALERROR));
&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;표시된 값에서 마진은 128000이고 my_thread_stack_size는 131072입니다.&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;128,000바이트를 예약하려는 check_stack_overrun() 호출은 다음에서 온 것뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bool
sp_head::execute(THD *thd)
{
  /* Use some extra margin for possible SP recursion and functions */
  if (check_stack_overrun(thd, 8 * STACK_MIN_SIZE, (uchar*)&amp;amp;old_packet))
    DBUG_RETURN(TRUE);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;STACK_MIN_SIZE의 값은 16000입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;malff@linux-8edv:sql&amp;gt; pwd
/home/malff/BZR_TREE/mysql-5.1/sql
malff@linux-8edv:sql&amp;gt; grep STACK_MIN_SIZE *.h
mysql_priv.h:#define STACK_MIN_SIZE          16000   // Abort if less stack during eval.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금까지 서버에 대한 모든 것이 예상대로 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드는 sp_head:: execute로 구현된 트리거를 실행합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 런타임은 스택에 최소 128,000 바이트가 있는지 확인합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 검사가 실패하고(rightly so), 트리거 실행이 오류로 종료됩니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 트리거 실행에 필요한 스택의 양은 트리거 복잡도 자체나 관련 테이블의 내용/구조에 따라 달라지지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;20-1&quot;&gt;진짜&lt;/em&gt; 질문은 왜 thread_stack이 128K(131072)에 불과하다는 것입니다.&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;thread_stack'이라는 이름의 서버 변수는 C에서 sql/mysqld.cc 의 'my_thread_stack_size'로 구현됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  {&quot;thread_stack&quot;, OPT_THREAD_STACK,
   &quot;The stack size for each thread.&quot;, &amp;amp;my_thread_stack_size,
   &amp;amp;my_thread_stack_size, 0, GET_ULONG, REQUIRED_ARG,DEFAULT_THREAD_STACK,
   1024L*128L, ULONG_MAX, 0, 1024, 0},
&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;1024L*128L는 이 파라미터의 최소값입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본값은 DEFAULT_THREAD_STACK이며 include/my_pthread에 정의되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;h:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#ifndef DEFAULT_THREAD_STACK
#if SIZEOF_CHARP &amp;gt; 4
/*
  MySQL can survive with 32K, but some glibc libraries require &amp;gt; 128K stack
  To resolve hostnames. Also recursive stored procedures needs stack.
*/
#define DEFAULT_THREAD_STACK    (256*1024L)
#else
#define DEFAULT_THREAD_STACK    (192*1024)
#endif
#endif
&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;따라서 기본적으로 스택 크기는 192K(32비트) 또는 256K(64비트 아키텍처)여야 합니다.&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;먼저 mysqld 이진을 컴파일한 방법을 확인하여 기본값이 무엇인지 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;malff@linux-8edv:sql&amp;gt; pwd
/home/malff/BZR_TREE/mysql-5.1/sql
malff@linux-8edv:sql&amp;gt; ./mysqld --no-defaults --verbose --help | grep thread_stack
...
  --thread_stack=#    The stack size for each thread.
thread_stack                      262144
&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;제 시스템에서는 64비트 플랫폼에서 256K를 얻었습니다.&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;값이 서로 다른 경우 -DDEFACT_THREAD_STACK(또는 소스 수정)과 같이 다른 컴파일 옵션을 사용하여 서버를 구축할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그 경우에 이진법이 어디서 오는지 의문이 듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘째, 구성 파일 자체에 제공된 기본값을 my.cnf에서 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;값을 thread_stack으로 명시적으로 설정하면(낮은 값으로) 분명히 표시되는 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 서버 로그 파일에서 다음과 같은 오류가 있는지 확인합니다(sql/mysqld.cc 참조).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sql_print_warning(&quot;Asked for %lu thread stack, but got %ld&quot;,
                  my_thread_stack_size, (long) stack_size);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버 코드는 다음을 호출합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;pthread_attr_set 스택 크기를 ()(으)로 설정하여 스택 크기를 설정합니다.&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;pthread_attr_getstacksize ()는 스레드의 실제 스택 양을 확인하는 데 사용되며 pthread 라이브러리의 사용량이 적으면 로그에 불만을 제기합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단히 말하면 thread_stack이 서버와 함께 제공되는 기본값에 비해 너무 작기 때문에 오류가 발생합니다.&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;33&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;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;my.cnf 파일에서 기본값을 변경할 때&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;pthread 라이브러리 자체에서 무언가가 잘못되었다면(이론적으로 코드를 읽은 것으로 볼 때, 나는 그것을 직접 본 적이 없습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문에 대한 답을 얻기를 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안녕하세요 -- 마크 앨프&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트(2014-03-11), &quot;고치는 방법&quot;을 보다 명확하게 할 수 있습니다.&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;아마 sread_stack 파일의 기본값이 my.cnf 파일에서 변경되었을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 이를 수정하는 방법은 사소한 것입니다. my.cnf 파일에서 thread_stack이 설정된 위치를 찾아 설정을 제거하거나(서버 코드를 신뢰하여 괜찮은 기본값을 제공하므로 다음 번에는 이런 일이 발생하지 않음) 스택 크기를 늘립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트(2021-04-28), thread_stack의 출처 확인:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용표&lt;/font&gt;&lt;/font&gt;&lt;code&gt;performance_schema.variables_info&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 변수가 어디서 왔는지를 찾는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; select * from variables_info where VARIABLE_NAME = 'thread_stack';
+---------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+
| VARIABLE_NAME | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE            | SET_TIME | SET_USER | SET_HOST |
+---------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+
| thread_stack  | COMPILED        |               | 131072    | 18446744073709550592 | NULL     | NULL     | NULL     |
+---------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+
1 row in set (0.01 sec)
&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;여기서 기본값은 공장도 값(mysqld 이진법으로 컴파일됨)입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; select * from variables_info where VARIABLE_NAME = 'thread_stack';
+---------------+-----------------+----------------------------------------------------------------+-----------+----------------------+----------+----------+----------+
| VARIABLE_NAME | VARIABLE_SOURCE | VARIABLE_PATH                                                  | MIN_VALUE | MAX_VALUE            | SET_TIME | SET_USER | SET_HOST |
+---------------+-----------------+----------------------------------------------------------------+-----------+----------------------+----------+----------+----------+
| thread_stack  | EXPLICIT        | /home/malff/CODE/GIT/GIT_TRUNK/build-dbg/mysql-test/var/my.cnf | 131072    | 18446744073709550592 | NULL     | NULL     | NULL     |
+---------------+-----------------+----------------------------------------------------------------+-----------+----------------------+----------+----------+----------+
1 row in set (0.00 sec)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 thread_stack은 보고된 my.cnf 파일에 설정됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Refman:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/performance-schema-variables-info-table.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://dev.mysql.com/doc/refman/8.0/en/performance-schema-variables-info-table.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책은 아니지만 my.cnf에서 thread_stack size를 증가시켜 sread_stack size를 증가시키는 것이 빠른 해결책이 될 수 있습니다.&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;thread_stack = 256K&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;사용자 &quot;foo&quot;가 지적했듯이 실제 문제를 감지하려면 전체 트리거 코드를 게시하는 것이 더 도움이 될 수 있습니다.&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/8821575/mysql-error-1436-thread-stack-overrun-with-simple-query&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>MySQL</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1629</guid>
      <comments>https://copyscript.tistory.com/1629#entry1629comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:21:31 +0900</pubDate>
    </item>
    <item>
      <title>여러 클래스에 대해 백합 클래스가 추가됩니다.</title>
      <link>https://copyscript.tistory.com/1628</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 클래스에 대해 백합 클래스가 추가됩니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조건을 이용해서 여러 개의 클래스를 추가하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div th:classappend=&quot;x.isTrue ?'class1' &quot;  &amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 다음과 같은 것을 원합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div th:classappend=&quot;x.isTrue ?'class1' and &quot;y.isTrue ?'class2'&quot;  &amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#literal-substitutions&quot; papago-id=&quot;3-1&quot; rel=&quot;noreferrer&quot;&gt;문자&lt;/a&gt; 그대로의 &lt;a href=&quot;http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#literal-substitutions&quot; papago-id=&quot;3-1&quot; rel=&quot;noreferrer&quot;&gt;대체&lt;/a&gt; 기능을 사용하여 다음을 달성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div th:classappend=&quot;|${x.isTrue ? 'class1' : ''} ${y.isTrue ? 'class2' : ''}|&quot;&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 방법은 조건을 괄호로 간단히 감싸고 연결하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div th:classappend=&quot;${(x.isTrue ? 'class1' : '') + (y.isTrue ? ' class2' : '')}&quot;&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 솔루션을 사용해 보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제게 아주 잘 들어맞습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;span class=&quot;oi&quot; th:classappend=&quot;${(h.tipo.label =='Sim/Não' ? 'oi-signpost': '') + 
                                (h.tipo.label =='Quantidade' ? 'oi-target': '')+
                                 (h.tipo.label =='Evitar' ? 'oi-shield': '')}&quot;
                                 title=&quot;Visualizar&quot;
                                    aria-hidden=&quot;true&quot;&amp;gt;&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/41480973/thymeleaf-classappend-for-multiple-classes&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>Spring-Boot</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1628</guid>
      <comments>https://copyscript.tistory.com/1628#entry1628comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:21:23 +0900</pubDate>
    </item>
    <item>
      <title>스프링 배치를 사용한 두 개의 다른 기계의 파일 처리</title>
      <link>https://copyscript.tistory.com/1627</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스프링 배치를 사용한 두 개의 다른 기계의 파일 처리&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 파일 처리 시나리오는,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; read input file -&amp;gt; process -&amp;gt; generated output file
&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;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/5kuTy.jpg&quot; alt=&quot;enter image description here&quot;&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;spring batch를 사용하여 이 두 어플리케이션 서버에서 입력 파일을 병렬로 처리할 수 있는 방법은 무엇입니까? 서버1(P1)에 5, 서버2(P2)에 5 파일이 10개 있다면 할 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 파일당 작업을 예약할 수 있습니다(입력 파일 위치가 작업의 매개 변수가 됨).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring Batch는 동일한 작업 매개 변수를 가진 두 개의 작업 인스턴스가 생성되지 않도록 보장합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 당신을 받을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JobExecutionAlreadyRunningException&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;JobInstanceAlreadyCompleteException&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 노드가 이미 동일한 파일을 처리하기 시작한 경우.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 파일을 실제로 절반(5개와 5개)으로 분할할지, 아니면 완료될 때까지 각 서버를 처리할지를 결정하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일의 크기가 다양하고 크기가 작은 파일이 있고 크기가 큰 파일이 있는 경우, 크기가 다르기 때문에 한 서버에서 6개, 다른 서버에서 4개의 파일을 처리하는 최적의 병렬화를 수행하거나, 크기가 다르기 때문에 3개의 파일을 처리하는 데 걸리는 시간이 7과 3개인 경우에는 7과 3개의 파일을 처리하는 최적의 병렬화를 수행할 수 있습니다.&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;작업은 디렉토리를 읽고 첫 번째 파일 이름을 잡은 다음 해당 JVM에서 처리 중인 테이블에 삽입할 수 있습니다.&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;이렇게 하면 각자가 기본적으로 (db 테이블에) 중앙 집중식 잠금을 설정하게 되고, 파일 배포를 균등하게 하는 것보다 파일 크기를 고려하는 보다 효율적인 처리를 할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 제안은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 경로를 기본 키로 하여 db에 잠금 테이블을 만듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 이 키를 사용하여 레코드를 삽입합니다. 성공한 경우 코드가 계속되고 실패한 경우(예외로 이 기본 키를 사용한 레코드가 존재함) 파일을 처리한 다음 다음 파일로 이동합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앞서 지미가 언급한 것처럼 정확한 스케쥴링&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대기열(예: ActiveMQ, RabittMQ, ...)을 사용하여 시스템을 동기화할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아주 간단한 방법이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 내가 맞는다면 당신은 모든 파일을 데이터베이스에 넣고(그것에 대한 정보의 일부) 제거해서 새로운 출력을 만듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 읽기 전에 잠금()을 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  for(File file : fileList.getFiles())
    try{
      (getting file + process it)
       }
&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;     file.lock();
     try {
         ...
     } finally {
         file.unlock();
     }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/Lock.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;15-1&quot;&gt;여기&lt;/a&gt; Lock에 대한 몇 가지 정보가 있습니다.&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/16337868/file-processing-on-two-different-machine-using-spring-batch&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>oracle</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1627</guid>
      <comments>https://copyscript.tistory.com/1627#entry1627comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:21:17 +0900</pubDate>
    </item>
    <item>
      <title>$parser.unshift ?이것은 어떻게 됩니까?</title>
      <link>https://copyscript.tistory.com/1626</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$parser.unshift ?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 어떻게 됩니까?&lt;/font&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt; link: function(scope, elm, attrs, ctrl) {
        ctrl.$parsers.unshift(function(viewValue) {

            scope.pwdValidLength = (viewValue &amp;amp;&amp;amp; viewValue.length &amp;gt;= 8 ? 'valid' : undefined);
            scope.pwdHasLetter = (viewValue &amp;amp;&amp;amp; /[A-z]/.test(viewValue)) ? 'valid' : undefined;
            scope.pwdHasNumber = (viewValue &amp;amp;&amp;amp; /\d/.test(viewValue)) ? 'valid' : undefined;

            if(scope.pwdValidLength &amp;amp;&amp;amp; scope.pwdHasLetter &amp;amp;&amp;amp; scope.pwdHasNumber) {
                ctrl.$setValidity('pwd', true);
                return viewValue;
            } else {
                ctrl.$setValidity('pwd', false);                    
                return undefined;
            }

        });
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/adamdbradley/Qdk5M/&quot; papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://jsfiddle.net/adamdbradley/Qdk5M/&lt;/font&gt;&lt;/a&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;위의 fiddle에서 비밀번호 유효성 검사는 어떻게 이루어집니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;$parser.unshift는 무엇을 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 test(viewValue)의 용도는 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;AngularJs 메인 사이트를 참조해 보았으나 아무것도 이해할 수 없었습니다...&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;저는 angularJS가 처음입니다.&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;http://docs.angularjs.org/guide/forms&quot; papago-id=&quot;4-1&quot;&gt;양식&lt;/a&gt;에 &lt;a href=&quot;http://docs.angularjs.org/api/ng.directive%3angModel.NgModelController#%24parsers&quot; papago-id=&quot;4-3&quot;&gt;있는 페이지와 &lt;/a&gt;$paraser에 있는 페이지가 바로 여러분이 찾고 있는 페이지입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;link: function(scope, elm, attrs, ctrl) {
    /**
     * This function is added to the list of the $parsers.
     * It will be executed the DOM (the view value) change.
     * Array.unshift() put it in the beginning of the list, so
     * it will be executed before all the other
     */
    ctrl.$parsers.unshift(function(viewValue) {

        scope.pwdValidLength = (viewValue &amp;amp;&amp;amp; viewValue.length &amp;gt;= 8 ? 'valid' : undefined); // Check the length of the string
        scope.pwdHasLetter = (viewValue &amp;amp;&amp;amp; /[A-z]/.test(viewValue)) ? 'valid' : undefined; // Check if the string contains letter. RegExp.test() simply returns a boolean if the string matches the regex.
        scope.pwdHasNumber = (viewValue &amp;amp;&amp;amp; /\d/.test(viewValue)) ? 'valid' : undefined; // Check if the string contains digit. Same remark.

        if(scope.pwdValidLength &amp;amp;&amp;amp; scope.pwdHasLetter &amp;amp;&amp;amp; scope.pwdHasNumber) { // If all is good, then…
            ctrl.$setValidity('pwd', true); // Tell the controlller that the value is valid
            return viewValue; // Return this value (it will be put into the model)
        } else { // … otherwise…
            ctrl.$setValidity('pwd', false); // Tell the controlller that the value is invalid
            return undefined; // When the value is invalid, we should return `undefined`, as asked by the documentation
        }

    });
}
&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;@Pawan Kalyan - Blackhole은 그것을 아주 멋지게 설명했습니다 (그의 대답에 찬성표를 던졌습니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 이 유용한 블로그도 읽어보셔야 할 것 같습니다:-&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://java.dzone.com/articles/parsers-and-formatters-custom&quot; papago-id=&quot;1-0&quot; rel=&quot;noreferrer&quot;&gt;Angular JS의 사용자&lt;/a&gt; 정의 &lt;a href=&quot;http://java.dzone.com/articles/parsers-and-formatters-custom&quot; papago-id=&quot;1-0&quot; rel=&quot;noreferrer&quot;&gt;검증 지침에서 $pars&lt;/a&gt; 및 &lt;a href=&quot;http://java.dzone.com/articles/parsers-and-formatters-custom&quot; papago-id=&quot;1-0&quot; rel=&quot;noreferrer&quot;&gt;$formaters&lt;/a&gt; -&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://java.dzone.com/articles/parsers-and-formatters-custom&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://java.dzone.com/articles/parsers-and-formatters-custom&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해피코딩 :)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/19091685/parser-unshifthow-does-this-work&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>angularjs</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1626</guid>
      <comments>https://copyscript.tistory.com/1626#entry1626comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:21:10 +0900</pubDate>
    </item>
    <item>
      <title>dbms_sql.open_cursor에서 ORA-29471을 해결하는 방법은?</title>
      <link>https://copyscript.tistory.com/1625</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;dbms_sql.open_cursor에서 ORA-29471을 해결하는 방법은?&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;저는 오라클 11.2.0.1.0을 사용하고 있고 dbms_sql 패키지를 작동시키려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 아래와 같이 ORA-29471 오류가 계속 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DECLARE
  c INTEGER;
BEGIN
  c := dbms_sql.open_cursor();
END;

ORA-29471: DBMS_SQL access denied
ORA-06512: at &quot;SYS.DBMS_SQL&quot;, line 1017
ORA-06512: at line 4
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오라클 &lt;a href=&quot;http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sql.htm#i1027587&quot; papago-id=&quot;2-1&quot;&gt;문서&lt;/a&gt;에서는 이에 대해 다음과 같이 말합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바인딩 및 실행 시 체크가 이루어집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택적으로 DBMS_SQL 서브프로그램 호출마다 검사를 수행할 수 있습니다.&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;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;current_user는 가장 최근 구문 분석을 호출할 때와 하위 프로그램을 호출할 때 동일합니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;li papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하위 프로그램을 호출할 때 사용할 수 있는 역할은 가장 최근 구문 분석을 호출할 때 사용할 수 있는 역할의 상위 집합이어야 합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정의자 권한 하위 프로그램의 사용과 일관되게 역할이 적용되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 가지 검사 중 하나라도 실패하면 ORA-29470 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 알기로는 두 조건 모두 제 코드에는 적용되지 않습니다. 왜냐하면 코드가 스키마를 넘지 않기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle &lt;a href=&quot;https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=245680528703537&amp;amp;id=556301.1&amp;amp;_afrWindowMode=0&amp;amp;_adf.ctrl-state=gh5mnitqd_107&quot; papago-id=&quot;8-1&quot;&gt;지원&lt;/a&gt;(로그인 필요) 웹 사이트에서 security_level 매개 변수를 dbms_sql.open_cursor에 명시적으로 추가할 것을 제안합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;값(0/1/2)을 추가해도 문제가 해결되지 않습니다.&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;dbms_sql.open_cursor&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 여기서 보안 수준이 처음 정의됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 지원 웹 사이트에서는 다음과 같은 설정과 관련된 해결 방법을 제안합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;alter system set &quot;_dbms_sql_security_level&quot; = 384 scope=spfile;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아직 안 해봤어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;보안 계층을 비활성화해야 하고 지원되지 않는 오라클 기능이기 때문에 마지막 수단으로 생각하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;생산에 사용하기에 이상적인 상황은 거의 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한, 문제를 전혀 해결하지 못하고 감추기만 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류를 해결하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드가 다음 코드를 생성하는 유일한 이유(지금은 다른 코드를 볼 수 없음)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ORA-29471&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;dbms_sql&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잘못된 커서 ID를 제공하여 세션에서 작동할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/* dbsm_sql detects invalid cursor ID in this session  */ 
SQL&amp;gt; declare
  2    c_1 number := 5;  -- invalid cursor ID. There is no cursor 
  3    l_res boolean;    -- opened with ID = 5     
  4  begin
  5    l_res := dbms_sql.is_open(c_1);
  6  end;
  7  /
declare
*
ERROR at line 1:
ORA-29471: DBMS_SQL access denied 
ORA-06512: at &quot;SYS.DBMS_SQL&quot;, line 1104 
ORA-06512: at line 5 


/* An attempt to execute this simple anonymous PL/SQL block after 
   an invalid cursor ID has already been detected by the dbms_sql 
   in the current session will lead to ORA-29471 error  
*/

SQL&amp;gt; declare
  2    c_2 number;
  3  begin
  4    c_2 := dbms_sql.open_cursor();
  5  end;
  6  /
declare
*
ERROR at line 1:
ORA-29471: DBMS_SQL access denied 
ORA-06512: at &quot;SYS.DBMS_SQL&quot;, line 1084 
ORA-06512: at line 4 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;17-1&quot;&gt;새로 설정된 세션&lt;/strong&gt;에서 해당 코드를 실행해 보십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한가지 해결책이 될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;v$Session&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커서가 목록에 존재할 경우, 커서를 계속 사용할 수 있음을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음에 그것에서 식별합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sql_id&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 class=&quot;papago-parent&quot;&gt;여기서 목록을 생성합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  select  sql_id, sql_text, count(*) as &quot;OPEN CURSORS&quot;, user_name 
   from v$open_cursor
  where user_name &amp;lt;&amp;gt;'SYS' 
group by sql_text, user_name 
order by count(*) desc;
&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;a href=&quot;https://stackoverflow.com/questions/1010898/how-to-find-current-open-cursors-in-oracle&quot; papago-id=&quot;22-1&quot;&gt;여기&lt;/a&gt; 더.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/20690303/how-to-solve-ora-29471-on-dbms-sql-open-cursor&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>oracle</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1625</guid>
      <comments>https://copyscript.tistory.com/1625#entry1625comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:21:03 +0900</pubDate>
    </item>
    <item>
      <title>선택란에 텍스트를 가운데로 넣을 수 있습니까?</title>
      <link>https://copyscript.tistory.com/1624</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;나는 이것을 시도했습니다: http://jsfiddle.net/ilyaD/KGcC3/&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;select name=&quot;state&quot; class=&quot;ddList&quot;&amp;gt;
    &amp;lt;option value=&quot;&quot;&amp;gt;(please select a state)&amp;lt;/option&amp;gt;
    &amp;lt;option class=&quot;lt&quot; value=&quot;--&quot;&amp;gt;none&amp;lt;/option&amp;gt;
    &amp;lt;option class=&quot;lt&quot; value=&quot;AL&quot;&amp;gt;Alabama&amp;lt;/option&amp;gt;
    &amp;lt;option class=&quot;lt&quot; value=&quot;AK&quot;&amp;gt;Alaska&amp;lt;/option&amp;gt;
    &amp;lt;option class=&quot;lt&quot; value=&quot;AZ&quot;&amp;gt;Arizona&amp;lt;/option&amp;gt;
    &amp;lt;option class=&quot;lt&quot; value=&quot;AR&quot;&amp;gt;Arkansas&amp;lt;/option&amp;gt;
    &amp;lt;option class=&quot;lt&quot; value=&quot;CA&quot;&amp;gt;California&amp;lt;/option&amp;gt;
    &amp;lt;option class=&quot;lt&quot; value=&quot;CO&quot;&amp;gt;Colorado&amp;lt;/option&amp;gt;
&amp;lt;/select&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;CSS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;select { width: 400px; text-align: center; }
select .lt { text-align: center; }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보시는 것처럼, 효과가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택 상자에 텍스트 중심을 맞추는 CSS 전용 방법이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;5-1&quot;&gt;Chrome&lt;/strong&gt;에 대한 부분적인 해결책이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select { width: 400px; text-align-last:center; }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택한 옵션의 중심은 맞추지만 드롭다운 내부의 옵션은 맞추지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그건 오른쪽 정렬용입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select{
    text-align-last:right;
    padding-right: 29px;
    direction: rtl;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 대한 브라우저 지원&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;text-align-last&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성은 여기에서 확인할 수 있습니다: https://www.w3schools.com/cssref/css3_pr_text-align-last.asp 사파리만 여전히 지원하지 않는 것 같습니다.&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;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;10-1&quot;&gt;text-align-last&lt;/strong&gt;를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;text-align-last: center;
&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;2020년, 사용 중:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select {
    text-align: center;
    text-align-last: center;
    -moz-text-align-last: center;
}
&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;CSS 규칙을 선택 클래스에 넣어야 합니다.&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;CSS 텍스트 독립 사용&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;예&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;select class=&quot;day&quot;&amp;gt; /* option 1 option 2 option 3 option 4 option 5 here */ &amp;lt;/select&amp;gt;
&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;CSS 코드&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select { text-indent: 5px; }
&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;이것은 일반 CSS로는 불가능하고, 완전히 크로스 브라우저 호환도 불가능할 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 jQuery 플러그인을 사용하여 드롭다운 스타일을 지정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.filamentgroup.com/lab/jquery-ui-selectmenu-an-aria-accessible-plugin-for-styling-a-html-select.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://www.filamentgroup.com/lab/jquery-ui-selectmenu-an-aria-accessible-plugin-for-styling-a-html-select.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 플러그인은 다음을 숨깁니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;select&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;span&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 정의 드롭다운 목록 스타일을 표시하기 위해 요소 등을 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select {

text-align-last: center;
padding-right: 29px;

}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;false&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;select {
  text-align: center;
  text-align-last: center;
}
option {
  text-align: left;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;select&amp;gt;
   &amp;lt;option value=&quot;&quot;&amp;gt;(please select a state)&amp;lt;/option&amp;gt;
   &amp;lt;option class=&quot;lt&quot; value=&quot;--&quot;&amp;gt;none&amp;lt;/option&amp;gt;
   &amp;lt;option class=&quot;lt&quot; value=&quot;AL&quot;&amp;gt;Alabama&amp;lt;/option&amp;gt;
   &amp;lt;option class=&quot;lt&quot; value=&quot;AK&quot;&amp;gt;Alaska&amp;lt;/option&amp;gt;
   &amp;lt;option class=&quot;lt&quot; value=&quot;AZ&quot;&amp;gt;Arizona&amp;lt;/option&amp;gt;
   &amp;lt;option class=&quot;lt&quot; value=&quot;AR&quot;&amp;gt;Arkansas&amp;lt;/option&amp;gt;
   &amp;lt;option class=&quot;lt&quot; value=&quot;CA&quot;&amp;gt;California&amp;lt;/option&amp;gt;
   &amp;lt;option class=&quot;lt&quot; value=&quot;CO&quot;&amp;gt;Colorado&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&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;function getTextWidth(txt) {
  var $elm = $('&amp;lt;span class=&quot;tempforSize&quot;&amp;gt;'+txt+'&amp;lt;/span&amp;gt;').prependTo(&quot;body&quot;);
  var elmWidth = $elm.width();
  $elm.remove();
  return elmWidth;
}
function centerSelect($elm) {
    var optionWidth = getTextWidth($elm.children(&quot;:selected&quot;).html())
    var emptySpace =   $elm.width()- optionWidth;
    $elm.css(&quot;text-indent&quot;, (emptySpace/2) - 10);// -10 for some browers to remove the right toggle control width
}
// on start 
$('.centerSelect').each(function(){
  centerSelect($(this));
});
// on change
$('.centerSelect').on('change', function(){
  centerSelect($(this));
});
&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;풀 코드펜 여기: http://codepen.io/anon/pen/NxyovL&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 항상 CSS로만 작동시키기 위해 아래의 해킹을 피해왔습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;padding-left: 45%;
font-size: 50px;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패딩은 텍스트 중앙에 위치하며 텍스트 크기에 맞게 조정 가능합니다 :)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 분명히 검증 관점에서 100% 정확한 것은 아닙니다. 제 생각에 하지만 그것은 효과가 있습니다. :)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;28-0&quot;&gt;텍스트 길이가 비슷한 옵션을 가진 목록이 있는&lt;/strong&gt; 경우 &lt;strong papago-id=&quot;28-0&quot;&gt;대체&lt;/strong&gt; &quot;&lt;strong papago-id=&quot;28-0&quot;&gt;가짜&quot; 솔루션:&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;padding-left: calc(50% - 1em);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 Chrome, Firefox, Edge에서 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 방법은 텍스트를 왼쪽에서 가운데로 밀어낸 다음 px, em 또는 옵션 텍스트의 길이 절반을 빼는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DfzCo.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DfzCo.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;베스트 솔루션 IMO(2017년)는 여전히 JS를 통해 선택을 대체하고 있으며, 크로스 브라우저 지원을 위해 div 등으로 자신만의 가짜 선택 상자를 만들고 클릭 이벤트를 바인딩합니다.&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select {
    padding-left: 50% !important;
    width: 100%;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중심 맞추기는 아니지만 위의 예를 사용하면 선택 상자에서 왼쪽 여백을 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;.UName { text-indent: 5px; }&amp;lt;/style&amp;gt;&amp;lt;br&amp;gt;

&amp;lt;select  name=&quot;UserName&quot; id=&quot;UserName&quot; size=&quot;1&quot;&amp;gt;
    &amp;lt;option class=&quot;UName&quot; selected value=&quot;select&quot;&amp;gt;Select User&amp;lt;/option&amp;gt;
    &amp;lt;option class=&quot;UName&quot; value=&quot;User1&quot;&amp;gt;User 1 Name&amp;lt;/option&amp;gt;
    &amp;lt;option class=&quot;UName&quot; value=&quot;User2&quot;&amp;gt;User 2 Name &amp;lt;/option&amp;gt;
    &amp;lt;option class=&quot;UName&quot; value=&quot;User3&quot;&amp;gt;User 3 Name&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;text-align: center;
text-align-last: center;
&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;&amp;lt;select&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 class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;option&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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;많이. (크로스 브라우저) 유일한 방법은 div와 css/js로 드롭다운을 수동으로 만들어 유사한 것을 만드는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책을 찾지 못한 경우 angularjs에서 이 트릭을 사용하거나 js를 사용하여 선택한 값을 div의 텍스트와 매핑할 수 있습니다. 이 솔루션은 angular에 대해 전체 cs를 준수하지만 select와 div 사이의 매핑이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var myApp = angular.module('myApp', []);

myApp.controller('selectCtrl', ['$scope',
  function($scope) {
    $scope.value = '';


  }
]);&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.ghostSelect {
  opacity: 0.1;
  /* Should be 0 to avoid the select visibility but not visibility:hidden*/
  display: block;
  width: 200px;
  position: absolute;
}
.select {
  border: 1px solid black;
  height: 20px;
  width: 200px;
  text-align: center;
  border-radius: 5px;
  display: block;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;!doctype html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;

&amp;lt;head&amp;gt;
  &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
  &amp;lt;title&amp;gt;Example - example-guide-concepts-1-production&amp;lt;/title&amp;gt;
  &amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body ng-app=&quot;myApp&quot;&amp;gt;
  &amp;lt;div ng-app ng-controller=&quot;selectCtrl&quot;&amp;gt;
    &amp;lt;div class=select&amp;gt;
      &amp;lt;select ng-model=&quot;value&quot; class=&quot;ghostSelect&quot;&amp;gt;
        &amp;lt;option value=&quot;Option 1&quot;&amp;gt;Option 1&amp;lt;/option&amp;gt;
        &amp;lt;option value=&quot;Option 2&quot;&amp;gt;Option 2&amp;lt;/option&amp;gt;
        &amp;lt;option value=&quot;Option 3&quot;&amp;gt;Option 3&amp;lt;/option&amp;gt;
      &amp;lt;/select&amp;gt;
      &amp;lt;div&amp;gt;{{value}}
      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전화 공백에서 이 해결책을 찾는 데 하루가 걸렸기 때문에 누군가에게 유용할 수 있기를 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션 텍스트의 중심을 선택 항목 내에 둘 수는 없지만, 선택 항목 상단에 동일한 효과로 절대적으로 위치한 눈금을 배치할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#centered
{
  position: absolute;
  top: 10px;
  left: 10px;
  width: 818px;
  height: 37px;
  text-align: center;
  font: bold 24pt calibri;
  background-color: white;
  z-index: 100;
}

#selectToCenter
{
  position: absolute;
  top: 10px;
  left: 10px;
  width: 840px;
  height: 40px;
  font: bold 24pt calibri;
}

$('#selectToCenter').on('change', function () {
    $('#centered').text($(this).find('option:selected').text());
});

&amp;lt;select id=&quot;selectToCenter&quot;&amp;gt;&amp;lt;/select&amp;gt;
&amp;lt;div id=&quot;centered&quot;&amp;gt;&amp;lt;/div&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;div와 select가 모두 문서에서 고정된 위치에 있는지 확인합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;41-1&quot;&gt;선택&lt;/strong&gt;한 너비:&lt;strong papago-id=&quot;41-1&quot;&gt; 자동&lt;/strong&gt; 및 패딩 없음을 사용하여 텍스트 길이를 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 제 선택에 100% 사용 가능한 너비를 사용하고 있고 모든 옵션의 길이가 동일합니다. 이를 통해 매우 간단한 CSS를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;42-0&quot;&gt;text-indent&lt;/strong&gt;는 padding-left와 유사하게 텍스트를 왼쪽에서 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;43-0&quot;&gt;120px&lt;/strong&gt;는 제 &lt;strong papago-id=&quot;43-0&quot;&gt;텍스트 길이&lt;/strong&gt;입니다 - 중심을 잡고 싶어서 그 크기의 절반과 선택한 크기의 절반을 가져가시고 50% - 60px로 남겨주세요&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select{
  width: 100%;
  text-indent: calc(50% - 60px);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;44&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;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가능한 일이지만, 해결책이 그리 좋지는 않을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션 간의 차이가 5자가 아닌 경우 이전 솔루션을 사용하면 중앙 집중화에 가까워질 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래도 중심을 좀 더 정확하게 잡아야 한다면 이렇게 할 수 있습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;48&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;.realWidth{
   width: auto;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소 선택에 수신기 변경 시 적용&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 청취자는 선택&lt;strong papago-id=&quot;50-1&quot;&gt; 요소&lt;/strong&gt;에 .realWidth를 &lt;strong papago-id=&quot;50-1&quot;&gt;적용&lt;/strong&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const selectRef = document.getElementById(&quot;yourId&quot;);
selectRef.classList.add(&quot;realWidth&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션의 실제 너비에 액세스할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const widthOfSelect = selectRef.getBoundingClientRect().width / 2;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;widthOfSelect는 원하는 너비입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전역/성분 변수에 저장합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 너비를 제거합니다. 더 이상 필요 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;selectRef.classList.remove(&quot;realWidth&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;54-0&quot;&gt;리액트를 사용하고 있는데&lt;/strong&gt; &lt;strong papago-id=&quot;54-2&quot;&gt;바닐라에 효과가 있을지 &lt;/strong&gt;잘 &lt;strong papago-id=&quot;54-2&quot;&gt;모르겠습니다&lt;/strong&gt;. 그렇지 않다면 다른 해결책을 찾아야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;select style={`textIndent: calc(50% - ${widthOfSelect}) %`}&amp;gt; ... &amp;lt;/select&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 나쁜 해결책은 js로 CSS 클래스를 만들어서 머리에 쓰는 것일 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PROS:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마 효과가 있을 겁니다. 동적 솔루션을 사용해 본 적은 없지만 효과가 있을 겁니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반대:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그램 속도가 너무 빠르지 않으면 사용자는 너비를 볼 수 있습니다. 자동 실행이 발생하여 무슨 일이 일어나고 있는지 궁금합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;중복 선택만 생성하는 경우 z 인덱스가 높은 항목 뒤에 숨기고 원본에서 숨겨진 중복에 on select listener를 적용합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바닐라 제한으로 인해 스타일을 인라인으로 수행할 수 없는 경우 사용이 어려울 수 있지만 스크립트를 만들어 Child를 머리에 최적화할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고객이 이를 주장하는 이 문제에 부딪혔고, 그들은 맥과 아이폰을 사용하고 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;62&quot; papago-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;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 쉬운 방법:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;패딩-왼쪽 사용&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select{
   padding-left:2rem
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 비슷한 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 해결책은 스타일 섹션에서 고정된 크기의 글꼴로 변경하는 것이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;option {
  font-family: Courier New;
  width: 12ch;
  font-size: 14pt
}

select {
  font-family: Courier New;
  width: 14ch;
  font-size: 14pt
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;본문에서는 표시된 옵션에 밑줄을 붙여 길이를 같게 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중앙 디스플레이 양쪽에 밑줄을 사용한 것을 참고합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;select onchange='O.src=this.options[this.selectedIndex].value' align=&quot;center&quot;&amp;gt;
  &amp;lt;option value=&quot;&quot; align=&quot;center&quot;&amp;gt;___(none)___&amp;lt;/option&amp;gt;
  &amp;lt;option value=&quot;https://www.247backgammon.org/&quot; align=&quot;center&quot;&amp;gt;_Backgammon_&amp;lt;/option&amp;gt;
  &amp;lt;option value=&quot;https://www.247klondike.com/klondikeSolitaire3card.php&quot; align=&quot;center&quot;&amp;gt;__Klondike__&amp;lt;/option&amp;gt;
  &amp;lt;option value=&quot;https://www.247minesweeper.com/&quot; align=&quot;center&quot;&amp;gt;_Minesweeper&amp;lt;/option&amp;gt;
  &amp;lt;option value=&quot;https://sudoku.com/&quot; align=&quot;center&quot;&amp;gt;
    &amp;lt;p&amp;gt;___Soduku___&amp;lt;/p&amp;gt;
  &amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아직 100%는 아니지만 이 토막글을 사용할 수 있습니다!&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;text-align-last: center; // Chrome의 경우 text-align: center; // Firefox의 경우&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;지금은 Safari나 Edge에서 작동하지 않습니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션이 정적인 경우 선택 상자에서 변경 이벤트를 듣고 각 개별 항목에 대한 패딩을 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#id').change(function() {
    var select = $('#id');
    var val = $(this).val();

    switch(val) {
        case 'ValOne':
            select.css('padding-left', '30px');
            break;
        case 'ValTwoLonger':
            select.css('padding-left', '20px');
             break;
        default:
            return;
    }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/10813528/is-it-possible-to-center-text-in-select-box&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>CSS</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1624</guid>
      <comments>https://copyscript.tistory.com/1624#entry1624comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:20:56 +0900</pubDate>
    </item>
    <item>
      <title>캐치 문은 던져진 오류를 캐치하지 않습니다.</title>
      <link>https://copyscript.tistory.com/1623</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;캐치 문은 던져진 오류를 캐치하지 않습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 이유에서인지 이 코드는 나에게 발견되지 않은 예외 오류를 줍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;캐치블럭이 에러를 잡아내지 못하고 있는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;캡처 블록은 중첩 함수에 오류를 던질 수 없는 방식으로 범위를 지정한 다음 체인 위에서 범위를 더 높게 지정한 캡처 문에 의해 캡처될 것으로 예상합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 작업 중인 응용 프로그램 내의 중요한 데이터 중 일부가 제거되었지만 leadInfo[ 0 / 1]은(는) URL 매개 변수에서 꺼내는 32자 알파 숫자 문자열이 될 것으로 예상했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 근본적인 문제는 제 AJAX 호출이 API에서 오류를 반환하고 애플리케이션 내에서 해당 오류가 제대로 처리되지 않는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러므로 던지기 진술의 필요성.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;AJAX 호출은 정상적으로 완료되고, 이메일 주소가 속성으로 포함되지 않은 JSON 개체를 반환하므로 이를 반영하도록 페이지를 변경하는 방식으로 처리해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    jQuery(document).ready(function(){
        try {
            url = &quot;http://api.com/api/v1/lead/&quot; + leadInfo[1]

            jQuery.ajax({
                type: 'GET',
                contentType: 'application/json',
                url: url,
                dataType : 'jsonp',
                success: function (result) {

                    result = jQuery.parseJSON(result);

                    if(!result.data.email){
                        throw ('New exception');
                    }
                    console.log(result);
                    jQuery('.email').html(result.data.email);
                }
            });


            jQuery('.surveryButton').click(function(){
                window.location.replace(&quot;http://&quot; + pgInventory.host + pgInventory.path + leadInfo[0] + &quot;&amp;amp;curLeadId=&quot; + leadInfo[1] + &quot;&amp;amp;curViewedPages=0&quot;);
            });
        }
        catch(err) {
            jQuery('.email').html('your e-mail address');
            jQuery('#arrowContent').remove();
        }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 왜.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try catch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;블록이 실패하는 이유는 ajax 요청이 비동기적이기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Try catch block은 Ajax 호출 전에 실행되어 요청 자체를 전송하지만 결과가 반환될 때 오류가 발생합니다(AT LATER PITENT TIME).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언제.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try catch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;블록이 실행되고 오류가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 발생하면 오류가 발생하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try catch&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;try catch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ajax 요청의 경우 항상 ajax를 넣습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try catch&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;success&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;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 수행해야 할 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;success: function (result) {
    try {
      result = jQuery.parseJSON(result);

      if (!result.data.email) {
         throw ('New exception');
      }
      console.log(result);
      jQuery('.email').html(result.data.email);
    } catch (exception) {
      console.error(&quot;bla&quot;);
    };
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트에서 콜백 메소드의 비동기적인 특성으로 인해, 에러를 던지는 함수의 맥락이 원래와 다릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;success: function (result) {
  try {
    result = jQuery.parseJSON(result);
    if(!result.data.email){
      throw ('New exception');
    }
    console.log(result);
    jQuery('.email').html(result.data.email);
  }
  catch(err) {
    // Dealing with the error
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트의 (매우 구체적인) &lt;strong papago-id=&quot;13-3&quot;&gt;문맥&lt;/strong&gt;, &lt;strong papago-id=&quot;13-5&quot;&gt;폐쇄&lt;/strong&gt; &lt;strong papago-id=&quot;13-7&quot;&gt;및&lt;/strong&gt; 바인딩에 대한 이 훌륭한 &lt;a href=&quot;http://alistapart.com/article/getoutbindingsituations&quot; rel=&quot;noreferrer&quot; papago-id=&quot;13-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;8&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;/font&gt;&lt;code&gt;$.ajax&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;function, 그러나 성공 시 &lt;strong papago-id=&quot;15-1&quot;&gt;콜백&lt;/strong&gt; 함수에서(나중에 트리거됨).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 한번만 더.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;error: function(data) {}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 서버 응답 오류를 처리하기 위해 매개 변수를 지정하고, 더 나아가 콜백 기능 내부에 try/catch 블록을 배치해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콜백 밖에서 잡으려면 예외를 두지 말고 함수를 호출하는 것을 고려해야 합니다. 방법을 알 수 없기 때문입니다.&lt;/font&gt;&lt;/p&gt;&lt;p 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/16316815/catch-statement-does-not-catch-thrown-error&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>jquery</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1623</guid>
      <comments>https://copyscript.tistory.com/1623#entry1623comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:20:45 +0900</pubDate>
    </item>
    <item>
      <title>지시에 필요한 컨트롤러를 찾을 수 없음</title>
      <link>https://copyscript.tistory.com/1622</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지시에 필요한 컨트롤러를 찾을 수 없음&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 지시사항이 있어서 전화를 걸 수 있으면 좋겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이를 달성하기 위해 지시 컨트롤러를 사용하려고 노력해 왔습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지시 1은 지시 2와 같은 페이지에 위치하고 지시 1은 지시 2의 컨트롤러에 의해 노출된 방법을 호출합니다.&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;지침 1:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;'use strict';
angular.module('angularTestApp')
    .directive('fileLibrary', function () {
        return {
            templateUrl: 'views/manage/file_library/file-library.html',
            require: 'videoClipDetails',
            restrict: 'AE',
            link: function postLink(scope, element, attrs, videClipDetailsCtrl) {
                scope.doSomethingInVideoClipDirective = function() {
                    videClipDetailsCtrl.doSomething();
                }
            }
        };
    });
&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;지침 2:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;'use strict';
angular.module('angularTestApp')
    .directive('videoClipDetails', function () {
        return {
            templateUrl: 'views/video_clip/video-clip-details.html',
            restrict: 'AE',
            controller: function($scope, $element) {
                this.doSomething = function() {
                    console.log('I did something');
                }
            },
            link: function postLink(scope, element, attrs) {
                console.log('videoClipDetails directive');
                //start the element out as hidden
            }
        };
    });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 개가 형제자매로 사용되고 설정되는 파일:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div&amp;gt;
    &amp;lt;div video-clip-details&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;!-- main component for the file library --&amp;gt;
    &amp;lt;div file-library&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지시사항이 동일한 요소에 있을 때 컨트롤러를 공유할 수 있다는 문서를 읽은 것을 알고 있기 때문에 이 문제를 잘못 보고 있는 것이 아닌가 하는 생각이 듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 나를 올바른 길로 인도해 줄 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.angularjs.org/guide/directive&quot; papago-id=&quot;7-1&quot;&gt;지시사항에 대한&lt;/a&gt; angular.js &lt;a href=&quot;https://docs.angularjs.org/guide/directive&quot; papago-id=&quot;7-1&quot;&gt;문서에서&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령어가 다음을 사용할 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;require&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$compile&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;^&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;prefix는 이 지시문이 부모에서 컨트롤러를 검색한다는 것을 의미합니다(없는 경우).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;^&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;prefix, 명령어는 단지 자신의 요소에서 컨트롤러를 찾을 것입니다).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 기본적으로 형제자매가 직접 의사소통을 하도록 하는 것은 불가능합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이와 같은 문제에 부딪혔지만 의사소통을 위해 서비스를 이용하고 싶지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 생각해낸 것은 형제자매인 자녀간의 의사소통을 관리하기 위해 부모지시를 사용하는 방법이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/sgwatgit/angular-directives-communication&quot; papago-id=&quot;13-1&quot;&gt;github에 예문&lt;/a&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;require: '^parentDirective'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 및 자신의 컨트롤러가 링크 기능에 전달됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;거기서 각 자식은 일종의 API로서 부모 컨트롤러와 모든 공개 방법에 대한 참조를 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래는 아이들 중 한명입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;itemEditor&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function itemEditor() {
    var directive = {
        link: link,
        scope: {},
        controller: controller,
        controllerAs: 'vm',
        require: ['^itemManager', 'itemEditor'],
        templateUrl: 'app/scripts/itemManager/itemManager.directives.itemEditor.html',
        restrict: 'A'
    };

    return directive;

    function link(scope, element, attrs, controllers) {
        var itemManagerController = controllers[0];
        var itemEditorController = controllers[1];

        itemEditorController.itemManager = itemManagerController;

        itemEditorController.initialize();
    }

    function controller() {
        var vm = this;

        // Properties
        vm.itemManager = {};
        vm.item = { id: -1, name: &quot;&quot;, size: &quot;&quot; };

        // Methods
        vm.initialize = initialize;
        vm.updateItem = updateItem;
        vm.editItem = editItem;

        // Functions
        function initialize() {
            vm.itemManager.respondToEditsWith(vm.editItem);
        }

        function updateItem() {
            vm.itemManager.updateItem(vm.item);
            vm.item = {};
        }

        function editItem(item) {
            vm.item.id = item.id;
            vm.item.name = item.name;
            vm.item.size = item.size;
        }
    }
}
&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;require&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;array는 상위 지시어의 이름과 현재 지시어의 이름입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 둘 다 접근할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;link&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;controllers&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개 변수.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;부모 지시어의 컨트롤러를 현재 자식의 속성으로 할당한 다음 해당 속성을 통해 자식의 컨트롤러 기능 내에서 액세스할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 아동 보호 지침에 있는 방법을 주목하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;link&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;initialize&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능을 실행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이곳은 통신선의 일부가 설치되어 있는 곳입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 말은 기본적으로 당신(부모 지시)이 항목을 편집하라는 요청을 받을 때마다 내 이름의 이 방법을 사용하라는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;editItem&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;item&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;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 부모 지침이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function itemManager() {
    var directive = {
        link: link,
        controller: controller,
        controllerAs: 'vm',
        templateUrl: 'app/scripts/itemManager/itemManager.directives.itemManager.html',
        restrict: 'A'
    };

    return directive;

    function link(scope, element, attrs, controller) {

    }

    function controller() {
        var vm = this;

        vm.updateMethod = null;
        vm.editMethod = null;

        vm.updateItem = updateItem;
        vm.editItem = editItem;
        vm.respondToUpdatesWith = respondToUpdatesWith;
        vm.respondToEditsWith = respondToEditsWith;

        function updateItem(item) {
            vm.updateMethod(item);
        }

        function editItem(item) {
            vm.editMethod(item);
        }

        function respondToUpdatesWith(method) {
            vm.updateMethod = method;
        }

        function respondToEditsWith(method) {
            vm.editMethod = method;
        }
    }
}
&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 class=&quot;papago-parent&quot;&gt;여기 부모님에게서 볼 수 있는 것은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;respondToEditsWith&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메서드를 매개 변수로 사용하고 해당 값을 해당 매개 변수에 할당합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;editMethod&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소유물.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 속성은 컨트롤러가 실행될 때마다 호출됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;editItem&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;item&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오브젝트가 전달되므로 하위 지시어를 호출합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;editItem&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;데이터를 저장하는 것도 반대로 같은 방식으로 작동합니다.&lt;/font&gt;&lt;font 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;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;34-0&quot;&gt;업데이트&lt;/strong&gt;: 그나저나, 여기 &lt;strong papago-id=&quot;34-0&quot;&gt;coderwall.com&lt;/strong&gt; 의 &lt;a href=&quot;https://coderwall.com/p/14rwpg&quot; papago-id=&quot;34-2&quot;&gt;블로그 게시물&lt;/a&gt;이 있는데, 거기서 나는 좋은 예들과 함께 원래의 아이디어를 얻었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;require&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지시사항에 따라 컨트롤러 옵션을 선택할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇기는 하지만, 그 게시물의 마지막 예시에 대한 그의 추천 구문은 나에게 효과가 없었고, 그래서 내가 위에서 언급한 예시를 만든 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 하려는 방식으로 형제 요소 간에 의사소통을 할 필요가 있는 실제 방법은 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 지시어가 &lt;em papago-id=&quot;36-1&quot;&gt;동일한 요소&lt;/em&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;그러나 두 지시어 모두 사용할 관련 템플릿 URL을 가지고 있으며 요소당 하나만 가질 수 있으므로 이 작업을 수행할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;html을 약간 다르게 구성하여 이것이 작동할 수 있도록 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 하나의 지시어를 다른 지시어 안에 넣고 사용해야 합니다(배제).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;require: '^videoClipDetails'&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&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이것을 보여주기 위해 바이올린을 키웠습니다. http://jsfiddle.net/WwCvQ/1/&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 상위 항목을 작동시키는 코드입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// In videoClipDetails
template: '&amp;lt;div&amp;gt;clip details&amp;lt;div ng-transclude&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;',
transclude: 'true',
...
// in markup
&amp;lt;div video-clip-details&amp;gt; 
    &amp;lt;div file-library&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
// in fileLibrary
require: '^videoClipDetails',
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;궁금한게 있으면 알려주세요!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/21342698/controller-required-by-directive-cant-be-found&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>angularjs</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1622</guid>
      <comments>https://copyscript.tistory.com/1622#entry1622comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:20:37 +0900</pubDate>
    </item>
    <item>
      <title>요소에서 속성을 Xml 속성으로 직렬화</title>
      <link>https://copyscript.tistory.com/1621</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소에서 속성을 Xml 속성으로 직렬화&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 다음과 같은 수업을 듣습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[Serializable]
public class SomeModel
{
    [XmlElement(&quot;SomeStringElementName&quot;)]
    public string SomeString { get; set; }

    [XmlElement(&quot;SomeInfoElementName&quot;)]
    public int SomeInfo { get; set; }
}
&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;(일부 테스트 데이터로 채워질 경우) XmlSerializer를 사용하여 직렬화됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;serialize() 결과는 다음과 같은 XML이 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;SomeModel&amp;gt;
  &amp;lt;SomeStringElementName&amp;gt;testData&amp;lt;/SomeStringElementName&amp;gt;
  &amp;lt;SomeInfoElementName&amp;gt;5&amp;lt;/SomeInfoElementName&amp;gt;
&amp;lt;/SomeModel&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요한 건 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;SomeModel&amp;gt;
  &amp;lt;SomeStringElementName Value=&quot;testData&quot; /&amp;gt;
  &amp;lt;SomeInfoElementName Value=&quot;5&quot; /&amp;gt;
&amp;lt;/SomeModel&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;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;래퍼 클래스가 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class SomeIntInfo
{
    [XmlAttribute]
    public int Value { get; set; }
}

public class SomeStringInfo
{
    [XmlAttribute]
    public string Value { get; set; }
}

public class SomeModel
{
    [XmlElement(&quot;SomeStringElementName&quot;)]
    public SomeStringInfo SomeString { get; set; }

    [XmlElement(&quot;SomeInfoElementName&quot;)]
    public SomeIntInfo SomeInfo { get; set; }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 경우 보다 일반적인 접근 방식을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class SomeInfo&amp;lt;T&amp;gt;
{
    [XmlAttribute]
    public T Value { get; set; }
}

public class SomeModel
{
    [XmlElement(&quot;SomeStringElementName&quot;)]
    public SomeInfo&amp;lt;string&amp;gt; SomeString { get; set; }

    [XmlElement(&quot;SomeInfoElementName&quot;)]
    public SomeInfo&amp;lt;int&amp;gt; SomeInfo { get; set; }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음은:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class Program
{
    static void Main()
    {
        var model = new SomeModel
        {
            SomeString = new SomeInfo&amp;lt;string&amp;gt; { Value = &quot;testData&quot; },
            SomeInfo = new SomeInfo&amp;lt;int&amp;gt; { Value = 5 }
        };
        var serializer = new XmlSerializer(model.GetType());
        serializer.Serialize(Console.Out, model);
    }
}
&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;?xml version=&quot;1.0&quot; encoding=&quot;ibm850&quot;?&amp;gt;
&amp;lt;SomeModel xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot;&amp;gt;
  &amp;lt;SomeStringElementName Value=&quot;testData&quot; /&amp;gt;
  &amp;lt;SomeInfoElementName Value=&quot;5&quot; /&amp;gt;
&amp;lt;/SomeModel&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일종의, 사용하는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XmlAttribute&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;XmlElement&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 당신이 원하는 것처럼 보이진 않을 겁니다&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 나타납니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;SomeModel SomeStringElementName=&quot;testData&quot;&amp;gt; 
&amp;lt;/SomeModel&amp;gt; 
&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;내가 생각할 수 있는 유일한 방법은 클래스에 &quot;value&quot;라는 단일 게터가 포함된 SomeStringElementName 및 SomeInfoElementName이라는 개체를 가리키는 속성을 갖는 것뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 한 단계 더 나아가 DataContract Serializer를 사용하여 래퍼 클래스를 비공개로 전환할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;XmlSerializer가 개인 속성을 읽지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// TODO: make the class generic so that an int or string can be used.
[Serializable]  
public class SerializationClass
{
    public SerializationClass(string value)
    {
        this.Value = value;
    }

    [XmlAttribute(&quot;value&quot;)]
    public string Value { get; }
}


[Serializable]                     
public class SomeModel                     
{                     
    [XmlIgnore]                     
    public string SomeString { get; set; }                     

    [XmlIgnore]                      
    public int SomeInfo { get; set; }  

    [XmlElement]
    public SerializationClass SomeStringElementName
    {
        get { return new SerializationClass(this.SomeString); }
    }               
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/11330643/serialize-property-as-xml-attribute-in-element&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>xml</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1621</guid>
      <comments>https://copyscript.tistory.com/1621#entry1621comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:20:28 +0900</pubDate>
    </item>
    <item>
      <title>j테이블 행의 각 루프 쿼리</title>
      <link>https://copyscript.tistory.com/1620</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;j테이블 행의 각 루프 쿼리&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b papago-id=&quot;1-1&quot;&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/1891357/how-to-iterate-a-table-rows-with-jquery-and-access-some-cell-values&quot; dir=&quot;ltr&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JQuery를 사용하여 테이블 행을 반복하고 일부 셀 값에 액세스하는 방법&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(3개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;닫힘&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;4-1&quot; title=&quot;2020-01-3107:12:56Z&quot; papago-attr-id=&quot;1&quot;&gt;3년 전&lt;/span&gt;에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 다음과 같은 것을 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;table id=&quot;tblOne&quot;&amp;gt;
            &amp;lt;tbody&amp;gt;
                &amp;lt;tr&amp;gt;
                    &amp;lt;td&amp;gt;
                        &amp;lt;table id=&quot;tblTwo&quot;&amp;gt;
                            &amp;lt;tbody&amp;gt;
                                &amp;lt;tr&amp;gt;
                                    &amp;lt;td&amp;gt;
                                        Items
                                    &amp;lt;/td&amp;gt;
                                &amp;lt;/tr&amp;gt;
                                &amp;lt;tr&amp;gt;
                                    &amp;lt;td&amp;gt;
                                        Prod
                                    &amp;lt;/td&amp;gt;
                                &amp;lt;/tr&amp;gt;
                            &amp;lt;/tbody&amp;gt;
                        &amp;lt;/table&amp;gt;
                    &amp;lt;/td&amp;gt;
                &amp;lt;/tr&amp;gt;
                &amp;lt;tr&amp;gt;
                    &amp;lt;td&amp;gt;
                        Item 1
                    &amp;lt;/td&amp;gt;
                &amp;lt;/tr&amp;gt;
                &amp;lt;tr&amp;gt;
                    &amp;lt;td&amp;gt;
                        Item 2
                    &amp;lt;/td&amp;gt;
                &amp;lt;/tr&amp;gt;
            &amp;lt;/tbody&amp;gt;
        &amp;lt;/table&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 jQuery를 작성하여 다음과 같이 각 트랙을 반복합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#tblOne tr').each(function() {...code...});
&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;하지만 문제는 제가 원하지 않는 &quot;tblTwo&quot;의 &quot;tr&quot;을 통해서도 반복된다는 것입니다.&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;jQuery에서는 다음을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#tblOne &amp;gt; tbody  &amp;gt; tr').each(function() {...code...});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어린이 선택기 사용(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 모든 자식(&lt;em papago-id=&quot;1-1&quot;&gt;모든&lt;/em&gt; 자손이 아닌)을 건너게 됩니다. 예를 들어 세 행이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('table &amp;gt; tbody  &amp;gt; tr').each(function(index, tr) { 
   console.log(index);
   console.log(tr);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;0
&amp;lt;tr&amp;gt;
1 
&amp;lt;tr&amp;gt;
2
&amp;lt;tr&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&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;em papago-id=&quot;2-1&quot;&gt;바닐라&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;2-1&quot;&gt;JS사용가능&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;document.querySelectorAll()&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;forEach()&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[].forEach.call(document.querySelectorAll('#tblOne &amp;gt; tbody  &amp;gt; tr'), function(index, tr) {
    /* console.log(index); */
    /* console.log(tr); */
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 추천:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DOM 테이블 구현을 사용하는 것을 추천합니다. 매우 간단하고 사용하기 쉽습니다. 이 작업에는 jQuery가 필요하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var table = document.getElementById('tblOne');

var rowLength = table.rows.length;

for(var i=0; i&amp;lt;rowLength; i+=1){
  var row = table.rows[i];

  //your code goes here, looping over every row.
  //cells are accessed as easy

  var cellLength = row.cells.length;
  for(var y=0; y&amp;lt;cellLength; y+=1){
    var cell = row.cells[y];

    //do something with every cell here
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://api.jquery.com/child-selector/&quot; papago-id=&quot;4-1&quot;&gt;즉시 자식 선택기&lt;/a&gt; 사용&lt;/font&gt;&lt;/font&gt; &lt;code&gt;&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#tblOne &amp;gt; tbody  &amp;gt; tr')
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설명:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;부모&quot;가 지정한 요소 중 &quot;자녀&quot;가 지정한 모든 &lt;strong papago-id=&quot;18-1&quot;&gt;직접 자식 요소&lt;/strong&gt;를 선택합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/10431987/jquery-each-loop-in-table-row&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>jquery</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1620</guid>
      <comments>https://copyscript.tistory.com/1620#entry1620comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:41:19 +0900</pubDate>
    </item>
    <item>
      <title>Oracle 10g: 열이 비어 있지만 null 또는 빈 문자열은 아닙니다.</title>
      <link>https://copyscript.tistory.com/1619</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle 10g: 열이 비어 있지만 null 또는 빈 문자열은 아닙니다.&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;이상한 점은 null이나 빈 문자열로 보이지 않는다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 이렇게 하면.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT * 
  FROM TABLE 
 WHERE column IS 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;SELECT * 
  FROM TABLE 
 WHERE column = ''
&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;다음 쿼리를 발행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT column, DUMP(column, 1016)
FROM table
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정확한 내용을 보여줄 겁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;관련:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle은 빈 문자열을 허용하지 않으며 자동으로 다음으로 변환됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NULL&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/em&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;pre papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;*를 선택&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;식탁에서&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 트림(열)은 null입니다.&lt;/font&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오라클은 기본적으로 빈 문자열이 널로 취급된다는 것에 대해 영구적으로 짜증이 납니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 빈 줄이 확실한가요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;공백이나 탭/줄 바꿈/줄 바꿈/줄 바꿈/줄 바꿈/줄 바꿈 등과 같은 보이지 않는 문자일 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열 길이는 다음 작업을 수행할 때 무엇을 표시합니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;select length(column) from table&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도해 보기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT *    
  FROM TABLE   
 WHERE TRIM(column) IS NULL
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열이 그렇지 않은 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;VARCHAR2&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;CHAR(N)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;빈 문자열을 삽입하면 패딩됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://asktom.oracle.com/pls/asktom/f?p=100:11:0%3a%3a%3a%3aP11_QUESTION_ID:5984520277372&quot; rel=&quot;nofollow&quot; papago-id=&quot;6-1&quot;&gt;톰 카이트가 말한 내용&lt;/a&gt; 보기&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/4796356/oracle-10g-column-is-blank-but-is-not-null-or-an-empty-string&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>oracle</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1619</guid>
      <comments>https://copyscript.tistory.com/1619#entry1619comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:41:11 +0900</pubDate>
    </item>
    <item>
      <title>ipdb를 실행하는 방법.set_pytest 테스트를 실행하는 동안 마음대로 trace()</title>
      <link>https://copyscript.tistory.com/1618</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ipdb를 실행하는 방법.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;set_pytest 테스트를 실행하는 동안 마음대로 trace()&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 스위트에 파이테스트를 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;복잡한 부품간 테스트에서 버그를 잡으면서 배치하고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;import ipdb; ipdb.set_trace()&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 papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 pytest traps sys.stdin/sys.stdout ipdb가 실패합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;pytest로 테스트하는 동안 ipdb는 어떻게 사용할 수 있습니까?&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;저는 실패 후 pdb나 ipdb로 점프하는 것에 관심이 없지만, 코드의 어디에나 브레이크를 두고 실패가 발생하기 전에 디버그할 수 있습니다.&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;pytest가 기본적으로 출력을 캡처하기 때문에 오류가 발생합니다.&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;Pytest를 실행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-s&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;pre&gt;&lt;code&gt;py.test -s my_test.py
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;my_test.py&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import ipdb;
ipdb.set_trace()
&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;안타깝게도 pytest-ipdb는 더 이상 지원되지 않습니다.&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;pytest my_test.py --pdb --pdbcls=IPython.terminal.debugger:Pdb&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;help 명령에서 다음을(를)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;pytest -h
  --pdb                 start the interactive Python debugger on errors.
  --pdbcls=modulename:classname
                        start a custom interactive Python debugger on errors.
                        For example:
                        --pdbcls=IPython.terminal.debugger:TerminalPdb
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TerminalPdb는 오류를 던지는 것처럼 보이지만 Pdb는 그렇지 않다는 것이 &lt;a href=&quot;https://ipython.readthedocs.io/en/latest/api/generated/IPython.core.debugger.html#IPython.core.debugger.Pdb&quot; papago-id=&quot;13-1&quot; rel=&quot;noreferrer&quot;&gt;차이점&lt;/a&gt;입니다(Ipython &lt;a href=&quot;https://ipython.readthedocs.io/en/latest/api/generated/IPython.core.debugger.html#IPython.core.debugger.Pdb&quot; papago-id=&quot;13-1&quot; rel=&quot;noreferrer&quot;&gt;documents&lt;/a&gt;).&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;14-1&quot;&gt;2019-11년&lt;/strong&gt; 현재 이 문제를 해결해야 할 사항은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;pip install ipdb gnureadline ptpython

export PYTEST_ADDOPTS='--pdb --pdbcls=IPython.terminal.debugger:Pdb'
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 제가 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;py.test tests/ --pdbcls=IPython.core.debugger:Pdb -s&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 당신에게 주고 싶을지도 모릅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pdbpp&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도해봐요. 저는 그것보다 더 많은 성공을 거뒀습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ipdb&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께 사용할 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pytest&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 제 답변을 여기서 보세요: https://stackoverflow.com/a/69320311/2896799 .&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/16022915/how-to-execute-ipdb-set-trace-at-will-while-running-pytest-tests&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>Python</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1618</guid>
      <comments>https://copyscript.tistory.com/1618#entry1618comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:41:05 +0900</pubDate>
    </item>
    <item>
      <title>휘발성 구조의 부재를 분리하기 위한 쓰기 순서는 보존이 보장됩니까?</title>
      <link>https://copyscript.tistory.com/1617</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;휘발성 구조의 부재를 분리하기 위한 쓰기 순서는 보존이 보장됩니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 다음과 같은 구조를 가지고 있다고 가정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;volatile struct { int foo; int bar; } data;
data.foo = 1;
data.bar = 2;
data.foo = 3;
data.bar = 4;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;과제는 전부 순서가 변경되지 않도록 보장이 되어 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 휘발성이 없는 경우 컴파일러는 다음과 같이 다른 순서로 두 개의 명령어로 최적화할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;data.bar = 4;
data.foo = 3;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 휘발성이 있는 상황에서 컴파일러는 이런 일을 하지 말아야 할까요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;data.foo = 1;
data.foo = 3;
data.bar = 2;
data.bar = 4;
&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;em papago-id=&quot;5-1&quot;&gt;foo&lt;/em&gt;와 &lt;em papago-id=&quot;5-3&quot;&gt;bar&lt;/em&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;또한 C와 C++ 표준의 현재 버전에 대한 답변이 일치합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;/questions/tagged/c&quot; class=&quot;post-tag&quot; title=&quot;'c' 태그가 붙은 질문을 보여줍니다.&quot; rel=&quot;tag&quot; papago-attr-id=&quot;1&quot;&gt;c&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;순서가 변경되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C176.5.2.3(3)은 다음과 같이 말합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 연산자와 식별자 뒤에 나오는 후 수정 식은 구조 또는 조합 개체의 멤버를 나타냅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;값은 명명된 부재의 값, 97)이며 첫 번째 식을 l 값이면 l 값입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 식에 정규화된 유형이 있으면 지정된 구성원 유형의 정규화된 버전이 결과에 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;data&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;volatile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-자격형도 마찬가지입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.bar&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;data.foo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 따라서 당신은 다음과 같은 두 가지 과제를 수행하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&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;그리고 6.7.3 각주 136에 의해,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 선언된 개체에 대한 작업&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&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; 표현식 평가 규칙이 허용하는 경우를 제외하고는 구현에 의해 &quot;최적화&quot;되거나 재정렬되지 않아야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좀 더 미묘한 질문은 컴파일러가 하나의 명령어로 둘 다 할당할 수 있는지 여부입니다. 예를 들어 연속적인 32비트 값일 경우 64비트 저장소를 사용하여 둘 다 설정할 수 있는지 여부입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 아니라고 생각할 것이고, 적어도 GCC와 Clang은 시도하지 않을 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 스레드에서 이를 사용하려면 한 가지 중요한 게 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러가 쓰기 순서를 변경하지 않는 동안&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&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;a href=&quot;https://stackoverflow.com/a/65296057/16673&quot; papago-id=&quot;21-1&quot;&gt;Nate Eldredge의 답변&lt;/a&gt;에서 설명한 바와 같이) 쓰기 순서 변경이 발생할 수 있는 지점이 하나 더 있으며, 그것은 CPU 자체입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 CPU 아키텍처에 따라 다르며 다음과 같은 몇 가지 예가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인텔 64&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.cs.cmu.edu/%7E410-f10/doc/Intel_Reordering_318147.pdf&quot; papago-id=&quot;23-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel&lt;/a&gt;® 64 &lt;a href=&quot;http://www.cs.cmu.edu/%7E410-f10/doc/Intel_Reordering_318147.pdf&quot; papago-id=&quot;23-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Architecture&lt;/a&gt; Memory &lt;a href=&quot;http://www.cs.cmu.edu/%7E410-f10/doc/Intel_Reordering_318147.pdf&quot; papago-id=&quot;23-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ordering 백서&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스토어 지침 자체를 재정렬하지는 않지만(2.2):&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;ol start=&quot;2&quot;&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;/ol&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CPU마다 다른 순서(2.4)로 표시될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Intel 64 메모리 주문을 통해 두 개의 프로세서가 서로 다른 순서로 저장소를 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3 papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AMD 64&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AMD 64(일반적인 x64)는 &lt;a href=&quot;https://www.amd.com/system/files/TechDocs/24593.pdf&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;29-1&quot;&gt;사양&lt;/a&gt;에서 유사한 동작을 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 잘못된 쓰기는 허용되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;순서에 맞지 않게 실행된 쓰기 명령은 모든 이전 명령이 프로그램 순서에 따라 완료될 때까지 결과를 메모리에 커밋(쓰기)할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 프로세서는 잘못된 쓰기 명령의 결과를 메모리에 커밋할 수 있을 때까지 개인 버퍼(소프트웨어에 보이지 않음)에 보관할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3 papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파워PC&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/windows/win32/dxtecharts/lockless-programming&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;32-1&quot;&gt;파워PC CPU를 사용한 Xbox 360&lt;/a&gt;에서 주의해야 했던 것으로 기억합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xbox 360 CPU는 명령어를 재정렬하지는 않지만, 명령어 이후에 완료되는 쓰기 작업을 재정렬합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 쓰기 재정렬은 특히 Power에서 허용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PC 메모리 모델&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;휴대용 방식으로 CPU 순서를 변경하지 않으려면 C++11 &lt;a href=&quot;https://en.cppreference.com/w/cpp/atomic/atomic_thread_fence&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;34-3&quot;&gt;std::atomic_thread_fence&lt;/a&gt; 또는 C11 &lt;a href=&quot;https://en.cppreference.com/w/c/atomic/atomic_thread_fence&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;34-5&quot;&gt;atomic_thread_fence&lt;/a&gt;와 같은 &lt;a href=&quot;https://www.modernescpp.com/index.php/fences-as-memory-barriers&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;34-1&quot;&gt;메모리 펜스&lt;/a&gt;를 사용해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 파일이 없으면 다른 스레드에서 볼 수 있는 쓰기 순서가 다를 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;35-1&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/6319146/c11-introduced-a-standardized-memory-model-what-does-it-mean-and-how-is-it-g&quot; papago-id=&quot;35-1-0&quot;&gt;참고:&lt;/a&gt;&lt;/em&gt; C++&lt;em papago-id=&quot;35-1&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/6319146/c11-introduced-a-standardized-memory-model-what-does-it-mean-and-how-is-it-g&quot; papago-id=&quot;35-1-0&quot;&gt;11은 표준화&lt;/a&gt;&lt;/em&gt;된 메모리 &lt;em papago-id=&quot;35-1&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/6319146/c11-introduced-a-standardized-memory-model-what-does-it-mean-and-how-is-it-g&quot; papago-id=&quot;35-1-0&quot;&gt;모델&lt;/a&gt;&lt;/em&gt;을 소개했습니다&lt;em papago-id=&quot;35-1&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/6319146/c11-introduced-a-standardized-memory-model-what-does-it-mean-and-how-is-it-g&quot; papago-id=&quot;35-1-0&quot;&gt;.&lt;/a&gt;&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;35-1&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/6319146/c11-introduced-a-standardized-memory-model-what-does-it-mean-and-how-is-it-g&quot; papago-id=&quot;35-1-0&quot;&gt; 그게 무슨 뜻입니까?&lt;/a&gt;&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;35-1&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/6319146/c11-introduced-a-standardized-memory-model-what-does-it-mean-and-how-is-it-g&quot; papago-id=&quot;35-1-0&quot;&gt; 그리고 C++ 프로그래밍에 어떤 영향을 미칠까요?&lt;/a&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 위키피디아 &lt;em papago-id=&quot;36-1&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Memory_barrier#Out-of-order_execution_versus_compiler_reordering_optimizations&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;36-1-0&quot;&gt;메모리 장벽&lt;/a&gt;&lt;/em&gt; 기사에도 나와 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 캐싱, 캐시 코히어런스 프로토콜 및 완화된 메모리 순서 때문에 휘발성 읽기 및 쓰기가 다른 프로세서 또는 코어에 의해 동일한 순서로 표시된다는 보장은 없습니다. 즉 휘발성 변수만으로는 스레드 간 플래그 또는 음소거로 작동하지 않을 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/65295907/is-the-order-of-writes-to-separate-members-of-a-volatile-struct-guaranteed-to-be&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>C</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1617</guid>
      <comments>https://copyscript.tistory.com/1617#entry1617comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:40:59 +0900</pubDate>
    </item>
    <item>
      <title>종료하지 않고 PowerShell 세션 새로 고침/다시 시작</title>
      <link>https://copyscript.tistory.com/1616</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;종료하지 않고 PowerShell 세션 새로 고침/다시 시작&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell 프로필의 일부 스크립트를 수정했는데 powershell을 종료한 후 다시 시작하는 것이 귀찮아져서 프로필의 스크립트에 변경 사항이 로드됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;종료하지 않고 파워셸 세션을 다시 시작할 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;. $profile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로파일을 다시 수집할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 같은 콘솔 창에서 새 세션이 시작되고 프로필이 다시 로드됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Invoke-Command { &amp;amp; &quot;powershell.exe&quot; } -NoNewScope # PowerShell 5
Invoke-Command { &amp;amp; &quot;pwsh.exe&quot;       } -NoNewScope # PowerShell 7
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 더 길지만 더 강력한 명령어는 버전 간에 다음과 같이 올바르게 작동해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Get-Process -Id $PID | Select-Object -ExpandProperty Path | ForEach-Object { Invoke-Command { &amp;amp; &quot;$_&quot; } -NoNewScope }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 이전 세션의 변수 등을 모두 잃게 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 이와 같이 같은 창에서 새 세션을 생성하면 상위 프로세스가 백그라운드에서 실행됩니다.&lt;/font&gt;&lt;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;$p = Get-Process -Id $PID
If ($p.Parent.Name -eq $p.Name -and !($p.MainWindowTitle))
{
    Stop-Process -Id $p.Parent.Id -Force
}
&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;@manojlds의 대답은 맞지만 결국 오류를 던질 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 프로필에 새 PSD 드라이브를 정의한 경우 다시 소싱하면 오류가 발생할 수 있습니다.&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;다른 접근 방식은 먼저 PowerShell을 시작한 다음 PowerShell만 입력하면 바로 내부에서 다른 버전을 시작하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;중첩된 콘솔에서 프로필을 변경하고 종료한 다음 PowerShell을 다시 실행하여 업데이트된 프로필을 테스트합니다.&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;font class=&quot;papago-parent&quot;&gt;YMMV!!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 기능을 만들어 사용자의 기능에 추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$profile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(또는 모듈을 만든 후 '$profile'로 가져오기), 예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function Restart-PowerShell{
    Start-Process PowerShell # Launch PowerShell host in new window
    exit # Exit existing PowerShell host window
}
# Add any alias if you want, for ex. rps (rp already occupied by &quot;Remove-ItemProperty”)
Set-Alias -Name rps -Value Restart-PowerShell
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 질문의 제목에 &quot;w/out exiting&quot;이라고 적었던 것과 정확히 일치하지 않을 수도 있지만, 실질적으로 원래 의도가 일종의 재시작 PowerShell host 명령(기본적으로 PS에서는 사용할 수 없음)을 의도한 것이라면, 이 명령을 실행할 수 있습니다.&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;@Bad의 답변에 대한 확장 내용입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 ISE를 처리합니다(항상 사용하기 때문에).&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;ISE에 있으면 ISE가 재시작됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반 PowerShell에 있으면 일반 PowerShell을 다시 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Get-PSHostProcessInfo&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;ISE 실행 여부를 확인할 수 있는 현재 PowerShell 세션에 대한 정보를 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function Restart-PowerShell
{
    if((Get-PSHostProcessInfo).ProcessName.Contains('powershell_ise'))
    {
        Start-Process 'powershell_ise.exe'
    } else {
        Start-Process 'powershell.exe'
    }
    exit
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;profile.ps1을 .&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;심플타입&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;reload&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 로드/재시작하기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function reload-Console {
    clear
    Write-Host &quot;Reload Console&quot;
    Get-Process -Id $PID | Select-Object -ExpandProperty Path | ForEach-Object { Invoke-Command { &amp;amp; &quot;$_&quot; } -NoNewScope }
}
New-Alias reload reload-Console
&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;manojlds의 답변(현재 최고 등급의 답변)은 프로필이 무엇을 하는지에 따라 문제가 있을 수 있습니다(본질적으로 깨끗한 슬레이트에 따라 시작하는 것이 결정되는 경우).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 가장 큰 문제는 앨리어싱이 가능한 기능에 넣기가 쉽지 않다는 것이라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서, 저는 nmbell의 답변과 비슷한 것을 선호하지만, 훨씬 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function Reset-Session {
    # store this shell's parent PID for later use
    $parentPID = $PID
    # get the the path of this shell's executable
    $thisExePath = (Get-Process -Id $PID).Path
    # start a new shell, same window
    Start-Process $thisExePath -NoNewWindow
    # stop this shell if it's still alive
    Stop-Process -Id $parentPID -Force
}
# optional
Set-Alias -Name reset -Value Reset-Session
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리프레시네브&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uN29W.png&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행코드 예시&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/11546069/refreshing-restarting-powershell-session-w-out-exiting&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>Powershell</category>
      <author>copyscript</author>
      <guid isPermaLink="true">https://copyscript.tistory.com/1616</guid>
      <comments>https://copyscript.tistory.com/1616#entry1616comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:40:52 +0900</pubDate>
    </item>
  </channel>
</rss>