<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>newsource</title>
    <link>https://newsource.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Thu, 25 Jun 2026 15:20:43 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>newsource</managingEditor>
    <item>
      <title>현재 사용자 주문 InWooCommerce에서 주문 ID 가져오기</title>
      <link>https://newsource.tistory.com/1444</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 사용자 주문 InWooCommerce에서 주문 ID 가져오기&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/42223765/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;2017-02-14 12:38:01Z&quot; papago-attr-id=&quot;1&quot;&gt;6년전&lt;/span&gt;에 문을 닫았습니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;ml24 pl2&quot;&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;mt24 d-flex gsx gs8&quot;&gt; 
   &lt;a class=&quot;s-btn s-btn__outlined flex--item js-post-notice-edit-post&quot; href=&quot;/posts/42223765/edit&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 질문을 개선합니다.&lt;/font&gt;&lt;/a&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;상황은 이렇습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 우커머스 사이트를 마켓플레이스로 사용하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;게임을 판매하고 있는데, 구매자 중에 스팀 키를 받는 분들도 있어요.&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;a href=&quot;https://stackoverflow.com/questions/39401393/how-to-get-woocommerce-order-details&quot;&gt;WooCommerce 주문 세부 정보를 가져오는 방법&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;우선 SQL 요청을 해볼까 생각 중인데, 데이터베이스에서 주문과 사용자의 연결고리를 찾지 못합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단서가 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;업데이트됨&lt;/font&gt;&lt;/strong&gt; &lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WooCommerce 3+와의 호환성 추가 (2018년 1월)&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 고객 주문을 받고 각 고객 주문의 각 항목을 수행하기 위해 필요한 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;## ==&amp;gt; Define HERE the statuses of that orders 
$order_statuses = array('wc-on-hold', 'wc-processing', 'wc-completed');

## ==&amp;gt; Define HERE the customer ID
$customer_user_id = get_current_user_id(); // current user ID here for example

// Getting current customer orders
$customer_orders = wc_get_orders( array(
    'meta_key' =&amp;gt; '_customer_user',
    'meta_value' =&amp;gt; $customer_user_id,
    'post_status' =&amp;gt; $order_statuses,
    'numberposts' =&amp;gt; -1
) );


// Loop through each customer WC_Order objects
foreach($customer_orders as $order ){

    // Order ID (added WooCommerce 3+ compatibility)
    $order_id = method_exists( $order, 'get_id' ) ? $order-&amp;gt;get_id() : $order-&amp;gt;id;

    // Iterating through current orders items
    foreach($order-&amp;gt;get_items() as $item_id =&amp;gt; $item){

        // The corresponding product ID (Added Compatibility with WC 3+) 
        $product_id = method_exists( $item, 'get_product_id' ) ? $item-&amp;gt;get_product_id() : $item['product_id'];

        // Order Item data (unprotected on Woocommerce 3)
        if( method_exists( $item, 'get_data' ) ) {
             $item_data = $item-&amp;gt;get_data();
             $subtotal = $item_data['subtotal'];
        } else {
             $subtotal = wc_get_order_item_meta( $item_id, '_line_subtotal', true );
        }

        // TEST: Some output
        echo '&amp;lt;p&amp;gt;Subtotal: '.$subtotal.'&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;';

        // Get a specific meta data
        $item_color = method_exists( $item, 'get_meta' ) ? $item-&amp;gt;get_meta('pa_color') : wc_get_order_item_meta( $item_id, 'pa_color', true );

        // TEST: Some output
        echo '&amp;lt;p&amp;gt;Color: '.$item_color.'&amp;lt;/p&amp;gt;&amp;lt;br&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;hr&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;https://stackoverflow.com/questions/39401393/how-to-get-woocommerce-order-details/44708344#44708344&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WooCommerce 주문 세부 정보를 가져오는 방법&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/43597491/accessing-order-items-protected-data-in-woocommerce-3/43619678#43619678&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Woocmerce 3에서 Order Items 보호된 데이터에 액세스&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/45706007/get-order-items-and-wc-order-item-product-in-woocommerce-3/45706318#45706318&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WC_Order_Item_Product in WoCommerce 3에서 주문품 및 WC_Order_Item_Product 가져오기&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/42223765/get-the-order-id-from-the-current-user-orders-in-woocommerce&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1444</guid>
      <comments>https://newsource.tistory.com/1444#entry1444comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:53:33 +0900</pubDate>
    </item>
    <item>
      <title>grails 컨트롤러에서 ajax 요청 또는 브라우저 요청 식별</title>
      <link>https://newsource.tistory.com/1443</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;grails 컨트롤러에서 ajax 요청 또는 브라우저 요청 식별&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;요청이 ajax call이면 응답(이 부분이 작동 중)을 제공해야 하지만 브라우저에 URL을 입력하면 요청된 페이지가 아닌 홈/인덱스 페이지로 이동해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래는 ajax call의 gsp code 샘플입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;g:remoteFunction action=&quot;list&quot; controller=&quot;todo&quot; update=&quot;todo-ajax&quot;&amp;gt;

&amp;lt;div id =&quot;todo-ajax&quot;&amp;gt;
//ajax call rendered in this area
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;브라우저 URL 표시줄에 &lt;a href=&quot;http://localhost:8080/Dash/todo/list&quot; rel=&quot;noreferrer&quot;&gt;http://localhost:8080/Dash/todo/list&lt;/a&gt;를 입력하면 컨트롤러가 &lt;a href=&quot;http://localhost:8080/Dash/auth/index&quot; rel=&quot;noreferrer&quot;&gt;http://localhost:8080/Dash/auth/index&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;이 동적 메서드를 BootStrap.init closure에 추가하는 것이 일반적인 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    HttpServletRequest.metaClass.isXhr = {-&amp;gt;
         'XMLHttpRequest' == delegate.getHeader('X-Requested-With')
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 통해 다음을 수행하여 현재 요청이 ajax 호출인지 테스트할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if(request.xhr) { ... }
&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;if(!request.xhr) { 
    redirect(controller: 'auth', action: 'index')
    return false
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필터/차단기를 사용할 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자 지정 주석을 사용하여 아약스 전용인 모든 작업에 주석을 단 다음 필터에서 이를 검증하는 솔루션을 구축했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;grails-app/conf/BootStrap.groovy의 전체 예제:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import javax.servlet.http.HttpServletRequest

class BootStrap {

     def init = { servletContext -&amp;gt;

        HttpServletRequest.metaClass.isXhr = {-&amp;gt;
            'XMLHttpRequest' == delegate.getHeader('X-Requested-With')
        }

     }
     def destroy = {
     }
} 
&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;성배 이후 1.1안&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xhr&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;재산은 에 추가되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;request&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;AJAX 요청을 탐지할 수 있는 개체입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 용도의 예는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def MyController {

  def myAction() {
    if (request.xhr) {
      // send response to AJAX request  
    } else {
      // send response to non-AJAX request
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적인 방법은 ajax 루틴이 요청에 헤더 또는 쿼리 문자열을 추가하고 이를 탐지하도록 하는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ajax용 라이브러리를 사용하는 경우 이미 제공하고 있을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://www.prototypejs.org/api/ajax/options&quot; rel=&quot;nofollow noreferrer&quot;&gt;X-Requested-With 헤더 세트를 'XMLHtpRequest'&lt;/a&gt;에 추가하는 프로토타입을 사용하는 것 같습니다&lt;a href=&quot;http://www.prototypejs.org/api/ajax/options&quot; rel=&quot;nofollow noreferrer&quot;&gt;.&lt;/a&gt; 이를 탐지하는 것이 최선의 방법일 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/665067/identifying-ajax-request-or-browser-request-in-grails-controller&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Ajax</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1443</guid>
      <comments>https://newsource.tistory.com/1443#entry1443comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:53:26 +0900</pubDate>
    </item>
    <item>
      <title>realloc은 실제로 배경에서 어떻게 작동합니까?</title>
      <link>https://newsource.tistory.com/1442</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;realloc은 실제로 배경에서 어떻게 작동합니까?&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;realloc&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;strong&gt;블록&lt;/strong&gt;을 두 개&lt;strong&gt;/여러&lt;/strong&gt; 개 할당하고 그와 다른 것을 가리키는 포인터 한 개가 내부적으로 서로 연결되어 있습니까? 아니면 메모리가 충분하고 포인터가 새 주소로 업데이트되고 이전 메모리가 삭제되는 이전 영역에 복사됩니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 그것은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;realloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;컴파일러/OS가 종속적입니까 아니면 독립적&lt;/strong&gt;입니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;realloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;힙 뒤에 충분한 메모리를 사용할 수 있는 경우 사용 가능한 메모리 범위를 확장하려고 시도합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇지 않다면 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 사이즈의 블록이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;memcpy&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;거기에 있는 당신의 컨텐츠들,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;free&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;낡은 블록&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 OS와 컴파일러 둘다 독립적이고 구현에 따라 다릅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;libc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 상대할 수 있는.&lt;/font&gt;&lt;/font&gt;&lt;/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;mremap/MREMAP_MAYMOVE&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;불가능한 경우 매핑을 뒤에 충분한 VM 공간이 있는 새 가상 주소로 이동한 다음 매핑을 확장합니다.&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;구현:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;realloc()&lt;/code&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;void * realloc(void *ptr, size_t size)
{
    // realloc() on a NULL pointer is the same as malloc().
    if (ptr == NULL)
        return malloc(size);

    size_t oldsize = malloc_getsize(ptr);

    // Are we shrinking an allocation? That's easy.
    if (size &amp;lt; oldsize) {
        malloc_setsize(ptr, size);
        return ptr;
    }

    // Can we grow this allocation in place?
    if (malloc_can_grow(ptr, size)) {
        malloc_setsize(ptr, size);
        return ptr;
    }

    // Create a new allocation, move the data there, and free the old one.
    void *newptr = malloc(size);
    if (newptr == NULL)
        return NULL;
    memcpy(newptr, ptr, oldsize);
    free(ptr);
    return newptr;
}
&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;malloc_&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 있습니다. 이러한 기능들은 (내가 아는 한) 어떤 구현에도 실제로 존재하지 않습니다. 그러나 할당자가 실제로 내부적으로 이러한 작업을 수행하는 데 사용되는 플레이스홀더로 의도됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의 시행 이후.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;realloc()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 내부 도구에 따라 구현은 OS에 따라 달라집니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만, 그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;realloc()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인터페이스는 범용입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전 포인터의 크기를 조정할 수 없는 경우 새 포인터가 할당되면 내용이 복사되고 이전 포인터가 해제됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/21437482/how-realloc-work-actually-in-the-background&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1442</guid>
      <comments>https://newsource.tistory.com/1442#entry1442comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:53:19 +0900</pubDate>
    </item>
    <item>
      <title>제출 시 양식 리디렉션 또는 새로 고침을 방지하시겠습니까?</title>
      <link>https://newsource.tistory.com/1441</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;font papago-translate=&quot;translated&quot;&gt;저는 단지 jQuery가 기능을 수행하기를 원합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;양식은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form id=&quot;contactForm&quot;&amp;gt;
    &amp;lt;fieldset&amp;gt;
        &amp;lt;label for=&quot;Name&quot;&amp;gt;Name&amp;lt;/label&amp;gt;
        &amp;lt;input id=&quot;contactName&quot; type=&quot;text&quot; /&amp;gt;
    &amp;lt;/fieldset&amp;gt;

    &amp;lt;fieldset&amp;gt;
        &amp;lt;label for=&quot;Email&quot;&amp;gt;Email&amp;lt;/label&amp;gt;
        &amp;lt;input id=&quot;contactEmail&quot; type=&quot;text&quot; /&amp;gt;
    &amp;lt;/fieldset&amp;gt;

    &amp;lt;fieldset class=&quot;noHeight&quot;&amp;gt;
        &amp;lt;textarea id=&quot;contactMessage&quot; cols=&quot;20&quot;&amp;gt;&amp;lt;/textarea&amp;gt;
        &amp;lt;input id=&quot;contactSend&quot; class=&quot;submit&quot; type=&quot;submit&quot; onclick=&quot;sendContactForm()&quot; /&amp;gt;
    &amp;lt;/fieldset&amp;gt;
&amp;lt;/form&amp;gt;        
&amp;lt;small id=&quot;messageSent&quot;&amp;gt;Your message has been sent.&amp;lt;/small&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;function sendContactForm(){
    $(&quot;#messageSent&quot;).slideDown(&quot;slow&quot;);
    setTimeout('$(&quot;#messageSent&quot;).slideUp();$(&quot;#contactForm&quot;).slideUp(&quot;slow&quot;)', 2000);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;폼에 액션 요소를 넣거나 넣지 않고 시도해 보았지만 무엇을 잘못하고 있는지 모르겠습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나를 더 짜증나게 한 것은 완벽하게 해주는 예제가 있다는 것입니다: &lt;a href=&quot;http://designshack.co.uk/articles/javascript/creating-a-slide-in-jquery-contact-form/comment-page-2#comment-1213&quot; rel=&quot;noreferrer&quot; title=&quot;예제페이지&quot; papago-attr-id=&quot;2&quot;&gt;예제&lt;/a&gt; 페이지&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 문제를 실시간으로 확인하려면 stormink.net (내 사이트)로 이동하여 &quot;Send me and e-메일&quot; 및 &quot;RSS Subscription&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;a href=&quot;http://docs.jquery.com/Events/submit&quot; rel=&quot;noreferrer&quot;&gt;제출&lt;/a&gt; 이벤트에서 양식 제출을 처리하고 거짓을 반환하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#contactForm').submit(function () {
 sendContactForm();
 return false;
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Submit(제출) 버튼의 on click(클릭) 이벤트는 더 이상 필요하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input class=&quot;submit&quot; type=&quot;submit&quot; value=&quot;Send&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function submitClick(e)
{
     e.preventDefault();
     $(&quot;#messageSent&quot;).slideDown(&quot;slow&quot;);
     setTimeout('$(&quot;#messageSent&quot;).slideUp();
     $(&quot;#contactForm&quot;).slideUp(&quot;slow&quot;)', 2000);
}

$(document).ready(function() {
    $('#contactSend').click(submitClick);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;onClick 이벤트를 사용하는 대신 jQuery를 사용하는 '클릭' 이벤트 핸들러를 submit 버튼(또는 submit Click을 콜백으로 사용하는 아무 버튼이나 아무 버튼이나)에 바인딩하는 방법을 사용하면 submitClick을 콜백으로 사용할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트를 콜백에 전달하여 &lt;a href=&quot;http://docs.jquery.com/Events/jQuery.Event#event.preventDefault.28.29&quot; rel=&quot;noreferrer&quot;&gt;preventDefault&lt;/a&gt;를 호출합니다. 이를 통해 클릭이 양식을 제출하지 못하게 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;양식의 열기 태그에서 다음과 같이 작업 속성을 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form id=&quot;contactForm&quot; action=&quot;#&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 그 일을 놓치고 있는 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;return false&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML 특성(클라이언트 코드 JS 처리 전에 표시됨)에 의해 트리거된 기본 &lt;strong&gt;브라우저 오류와 같이 표시&lt;/strong&gt;되는 기본 브라우저 오류를 &lt;strong&gt;보려면&lt;/strong&gt; 다음을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input name=&quot;o&quot; required=&quot;required&quot; aria-required=&quot;true&quot; type=&quot;text&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트 대신 이벤트를 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;click&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트. 이 경우 &quot;이&lt;em&gt; 필드를 작성해주세요&lt;/em&gt;&quot;라는 팝업이 자동으로 표시됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에도&lt;/font&gt;&lt;/font&gt;&lt;code&gt;preventDefault&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('form').on('submit', function(event) {
   event.preventDefault();
   my_form_treatment(this, event);
}); // -&amp;gt; this will show up a &quot;Please fill out this field&quot; pop-up before my_form_treatment
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/1263852/prevent-form-redirect-or-refresh-on-submit#comment55350238_1263859&quot;&gt;아까 말씀&lt;/a&gt;하신 것처럼.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;return 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 papago-translate=&quot;translated&quot;&gt;A를 가지고도&lt;/font&gt;&lt;/font&gt;&lt;code&gt;return false&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;맨 끝에&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;따라서 이러한 기본&lt;/strong&gt; 팝업을 &lt;strong&gt;제거하려면&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;click&lt;/code&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;$('form input[type=submit]').on('click', function(event) {
   event.preventDefault();
   my_form_treatment(this, event);
}); // -&amp;gt; this will NOT show any popups related to HTML attributes
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;폼 태그를 사용하지 않고 jquery를 통해 submit 버튼에서 클릭 이벤트를 처리하는 것이 대안이 될 수 있습니다.&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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대부분의 이전 답변과 달리, 여기에 설명된 솔루션은 JQuery 대신 &lt;strong&gt;순수 자바스크립트를 사용&lt;/strong&gt;하여 &lt;strong&gt;페이지&lt;/strong&gt;가 새로 &lt;strong&gt;고침/수정되지 않도록 하는 방법&lt;/strong&gt;을 보여줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h4&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML 양식&lt;/font&gt;&lt;/h4&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래는 HTML 입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 사용할 필요가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;onclick&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;event(사용자가 마우스를 사용하여 버튼을 클릭할 때 발생) 또는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;onsubmit&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트(사용자가 키를 누를 때 발생)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;submit&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;이러한 이벤트는 다음 절에 설명된 JS 코드에 의해 처리됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;form id=&quot;myForm&quot;&amp;gt;
   &amp;lt;input type=&quot;text&quot; name=&quot;contactName&quot; id=&quot;contactName&quot;&amp;gt;
   &amp;lt;input class=&quot;submit&quot; type=&quot;submit&quot; value=&quot;Submit&quot;&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바스크립트 코드&lt;/font&gt;&lt;/h4&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;form&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/submit_event&quot; rel=&quot;nofollow noreferrer&quot;&gt;제출 이벤트&lt;/a&gt;에 대한 제출&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인터페이스의 메소드는 이벤트가 명시적으로 처리되지 않는 경우, 이벤트의 기본 &lt;strong&gt;액션&lt;/strong&gt;이 정상적으로 &lt;strong&gt;수행되지 않아야&lt;/strong&gt; 함을 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Glossary/User_agent&quot; rel=&quot;nofollow noreferrer&quot;&gt;사용자 에이전트&lt;/a&gt;에게 알려줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;참고:&lt;/strong&gt; HTML 요소를 DOM 트리에 추가한 &lt;strong&gt;후&lt;/strong&gt;(웹 페이지를 로드할 때) 이벤트 핸들러를 등록해야 합니다. 그렇지 않으면 존재하지 않는 개체의 속성(이벤트 핸들러)을 설정하려고 할 때 런타임 오류가 발생합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 보장하는 한 가지 방법은 단순히 해당 요소 &lt;strong&gt;뒤&lt;/strong&gt;에 스크립트를 배치하는 것입니다(즉,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;브라우저 작동 방식에 의존하기 때문에 다소 위험할 수 있으므로 이벤트를 사용하여 초기 HTML 문서를 완전히 로드하고 구문 분석한 후에 이벤트 핸들러를 할당할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;document.addEventListener('DOMContentLoaded', (event) =&amp;gt; {
    document.getElementById(&quot;myForm&quot;).addEventListener(&quot;submit&quot;, function(e) {
        e.preventDefault() // Cancel the default action
        sendContactForm();
    });
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다 합쳐서.&lt;/font&gt;&lt;/h4&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
   &amp;lt;head&amp;gt;
      &amp;lt;script&amp;gt;
         document.addEventListener('DOMContentLoaded', (event) =&amp;gt; {
             document.getElementById(&quot;myForm&quot;).addEventListener(&quot;submit&quot;, function(e) {
                 e.preventDefault() // Cancel the default action
                 sendContactForm();
             });
         });
      &amp;lt;/script&amp;gt;
   &amp;lt;/head&amp;gt;
   &amp;lt;body&amp;gt;
      &amp;lt;form id=&quot;myForm&quot;&amp;gt;
         &amp;lt;input type=&quot;text&quot; name=&quot;contactName&quot; id=&quot;contactName&quot;&amp;gt;
         &amp;lt;input class=&quot;submit&quot; type=&quot;submit&quot; value=&quot;Submit&quot;&amp;gt;
      &amp;lt;/form&amp;gt;
   &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&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/1263852/prevent-form-redirect-or-refresh-on-submit&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1441</guid>
      <comments>https://newsource.tistory.com/1441#entry1441comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:53:12 +0900</pubDate>
    </item>
    <item>
      <title>클릭()에서 jQuery 클릭을 사용하여 앵커를 처리합니다.</title>
      <link>https://newsource.tistory.com/1440</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클릭()에서 jQuery 클릭을 사용하여 앵커를 처리합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 for 루프에 동적으로 생성된 앵커 태그 세트가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div id = &quot;solTitle&quot;&amp;gt; &amp;lt;a href = &quot;#&quot;  id = &quot;' + tagId + '&quot; onClick = &quot;openSolution();&quot;&amp;gt; ' + solTitle + '&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;br&amp;gt;';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 코드가 실행되면 이 경우 중 하나에 대한 html 출력은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div id = &quot;solTitle&quot;&amp;gt; &amp;lt;a href = &quot;#&quot;  id = &quot;solution0&quot; onClick = &quot;openSolution();&quot;&amp;gt;Solution0 &amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;br&amp;gt;

&amp;lt;div id = &quot;solTitle&quot;&amp;gt; &amp;lt;a href = &quot;#&quot;  id = &quot;solution1&quot; onClick = &quot;openSolution();&quot;&amp;gt;Solution1 &amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;br&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;openSolution()은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function openSolution() {
    alert('here');
    $('#solTitle a').click(function(evt) {
        evt.preventDefault();
        alert('here in');
        var divId = 'summary' + $(this).attr('id');

        document.getElementById(divId).className = '';

    });
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행하고 링크 중 하나를 클릭하면 jquery click 핸들러 내부에 흐름이 들어오지 않습니다.&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;링크를 두 번째 클릭하면 divId의 값이 정확하게 적용되어 모든 것이 완벽하게 작동합니다.&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;openSolution&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;click&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;click&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트 핸들러가 실행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 하고 있는 일은 애초에 jQuery를 사용하던 시점을 무산시키는 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클릭 이벤트를 처음부터 요소에 바인딩하지 않는 이유는 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).ready(function() {
    $(&quot;#solTitle a&quot;).click(function() {
        //Do stuff when clicked
    });
});
&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;onClick&lt;/code&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;id&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;값(&quot;solTitle&quot;)이(가) 잘못되었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 공통적인 특징을 찾아야 할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;class&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;id=&quot;solTitle&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;class=&quot;solTitle&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그런 다음 클래스 선택기를 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.solTitle a&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;중복된 이후&lt;/font&gt;&lt;/font&gt;&lt;code&gt;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;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;id&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가 사용되고 나머지는 모두 무시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바스크립트 함수를 호출하는 온클릭 이벤트가 있는 앵커 태그를 찍겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a href=&quot;#&quot; onClick=&quot;showDiv(1);&quot;&amp;gt;1&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 자바스크립트로 아래 코드를 작성하세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function showDiv(pageid)
{
   alert(pageid);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 &quot;1&quot;의 경고가 표시됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML은 다음과 같이 표시되어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;solTitle&quot;&amp;gt; &amp;lt;a href=&quot;#&quot;  id=&quot;solution0&quot;&amp;gt;Solution0 &amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;solTitle&quot;&amp;gt; &amp;lt;a href=&quot;#&quot;  id=&quot;solution1&quot;&amp;gt;Solution1 &amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;

&amp;lt;div id=&quot;summary_solution0&quot; style=&quot;display:none&quot; class=&quot;summary&quot;&amp;gt;Summary solution0&amp;lt;/div&amp;gt;
&amp;lt;div id=&quot;summary_solution1&quot; style=&quot;display:none&quot; class=&quot;summary&quot;&amp;gt;Summary solution1&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 자바스크립트:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).ready(function(){
    $(&quot;.solTitle a&quot;).live('click',function(e){
        var contentId = &quot;summary_&quot; + $(this).attr('id');
        $(&quot;.summary&quot;).hide();
        $(&quot;#&quot; + contentId).show();
    });
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예제 참조: http://jsfiddle.net/kmendes/4G9UF/&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;div class = &quot;solTitle&quot;&amp;gt; &amp;lt;a href = &quot;#&quot;  id = &quot;solution0&quot; onClick = &quot;openSolution();&quot;&amp;gt;Solution0 &amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;br&amp;gt;

&amp;lt;div class= &quot;solTitle&quot;&amp;gt; &amp;lt;a href = &quot;#&quot;  id = &quot;solution1&quot; onClick = &quot;openSolution();&quot;&amp;gt;Solution1 &amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;br&amp;gt;



$(document).ready(function(){
    $('.solTitle a').click(function(e) {
        e.preventDefault();
        alert('here in');
         var divId = 'summary' +$(this).attr('id');

        document.getElementById(divId).className = ''; /* or $('#'+divid).removeAttr('class'); */

    });
 });
&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;onclick 특성을 제거하고 문서 내부의 bind click 이벤트를 제거합니다.ready&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;sol변경sOLTitle을 ID를 CLASS로 변경: ID를 반복할 수 없습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소에 대해 같은 ID를 여러 번 가질 수 없습니다.&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;클래스를 사용하고 ID를 고유하게 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;solTitle&quot; id=&quot;solTitle1&quot;&amp;gt; &amp;lt;a href = &quot;#&quot;  id = &quot;solution0&quot; onClick = &quot;openSolution();&quot;&amp;gt;Solution0 &amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 클래스 선택기를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('.solTitle a').click(function(evt) {

    evt.preventDefault();
    alert('here in');
    var divId = 'summary' + this.id.substring(0, this.id.length-1);

    document.getElementById(divId).className = ''; 

});
&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;onclick&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;onclick&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트는 요소에도 할당됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수를 할당합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;onclick&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;code&gt;click()&lt;/code&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;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/8908191/use-jquery-click-to-handle-anchor-onclick&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1440</guid>
      <comments>https://newsource.tistory.com/1440#entry1440comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:53:05 +0900</pubDate>
    </item>
    <item>
      <title>CSS의 모든 N번째 요소 선택</title>
      <link>https://newsource.tistory.com/1439</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CSS의 모든 N번째 요소 선택&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전: 16개 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 이런 글을 쓸 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;div:nth-child(4),
div:nth-child(8),
div:nth-child(12),
div:nth-child(16)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것을 하는 더 좋은 방법이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이름에서 알 수 있듯이,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;:&lt;b&gt;n&lt;/b&gt;th-child()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;를 사용하여 산술식을 구성할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;n&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;상수 이외에 변수가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;덧셈을 수행할 수 있습니다(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;+&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;), 뺄셈(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;) 및 &lt;a href=&quot;http://en.wikipedia.org/wiki/Coefficient&quot; rel=&quot;noreferrer&quot;&gt;계수 곱하기&lt;/a&gt; (&lt;/font&gt;&lt;/font&gt;&lt;code&gt;an&lt;/code&gt;&lt;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;는 양수, 음수 및 0)을 포함하는 정수입니다.&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;div:nth-child(4n)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 산술식의 작동 방식에 대한 설명은 &lt;a href=&quot;http://www.w3.org/TR/selectors/#nth-child-pseudo&quot; rel=&quot;noreferrer&quot;&gt;사양&lt;/a&gt;과 함께 이 &lt;a href=&quot;https://stackoverflow.com/questions/11576324/understanding-nth-childan-b-selector-with-formula-in-css3&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;div&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 다음과 같은 다른 유형의 요소가 있는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;h1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;p&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 사용해야 할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;:nth-of-type()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;:nth-child()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 숫자만 세는 것을 확실히 하기 위해.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;div&lt;/code&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;body&amp;gt;
  &amp;lt;h1&amp;gt;&amp;lt;/h1&amp;gt;
  &amp;lt;div&amp;gt;1&amp;lt;/div&amp;gt;  &amp;lt;div&amp;gt;2&amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;3&amp;lt;/div&amp;gt;  &amp;lt;div&amp;gt;4&amp;lt;/div&amp;gt;
  &amp;lt;h2&amp;gt;&amp;lt;/h2&amp;gt;
  &amp;lt;div&amp;gt;5&amp;lt;/div&amp;gt;  &amp;lt;div&amp;gt;6&amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;7&amp;lt;/div&amp;gt;  &amp;lt;div&amp;gt;8&amp;lt;/div&amp;gt;
  &amp;lt;h2&amp;gt;&amp;lt;/h2&amp;gt;
  &amp;lt;div&amp;gt;9&amp;lt;/div&amp;gt;  &amp;lt;div&amp;gt;10&amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;11&amp;lt;/div&amp;gt; &amp;lt;div&amp;gt;12&amp;lt;/div&amp;gt;
  &amp;lt;h2&amp;gt;&amp;lt;/h2&amp;gt;
  &amp;lt;div&amp;gt;13&amp;lt;/div&amp;gt; &amp;lt;div&amp;gt;14&amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;15&amp;lt;/div&amp;gt; &amp;lt;div&amp;gt;16&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;임의 선택기와 일치하는 n번째 자식을 찾는 경우, 다른 모든 것(클래스, 속성 또는 이들의 임의 조합)에 대해서는 순수 CSS 선택기로는 이 작업을 수행할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/5545649/css3-nth-child-or-nth-of-type-with-a-class-selector&quot;&gt;이 질문&lt;/a&gt;에 대한 제 대답을 보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런데 4n과 4n+4는 큰 차이가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;:nth-child()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 사용하시면.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;n&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변수는 0에서 계산을 시작합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 선택기는 다음과 같이 일치합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;code&gt;:nth-child(4n)&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;4(0) = 0
4(1) = 4
4(2) = 8
4(3) = 12
4(4) = 16
...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;code&gt;:nth-child(4n+4)&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;4(0) + 4 = 0  + 4 = 4
4(1) + 4 = 4  + 4 = 8
4(2) + 4 = 8  + 4 = 12
4(3) + 4 = 12 + 4 = 16
4(4) + 4 = 16 + 4 = 20
...
&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;div:nth-child(4n+4) 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참조: http://css-tricks.com/how-nth-child-works/&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유사 클래스에 대한 올바른 인수가 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;논쟁은 다음과 같은 형태가 되어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;an + b&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 아이들과&lt;sup&gt;th&lt;/sup&gt; 일치시킬 수 있을 겁니다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;둘다요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;b&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 선택적 정수이며 둘 다 0 또는 음수일 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한다면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;0이면 &lt;em&gt;&quot;every&lt;/em&gt; a &lt;em&gt;child&lt;sup&gt;th&lt;/sup&gt;&quot;&lt;/em&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;a&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;negative인 경우 매칭은 에서 시작하여 역방향으로 수행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;b&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/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;b&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;0 또는 음수이면 양수를 사용하여 동치식을 작성할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;b&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;4n+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;4n+4&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.저도 마찬가지예요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;4n-1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;와 같은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;4n+3&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&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;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;4번째 자녀마다 선택(4, 8, 12, ...)&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;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;li:nth-child(4n) {
  background: yellow;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;ol&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1(1, 5, 9, ...)부터 4번째 자녀까지 선택합니다.&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;&gt; 
 &lt;div class=&quot;snippet-code snippet-currently-hidden&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;li:nth-child(4n+1) {
  background: yellow;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;ol&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;4명으로 구성된 그룹(3명과 4명, 7명과 8명, 11명과 12명, ...)에서 3번째와 4번째 아이를 모두 선택합니다.&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;&gt; 
 &lt;div class=&quot;snippet-code snippet-currently-hidden&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;/* two selectors are required */
li:nth-child(4n+3),
li:nth-child(4n+4) {
  background: yellow;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;ol&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;처음 4개 항목 선택(4, 3, 2, 1)&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;&gt; 
 &lt;div class=&quot;snippet-code snippet-currently-hidden&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;/* when a is negative then matching is done backwards  */
li:nth-child(-n+4) {
  background: yellow;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;ol&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Item&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이거 먹어봐요.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;div:nth-child(4n+4)
&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/3462298/select-every-nth-element-in-css&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>CSS</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1439</guid>
      <comments>https://newsource.tistory.com/1439#entry1439comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:52:57 +0900</pubDate>
    </item>
    <item>
      <title>파일 목록에서 파일을 제거하는 방법</title>
      <link>https://newsource.tistory.com/1438</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;HTML5를 사용하여 드래그 앤 드롭 투 업 로드 웹 애플리케이션을 구축하고 있으며, &lt;a href=&quot;http://www.w3.org/TR/FileAPI/#dfn-filelist&quot; rel=&quot;noreferrer&quot;&gt;파일&lt;/a&gt;을 디브에 떨어뜨리고 당연히 파일 목록을 제공하는 dataTransfer 개체를 가져옵니다.&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;font papago-translate=&quot;translated&quot;&gt;연결한 &lt;a href=&quot;http://www.w3.org/TR/FileAPI/#dfn-filelist&quot; rel=&quot;noreferrer&quot;&gt;File&lt;/a&gt; API &lt;a href=&quot;http://www.w3.org/TR/FileAPI/#dfn-filelist&quot; rel=&quot;noreferrer&quot;&gt;Working Draft&lt;/a&gt;(파일 &lt;a href=&quot;http://www.w3.org/TR/FileAPI/#dfn-filelist&quot; rel=&quot;noreferrer&quot;&gt;API&lt;/a&gt; 작업 초안)에는 다음과 같은 참고 사항이 포함되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HTMLInputElement&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;[HTML5] 인터페이스에 읽기 &lt;strong&gt;전용&lt;/strong&gt;이 있습니다.&lt;/font&gt;&lt;/font&gt; &lt;code&gt;FileList&lt;/code&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;[emphasis마이]&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML 5 작업 초안을 조금 읽다가 공통 &lt;a href=&quot;https://html.spec.whatwg.org/multipage/forms.html#common-input-element-apis&quot; rel=&quot;noreferrer&quot;&gt;요소 API&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;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;code&gt;input&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;빈 문자열에 대한 오브젝트는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.getElementById('multifile').value = &quot;&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그건 그렇고, 웹 &lt;a href=&quot;https://developer.mozilla.org/en/Using_files_from_web_applications&quot; rel=&quot;noreferrer&quot;&gt;애플리케이션의 파일을 사용&lt;/a&gt;한다는 기사도 흥미로울 것 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바스크립트 파일리스트는 읽기 전용이며 직접 조작할 수 없기 때문에,&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;베스트 메소드&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 당신이 순환해야 할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;input.files&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것과 비교하면서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;index&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제거할 파일을 저장합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그와 동시에, 당신은 다음을 사용할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;new DataTransfer()&lt;/code&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;input.files&lt;/code&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 class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;removeFileFromFileList(index) {
  const dt = new DataTransfer()
  const input = document.getElementById('files')
  const { files } = input
  
  for (let i = 0; i &amp;lt; files.length; i++) {
    const file = files[i]
    if (index !== i)
      dt.items.add(file) // here you exclude the file. thus removing it.
  }
  
  input.files = dt.files // Assign the updates list
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대체 방법&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또 다른 간단한 방법은 FileList를 배열로 변환한 다음 이를 연결하는 것입니다.&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;input.files&lt;/code&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;const input = document.getElementById('files')
// as an array, u have more freedom to transform the file list using array functions.
const fileListArr = Array.from(input.files)
fileListArr.splice(index, 1) // here u remove the file
console.log(fileListArr)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 질문에는 이미 답변이 표시되어 있지만, 다른 사용자가 파일 목록을 사용하는 데 도움이 될 수 있는 몇 가지 정보를 공유하고자 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일 목록을 배열로 취급하는 것이 편리하겠지만 정렬, 쉬프트, 팝, 슬라이스와 같은 방법은 작동하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 사용자가 제안한 대로 배열에 파일 목록을 복사할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 루프를 사용하는 것이 아니라 이러한 변환을 처리하는 간단한 한 줄 솔루션이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; // fileDialog.files is a FileList 

 var fileBuffer=[];

 // append the file list to an array
 Array.prototype.push.apply( fileBuffer, fileDialog.files ); // &amp;lt;-- here

 // And now you may manipulated the result as required

 // shift an item off the array
 var file = fileBuffer.shift(0,1);  // &amp;lt;-- works as expected
 console.info( file.name + &quot;, &quot; + file.size + &quot;, &quot; + file.type );

 // sort files by size
 fileBuffer.sort(function(a,b) {
    return a.size &amp;gt; b.size ? 1 : a.size &amp;lt; b.size ? -1 : 0;
 });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;FF, Chrome 및 IE10+에서 정상 테스트됨&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;Evergreen 브라우저(Chrome, Firefox, Edge)를 대상으로 하거나 Safari 9+에서도 작동하는 경우 또는 Polyfill을 사용할 수 있는 여유가 있는 경우 다음을 사용하여 FileList를 배열로 변경할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Array.from()&lt;/code&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 class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;let fileArray = Array.from(fileList);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 통해 다양한 제품군을 손쉽게 처리할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;File&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 배열처럼 말입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우리가 HTML5 영역에 있기 때문에 이것이 제 해결책입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일을 파일 목록에 두지 않고 배열에 밀어 넣은 다음 XHR2를 사용하여 FormData 개체에 파일을 밀어넣는 것이 핵심입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래 예시.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Node.prototype.replaceWith = function(node)
{
    this.parentNode.replaceChild(node, this);
};
if(window.File &amp;amp;&amp;amp; window.FileList)
{
    var topicForm = document.getElementById(&quot;yourForm&quot;);
    topicForm.fileZone = document.getElementById(&quot;fileDropZoneElement&quot;);
    topicForm.fileZone.files = new Array();
    topicForm.fileZone.inputWindow = document.createElement(&quot;input&quot;);
    topicForm.fileZone.inputWindow.setAttribute(&quot;type&quot;, &quot;file&quot;);
    topicForm.fileZone.inputWindow.setAttribute(&quot;multiple&quot;, &quot;multiple&quot;);
    topicForm.onsubmit = function(event)
    {
        var request = new XMLHttpRequest();
        if(request.upload)
        {
            event.preventDefault();
            topicForm.ajax.value = &quot;true&quot;;
            request.upload.onprogress = function(event)
            {
                var progress = event.loaded.toString() + &quot; bytes transfered.&quot;;
                if(event.lengthComputable)
                progress = Math.round(event.loaded / event.total * 100).toString() + &quot;%&quot;;
                topicForm.fileZone.innerHTML = progress.toString();
            };
            request.onload = function(event)
            {
                response = JSON.parse(request.responseText);
                // Handle the response here.
            };
            request.open(topicForm.method, topicForm.getAttribute(&quot;action&quot;), true);
            var data = new FormData(topicForm);
            for(var i = 0, file; file = topicForm.fileZone.files[i]; i++)
                data.append(&quot;file&quot; + i.toString(), file);
            request.send(data);
        }
    };
    topicForm.fileZone.firstChild.replaceWith(document.createTextNode(&quot;Drop files or click here.&quot;));
    var handleFiles = function(files)
    {
        for(var i = 0, file; file = files[i]; i++)
            topicForm.fileZone.files.push(file);
    };
    topicForm.fileZone.ondrop = function(event)
    {
        event.stopPropagation();
        event.preventDefault();
        handleFiles(event.dataTransfer.files);
    };
    topicForm.fileZone.inputWindow.onchange = function(event)
    {
        handleFiles(topicForm.fileZone.inputWindow.files);
    };
    topicForm.fileZone.ondragover = function(event)
    {
        event.stopPropagation();
        event.preventDefault();
    };
    topicForm.fileZone.onclick = function()
    {
        topicForm.fileZone.inputWindow.focus();
        topicForm.fileZone.inputWindow.click();
    };
}
else
    topicForm.fileZone.firstChild.replaceWith(document.createTextNode(&quot;It's time to update your browser.&quot;));
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 이에 대한 매우 신속하고 짧은 해결책을 찾았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;많은 인기 브라우저(Chrome, Firefox, Safari)에서 테스트되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;먼저 FileList를 Array로 변환해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var newFileList = Array.from(event.target.files);
&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;newFileList.splice(index,1);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 오래된 질문이라는 것을 알고 있지만 이 문제와 관련하여 검색 엔진에서 높은 순위를 차지하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;FileList&lt;/strong&gt; 개체의 속성은 삭제할 수 없지만 최소한 Firefox에서는 &lt;strong&gt;변경&lt;/strong&gt;할 수 &lt;strong&gt;있습니다&lt;/strong&gt;.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 문제에 대한 내 작업은 속성을 추가하는 것이었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;IsValid=true&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;확인을 통과한 파일들과&lt;/font&gt;&lt;/font&gt;&lt;code&gt;IsValid=false&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇지 않은 사람들에게.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 다음에 목록을 뒤적여 그 안에 있는 것 뿐입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;IsValid=true&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;FormData&lt;/strong&gt;에 추가됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;@Nicholas Anderson 간단하고 직설적으로 감사드립니다. 여기 당신의 코드가 적용되어 jquery를 사용하여 제 코드로 작동하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input class=&quot;rangelog btn border-aero&quot; id=&quot;file_fr&quot; name=&quot;file_fr[]&quot; multiple type=&quot;file&quot; placeholder=&quot;{$labels_helpfiles_placeholder_file}&quot;&amp;gt;
&amp;lt;span style=&quot;cursor: pointer; cursor: hand;&quot; onclick=&quot;cleanInputs($('#file_fr'))&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-trash&quot;&amp;gt;&amp;lt;/i&amp;gt; Empty chosen files&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JS CODE&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   function cleanInputs(fileEle){
    $(fileEle).val(&quot;&quot;);
    var parEle = $(fileEle).parent();
    var newEle = $(fileEle).clone()
    $(fileEle).remove();
    $(parEle).prepend(newEle);
}
&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;저의 경우 XMLHtp 요청을 통해 파일을 업로드하고 있었기 때문에 양식 데이터 첨부를 통해 파일 목록 복제 데이터를 게시할 수 있었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;여러 파일을 원하는 만큼 끌어서 놓거나 선택할 수 있으며(파일을 다시 선택해도 복제된 파일 목록이 재설정되지 않음), (복제된) 파일 목록에서 원하는 모든 파일을 제거하고 남은 파일은 xmlhttprequest를 통해 제출할 수 있습니다.&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이게 제가 한 일입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 여기에 올린 첫 번째 게시물이라 코드가 좀 지저분합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;미안하다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아, 그리고 줌라 대본처럼 달러가 아닌 jQuery를 써야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// some global variables
var clon = {};  // will be my FileList clone
var removedkeys = 0; // removed keys counter for later processing the request
var NextId = 0; // counter to add entries to the clone and not replace existing ones

jQuery(document).ready(function(){
    jQuery(&quot;#form input&quot;).change(function () {

    // making the clone
    var curFiles = this.files;
    // temporary object clone before copying info to the clone
    var temparr = jQuery.extend(true, {}, curFiles);
    // delete unnecessary FileList keys that were cloned
    delete temparr[&quot;length&quot;];
    delete temparr[&quot;item&quot;];

    if (Object.keys(clon).length === 0){
       jQuery.extend(true, clon, temparr);
    }else{
       var keysArr = Object.keys(clon);
       NextId = Math.max.apply(null, keysArr)+1; // FileList keys are numbers
       if (NextId &amp;lt; curFiles.length){ // a bug I found and had to solve for not replacing my temparr keys...
          NextId = curFiles.length;
       }
       for (var key in temparr) { // I have to rename new entries for not overwriting existing keys in clon
          if (temparr.hasOwnProperty(key)) {
             temparr[NextId] = temparr[key];
             delete temparr[key];
                // meter aca los cambios de id en los html tags con el nuevo NextId
                NextId++;
          }
       } 
       jQuery.extend(true, clon, temparr); // copy new entries to clon
    }

// modifying the html file list display

if (NextId === 0){
    jQuery(&quot;#filelist&quot;).html(&quot;&quot;);
    for(var i=0; i&amp;lt;curFiles.length; i++) {
        var f = curFiles[i];
        jQuery(&quot;#filelist&quot;).append(&quot;&amp;lt;p id=\&quot;file&quot;+i+&quot;\&quot; style=\'margin-bottom: 3px!important;\'&amp;gt;&quot; + f.name + &quot;&amp;lt;a style=\&quot;float:right;cursor:pointer;\&quot; onclick=\&quot;BorrarFile(&quot;+i+&quot;)\&quot;&amp;gt;x&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&quot;); // the function BorrarFile will handle file deletion from the clone by file id
    }
}else{
    for(var i=0; i&amp;lt;curFiles.length; i++) {
        var f = curFiles[i];
        jQuery(&quot;#filelist&quot;).append(&quot;&amp;lt;p id=\&quot;file&quot;+(i+NextId-curFiles.length)+&quot;\&quot; style=\'margin-bottom: 3px!important;\'&amp;gt;&quot; + f.name + &quot;&amp;lt;a style=\&quot;float:right;cursor:pointer;\&quot; onclick=\&quot;BorrarFile(&quot;+(i+NextId-curFiles.length)+&quot;)\&quot;&amp;gt;x&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&quot;); // yeap, i+NextId-curFiles.length actually gets it right
    }        
}
// update the total files count wherever you want
jQuery(&quot;#form p&quot;).text(Object.keys(clon).length + &quot; file(s) selected&quot;);
    });
});

function BorrarFile(id){ // handling file deletion from clone
    jQuery(&quot;#file&quot;+id).remove(); // remove the html filelist element
    delete clon[id]; // delete the entry
    removedkeys++; // add to removed keys counter
    if (Object.keys(clon).length === 0){
        jQuery(&quot;#form p&quot;).text(Object.keys(clon).length + &quot; file(s) selected&quot;);
        jQuery(&quot;#fileToUpload&quot;).val(&quot;&quot;); // I had to reset the form file input for my form check function before submission. Else it would send even though my clone was empty
    }else{
        jQuery(&quot;#form p&quot;).text(Object.keys(clon).length + &quot; file(s) selected&quot;);
    }
}
// now my form check function

function check(){
    if( document.getElementById(&quot;fileToUpload&quot;).files.length == 0 ){
        alert(&quot;No file selected&quot;);
        return false;
    }else{
        var _validFileExtensions = [&quot;.pdf&quot;, &quot;.PDF&quot;]; // I wanted pdf files
        // retrieve input files
        var arrInputs = clon;

       // validating files
       for (var i = 0; i &amp;lt; Object.keys(arrInputs).length+removedkeys; i++) {
         if (typeof arrInputs[i]!=&quot;undefined&quot;){
           var oInput = arrInputs[i];
           if (oInput.type == &quot;application/pdf&quot;) {
               var sFileName = oInput.name;
               if (sFileName.length &amp;gt; 0) {
                   var blnValid = false;
                   for (var j = 0; j &amp;lt; _validFileExtensions.length; j++) {
                     var sCurExtension = _validFileExtensions[j];
                     if (sFileName.substr(sFileName.length - sCurExtension.length, sCurExtension.length).toLowerCase() == sCurExtension.toLowerCase()) {
                       blnValid = true;
                       break;
                     }
                   }
                  if (!blnValid) {
                    alert(&quot;Sorry, &quot; + sFileName + &quot; is invalid, allowed extensions are: &quot; + _validFileExtensions.join(&quot;, &quot;));
                    return false;
                  }
              }
           }else{
           alert(&quot;Sorry, &quot; + arrInputs[0].name + &quot; is invalid, allowed extensions are: &quot; + _validFileExtensions.join(&quot; or &quot;));
           return false;
           }
         }
       }

    // proceed with the data appending and submission
    // here some hidden input values i had previously set. Now retrieving them for submission. My form wasn't actually even a form...
    var fecha = jQuery(&quot;#fecha&quot;).val();
    var vendor = jQuery(&quot;#vendor&quot;).val();
    var sku = jQuery(&quot;#sku&quot;).val();
    // create the formdata object
    var formData = new FormData();
    formData.append(&quot;fecha&quot;, fecha);
    formData.append(&quot;vendor&quot;, encodeURI(vendor));
    formData.append(&quot;sku&quot;, sku);
    // now appending the clone file data (finally!)
    var fila = clon; // i just did this because I had already written the following using the &quot;fila&quot; object, so I copy my clone again
    // the interesting part. As entries in my clone object aren't consecutive numbers I cannot iterate normally, so I came up with the following idea
    for (i = 0; i &amp;lt; Object.keys(fila).length+removedkeys; i++) { 
        if(typeof fila[i]!=&quot;undefined&quot;){
            formData.append(&quot;fileToUpload[]&quot;, fila[i]); // VERY IMPORTANT the formdata key for the files HAS to be an array. It will be later retrieved as $_FILES['fileToUpload']['temp_name'][i]
        }
    }
    jQuery(&quot;#submitbtn&quot;).fadeOut(&quot;slow&quot;); // remove the upload btn so it can't be used again
    jQuery(&quot;#drag&quot;).html(&quot;&quot;); // clearing the output message element
    // start the request
    var xhttp = new XMLHttpRequest();
    xhttp.addEventListener(&quot;progress&quot;, function(e) {
            var done = e.position || e.loaded, total = e.totalSize || e.total;
        }, false);
        if ( xhttp.upload ) {
            xhttp.upload.onprogress = function(e) {
                var done = e.position || e.loaded, total = e.totalSize || e.total;
                var percent = done / total;
                jQuery(&quot;#drag&quot;).html(Math.round(percent * 100) + &quot;%&quot;);
            };
        }
      xhttp.onreadystatechange = function() {
        if (this.readyState == 4 &amp;amp;&amp;amp; this.status == 200) {
         var respuesta = this.responseText;
         jQuery(&quot;#drag&quot;).html(respuesta);
        }
      };
      xhttp.open(&quot;POST&quot;, &quot;your_upload_handler.php&quot;, true);  
      xhttp.send(formData);
    return true;
    }
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&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;pre&gt;&lt;code&gt;&amp;lt;div id=&quot;form&quot; class=&quot;formpos&quot;&amp;gt;
&amp;lt;!--    Select the pdf to upload:--&amp;gt;
  &amp;lt;input type=&quot;file&quot; name=&quot;fileToUpload[]&quot; id=&quot;fileToUpload&quot; accept=&quot;application/pdf&quot; multiple&amp;gt;
  &amp;lt;div&amp;gt;&amp;lt;p id=&quot;drag&quot;&amp;gt;Drop your files here or click to select them&amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;button id=&quot;submitbtn&quot; onclick=&quot;return check()&quot; &amp;gt;Upload&amp;lt;/button&amp;gt;
// these inputs are passed with different names on the formdata. Be aware of that
// I was echoing this, so that's why I use the single quote for php variables
  &amp;lt;input type=&quot;hidden&quot; id=&quot;fecha&quot; name=&quot;fecha_copy&quot; value=&quot;'.$fecha.'&quot; /&amp;gt;
  &amp;lt;input type=&quot;hidden&quot; id=&quot;vendor&quot; name=&quot;vendorname&quot; value=&quot;'.$vendor.'&quot; /&amp;gt;
  &amp;lt;input type=&quot;hidden&quot; id=&quot;sku&quot; name=&quot;sku&quot; value=&quot;'.$sku.'&quot;&quot; /&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;h1 style=&quot;width: 500px!important;margin:20px auto 0px!important;font-size:24px!important;&quot;&amp;gt;File list:&amp;lt;/h1&amp;gt;
&amp;lt;div id=&quot;filelist&quot; style=&quot;width: 500px!important;margin:10px auto 0px!important;&quot;&amp;gt;Nothing selected yet&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스타일이.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주믈라의 행동을 무시하기 위해서는 그들 중 일부를 표시해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.formpos{
  width: 500px;
  height: 200px;
  border: 4px dashed #999;
  margin: 30px auto 100px;
 }
.formpos  p{
  text-align: center!important;
  padding: 80px 30px 0px;
  color: #000;
}
.formpos  div{
  width: 100%!important;
  height: 100%!important;
  text-align: center!important;
  margin-bottom: 30px!important;
}
.formpos input{
  position: absolute!important;
  margin: 0!important;
  padding: 0!important;
  width: 500px!important;
  height: 200px!important;
  outline: none!important;
  opacity: 0!important;
}
.formpos button{
  margin: 0;
  color: #fff;
  background: #16a085;
  border: none;
  width: 508px;
  height: 35px;
  margin-left: -4px;
  border-radius: 4px;
  transition: all .2s ease;
  outline: none;
}
.formpos button:hover{
  background: #149174;
  color: #0C5645;
}
.formpos button:active{
  border:0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도움이 되었으면 좋겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;좀 더 우아한 방법이 있겠지만 여기 제 해결책이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쥬리와 함께&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;fileEle.value = &quot;&quot;;
var parEle = $(fileEle).parent();
var newEle = $(fileEle).clone()
$(fileEle).remove();
parEle.append(newEle);
&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;파일과 함께 데이터베이스에 포스트 요청을 보낼 수 있는 행운이 있고 DOM에 보낼 파일이 있는 경우&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일 목록에 있는 파일이 DOM에 있는지 간단하게 확인할 수 있으며, 그렇지 않은 경우에는 해당 요소를 dDB로 보내지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 이것이 꽤 오래된 질문이라는 것을 알지만, 나는 제출하기 전에 사용자 정의 UI에서 선택적으로 제거할 수 있는 파일의 수를 대기열에 넣기 위해 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;let uploadedFiles = [];

//inside DOM file select &quot;onChange&quot; event
let selected = e.target.files[0] ? e.target.files : [];
uploadedFiles = [...uploadedFiles , ...selected ];
createElements();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;&quot;remove&lt;/strong&gt; a &lt;strong&gt;file&lt;/strong&gt;&quot;로 UI 만들기&lt;strong&gt;:&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function createElements(){
  uploadedFiles.forEach((f,i) =&amp;gt; {

    //remove DOM elements and re-create them here
    /* //you can show an image like this:
    *  let reader = new FileReader();
    *  reader.onload = function (e) {
    *    let url = e.target.result;
    *    // create &amp;lt;img src=url /&amp;gt;
    *  };
    *  reader.readAsDataURL(f);
    */

    element.addEventListener(&quot;click&quot;, function () {
      uploadedFiles.splice(i, 1);
      createElements();
    });

  }
}
&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;let fd = new FormData();
uploadedFiles.forEach((f, i) =&amp;gt; {
  fd.append(&quot;files[]&quot;, f);
});
fetch(&quot;yourEndpoint&quot;, { 
  method: &quot;POST&quot;, 
  body: fd, 
  headers: { 
    //do not set Content-Type 
  } 
}).then(...)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 많은 개발자들의 솔루션을 혼합하여 이 솔루션에 도달합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;삭제 후 원래 배열 목록을 변경하므로 이미지를 저장하려면 이렇게 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
    var images = [];
      function image_select() {
          var image = document.getElementById('image').files;
          for (i = 0; i &amp;lt; image.length; i++) {
            images.push({
                &quot;name&quot; : image[i].name,
                &quot;url&quot; : URL.createObjectURL(image[i]),
                &quot;file&quot; : image[i],
            })
          }
          document.getElementById('container').innerHTML = image_show();
      }

      function image_show() {
          var image = &quot;&quot;;
          images.forEach((i) =&amp;gt; {
             image += `&amp;lt;div class=&quot;image_container d-flex justify-content-center position-relative&quot;&amp;gt;
                  &amp;lt;img src=&quot;`+ i.url +`&quot; alt=&quot;Image&quot;&amp;gt;
                  &amp;lt;span class=&quot;position-absolute&quot; onclick=&quot;delete_image(`+ images.indexOf(i) +`)&quot;&amp;gt;&amp;amp;times;&amp;lt;/span&amp;gt;
              &amp;lt;/div&amp;gt;`;
          })
          return image;
      }
      function delete_image(e) {
        images.splice(e, 1);
        document.getElementById('container').innerHTML = image_show();

        const dt = new DataTransfer()
        const input = document.getElementById('image')
        const { files } = input

        for (let i = 0; i &amp;lt; files.length; i++) {
            const file = files[i]
            if (e !== i)
            dt.items.add(file);
        }

        input.files = dt.files;
        console.log(document.getElementById('image').files);
      }
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;**********html 코드 ******입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;container mt-3 w-100&quot;&amp;gt;
        &amp;lt;div class=&quot;card shadow-sm w-100&quot;&amp;gt;
            &amp;lt;div class=&quot;card-header d-flex justify-content-between&quot;&amp;gt;
                &amp;lt;h4&amp;gt;Preview Multiple Images&amp;lt;/h4&amp;gt;
                &amp;lt;form class=&quot;form&quot; action=&quot;{{route('store')}}&quot; method=&quot;post&quot; id=&quot;form&quot; enctype=&quot;multipart/form-data&quot;&amp;gt;
                    @csrf
                    &amp;lt;input type=&quot;file&quot; name=&quot;image[]&quot; id=&quot;image&quot; multiple onchange=&quot;image_select()&quot;&amp;gt;
                    &amp;lt;button class=&quot;btn btn-sm btn-primary&quot; type=&quot;submit&quot;&amp;gt;Submit&amp;lt;/button&amp;gt;
                &amp;lt;/form&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;card-body d-flex flex-wrap justify-content-start&quot; id=&quot;container&quot;&amp;gt;

            &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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;******* CSS 코드 ********입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
        .image_container {
    height: 120px;
    width: 200px;
    border-radius: 6px;
    overflow: hidden;
    margin: 10px;
}
.image_container img {
    height: 100%;
    width: auto;
    object-fit: cover;
}
.image_container span {
    top: -6px;
    right: 8px;
    color: red;
    font-size: 28px;
    font-weight: normal;
    cursor: pointer;
}
    &amp;lt;/style&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 TypeScript를 사용하고 있는데, Type Checking이 심해서 모든 단계에서 불만이 있었습니다.&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;따라서 TS를 사용하는 모든 라이브러리/프레임워크와 함께 작동해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;const ele = document.getElementById('file-upload') as HTMLInputElement;
if (ele) {
    ele.value = &quot;&quot;;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;읽기 전용 파일 목록 대신 배열을 만들어 사용할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var myReadWriteList = new Array();
// user selects files later...
// then as soon as convenient... 
myReadWriteList = FileListReadOnly;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 이후 기본 제공 목록 대신 목록에 대해 업로드를 수행합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 당신이 작업하고 있는 문맥을 잘 모르지만 제가 찾은 jquery plugin과 함께 작업하고 있으며, 제가 해야 할 일은 plugin의 소스를 가져와서 사용하여 페이지에 넣는 것이었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;tags. 그 다음 소스 위에 나의 배열을 추가해서 글로벌 변수로 작용하고 플러그인이 참조할 수 있도록 했습니다.&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;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; //position  -&amp;gt; the position of the file you need to delete

  this.fileImgs.forEach((item, index, object) =&amp;gt; {
     if(item.idColor === idC){
        if(item.imgs.length === 1){
            object.splice(index,1) }
        else{
           const itemFileImgs = [...item.imgs];
           itemFileImgs.splice(position,1)
           item.imgs = [...itemFileImgs] 
            }
        }});
      console.log(this.fileImgs)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9AGjH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9AGjH.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;인뷰 js:&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;self.$refs.inputFile.value = ''&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;텍스트의 입력 유형을 변경하고 파일로 다시 돌아갑니다:D&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/3144419/how-do-i-remove-a-file-from-the-filelist&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>javascript</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1438</guid>
      <comments>https://newsource.tistory.com/1438#entry1438comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:52:49 +0900</pubDate>
    </item>
    <item>
      <title>오류가 발생한 이유: 그룹 기능이 잘못 사용되었습니까?</title>
      <link>https://newsource.tistory.com/1437</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;JSON_OBJECT를 반환하는 mariadb 함수를 만들었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기능은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DROP FUNCTION IF EXISTS jsontree;

CREATE FUNCTION jsontree (user_id VARCHAR(36)) RETURNS LONGTEXT RETURN (
    SELECT JSON_OBJECT(
        '_item_type', JSON_UNQUOTE(&quot;model&quot;),
        '_path', JSON_UNQUOTE(&quot;organization&quot;),
        '_title', JSON_UNQUOTE(&quot;Organizations&quot;),
        'user', (
            SELECT JSON_OBJECT(
                '_item_type', JSON_UNQUOTE(&quot;node&quot;),
                '_path', JSON_UNQUOTE(&quot;organizations.user&quot;),
                '_title', JSON_UNQUOTE(&quot;Users&quot;),
                '_table', JSON_UNQUOTE(&quot;user&quot;),
                'children', JSON_ARRAYAGG(
                    JSON_OBJECT(
                        'user.createdAt', user.createdAt,
                        'user.createdBy', user.createdBy,
                        'user.number', user.number,
                        'user.name', user.name,
                        'user.description', user.description,
                        'user.user_id', user.user_id,
                        'user.organization_id', user.organization_id,
                        'user.job_id', user.job_id,
                        'user.password', user.password,
                        'organization', (
                            SELECT JSON_OBJECT(
                                '_item_type', JSON_UNQUOTE(&quot;node&quot;),
                                '_path', JSON_UNQUOTE(&quot;organizations.user.organization&quot;),
                                '_title', JSON_UNQUOTE(&quot;Organizations&quot;),
                                '_table', JSON_UNQUOTE(&quot;organization&quot;),
                                'children', JSON_ARRAYAGG(
                                    JSON_OBJECT(
                                        'organization.id', organization_table.id,
                                        'organization.createdAt', organization_table.createdAt,
                                        'organization.createdBy', organization_table.createdBy,
                                        'organization.number', organization_table.number,
                                        'organization.name', organization_table.name,
                                        'organization.description', organization_table.description,
                                        'organization.user_id', organization_table.user_id,
                                        'organization.organization_id', organization_table.organization_id
                                    )
                                )
                            ) FROM organization organization_table
                                INNER JOIN user user_join ON organization_table.user_id = user_join.id
                                WHERE organization_table.user_id = user.id
                        )
                    )
                )
            ) FROM user where user.id = user_id
        )
    )
);

SELECT jsontree ('4841aa13-01a6-11ed-8fb9-da2c4dfd0e4f');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수 외부에서 select 문을 실행하면 의도된 JSON_OBJECT가 반환되지만 함수 내에서 실행하면 다음 오류 메시지가 계속 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오류 1111 (HY000):&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그룹 함수를 잘못 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 오류의 원인은 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/73933585/what-is-the-reason-of-the-error-invalid-use-of-group-function&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1437</guid>
      <comments>https://newsource.tistory.com/1437#entry1437comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:52:33 +0900</pubDate>
    </item>
    <item>
      <title>가장 짧은 C 프로그램은 여전히 segfault를 유발합니다.</title>
      <link>https://newsource.tistory.com/1436</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가장 짧은 C 프로그램은 여전히 segfault를 유발합니다.&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;pre&gt;&lt;code&gt;int main;
&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;int&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그러나 경고가 발령됩니다(없는 경우에도).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-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;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;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 진짜.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;정확히 무슨 일이 일어나고 있는 거지?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 추측으로는 다음과 같습니다. 부족한 부분입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의 정의.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이건 너무 뻔한데도 컴파일러가 허락해주잖아요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 단위로 정의될 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 링커조차도 그것에 대해 아무것도 하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특별한 이유라도?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단어를&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 모든 변수의 법적 이름입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대표적인 사용 사례는 이름의 기능을 제공하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컴파일러로, 컴파일러는 그것을 오브젝트 파일로 컴파일하고, 그것은 차례로 와 연결됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;crt0.o&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행 시간(스택 할당 등)에 대한 초기화를 제공하고 레이블로 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C 개체 파일에서 기호는 프로토타입과 연관되지 않으며 링커는 전역 변수를 연결하는 데 성공합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int main;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가장 중요한 프로그램으로.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 이 프로그램은 쓰레기입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아마도 0으로 초기화될 가능성이 높지만, 곧 프로세서는 할당된 데이터 공간(스택 + 힙) 외부의 메모리에 접근하는 임의의 명령어를 만나게 되거나 명령어 흐름이 예약된 코드 공간의 한계에 도달하게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;둘 다 분할 오류를 발생시킵니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제로 시스템이 &lt;em&gt;eXecution 플래그&lt;/em&gt;가 있는 아키텍처에서 실행되는 경우, 실행 권한 없이 &lt;em&gt;데이터&lt;/em&gt; 세그먼트나 페이지로 이동하려는 첫 번째 시도에서 프로그램 segf에 장애가 발생합니다.&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_Execution_Prevention&quot;&gt;Data Execute Prevention&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/NX_bit&quot;&gt;NX_bit&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/15333215/the-shortest-c-program-still-causes-segfault&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1436</guid>
      <comments>https://newsource.tistory.com/1436#entry1436comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:52:26 +0900</pubDate>
    </item>
    <item>
      <title>Quickest way to initialize an array of structures to all-0's?</title>
      <link>https://newsource.tistory.com/1435</link>
      <description>&lt;h2&gt;Quickest way to initialize an array of structures to all-0's?&lt;/h2&gt;
&lt;p&gt;I'm trying to initialize an array of structures to all-0's, using the below syntax:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;STRUCTA array[MAX] = {0};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;However, I'm getting the following warning from gcc :&lt;/p&gt; 
&lt;p&gt;warning: missing braces around initializer&lt;/p&gt; 
&lt;p&gt;What am i doing wrong - is there another/better way to do this ?&lt;/p&gt;&lt;p&gt;It the first member of your struct has a scalar type, use&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;STRUCTA array[MAX] = {{ 0 }};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If the first member of your struct happens to be another struct object, whose first member has scalar type, then you'll have to use&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;STRUCTA array[MAX] = {{{ 0 }}};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;등등.&lt;/font&gt;&lt;font 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;다른 중첩 집합체(구조체 또는 배열)를 &quot;입력&quot;할 때마다.&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;{}&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 모든 여분의 교정기들은 경고를 피하기 위해 거기에 있을 뿐입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론, 이것은 (이 특정한 경우에는) 무해한 경고일 뿐입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;심플하게 사용하시면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;{ 0 }&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;효과가 있을 겁니다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아마도 이 문제를 해결하는 가장 좋은 방법은 이 경고를 완전히 비활성화하는 것입니다(오른쪽 명령줄 옵션은 @pmg의 답변 참조).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GCC에서 일하는 누군가가 명확하게 생각하지 않았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 말은, 저는 그 경고의 가치를 이해하지만(그리고 그것은 정말로 매우 유용할 수 있습니다), 기능을 깨뜨립니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;{ 0 }&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;허용할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;{ 0 }&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특별한 치료를 받았어야 했어요&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;gcc는 성가신 존재입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 경고 없이 받아들여야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이거 먹어봐요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;STRUCTA array[MAX] = {{0}};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;gcc 동작은 옵션을 사용하여 제어할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-Wmissing-braces&lt;/code&gt;&lt;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-missing-braces&lt;/code&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;-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;code&gt;-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;code&gt;-Wall -Wno-missing-braces&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;이것은 단지 gcc에서 발행하는 유해한 경고이며, 나는 그것을 비활성화 할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-Wno-braces&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;{0}&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드의 정의가 인식되지 않아야 하는 유형에 매우 유용한 &quot;유니버설 제로 이니셜라이저&quot;이며, gcc의 사용을 억제하는 것은 좋은 코드를 추구하는 데 적극적으로 해롭습니다.&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;gcc가 이 경고를 유지하려면 최소한 특수한 경우에 해당해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;{0}&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 경우 경고를 비활성화합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;You can avoid the warning by using completely empty braces:&lt;/p&gt; 
&lt;p&gt;STRUCTA array[10] = {};&lt;/p&gt; 
&lt;p&gt;The array will be &lt;a href=&quot;https://en.cppreference.com/w/cpp/language/aggregate_initialization&quot; rel=&quot;nofollow noreferrer&quot;&gt;aggregate-initialized&lt;/a&gt;, which means that each of the structs in it will in turn be &lt;a href=&quot;https://en.cppreference.com/w/cpp/language/value_initialization&quot; rel=&quot;nofollow noreferrer&quot;&gt;value-initialized&lt;/a&gt;. Value-initialization with empty brackets turns into &lt;a href=&quot;https://en.cppreference.com/w/cpp/language/aggregate_initialization&quot; rel=&quot;nofollow noreferrer&quot;&gt;aggregate-initializion&lt;/a&gt; of each struct, which sets all fields to 0, which is what you want.&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 방법은 구조물이 POD인 경우에는 모든 경우에 적용됩니다(자세한 설명은 위 링크 참조).&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;당신은 아마도 당신의 0 주위에 추가적인 치아 교정기를 설치할 필요가 있을 것입니다. 그리고 방법에 따라서.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;STRUCTA&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정의됩니다. 일부 여분의 0은 쉼표로 구분됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;STROCTA에 따라 다릅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;typedef struct structa 
{
    int a, b;
} STRUCTA;

int main (int argc, char const* argv[])
{
    STRUCTA array[10] = {{0,0}};
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;STROCTA는 0에 할당할 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언제든지 memset()을 사용할 수 있습니다.&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/5434865/quickest-way-to-initialize-an-array-of-structures-to-all-0s&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1435</guid>
      <comments>https://newsource.tistory.com/1435#entry1435comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:52:20 +0900</pubDate>
    </item>
    <item>
      <title>MySQL로 .sql 파일을 가져오면 기존 db를 덮어쓰나요 아니면 추가하나요?</title>
      <link>https://newsource.tistory.com/1434</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL로 .sql 파일을 가져오면 기존 db를 덮어쓰나요 아니면 추가하나요?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 경우에는 .sql 파일을 생성하기 위해 mysqldump를 수행해야 했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테스트 및 개발을 위해 MySQL 데이터베이스를 약간 변경한 후 이전 상태로 복원하고자 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 나는 .sql 파일을 가져옵니다.&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;font papago-translate=&quot;translated&quot;&gt;.sql 파일에서 가져온 것을 덮어쓰고 데이터베이스와 테이블을 완전히 다시 생성합니까, 아니면 추가합니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;감사합니다!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SQL 파일에 포함된 명령어에 따라 달라집니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;관심있는 명령은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DROP DATABASE xxx;            # will delete the whole database
DROP TABLE xxx;               # unconditionally deletes a table
CREATE TABLE [IF NOT EXISTS]  # if IF NOT EXISTS adds the table, does nothing if exists
                              # otherwise, it adds the table, gives an error if it exists
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가져오기 파일이 테이블을 다르게 취급하지 않는 한 추가됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/12619871/does-import-of-a-sql-file-to-mysql-overwrite-the-existing-db-or-append-to-it&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1434</guid>
      <comments>https://newsource.tistory.com/1434#entry1434comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:52:13 +0900</pubDate>
    </item>
    <item>
      <title>조합 또는 가입 사용 - 더 빠른 것</title>
      <link>https://newsource.tistory.com/1433</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/2309936/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;2017-08-1708:04:19Z&quot; papago-attr-id=&quot;1&quot;&gt;6년전&lt;/span&gt;에 문을 닫았습니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;ml24 pl2&quot;&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;mt24 d-flex gsx gs8&quot;&gt; 
   &lt;a class=&quot;s-btn s-btn__outlined flex--item js-post-notice-edit-post&quot; href=&quot;/posts/2309936/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;/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;Union은 첫 번째 SELECT 문을 간단히 통과한 다음 두 번째 SELECT 문을 파싱하고 결과를 출력 테이블의 끝에 추가하기 때문에 더 빠릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;조인은 두 테이블의 각 행을 거치며 다른 테이블에서 일치하는 항목을 찾습니다. 따라서 각 행과 모든 행에 대해 일치하는 행을 검색하기 때문에 훨씬 더 많은 처리가 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편집&lt;/font&gt;&lt;/h3&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;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;EDIT 2 (@seebiscuit의 코멘트에 응답)&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 그의 의견에 동의하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;엄밀히 말하면, 아무리 좋은 가입자라도 &quot;JOIN&quot;은 여전히 순수한 연결보다 더 비쌉니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;블로그 &lt;a href=&quot;http://www.codeperf.net/sql-union-vs-join-performance/&quot; rel=&quot;noreferrer&quot;&gt;코드&lt;/a&gt;로 증명하려고 블로그에 글을 올렸습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://www.codeperf.net/sql-union-vs-join-performance/&quot; rel=&quot;noreferrer&quot;&gt;PERF[도트]넷&lt;/a&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제로는 완전히 다른 두 가지 목적에 도움이 되며 색인 작업이 올바른지 확인하고 작업에 적합한 도구를 사용하는 것이 더 중요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;엄밀히 말하면, 제 블로그 포스트에서 가져온 다음 두 가지 실행 계획을 사용하여 요약할 수 있다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h1&gt;&lt;code&gt;UNION ALL&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행계획&lt;/font&gt;&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JV0P9.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JV0P9.png&quot; alt=&quot;UNION ALL Execution Plan&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h1&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;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TzShk.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TzShk.png&quot; alt=&quot;JOIN Execution Plan&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실무결과&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클러스터 인덱스 룩업에 대한 차이는 실질적으로 무시할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Lj6Dq.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Lj6Dq.png&quot; alt=&quot;Benchmark Results&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&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;code&gt;UNION&lt;/code&gt;&lt;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;code&gt;UNION&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 개의 서로 다른 쿼리의 결과를 동일한 열로 결합하는 데 사용됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 것이 더 효율적인지 묻는 것은 &quot;빵 한 덩어리&quot;와 &quot;바람 부는&quot; 중 어떤 것이 더 &quot;오렌지&quot;인지 묻는 것과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파티를 망쳐서 미안하지만, 잘 작성된 가입이 조합보다 빠를 겁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;em&gt;구문&lt;/em&gt; 분석됩니다(여러 개의 하위 선택 평가 필요 없음).&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;결과 집합은 유혹적으로 실현되지 않습니다(UNION ALL에 대해서도 균등해집니다).&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단일 SELECT는 테이블당 하나의 인덱스만 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;UNION은 UNION에서 SELECT당 하나의 인덱스를 사용할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;UNION은 더 빠른 질의 결과를 가져올 수 있는 인덱스를 더 잘 활용할 것입니다.&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/2309936/use-a-union-or-a-join-what-is-faster&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1433</guid>
      <comments>https://newsource.tistory.com/1433#entry1433comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:52:07 +0900</pubDate>
    </item>
    <item>
      <title>PHP나 자바스크립트를 사용하지 않고 콘텐츠에 맞게 텍스트 영역을 확장할 수 있는 방법이 있습니까?</title>
      <link>https://newsource.tistory.com/1432</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PHP나 자바스크립트를 사용하지 않고 콘텐츠에 맞게 텍스트 영역을 확장할 수 있는 방법이 있습니까?&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CSS로 콘텐츠에 맞게 확장할 수 있습니까? (예:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;overflow:show&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;디브(div)?&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;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;textarea name=&quot;text&quot; oninput='this.style.height = &quot;&quot;;this.style.height = this.scrollHeight + &quot;px&quot;'&amp;gt;&amp;lt;/textarea&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사실 그렇지 않아요.&lt;/font&gt;&lt;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;https://stackoverflow.com/questions/7477/autosizing-textarea&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로토타입을 이용한 텍스트 영역 자동 크기 조정&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면, 당신은 a를 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;contenteditable&lt;/code&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;div contenteditable&amp;gt;Try typing and returning.&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일부 자바스크립트를 사용하지 않고는 양식으로 이 값을 보낼 수 없으니 참고하시기 바랍니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;contenteditable&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML 컨텐츠를 생성하고 스타일링을 허용하므로 양식 제출 시 이를 걸러야 할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;각도&lt;/strong&gt; 재료 &lt;strong&gt;설계&lt;/strong&gt;만 사용할 경우 &lt;strong&gt;각도&lt;/strong&gt;에 대한 질문이므로 질문과 100% 관련이 없습니다.&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;Angular와 연관된 npm 패키지가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@angular/cdk&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;textarea&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;cdkTextarea&lt;/strong&gt;라고 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자동 &lt;strong&gt;사이즈&lt;/strong&gt;.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 자동으로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;textarea&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한 줄로 뻗고 늘어뜨립니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;textarea&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 class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;textarea 
  maxLength=&quot;200&quot;
  cdkTextareaAutosize
  type=&quot;text&quot;&amp;gt;
&amp;lt;/textarea&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;function setHeight(jq_in){
    jq_in.each(function(index, elem){
        // This line will work with pure Javascript (taken from NicB's answer):
        elem.style.height = elem.scrollHeight+'px'; 
    });
}
setHeight($('&amp;lt;put selector here&amp;gt;'));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;참고:&lt;/strong&gt; 작업자는 자바스크립트를 사용하지 않는 해결책을 요구했지만, 이 질문을 접한 많은 사람들에게 도움이 될 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 매우 간단한 해결책이지만, 저에게는 효과가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;!--TEXT-AREA--&amp;gt;
&amp;lt;textarea id=&quot;textBox1&quot; name=&quot;content&quot; TextMode=&quot;MultiLine&quot; onkeyup=&quot;setHeight('textBox1');&quot; onkeydown=&quot;setHeight('textBox1');&quot;&amp;gt;Hello World&amp;lt;/textarea&amp;gt;

&amp;lt;!--JAVASCRIPT--&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
function setHeight(fieldId){
    document.getElementById(fieldId).style.height = document.getElementById(fieldId).scrollHeight+'px';
}
setHeight('textBox1');
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;답변은 좋았지만 처음 입력할 때 환영받지 못하는 축소를 방지하기 위해 추가해야 하는 코드 조각이 부족했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var $textareas = $('textarea');
$textareas.each(function() { // to avoid the shrinking
    this.style.minHeight = this.offsetHeight + 'px';
});

$textareas.on('input', function() {
    this.style.height = '';
    this.style.height = this.scrollHeight + 'px';
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동적 텍스트 영역 제어를 위한 또 다른 간단한 솔루션.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;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;&amp;lt;!--JAVASCRIPT--&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
$('textarea').on('input', function () {
            this.style.height = &quot;&quot;;
            this.style.height = this.scrollHeight + &quot;px&quot;;
 });
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기에는 이미 많은 답변이 있지만, 텍스트 영역 크기 조정 코드에 대해서는 여전히 어느 정도 개선이 가능하다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 스크립트 스니펫은 페이지의 모든 텍스트 영역에 걸쳐 있으며, 로드 시와 변경 시 모두 크기가 조정되도록 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
  document.querySelectorAll(&quot;textarea&quot;).forEach(element =&amp;gt; {
    function autoResize(el) {
      el.style.height = el.scrollHeight + 'px';
    }
    autoResize(element);
    element.addEventListener('input', () =&amp;gt; autoResize(element));
  });
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;바닐라 JS만 있고 라이브러리는 필요 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;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 class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;// File: ui.mjs

/* Auto resize a &amp;lt;textarea&amp;gt;'s height to fit its content.
 * Use the HTML attribute `rows` to set the min height of the element, e.g. rows=&quot;2&quot;
 */
function runAutoHeight(el) {
    el.style.height = 'auto';
    const computedStyle = getComputedStyle(el)
    const borderTop = parseFloat(computedStyle.getPropertyValue(&quot;border-top-width&quot;).replace('px',''));
    const borderBottom = parseFloat(computedStyle.getPropertyValue(&quot;border-bottom-width&quot;).replace('px',''));
    el.style.height = String(el.scrollHeight + borderTop + borderBottom) + 'px';
}

/* Sets up autoHeight for the given element for the following 2 situations:
 *  1. When the user types in input
 *  2. When the element is resized (e.g. window is resized)
 *
 * It also adds a function to the element called 'autoHeight', which can be manually called.
 * This is useful when setting values to a &amp;lt;textarea&amp;gt; via JS, and hence the `input` event
 * handler will not be run, e.g.:
 *      import * as ui from '/static/path/to/your/ui.mjs';
 *      ui.setupAutoHeight(el)
 *      el.value = &quot;Manually setting value won't fire change event&quot;
 *      el.autoHeight()
 */
export function setupAutoHeight(el) {
    el.autoHeight = () =&amp;gt; runAutoHeight(el);
    el.style.resize = &quot;none&quot;;
    // Watch for window resizes
    const observer = new ResizeObserver(el.autoHeight);
    observer.observe(el);
    // Watch for changes in text input
    el.addEventListener('input', el.autoHeight)
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ionic을 사용하는 경우 텍스트 영역에 이 속성을 추가하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; autoGrow=&quot;true&quot; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 답변 보기: &lt;a href=&quot;https://stackoverflow.com/questions/61175240/ion-textarea-resize-height-dynamically-in-ionic-5&quot;&gt;이온 텍스트&lt;/a&gt; 영역의 &lt;a href=&quot;https://stackoverflow.com/questions/61175240/ion-textarea-resize-height-dynamically-in-ionic-5&quot;&gt;높이&lt;/a&gt;를 Ionic &lt;a href=&quot;https://stackoverflow.com/questions/61175240/ion-textarea-resize-height-dynamically-in-ionic-5&quot;&gt;5에서 동적으로 조정&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;별로 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;textarea&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;div contenteditable=&quot;true&quot;&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 맥락에서는, 어떤 사람들에게 훌륭한 드롭인 대체물로 작용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;textarea&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;hr&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작업 예:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.textbox {
  width: 400px;
  padding: 12px;
  box-sizing: border-box;
  outline: 1px solid red;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;textbox&quot; contenteditable=&quot;true&quot;&amp;gt;
This div is editable like a textarea. It expands when more words are typed into the available area... keep typing and you'll see how the more you type, the more it grows...
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;추가 읽기:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/contenteditable&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/contenteditable&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;pre&gt;&lt;code&gt;    &amp;lt;script&amp;gt;
        document.querySelectorAll(&quot;textarea&quot;).forEach(element =&amp;gt; {
            function autoResize(el) {
                if (el.scrollHeight &amp;gt; el.offsetHeight) {
                    el.style.height = el.scrollHeight + 'px';
                }
            }
            autoResize(element);
            element.addEventListener('input', () =&amp;gt; autoResize(element));
        });
    &amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데즈만의 환상적인 기능에서 경험한 입력 입력 입력 시 축소에 대한 해결책(위의 데즈만 참조).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;FTW가 데즈먼의 .offset 바로 위에 올린 게시물에서 참조한 속성과 비교를 추가했습니다.&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;높이(예: 5줄 크기의 텍스트 영역에서 텍스트 1줄)를 조정한 다음 el.style로 조정합니다.&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;텍스트 입력으로 인해 스크롤이 증가하는 경우에만 높이 .offset 높이를 초과하는 높이는 오프셋을 방지합니다.&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;감사합니다 데스만과 FTW 위에...&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;반응&lt;/strong&gt;을 위한&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 표시되는 텍스트의 길이를 사용하여 그 숫자를 30으로 나누었습니다(이 숫자가 내 앱에서 제대로 느껴지도록 조정했습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{array.map((text) =&amp;gt; (
    &amp;lt;textarea                
     rows={text.length / 30}
     value={text}
    &amp;gt;&amp;lt;/textarea&amp;gt;
 )}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/2803880/is-there-a-way-to-get-a-textarea-to-stretch-to-fit-its-content-without-using-php&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>CSS</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1432</guid>
      <comments>https://newsource.tistory.com/1432#entry1432comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:52:00 +0900</pubDate>
    </item>
    <item>
      <title>$(이것은)serialize() -- 값을 추가하는 방법을 지정합니다.</title>
      <link>https://newsource.tistory.com/1431</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$(이것은)&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;serialize() -- 값을 추가하는 방법을 지정합니다.&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;$.ajax({
    type: 'POST',
    url: this.action,
    data: $(this).serialize(),
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 잘 작동하지만 데이터에 값을 추가하고 싶어서 시도했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
    type: 'POST',
    url: this.action,
    data: $(this).serialize() + '&amp;amp;=NonFormValue' + NonFormValue,
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 그것은 정확하게 게시되지 않았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;직렬화 문자열에 항목을 추가하는 방법에 대한 아이디어가 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 형태에 특정하지 않은 전역 페이지 변수입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;matt b의 답변이 효과가 있겠지만, 당신은 또한 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.serializeArray()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;양식 데이터에서 배열을 가져와 수정하고 사용하는 방법&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jQuery.param()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;url-encoded 형태로 변환합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이런 방식으로 jQuery는 추가 데이터의 직렬화를 처리합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var data = $(this).serializeArray(); // convert form to array
data.push({name: &quot;NonFormValue&quot;, value: NonFormValue});
$.ajax({
    type: 'POST',
    url: this.action,
    data: $.param(data),
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신에&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; data: $(this).serialize() + '&amp;amp;=NonFormValue' + NonFormValue,
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 아마도 원할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; data: $(this).serialize() + '&amp;amp;NonFormValue=' + NonFormValue,
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL 인코딩에 주의해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NonFormValue&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특별한 문자가 포함되어 있을 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언제든지 할 수 있다는 것을 잊지 마십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;hidden&quot; name=&quot;NonFormName&quot; value=&quot;NonFormValue&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 실제 형태로, 경우에 따라 당신의 코드에 더 좋을 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우선 하지 말아야 할&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;data: $(this).serialize() + '&amp;amp;=NonFormValue' + NonFormValue,
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;있다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;data: $(this).serialize() + '&amp;amp;NonFormValue=' + NonFormValue,
&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;url: this.action + '?NonFormValue=' + NonFormValue,
&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;url: this.action + '&amp;amp;NonFormValue=' + NonFormValue,
&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;$.ajax({
    type: 'POST',
    url: this.action,
    data: $.extend($(this), {'NonFormValue': NonFormValue}).serialize()
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;data = $form.serialize() + &quot;&amp;amp;foo=bar&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var userData = localStorage.getItem(&quot;userFormSerializeData&quot;);
var userId = localStorage.getItem(&quot;userId&quot;);

$.ajax({
    type: &quot;POST&quot;,
    url: postUrl,
    data: $(form).serialize() + &quot;&amp;amp;&quot; + userData + &quot;&amp;amp;userId=&quot; + userId,
    dataType: 'json',
    success: function (response) {
        //do something
    }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이보다 나은 점:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;data: [$(this).serialize(),$.param({NonFormValue: NonFormValue})].join('&amp;amp;')
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;양식 데이터를 처리하기 위한 추가 함수를 작성할 수 있으며 양식의 데이터 값으로 비정형 데이터를 추가해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 참조:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form method=&quot;POST&quot; id=&quot;add-form&quot;&amp;gt;
    &amp;lt;div class=&quot;form-group required &quot;&amp;gt;
        &amp;lt;label for=&quot;key&quot;&amp;gt;Enter key&amp;lt;/label&amp;gt;
        &amp;lt;input type=&quot;text&quot; name=&quot;key&quot; id=&quot;key&quot;  data-nonformdata=&quot;hai&quot;/&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;form-group required &quot;&amp;gt;
        &amp;lt;label for=&quot;name&quot;&amp;gt;Ente Name&amp;lt;/label&amp;gt;
        &amp;lt;input type=&quot;text&quot; name=&quot;name&quot; id=&quot;name&quot;  data-nonformdata=&quot;hello&quot;/&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;input type=&quot;submit&quot; id=&quot;add-formdata-btn&quot; value=&quot;submit&quot;&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 폼 처리를 위해 이 jquery를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
$(document).onready(function(){
    $('#add-form').submit(function(event){
        event.preventDefault();
        var formData = $(&quot;form&quot;).serializeArray();
        formData = processFormData(formData);
        // write further code here----&amp;gt;
    });
});
processFormData(formData)
{
    var data = formData;
    data.forEach(function(object){
        $('#add-form input').each(function(){
            if(this.name == object.name){
                var nonformData = $(this).data(&quot;nonformdata&quot;);
                formData.push({name:this.name,value:nonformData});
            }
        });
    });
    return formData;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&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/6539502/this-serialize-how-to-add-a-value&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1431</guid>
      <comments>https://newsource.tistory.com/1431#entry1431comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:51:52 +0900</pubDate>
    </item>
    <item>
      <title>C의 문자열을 빈 문자열로 초기화</title>
      <link>https://newsource.tistory.com/1430</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C의 문자열을 빈 문자열로 초기화&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C의 문자열을 빈 문자열로 초기화하고 싶습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;노력했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string[0] = &quot;&quot;; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;근데 써있더라고요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;warning: assignment makes integer from pointer without a cast&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;Will Dean 버전 외에도 전체 버퍼 초기화에 대해 다음이 일반적입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char s[10] = {'\0'};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char s[10];
memset(s, '\0', sizeof(s));
&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;char s[10];
strncpy(s, &quot;&quot;, sizeof(s));
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열의 첫 번째 문자를 0으로 설정하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char myString[10];
myString[0] = '\0';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(또는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;myString[0] = 0;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는, 실제로 초기화 시 다음과 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char myString[10] = &quot;&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 문자열이 정의되면 일반적인 길이를 0으로 설정하는 방법은 아닙니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;'string'이라는 배열이 이미 있다고 가정하고 시도해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string[0] = '\0';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;\0&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 문자열의 끝을 표시하는 데 필요한 명시적 NUL 터미네이터입니다.&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;char string[] = &quot;&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;문자열을 크기 1의 문자 배열로 선언하고 다음과 같이 초기화합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;\0&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것도 시도해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char str1[] = &quot;&quot;; 
char str2[5] = &quot;&quot;; 
printf(&quot;%d, %d\n&quot;, sizeof(str1), sizeof(str2)); //prints 1, 5
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;calloc&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;또한 할당된 메모리를 0으로 설정합니다.&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;string&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;항상 빈 문자열로:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *string = NULL;
string = (char*)calloc(1, sizeof(char));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 가치를 저장할 계획인 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나중에:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *string = NULL;
int numberOfChars = 50; // you can use as many as you need
string = (char*)calloc(numberOfChars + 1, sizeof(char));
&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;strcpy(string, &quot;&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;string[0] = &quot;&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;경고: 할당은 깁스 없이 포인터로부터 정수를 만듭니다.&lt;/font&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;좋아요, 그 표현으로 들어가 볼까요?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;int: 문자 수()를 나타냅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 물체의 처음부터 전진하기 위한 것(또는 char*로 붕괴됨)입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;string[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;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;객체의 시작 부분에 위치한 객체&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;&quot;&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;: string literal:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char[1]&lt;/code&gt;&lt;/p&gt; 
&lt;p&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;char[1]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;활자의 대상으로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char[1]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(에 decay됨)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char*&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;) 및&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;과제는 호환되지 않지만 컴파일러는 당신(프로그래머)을 신뢰하고 타입을 캐스팅하여 과제를 진행합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char*&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(무엇을&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char[1]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;썩어빠진&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;--- 그리고 경고를 보너스로 받게 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;당신은 정말&lt;/strong&gt; 좋은 &lt;strong&gt;컴파일러를 가지고&lt;/strong&gt; 있군요 :-)&lt;/font&gt;&lt;/font&gt;&lt;/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;//this will create an empty string without no memory allocation. 
char str[]=&quot;&quot;;// it is look like {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;// this is better if you know your string size.    
char str[5]=&quot;&quot;; // it is look like {0, 0, 0, 0, 0} 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;조금 늦었지만 길이 1의 배열이 아닌 길이 0의 배열을 생성한 것이 문제가 될 수도 있습니다.&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;'\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;&quot;&quot;&lt;/code&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;/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;string[1] = &quot;&quot;&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;strlen&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 문자열 길이의 일부로 터미네이터를 계산하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/4142745/initialize-a-string-in-c-to-empty-string&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1430</guid>
      <comments>https://newsource.tistory.com/1430#entry1430comment</comments>
      <pubDate>Mon, 6 Nov 2023 21:51:44 +0900</pubDate>
    </item>
    <item>
      <title>페이지가 로드될 때 텍스트 입력에서 포커스를 제거할 수 있습니까?</title>
      <link>https://newsource.tistory.com/1429</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;jQuery 솔루션은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(function () {
    $('input').blur();
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;document.activeElement.blur();&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 초점을 맞추고 있는 요소도 보여주는 http://jsfiddle.net/vGGdV/5/ 의 예입니다.&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;blur()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IE의 바디 요소는 IE가 초점을 잃게 만들 것입니다.&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://developer.mozilla.org/en-US/docs/Web/API/HTMLElement&quot; rel=&quot;noreferrer&quot;&gt;HTMLelement&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;.focus&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.blur&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비슷한 방식으로 작동하는 거죠&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;const input = document.querySelector(&quot;#myInput&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;input id=&quot;myInput&quot; value=&quot;Some Input&quot;&amp;gt;

&amp;lt;button type=&quot;button&quot; onclick=&quot;input.focus()&quot;&amp;gt;Focus&amp;lt;/button&amp;gt;
&amp;lt;button type=&quot;button&quot; onclick=&quot;input.blur()&quot;&amp;gt;Lose focus&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.blur()&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;http://api.jquery.com/blur/ 참조&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$(function() {
 $(&quot;#MyTextBox&quot;).blur();
});
&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/4276754/is-it-possible-to-remove-the-focus-from-a-text-input-when-a-page-loads&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1429</guid>
      <comments>https://newsource.tistory.com/1429#entry1429comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:24:43 +0900</pubDate>
    </item>
    <item>
      <title>팬더 데이터 프레임을 위치별로 자르는 방법은?</title>
      <link>https://newsource.tistory.com/1428</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;나는 1000개의 행과 10개의 열을 가진 판다 데이터 프레임 객체를 가지고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 단순히 데이터 프레임을 잘라내고 처음 10개의 행을 사용하고자 합니다.&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;&amp;gt;&amp;gt;&amp;gt; df.shape
(1000,10)
&amp;gt;&amp;gt;&amp;gt; my_slice = df.ix[10,:]
&amp;gt;&amp;gt;&amp;gt; my_slice.shape
(10,)
&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;my_slice는 처음 열 열, 즉 10 x 10 데이터 프레임이어야 하지 않습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떻게 하면 처음 열 개의 줄을 얻을 수 있을까요?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;my_slice&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;10x10 Data Frame 개체입니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;감사해요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.head.html?highlight=head#pandas.DataFrame.head&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.head.html?highlight=head#pandas.DataFrame.head&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df2 = df.head(10)
&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;code&gt;df[:10]&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 방법에는 여러 가지가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래에서는 적어도 세 가지 옵션을 검토하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원래 데이터 프레임을 유지하기 위해&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 우리는 조각난 데이터 프레임을 다음에 할당할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df_new&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마지막으로 시간 &lt;strong&gt;비교&lt;/strong&gt; 섹션에서는 랜덤 데이터 프레임을 사용하여 다양한 실행 시간을 보여 줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;옵션1&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df_new = df[:10] # Option 1.1

# or

df_new = df[0:10] # Option 1.2
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;옵션2&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용중&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df_new = df.head(10)
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;n의 음수 값의 경우, 이 함수는 마지막 n 행을 제외한 모든 행을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df[:-n]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.head.html&quot; rel=&quot;nofollow noreferrer&quot;&gt; [출처].&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;옵션3&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용중&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df_new = df.iloc[:10] # Option 3.1

# or

df_new = df.iloc[0:10] # Option 3.2
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시간 비교&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 특정한 경우에는 실행 시간을 측정하는 데 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;       method                   time
0  Option 1.1 0.00000120000913739204
1  Option 1.2 0.00000149995321407914
2    Option 2 0.00000170001294463873
3  Option 3.1 0.00000120000913739204
4  Option 3.2 0.00000350002665072680
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YPySv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YPySv.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;hr&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주의:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;10&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;df_new = df[:5]
&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;5&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;줄을 지어&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행 시간을 측정하는 추가적인 방법이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 외의 방법에 대해서는 다음을 참조하십시오.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/q/1557571/7109869&quot;&gt;파이썬 프로그램의 실행 시간을 얻으려면 어떻게 해야 합니까?&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같은 람다 함수로 이전 옵션을 조정할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;df_new = df.apply(lambda x: x[:10])

# or

df_new = df.apply(lambda x: x.head(10))
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 &lt;a href=&quot;https://stackoverflow.com/q/54432583/7109869&quot;&gt;.apply()&lt;/a&gt;의 사용에 &lt;a href=&quot;https://stackoverflow.com/q/54432583/7109869&quot;&gt;대해 강력한 의견&lt;/a&gt;이 있으며, 이 경우 필수 방법과는 거리가 멀다는 점에 유의하십시오.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;code&gt;df.ix[10,:]&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;당신의 경우에는 10번째 줄까지 모든 것을 원하실 겁니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df.ix[:9,:]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 슬라이스 범위의 오른쪽 끝이 포함되어 있습니다. http://pandas.sourceforge.net/gotchas.html#endpoints-are-inclusive&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;DataFrame[:n]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫번째 행을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/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/12021754/how-to-slice-a-pandas-dataframe-by-position&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>dataframe</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1428</guid>
      <comments>https://newsource.tistory.com/1428#entry1428comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:24:37 +0900</pubDate>
    </item>
    <item>
      <title>MySQL이 null/empty를 반환하는지 확인하는 방법은 무엇입니까?</title>
      <link>https://newsource.tistory.com/1427</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL이 null/empty를 반환하는지 확인하는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DB에 다음이라는 필드가 있는 테이블이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fk_ownerID&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 기본적으로 새 테이블 행을 추가할 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fk_ownerID&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비어 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL에 대한 Toad에서는 다음과 같이 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;{null}&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.한다면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fk_ownerID&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;값이 주어지고, 나중에 이 값을 제거하고, 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fk_ownerID = &quot;&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자, 다음 코드가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$result = $dal-&amp;gt;getRowByValue('tableName','id', $_POST['myID']);

// Check to see if any rows where returned
if (mysql_num_rows($result) &amp;gt; 0)
{
  while ($row = mysql_fetch_array($result))
  {
    $ownerID = $row[&quot;fk_ownerID&quot;];    
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 변수 $owner($owner)&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ID에는 번호가 있어야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런데 이걸 어떻게 확인해야 할지 모르겠어요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 저는 이 작업을 수행 중입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if ( (strlen($ownerID) == 0) || ($ownerID == '0') || ($ownerID == 'null') )
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 저는 이 테스트들 중 하나만 필요하다고 확신합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;행 필드가 비어 있는지 null인지 확인하는 가장 좋은 방법은 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;empty() 및/또는 is_null() 사용&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.php.net/empty&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://www.php.net/empty&lt;/font&gt;&lt;/a&gt; &lt;a href=&quot;http://www.php.net/is_null&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://www.php.net/is_null&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비어 있으면 현재 사용량을 달성할 수 있습니다. is_null을 사용하면 null인 필드와 비어 있는 필드를 구별할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;is_null() 함수를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://php.net/manual/en/function.is-null.php&quot; rel=&quot;noreferrer&quot;&gt;http://php.net/manual/en/function.is-null.php&lt;/a&gt; : 댓글로 :&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;mdufour at gmail dotcom 20-Aug-2008 04:31 mySQL 쿼리에 의해 반환되는 NULL 필드/열에 대한 테스트.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;mySQL 쿼리에 의해 반환된 &amp;gt;가 null일 때 테이블 &quot;bar&quot;의 주어진 행에서 필드/열 &quot;foo&quot;를 확인하고 싶다고 말합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;is_null()&quot; 함수를 사용하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;[connect…]
$qResult=mysql_query(&quot;Select foo from bar;&quot;);
while ($qValues=mysql_fetch_assoc($qResult))
     if (is_null($qValues[&quot;foo&quot;]))
         echo &quot;No foo data!&quot;;
     else
         echo &quot;Foo data=&quot;.$qValues[&quot;foo&quot;];
[…]
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;select FOUND_ROWS();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;선택 쿼리에 의해 선택된 레코드 수를 반환합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 null 또는 0을 의미하거나 원하는 것이 아닌 false 또는 null 형식을 반환할 수 있는 숫자를 사용할 때는 === 연산자를 잊지 마십시오.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;if ( (strlen($ownerID) == 0) || ($ownerID == '0') || (empty($ownerID )) )
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;만일 &lt;/strong&gt;소유자라면&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;ID&lt;/strong&gt;가 &lt;strong&gt;NULL&lt;/strong&gt;입니다. &lt;strong&gt;빈()&lt;/strong&gt; 테스트에 의해 트리거됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.php.net/empty&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://www.php.net/empty&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;mysql 데이터베이스의 데이터 유형이 자동 증분 기본 키인 경우 사용할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;is_null()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;empty()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면 코드상으로는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if (empty($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;pre&gt;&lt;code&gt;$row=mysql_fetch_row($rc)
and if you want to check if row[8] is null then do
$field=$row[8];
   if($field)
echo &quot;&quot;;
else
 echo &quot;&quot;; 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/1693428/how-to-check-if-mysql-returns-null-empty&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1427</guid>
      <comments>https://newsource.tistory.com/1427#entry1427comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:24:30 +0900</pubDate>
    </item>
    <item>
      <title>정수를 문자 등가로 변환합니다. 여기서 0 = &amp;gt; a, 1 = &amp;gt; b 등</title>
      <link>https://newsource.tistory.com/1426</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정수를 문자 등가로 변환합니다. 여기서 0 = &amp;gt; a, 1 = &amp;gt; b 등&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 알파벳을 기준으로 정수를 문자 등가물로 변환하고 싶습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;0 =&amp;gt; a
1 =&amp;gt; b
2 =&amp;gt; c
3 =&amp;gt; d
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;등. 어레이를 구축하고 필요할 때 찾아 볼 수 있는데 이를 위해 내장된 기능이 있는지 궁금합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구글을 통해 찾은 예시는 모두 ASCII 값으로 작동하는 것이지 알파벳에서 문자의 위치가 아닙니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;소문자를 원하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var chr = String.fromCharCode(97 + n); // where n is 0, 1, 2 ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;97은 소문자 'a'의 ASCII 코드입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대문자를 원하면 97을 65로 바꿉니다('A' 대문자).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약&lt;/font&gt;&lt;/font&gt;&lt;code&gt;n &amp;gt; 25&lt;/code&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;char='abcdefghijklmnopqrstuvwxyz'[code]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 (사랑하는 IE와 더 잘 호환되도록):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char='abcdefghijklmnopqrstuvwxyz'.charAt(code);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다중 문자 문자열을 돌려받는 것이 괜찮다면 임의의 양의 인덱스를 지원할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function idOf(i) {
  return (
    (i &amp;gt;= 26 ? idOf(((i / 26) &amp;gt;&amp;gt; 0) - 1) : &quot;&quot;) +
    &quot;abcdefghijklmnopqrstuvwxyz&quot;[i % 26 &amp;gt;&amp;gt; 0]
  );
}

[0, 1, 25, 26, 27, 701, 702, 703].map(idOf);
// ['a', 'b', 'z', 'aa', 'ab', 'zz', 'aaa', 'aab']
&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;간단한 답은 (26자)입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String.fromCharCode(97+n);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;공간이 중요한 경우 다음(20자)을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(10+n).toString(36);
&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;숫자를 기본 36으로 변환하면 다음과 같은 문자가 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;0123456789abcdefghijklmnopqrstuvwxyz
^         ^
n        n+10
&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;10으로 오프셋을 조정하면 문자가 시작됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&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;97&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;36&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const A = 'A'.charCodeAt(0);

let numberToCharacter = number =&amp;gt; String.fromCharCode(A + number);

let characterToNumber = character =&amp;gt; character.charCodeAt(0) - A;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 대문자를 가정하고 'A'를 0에서 시작합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Javascript의 String.fromCharCode(code1, code2, ..., codeN)는 무한히 많은 인수를 사용하여 해당 ASCII 값이 code1, code2, ...codeN인 문자열을 반환합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;97은 ASCII에서 'a'이므로 색인에 97을 추가하여 색인을 조정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function indexToChar(i) {
  return String.fromCharCode(i+97); //97 in ASCII is 'a', so i=0 returns 'a', 
                                    // i=1 returns 'b', etc
}
&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;String.fromCharCode&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 이것은 ASCII의 처음 128자와 일치하는 유니코드 값에서 문자열을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var a = String.fromCharCode(97);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 있습니다: (a-zA-Z)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function codeToChar( number ) {
  if ( number &amp;gt;= 0 &amp;amp;&amp;amp; number &amp;lt;= 25 ) // a-z
    number = number + 97;
  else if ( number &amp;gt;= 26 &amp;amp;&amp;amp; number &amp;lt;= 51 ) // A-Z
    number = number + (65-26);
  else
    return false; // range error
  return String.fromCharCode( number );
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;입력: 0-51, 그렇지 않으면 false(범위 오류)를 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;OR:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var codeToChar = function() {
  var abc = &quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;.split(&quot;&quot;);
  return function( code ) {
    return abc[code];
  };
})();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;범위 오류의 경우 정의되지 않은 값을 반환합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고: 어레이는 한 번만 생성되며 폐쇄로 인해 새로운 코드 ToChar 기능을 사용할 수 있습니다.&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;(n+10).toString(36)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;true&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code snippet-currently-hidden&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;chr = n=&amp;gt;(n+10).toString(36);

for(i=0; i&amp;lt;26; i++) console.log(`${i} =&amp;gt; ${ chr(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;&gt;@mikemaccana의 훌륭한 솔루션의 유일한 문제는 비용이 많이 들고 성능 면에서 바이너리 &amp;gt;&amp;gt; 연산자를 사용한다는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여러분의 동료들이 좀 더 쉽게 읽을 수 있도록 그의 훌륭한 업적에 대한 수정을 제안합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const getColumnName = (i) =&amp;gt; {
     const previousLetters = (i &amp;gt;= 26 ? getColumnName(Math.floor(i / 26) -1 ) : '');
     const lastLetter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[i % 26]; 
     return previousLetters + lastLetter;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 원라이너로&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const getColumnName = i =&amp;gt; (i &amp;gt;= 26 ? getColumnName(Math.floor(i / 26) -1 ) : '') + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[i % 26];
&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;getColumnName(0); // &quot;A&quot;
getColumnName(1); // &quot;B&quot;
getColumnName(25); // &quot;Z&quot;
getColumnName(26); // &quot;AA&quot;
getColumnName(27); // &quot;AB&quot;
getColumnName(80085) // &quot;DNLF&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;TypeScript 작업 기능을 찾고 있다면 다음을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public numericValue = (alphaChar: any) =&amp;gt; alphaChar.toUpperCase().charCodeAt(0) - 64;

public alphaValue = (numericDigit: any) =&amp;gt; 
   String.fromCharCode(64 + numericDigit) : '';
&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;(numericDigit &amp;gt;= 1 &amp;amp;&amp;amp; numericDigit &amp;lt;= 26) ? &lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요구 사항에 따라 내부 기능 본체.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대문자를 원하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function numberToLetter(num){
        var alf={
            '0': 'A', '1': 'B', '2': 'C', '3': 'D', '4': 'E', '5': 'F', '6': 'G'
        };
        if(num.length== 1) return alf[num] || ' ';
        return num.split('').map(numberToLetter);
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;numberToLetter('023')&lt;/strong&gt;는 &lt;strong&gt;[&quot;A&quot;, &quot;C&quot;, &quot;D&quot;]&lt;/strong&gt;입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;numberToLetter('5')&lt;/strong&gt;는 &lt;strong&gt;&quot;F&quot;&lt;/strong&gt;입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SsKdD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SsKdD.png&quot; alt=&quot;number to letter function&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/3145030/convert-integer-into-its-character-equivalent-where-0-a-1-b-etc&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>javascript</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1426</guid>
      <comments>https://newsource.tistory.com/1426#entry1426comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:24:23 +0900</pubDate>
    </item>
    <item>
      <title>Oracle 데이터 유형의 문자열 값을 코드로 결정하려면 어떻게 해야 합니까?</title>
      <link>https://newsource.tistory.com/1425</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle 데이터 유형의 문자열 값을 코드로 결정하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DBMS_SQL.DESCRIBE_COLUMNS&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;절차: 내 SELECT 쿼리에 대한 결과 집합에서 열에 사용되는 데이터 유형을 식별합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 안타깝게도 이렇게 하면 Oracle의 데이터 유형 코드만 얻을 수 있습니다. (&lt;/font&gt;&lt;/font&gt;&lt;code&gt;record.col_type&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;) - 1, 8, 12 등&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 어떻게 하면 숫자 코드 대신 반환된 데이터 유형의 코드(즉, VARCHAR2, LONG, DATE 등)에 해당하는 문자열을 쉽게 얻을 수 있는지 궁금합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 솔루션은 약간 투박하지만 CASE 문을 사용하여 데이터 유형 설명을 &quot;검색&quot;할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;case record.col_type
  when dbms_types.TYPECODE_DATE then 'DATE'             
  when dbms_types.TYPECODE_NUMBER then 'NUMBER'           
  when dbms_types.TYPECODE_RAW then 'RAW'              
  when dbms_types.TYPECODE_CHAR then 'CHAR'             
  when dbms_types.TYPECODE_VARCHAR2 then 'VARCHAR2'         
  when dbms_types.TYPECODE_VARCHAR then 'VARCHAR'          
  when dbms_types.TYPECODE_MLSLABEL then 'MLSLABEL'         
  when dbms_types.TYPECODE_BLOB then 'BLOB'             
  when dbms_types.TYPECODE_BFILE then 'BFILE'            
  when dbms_types.TYPECODE_CLOB then 'CLOB'              
  when dbms_types.TYPECODE_CFILE then 'CFILE'            
  when dbms_types.TYPECODE_TIMESTAMP then 'TIMESTAMP'        
  when dbms_types.TYPECODE_TIMESTAMP_TZ then 'TIMESTAMP_TZ'     
  when dbms_types.TYPECODE_TIMESTAMP_LTZ then 'TIMESTAMP_LTZ'    
  when dbms_types.TYPECODE_INTERVAL_YM then 'INTERVAL_YM'      
  when dbms_types.TYPECODE_INTERVAL_DS then 'INTERVAL_DS'      
  when dbms_types.TYPECODE_REF then 'REF'              
  when dbms_types.TYPECODE_OBJECT then 'OBJECT'           
  when dbms_types.TYPECODE_VARRAY then 'VARRAY'                       
  when dbms_types.TYPECODE_TABLE then 'TABLE'                        
  when dbms_types.TYPECODE_NAMEDCOLLECTION then 'NAMEDCOLLECTION'  
  when dbms_types.TYPECODE_OPAQUE then 'OPAQUE'                            
  when dbms_types.TYPECODE_NCHAR then 'NCHAR'            
  when dbms_types.TYPECODE_NVARCHAR2 then 'NVARCHAR2'       
  when dbms_types.TYPECODE_NCLOB then 'NCLOB'                  
  when dbms_types.TYPECODE_BFLOAT then 'BFLOAT'           
  when dbms_types.TYPECODE_BDOUBLE then 'BDOUBLE'          
  when dbms_types.TYPECODE_UROWID then 'UROWID'              
end case
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이에 대한 값을 얻으려면 &lt;a href=&quot;https://stackoverflow.com/a/12040908/146325&quot;&gt;tbone이 제안&lt;/a&gt;하는 대로 데이터 사전을 쿼리해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DBMS_TYPEs 패키지(나의 11gr2에서)를 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select text from all_source
where owner='SYS'
and name='DBMS_TYPES'
and type='PACKAGE';

PACKAGE dbms_types AS

  TYPECODE_DATE            PLS_INTEGER :=  12;

  TYPECODE_NUMBER          PLS_INTEGER :=   2;

  TYPECODE_RAW             PLS_INTEGER :=  95;

  TYPECODE_CHAR            PLS_INTEGER :=  96;

  TYPECODE_VARCHAR2        PLS_INTEGER :=   9;

  TYPECODE_VARCHAR         PLS_INTEGER :=   1;

  TYPECODE_MLSLABEL        PLS_INTEGER := 105;

  TYPECODE_BLOB            PLS_INTEGER := 113;

  TYPECODE_BFILE           PLS_INTEGER := 114;

  TYPECODE_CLOB            PLS_INTEGER := 112;

  TYPECODE_CFILE           PLS_INTEGER := 115;

  TYPECODE_TIMESTAMP       PLS_INTEGER := 187;

  TYPECODE_TIMESTAMP_TZ    PLS_INTEGER := 188;

  TYPECODE_TIMESTAMP_LTZ   PLS_INTEGER := 232;

  TYPECODE_INTERVAL_YM     PLS_INTEGER := 189;

  TYPECODE_INTERVAL_DS     PLS_INTEGER := 190;



  TYPECODE_REF             PLS_INTEGER := 110;

  TYPECODE_OBJECT          PLS_INTEGER := 108;

  TYPECODE_VARRAY          PLS_INTEGER := 247;            /* COLLECTION TYPE */

  TYPECODE_TABLE           PLS_INTEGER := 248;            /* COLLECTION TYPE */

  TYPECODE_NAMEDCOLLECTION PLS_INTEGER := 122;

  TYPECODE_OPAQUE          PLS_INTEGER := 58;                 /* OPAQUE TYPE */



  /* NOTE: These typecodes are for use in AnyData api only and are short forms

     for the corresponding char typecodes with a charset form of SQLCS_NCHAR.

  */

  TYPECODE_NCHAR           PLS_INTEGER := 286;

  TYPECODE_NVARCHAR2       PLS_INTEGER := 287;

  TYPECODE_NCLOB           PLS_INTEGER := 288;



  /* Typecodes for Binary Float, Binary Double and Urowid. */

  TYPECODE_BFLOAT          PLS_INTEGER := 100;

  TYPECODE_BDOUBLE         PLS_INTEGER := 101;

  TYPECODE_UROWID          PLS_INTEGER := 104;



  SUCCESS                  PLS_INTEGER := 0;

  NO_DATA                  PLS_INTEGER := 100;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;109는 사용자 정의 유형이므로 대신 DESCERFORM_COLUMNS3을 사용해야 할 수도 있습니다.&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;ANYDATA.GetTypeName&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 설명과 예시가 있는 링크입니다. http://www.oracle-developer.net/display.php?id=218&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;SQL&amp;gt; DECLARE
  2     v_anydata  ANYDATA := ANYDATA.ConvertVarchar2('String');
  3     v_typename VARCHAR2(128);
  4  BEGIN
  5     v_typename := v_anydata.GetTypeName();
  6     DBMS_OUTPUT.PUT_LINE('Type of ANYDATA instance is [' || v_typename || ']');
  7  END;
  8  /

Type of ANYDATA instance is [SYS.VARCHAR2]

PL/SQL procedure successfully completed.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 &lt;a href=&quot;http://mahmoudoracle.blogspot.com.au/2012/03/anydata-in-oracle-database.html&quot; rel=&quot;nofollow&quot;&gt;선택에서 이를 사용&lt;/a&gt;하는 몇 &lt;a href=&quot;http://mahmoudoracle.blogspot.com.au/2012/03/anydata-in-oracle-database.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;시도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select 
   distinct
   c.type# type_code,
   decode(c.type#, 1, decode(c.charsetform, 2, 'NVARCHAR2', 'VARCHAR2'),
                   2, decode(c.scale, null, decode(c.precision#, null, 'NUMBER', 'FLOAT'), 'NUMBER'),
                   8, 'LONG',
                   9, decode(c.charsetform, 2, 'NCHAR VARYING', 'VARCHAR'),
                   12, 'DATE',
                   23, 'RAW', 24, 'LONG RAW',
                   69, 'ROWID',
                   96, decode(c.charsetform, 2, 'NCHAR', 'CHAR'),
                   100, 'BINARY_FLOAT',
                   101, 'BINARY_DOUBLE',
                   105, 'MLSLABEL',
                   106, 'MLSLABEL',
                   111, 'REF',
                   112, decode(c.charsetform, 2, 'NCLOB', 'CLOB'),
                   113, 'BLOB', 114, 'BFILE', 115, 'CFILE',
                   121, 'USER_TYPE',
                   122, 'USER_TYPE',
                   123, 'USER_TYPE',
                   178, 'TIME(' ||c.scale|| ')',
                   179, 'TIME(' ||c.scale|| ')' || ' WITH TIME ZONE',
                   180, 'TIMESTAMP(' ||c.scale|| ')',
                   181, 'TIMESTAMP(' ||c.scale|| ')'||' WITH TIME ZONE',
                   231, 'TIMESTAMP(' ||c.scale|| ')'||' WITH LOCAL TIME ZONE',
                   182, 'INTERVAL YEAR(' ||c.precision#||') TO MONTH',
                   183, 'INTERVAL DAY(' ||c.precision#||') TO SECOND(' ||
                         c.scale || ')',
                   208, 'UROWID',
                   'UNDEFINED') type_name from sys.col$ c order by c.type#;
&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/12040140/how-can-i-determine-string-value-of-oracles-datatype-by-its-code&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1425</guid>
      <comments>https://newsource.tistory.com/1425#entry1425comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:24:15 +0900</pubDate>
    </item>
    <item>
      <title>임베디드 시스템에서의 malloc 동작</title>
      <link>https://newsource.tistory.com/1424</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;임베디드 시스템에서의 malloc 동작&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 현재 임베디드 프로젝트(STM32F103RB, cooCox CoIDE v.1.7.6 with arm-none-eabi-gcc 4.8 2013q4)를 진행하고 있으며, 그 방법을 이해하려고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;꾸밈없이 굴다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;RAM이 가득 찼을 때.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 STM32는 20kB = 0x5000Bytes의 RAM을 가지고 있으며, 스택에는 0x200이 사용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdlib.h&amp;gt;
#include &quot;stm32f10x.h&quot;

struct list_el {
   char weight[1024];
};

typedef struct list_el item;

int main(void)
{
    item * curr;

    // allocate until RAM is full
    do {
        curr = (item *)malloc(sizeof(item));
    } while (curr != NULL);

    // I know, free() is missing. Program is supposed to crash

    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 기대합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;돌아오다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NULL&lt;/code&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;0x5000&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(램) -&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0x83C&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(bss) -&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0x200&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(스택) =&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0x45C4&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(heap)&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;malloc()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열여덟 번째로.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1개는 1024=&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0x400&lt;/code&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;하지만 대신 UC는 그들을&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HardFault_Handler(void)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(심지어는 아니지만) 18번째 이후에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MemManager_Handler(void)&lt;/code&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;malloc()&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;NULL&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반품이 안 되는 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;겉보기엔 그렇지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 점검도 하지 않고 있습니다&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오류는 하드웨어가 잘못된 주소에 대한 쓰기를 감지하는 데서 발생합니다. 이 주소는 다음 주소에서 발생한 것일 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 자체.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언제&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메모리를 할당하고 내부 풀에서 청크를 가져와 사용자에게 반환합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나, 그것은 몇가지 정보를 저장할 필요가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;free&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;할당 해제를 완료할 수 있는 기능입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보통, 그것은 덩어리의 실제 길이입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 정보를 저장하기 위해서는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 청크 자체의 시작 부분에서 몇 바이트를 가져와 정보를 작성한 다음 자신의 정보를 작성한 지점을 지나 주소를 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 10바이트 청크를 요청했다고 가정해 보겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 주소에서 사용 가능한 16바이트 청크를 사용할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0x3200..0x320F&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 길이(즉, 16)를 바이트 1과 2로 쓰고 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0x3202&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;이제 당신의 프로그램은 10 바이트를 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0x3202&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0x320B&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 나머지 4바이트도 사용 가능합니다. 만약 당신이 전화를 걸면.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;realloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;14바이트를 요구하면 재할당은 없습니다.&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;malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자에게 반환하려는 메모리의 길이(쓰기 대상 주소가 유효해야 함)를 기록합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;18번째 반복 후 다음 청크의 주소가 음(매우 큰 양으로 변환됨)이므로 CPU가 쓰기를 트랩하고 하드 폴트를 트리거합니다.&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;malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;할당 후 사용할 스택의 양을 예측할 수 없으므로 시도조차 하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇기 때문에 대부분의 경우 바이트 수를 계산하는 것이 여러분에게 달려있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로 임베디드 하드웨어의 경우 공간이 수십 킬로바이트로 제한되어 있는 경우,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;arbitrary&quot; 장소에서 전화를 걸 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신 미리 계산된 제한을 사용하여 모든 메모리를 미리 할당하고 필요한 구조에 할당한 후에는 절대로 호출하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다시.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;불법&lt;/strong&gt; 메모리 &lt;strong&gt;액세스&lt;/strong&gt;로 인해 프로그램이 중단될 가능성이 높습니다. 이는 거의 항상 &lt;strong&gt;합법적인 메모리 액세스&lt;/strong&gt;로 인한 간접적(후속적) 결과이지만 사용자가 수행하려고 하지 않은 결과입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 시스템에서 무슨 일이 일어나고 있는지에 대해서는 다음과 같이 추측합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;main&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 그 다음에 당신이 수행하는 작업 중 하나가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 당연히 합법적인 작업이지만 일부 &quot;junk&quot; 데이터로 힙의 시작을 덮어씁니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 다음 번에 힙에서 메모리를 할당하려고 하면 사용 가능한 다음 메모리 청크에 대한 포인터가 더 이상 유효하지 않아 결국 메모리 액세스 위반으로 이어지게 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우선 스택 크기를 0x200바이트에서 0x400바이트로 늘릴 것을 강력하게 권장합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 일반적으로 프로젝트의 링커 설정에서 링커 명령 파일 내에 정의되거나 IDE를 통해 정의됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 당신의 프로젝트가 IAR에 있다면, 당신은 그것을 변경할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;icf&lt;/code&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;define symbol __ICFEDIT_size_cstack__ = 0x400
&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;HardFault_Handler&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;startup_stm32f03xx.s' 파일에서 다음 코드가 있는지 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;EXTERN  HardFault_Handler_C        ; this declaration is probably missing

__tx_vectors                       ; this declaration is probably there
    DCD     HardFault_Handler
&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;    PUBWEAK HardFault_Handler
    SECTION .text:CODE:REORDER(1)
HardFault_Handler
    TST LR, #4
    ITE EQ
    MRSEQ R0, MSP
    MRSNE R0, PSP
    B HardFault_Handler_C
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 'stm32f03xx.c' 파일에서 다음 ISR을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void HardFault_Handler_C(unsigned int* hardfault_args)
{
    printf(&quot;R0    = 0x%.8X\r\n&quot;,hardfault_args[0]);         
    printf(&quot;R1    = 0x%.8X\r\n&quot;,hardfault_args[1]);         
    printf(&quot;R2    = 0x%.8X\r\n&quot;,hardfault_args[2]);         
    printf(&quot;R3    = 0x%.8X\r\n&quot;,hardfault_args[3]);         
    printf(&quot;R12   = 0x%.8X\r\n&quot;,hardfault_args[4]);         
    printf(&quot;LR    = 0x%.8X\r\n&quot;,hardfault_args[5]);         
    printf(&quot;PC    = 0x%.8X\r\n&quot;,hardfault_args[6]);         
    printf(&quot;PSR   = 0x%.8X\r\n&quot;,hardfault_args[7]);         
    printf(&quot;BFAR  = 0x%.8X\r\n&quot;,*(unsigned int*)0xE000ED38);
    printf(&quot;CFSR  = 0x%.8X\r\n&quot;,*(unsigned int*)0xE000ED28);
    printf(&quot;HFSR  = 0x%.8X\r\n&quot;,*(unsigned int*)0xE000ED2C);
    printf(&quot;DFSR  = 0x%.8X\r\n&quot;,*(unsigned int*)0xE000ED30);
    printf(&quot;AFSR  = 0x%.8X\r\n&quot;,*(unsigned int*)0xE000ED3C);
    printf(&quot;SHCSR = 0x%.8X\r\n&quot;,SCB-&amp;gt;SHCSR);                
    while (1);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용할 수 없는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;printf&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 특정 Hard-Fault 인터럽트가 발생하는 실행 시점에서, 대신 위의 모든 데이터를 글로벌 버퍼에 저장하여, 도달 후에 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;while (1)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 http://www.keil.com/appnotes/files/apnt209.pdf 의 'Cortex-M Fault Exceptions and Registers' 섹션을 참조하여 문제를 이해하거나 추가 지원이 필요한 경우 여기에 출력을 게시하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;업데이트:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위의 모든 것 외에도 힙의 기본 주소가 올바르게 정의되었는지 확인합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트 설정(일반적으로 데이터 섹션과 스택 바로 뒤에 있음) 내에서 하드 코드화되어 있을 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 프로그램의 초기화 단계에서 런타임 중에 결정할 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로 데이터 섹션의 기본 주소와 프로그램 스택(프로젝트 빌드 후 생성된 맵 파일에서)을 확인하고 힙이 둘 중 하나와 겹치지 않도록 해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 힙의 기본 주소가 일정한 주소로 설정된 경우가 있었는데, 처음부터 괜찮았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 프로그램에 글로벌 변수를 추가하여 데이터 섹션의 크기를 점차 늘렸습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스택은 데이터 섹션 바로 뒤에 위치했고, 데이터 섹션이 커짐에 따라 &quot;앞으로&quot; 이동했기 때문에 둘 중 하나에도 문제가 없었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 결국 힙은 스택의 &quot;위&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;arm-none-eabi-*&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;strong&gt;&lt;a href=&quot;http://sourceware.org/newlib/&quot; rel=&quot;noreferrer&quot;&gt;lib&lt;/a&gt;&lt;/strong&gt; C &lt;strong&gt;라이브러리&lt;/strong&gt;가 포함됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내장된 시스템에 대해 newlib이 구성된 경우, 사용자 프로그램은 newlib이 제대로 작동하도록 &lt;strong&gt;&lt;a href=&quot;https://sourceware.org/newlib/libc.html#Stubs&quot; rel=&quot;noreferrer&quot;&gt;기능&lt;/a&gt;&lt;/strong&gt;을 &lt;strong&gt;&lt;a href=&quot;https://sourceware.org/newlib/libc.html#Stubs&quot; rel=&quot;noreferrer&quot;&gt;제공&lt;/a&gt;&lt;/strong&gt;해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;&lt;code&gt;malloc()&lt;/code&gt; &lt;/strong&gt;는 힙 메모리가 어디에서 시작되고 어디에서 끝나는지 파악하는 &lt;strong&gt;데에만 의존&lt;/strong&gt;합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫번째 전화는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;_sbrk()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;힙의 시작을 반환하고, 필요한 양의 메모리를 사용할 수 없는 경우 후속 호출이 &lt;strong&gt;반환&lt;/strong&gt;됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;답례로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NULL&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;_sbrk()&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;-1&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;c malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 구별하기가 매우 어렵습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 보기엔 버그가 있는 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 당신은 어떤 커스텀을 구현함으로써 메모리를 관리할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 RAM 주소를 사용합니다.&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;malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나의 컨트롤러 관련 프로젝트는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#define LENGTH_36_NUM   (44)
#define LENGTH_52_NUM   (26)
#define LENGTH_64_NUM   (4)
#define LENGTH_128_NUM  (5)
#define LENGTH_132_NUM  (8)
#define LENGTH_256_NUM  (8)
#define LENGTH_512_NUM  (18)    
#define LENGTH_640_NUM  (8) 
#define LENGTH_1536_NUM (6) 

#define CUS_MEM_USED        (1)
#define CUS_MEM_NO_USED     (0)

#define CALC_CNT    (0)
#define CALC_MAX    (1)

#define __Ram_Loc__         (0x20000000) ///This is my RAM address
#define __TOP_Ram_Loc__     (0x20000000 + 0x8000 -0x10) //Total 32K RAM and last 16 bytes reserved for some data storage

typedef struct _CUS_MEM_BLOCK_S {
    char used;
    int block_size;
    char *ptr;
    char *next;
} cus_mem_block_s;

static struct _MEM_INFO_TBL_S {
    int block_size;
    int num_max;
    cus_mem_block_s *wm_head;
    int calc[2];
} memInfoTbl[] = {

 {36,  LENGTH_36_NUM  , 0, {0,0} },
 {52,  LENGTH_52_NUM  , 0, {0,0} },
 {64,  LENGTH_64_NUM  , 0, {0,0} },
 {128, LENGTH_128_NUM , 0, {0,0} },
 {132, LENGTH_132_NUM , 0, {0,0} },
 {256, LENGTH_256_NUM , 0, {0,0} },
 {512, LENGTH_512_NUM , 0, {0,0} },
 {640, LENGTH_640_NUM , 0, {0,0} },
 {1536,LENGTH_1536_NUM, 0, {0,0} },
};
#define MEM_TBL_MAX     (sizeof(memInfoTbl)/sizeof(struct _MEM_INFO_TBL_S))

BOOL MemHeapHasBeenInitialised = FALSE;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 매크로는 기본적으로 RAM 주소를 정의하고 자주 할당해야 하는 블록 크기에 대해 더 많은 블록 번호를 수동으로 선택했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;36바이트가 더 필요해서 더 많은 숫자가 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 meminit의 init 함수입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void cus_MemInit(void)
{
    int i,j;
    cus_mem_block_s *head=NULL;
    unsigned int addr;

    addr = __Ram_Loc__;

    for(i=0; i&amp;lt;MEM_TBL_MAX; i++) 
    {
        head = (char *)addr;
        memInfoTbl[i].wm_head = head;
        for(j=0;j&amp;lt;memInfoTbl[i].num_max; j++)
        {
            head-&amp;gt;used =CUS_MEM_NO_USED;
            head-&amp;gt;block_size = memInfoTbl[i].block_size;
            head-&amp;gt;ptr = (char *)(addr + sizeof(cus_mem_block_s));
            addr += (memInfoTbl[i].block_size + sizeof(cus_mem_block_s));
            head-&amp;gt;next =(char *)addr;
            head = head-&amp;gt;next;
            if(head &amp;gt; __TOP_Ram_Loc__) 
            {
                printf(&quot;%s:error.\n&quot;,__FUNCTION__);
                return;
            }
        }
    }
    head-&amp;gt;ptr = 0;
    head-&amp;gt;block_size = 0;
    head-&amp;gt;next = __Ram_Loc__;

    MemHeapHasBeenInitialised=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;void* CUS_Malloc( int wantedSize )
{
    void *pwtReturn = NULL;
    int i;
    cus_mem_block_s *head;

    if(MemHeapHasBeenInitialised == FALSE) 
            goto done_exit;

    for(i=0; i&amp;lt;MEM_TBL_MAX; i++)
    {
        if(wantedSize &amp;lt;= memInfoTbl[i].block_size)
        {
            head = memInfoTbl[i].wm_head;
            while(head-&amp;gt;ptr)
            {
                if(head-&amp;gt;used == CUS_MEM_NO_USED)
                {
                    head-&amp;gt;used = CUS_MEM_USED;
                    pwtReturn = head-&amp;gt;ptr;
                    goto done;
                }
                head = head-&amp;gt;next;
            }
            goto done;

        }
    }
 done:


    if(pwtReturn)
    {
        for(i=0; i&amp;lt;MEM_TBL_MAX; i++)
        {
            if(memInfoTbl[i].block_size == head-&amp;gt;block_size)
            {

                memInfoTbl[i].calc[CALC_CNT]++;
                if(memInfoTbl[i].calc[CALC_CNT] &amp;gt; memInfoTbl[i].calc[CALC_MAX] )
                    memInfoTbl[i].calc[CALC_MAX]=memInfoTbl[i].calc[CALC_CNT];
                break;
            }
        }
    }
  done_exit:
    return pwtReturn;
}
&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;void CUS_Free(void *pm)
{
    cus_mem_block_s *head;
    char fault=0;


    if( (pm == NULL) || (MemHeapHasBeenInitialised == FALSE) )
        goto done;
    if( (pm &amp;lt; __RamAHB32__) &amp;amp;&amp;amp; (pm &amp;gt; __TOP_Ram_Loc__) )
    {
        printf(&quot;%s:over memory range\n&quot;,__FUNCTION__);
        goto done;
    }

    head = pm-sizeof(cus_mem_block_s);


    if(head-&amp;gt;used)
        head-&amp;gt;used = CUS_MEM_NO_USED;
    else
    {
        printf(&quot;%s:free error\n&quot;,__FUNCTION__);
        fault=1;
    }


    if(fault)
        goto done;
    int i;
    for(i=0;i&amp;lt;MEM_TBL_MAX;i++)
    {
        if(memInfoTbl[i].block_size == head-&amp;gt;block_size)
        {
            memInfoTbl[i].calc[CALC_CNT]--;
            goto done;
        }
    }
 done:;

}
&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;void *mem=NULL;
mem=CUS_Malloc(wantedsize);
&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;void CUS_MemShow(void)
{
    int i;
    int block_size;
    int block_cnt[MEM_TBL_MAX];
    int usedSize=0, totalSize=0;
    cus_mem_block_s *head;

    if(MemHeapHasBeenInitialised == FALSE)
            return;

    memset(block_cnt, 0, sizeof(block_cnt));

    head = memInfoTbl[0].wm_head;
    i=0;
    block_size = head-&amp;gt;block_size;
    vTaskSuspendAll();
    while( head-&amp;gt;ptr !=0)
    {
        if(head-&amp;gt;used == CUS_MEM_USED )
        {
            block_cnt[i]++;
            usedSize +=head-&amp;gt;block_size;
        }
        usedSize += sizeof(cus_mem_block_s);

        totalSize += (head-&amp;gt;block_size+ sizeof(cus_mem_block_s));

        /* change next memory block */  
        head = head-&amp;gt;next;
        if( block_size != head-&amp;gt;block_size)
        {
            block_size = head-&amp;gt;block_size;
            i++;
        }
    }
    xTaskResumeAll();

    usedSize += sizeof(cus_mem_block_s);
    totalSize+= sizeof(cus_mem_block_s);

    dprintf(&quot;----Memory Information----\n&quot;);

    for(i=0; i&amp;lt;MEM_TBL_MAX; i++) {
        printf(&quot;block %d used=%d/%d (max %d)\n&quot;,
                    memInfoTbl[i].block_size, block_cnt[i], 
                    memInfoTbl[i].num_max,
                    memInfoTbl[i].calc[CALC_MAX]);
    }

    printf(&quot;used memory=%d\n&quot;,usedSize);
    printf(&quot;free memory=%d\n&quot;,totalSize-usedSize);
    printf(&quot;total memory=%d\n&quot;,totalSize);
    printf(&quot;--------------------------\n&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;여기서 verendi의 이전 답변을 기반으로 할당하기에 힙이 너무 작은 경우 malloc()을 &quot;강제&quot;하여 NULL을 반환하는 방법을 찾을 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 STACK의 최대량을 추정했고 이를 바탕으로 최악의 경우 스택이 시작될 수 있는 주소를 계산할 수 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#define STACK_END_ADDRESS       0x20020000
#define STACK_MAX_SIZE              0x0400
#define STACK_START_ADDRESS   (STACK_END_ADDRESS - STACK_MAX_SIZE)

void * _sbrk_r(
   struct _reent *_s_r,
   ptrdiff_t nbytes)
{
   char  *base;     /*  errno should be set to  ENOMEM on error */

   if (!heap_ptr) { /*  Initialize if first time through.       */
      heap_ptr = end;
   }
   base = heap_ptr; /*  Point to end of heap.           */
   #ifndef STACK_START_ADDRESS
      heap_ptr += nbytes;   /*  Increase heap.              */
      return base;      /*  Return pointer to start of new heap area.   */
   #else
      /* End of heap mustn't exceed beginning of stack! */        
      if (heap_ptr &amp;lt;= (char *) (STACK_START_ADDRESS - nbytes) ) {  
         heap_ptr += nbytes;    /*  Increase heap.              */
         return base;       /*  Return pointer to start of new heap area.   */
      } else {
         return (void *) -1;         /*   Return -1 means that memory run out  */
      }
   #endif // STACK_START_ADDRESS
}
&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/22422733/malloc-behaviour-on-an-embedded-system&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1424</guid>
      <comments>https://newsource.tistory.com/1424#entry1424comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:24:06 +0900</pubDate>
    </item>
    <item>
      <title>Maria로 전환한 후 MATCH 쿼리 문제DB</title>
      <link>https://newsource.tistory.com/1423</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Maria로 전환한 후 MATCH 쿼리 문제&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DB&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안녕하세요 여러분 저는 방금 마리아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;pre&gt;&lt;code&gt;SELECT * FROM table WHERE Model = &quot;CR-V&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;SELECT *, MATCH (Model) AGAINST (&quot;CR-V&quot;) as score FROM table WHERE MATCH (Model) AGAINST (&quot;CR-V&quot;) ORDER BY score DESC;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아무것도 반환하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예전에 내 서버에서 완벽하게 잘 작동했었지만 지금은 그렇지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 도움이라도 주시면 감사하겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/50516675/match-query-issues-after-switching-to-mariadb&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1423</guid>
      <comments>https://newsource.tistory.com/1423#entry1423comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:23:53 +0900</pubDate>
    </item>
    <item>
      <title>파워셸에 연관 배열이 있습니까?</title>
      <link>https://newsource.tistory.com/1422</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;pre&gt;&lt;code&gt;$a = get-name-id-pair()
$a.Id
$a.Name
&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;$a = get-name-id-pair()
$a[&quot;id&quot;]
$a[&quot;name&quot;]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;php에서도 like가 가능합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파워쉘로 해도 되나요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$a = @{'foo'='bar'}
&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 = @{}
$a.foo = 'bar'
&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 = @{}
$a[&quot;foo&quot;] = &quot;bar&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;$c = @{&quot;1&quot;=&quot;one&quot;;&quot;2&quot;=&quot;two&quot;} 
foreach($g in $c.Keys){write-host $c[$g]} #where key = $g and value = $c[$g]
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;#Define an empty hash
$i = @{}

#Define entries in hash as a number/value pair - ie. number 12345 paired with Mike is   entered as $hash[number] = 'value'

$i['12345'] = 'Mike'  
$i['23456'] = 'Henry'  
$i['34567'] = 'Dave'  
$i['45678'] = 'Anne'  
$i['56789'] = 'Mary'  

#(optional, depending on what you're trying to do) call value pair from hash table as a variable of your choosing

$x = $i['12345']

#Display the value of the variable you defined

$x

#If you entered everything as above, value returned would be:

Mike
&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;$domain = $env:userdnsdomain
$siteUrls = @{ 'TEST' = 'http://test/SystemCentre' 
               'LIVE' = 'http://live/SystemCentre' }

$url = $siteUrls[$domain]
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;PS C:\&amp;gt; $a = @{}                                                      
PS C:\&amp;gt; $a.gettype()                                                  

IsPublic IsSerial Name                                     BaseType            

-------- -------- ----                                     --------            

True     True     Hashtable                                System.Object       
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해시테이블은 연관 배열입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;PS C:\&amp;gt; $a = [Collections.Hashtable]::new()
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JSON 문자열에서 만들기&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$people= '[
{
&quot;name&quot;:&quot;John&quot;, 
&quot;phone&quot;:&quot;(555) 555-5555&quot;
},{
&quot;name&quot;:&quot;Mary&quot;, 
&quot;phone&quot;:&quot;(444) 444-4444&quot;
}
]';

# Convert String To Powershell Array
$people_obj = ConvertFrom-Json -InputObject $people;

# Loop through them and get each value by key.
Foreach($person in $people_obj ) {
    echo $person.name;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 작업도 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function get-faqentry { &quot;meaning of life?&quot;, 42 }
$q, $a = get-faqentry 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연관 배열은 아니지만 마찬가지로 유용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;-오이신&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/1506043/does-powershell-have-associative-arrays&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PowerShell</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1422</guid>
      <comments>https://newsource.tistory.com/1422#entry1422comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:23:47 +0900</pubDate>
    </item>
    <item>
      <title>console.log가 개체의 현재 상태를 표시하도록 하려면 어떻게 해야 합니까?</title>
      <link>https://newsource.tistory.com/1421</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;console.log가 개체의 현재 상태를 표시하도록 하려면 어떻게 해야 합니까?&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;console.log&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같은 상태가 아닌 마지막 실행 상태에서 개체를 보여줄 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;console.log&lt;/code&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;console.log&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 선에 있는 물체의 상태를 파악할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var test = {a: true}
console.log(test); // {a: false}
test.a = false; 
console.log(test); // {a: false}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 생각엔 당신이에요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;console.dir()&lt;/code&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;console.log()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;개체에 대한 참조를 인쇄하기 때문에 원하는 작업을 수행하지 않습니다. 개체를 열 때에는 개체가 변경됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;console.dir&lt;/code&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;아래의 JSON 아이디어는 좋은 아이디어입니다. JSON 문자열을 구문 분석하여 .dir()가 제공하는 것과 같은 브라우징 가능한 객체를 얻을 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;console.log(JSON.parse(JSON.stringify(obj)));&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기록된 시점의 상태를 확인하고 싶을 때 주로 하는 일은 JSON 문자열로 변환하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;console.log(JSON.stringify(a));
&lt;/code&gt;&lt;/pre&gt;&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;바닐라 JS:&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/7389177/363701&quot;&gt;@evan&lt;/a&gt;의 대답은 여기서 가장 좋은 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JSON.parse/stringify를 사용하여 객체의 복사본을 효과적으로 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;console.log(JSON.parse(JSON.stringify(test)));
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JQuery 특정 솔루션:&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특정 시점에 개체의 스냅샷을 생성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;console.log($.extend({}, test));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 실제로 일어나고 있는 것은 jQuery가 새로운 객체를 만들고 있다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;test&lt;/code&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;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;AngularJS(1) 특정 솔루션:&lt;/font&gt;&lt;/h3&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;copy&lt;/code&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;console.log(angular.copy(test));
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;바닐라 JS 포장지 기능:&lt;/font&gt;&lt;/h3&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;console.log&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로그아웃하기 전에 모든 개체의 복사본을 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 답변의 몇 가지 유사하지만 덜 강력한 기능에 대한 답변으로 이 글을 썼습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여러 인수를 지원하며, &lt;em&gt;일반&lt;/em&gt; 개체가 아닌 경우에는 복사를 시도하지 &lt;em&gt;않습니다&lt;/em&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function consoleLogWithObjectCopy () {
  var args = [].slice.call(arguments);
  var argsWithObjectCopies = args.map(copyIfRegularObject)
  return console.log.apply(console, argsWithObjectCopies)
}

function copyIfRegularObject (o) {
  const isRegularObject = typeof o === 'object' &amp;amp;&amp;amp; !(o instanceof RegExp)
  return isRegularObject ? copyObject(o) : o
}

function copyObject (o) {
  return JSON.parse(JSON.stringify(o))
}
&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;strong&gt;예제&lt;/strong&gt; 용법:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;consoleLogWithObjectCopy('obj', {foo: 'bar'}, 1, /abc/, {a: 1})&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그거&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;gt; Object&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;콘솔에서 현재 상태만 표시되는 것은 아닙니다.&lt;/font&gt;&lt;font 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;var test = {a: true}
console.log(test);
setTimeout(function () {
    test.a = false; 
    console.log(test);
}, 4000);
&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;console.log&lt;/code&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;Xeon06의 힌트를 사용하여 객체에서 그의 JSON을 파싱할 수 있으며, 여기 내 객체를 덤프하기 위해 사용하는 로그 함수가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function odump(o){
   console.log($.parseJSON(JSON.stringify(o)));
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;디버거 라이브러리를 사용할 수 있는 옵션이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://debugjs.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://debugjs.net/&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;script src=&quot;debug.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로깅&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var test = {a: true}
log(test); // {a: true}
test.a = false; 
log(test); // {a: false}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유틸리티를 정의했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function MyLog(text) {
    console.log(JSON.stringify(text));
}
&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;MyLog(&quot;hello console!&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;console.log(JSON.stringify(myObject, null, 2));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 레벨에 두 개의 공백이 있는 개체를 들여씁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/4810841/how-can-i-pretty-print-json-using-javascript&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바스크립트를 이용하여 JSON을 프리프린팅하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2022년 말부터 새로운 옵션이 있습니다: 새로운 DOM으로 개체를 심층 복사합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;structuredClone&lt;/code&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;console.log(structuredClone(obj))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;웹 작업자 간에 메시지를 전송하는 데 사용되는 복제 알고리즘을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 더 빠르고 더 많은 종류의 물체와 함께 작동해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JSON.parse(JSON.stringify(obj))&lt;/code&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;자세한 내용은 https://developer.mozilla.org/en-US/docs/Web/API/structuredClone 을 참조하십시오.&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;console.logObject = function(o) {
  (JSON.stringify(o));
}
&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;하지만 제 qUnit 테스트에서는 멋지게 작동합니다.&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;console.log(object);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hsUx6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hsUx6.png&quot; alt=&quot;see console screen shot for ref&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/7389069/how-can-i-make-console-log-show-the-current-state-of-an-object&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>javascript</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1421</guid>
      <comments>https://newsource.tistory.com/1421#entry1421comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:23:39 +0900</pubDate>
    </item>
    <item>
      <title>WordPress 연락처 양식 7 텍스트 값 변경</title>
      <link>https://newsource.tistory.com/1420</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WordPress 연락처 양식 7 텍스트 값 변경&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WordPress - 연락처 양식&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;누군가 cf7 필드 값을 입력했을 때 수정할 필터를 찾고 있습니다.&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;validate - 이미 완료했습니다.&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;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에그: 1&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_filter( 'wpcf7_validate_text*', 'your_validation_filter_func_tel', 100, 2 );
function your_validation_filter_func_tel( $result, $tag ) {

    $Yourvalue = $_POST['your-number'];
    if ( strlen( $Yourvalue ) == 2 ) {
        $result-&amp;gt;invalidate( 'your-number', &quot;Please enter a valid number.  &quot; . );
        // HERE I WANT TO REPLACE NEW DATA TO TEXT FIELD
        $result-&amp;gt;data( 'your-number', '1002' );
    } else if ( strlen( $Yourvalue ) == 3 ) {
        $result-&amp;gt;invalidate( 'your-number', &quot;Please enter a valid name.&quot; . );
        // HERE I WANT TO REPLACE NEW DATA TO TEXT FIELD
        $result-&amp;gt;data( 'your-number', '1003' );
    }

    return $result;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에그: 2&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또 하나의 효과적인 예&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;$result['tel'] = $tel_cleaned_final;&lt;/code&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;?php

    function custom_filter_wpcf7_is_tel( $result, $tel ) 
    {

        // Initialization and Clean Input
        $tel_cleaned         = strtr( $tel, array(' '=&amp;gt;'', '-'=&amp;gt;'', '.'=&amp;gt;''));
        $tel_cleaned_trimmed = ltrim(strtr( $tel_cleaned, array('+'=&amp;gt;'')), '0');


        /* Test Conditions.
           I concluded 3 if conditions to 1 below bcaz the validation is working perfect
        */
        if ('test conditions here')
        $tel_cleaned_final = substr($tel_cleaned_trimmed, 2);
        else
        $tel_cleaned_final = $tel_cleaned_trimmed;



        if (strlen($tel_cleaned_final) == 10)
        {
        $result = true;

        //$result['tel'] = $tel_cleaned_final; 
        /* 
        Here i want to return new number to text box
        for eg: +91 98989-89898 returns  9898989898
        */

        }
        else
        {
        $result = false;
        }

        return $result;
    }
    add_filter( 'wpcf7_is_tel', 'custom_filter_wpcf7_is_tel', 10, 2 );

    ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유효성 검사 필터만으로 수행하려는 작업을 수행할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수행된 유효성 검사에 따라 참 또는 거짓을 출력하기 때문입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원하는 작업을 수행하려면 필터링할 값을 가진 다른 필터('&lt;strong&gt;wpcf7_posted_data&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;1단계:&lt;/strong&gt; 모든 검증을 현재와 같이 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;예제 2&lt;/strong&gt;를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function custom_filter_wpcf7_is_tel( $result, $tel )
{
    // Initialization and Clean Input
    $tel_cleaned         = strtr( $tel, array(' '=&amp;gt;'', '-'=&amp;gt;'', '.'=&amp;gt;''));
    $tel_cleaned_trimmed = ltrim(strtr( $tel_cleaned, array('+'=&amp;gt;'')), '0');

    /* Test Conditions.
       I concluded 3 if conditions to 1 below bcaz the validation is working perfect
    */
    if ('test conditions here')
    $tel_cleaned_final = substr($tel_cleaned_trimmed, 2);
    else
    $tel_cleaned_final = $tel_cleaned_trimmed;

    if (strlen($tel_cleaned_final) == 10)
    {
        $result = true;
    } else
    {
        $result = false;
    }

    return $result;
}
add_filter( 'wpcf7_is_tel', 'custom_filter_wpcf7_is_tel', 10, 2 );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위 코드를 통해 포인트 1과 포인트 2가 제대로 작동하는지 확인할 수 있습니다.&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;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;2단계:&lt;/strong&gt; 테스트를 다시 실행하여 원하는 값을 얻고 업데이트합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function sr_change_updated_field_value( $posted_data ) 
{ 
    // Initialization and Clean Input
    $tel_cleaned         = strtr( $tel, array(' '=&amp;gt;'', '-'=&amp;gt;'', '.'=&amp;gt;''));
    $tel_cleaned_trimmed = ltrim(strtr( $tel_cleaned, array('+'=&amp;gt;'')), '0');

    /* Test Conditions.
       I concluded 3 if conditions to 1 below bcaz the validation is working perfect
    */
    if ('test conditions here')
    $tel_cleaned_final = substr($tel_cleaned_trimmed, 2);
    else
    $tel_cleaned_final = $tel_cleaned_trimmed;

    // Use the name of your field in place of &quot;tel&quot;
    $posted_data['tel'] = $tel_cleaned_final;

    return $posted_data;
}; 
add_filter( 'wpcf7_posted_data', 'sr_change_updated_field_value', 10, 1 );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;추신:&lt;/strong&gt; 이렇게 하면 이메일로 전송된 값이나 저장된 경우 제출된 값이 업데이트됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유효성 확인 메시지가 표시되지만, 이 시나리오에서는 php로 할 수 없기 때문에 텍스트 필드에 업데이트된 값이 표시되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;추신 &lt;/strong&gt;2 &lt;strong&gt;이것&lt;/strong&gt;은 모두 테스트된 코드입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해피코딩.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 통해 도움이 될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_action( 'wpcf7_before_send_mail', 'some_function_name', 1 ); 
function some_function_name( $contact_form ) {
    $wpcf7 = WPCF7_ContactForm::get_current();
    $submission = WPCF7_Submission::get_instance();

    if ($submission) {
        $data = array();
        $data['posted_data'] = $submission-&amp;gt;get_posted_data();
        $firstName = $data['posted_data']['first-name']; // just enter the field name here
        $mail = $wpcf7-&amp;gt;prop('mail');

        if($firstName =''){
            $mail['body'] = str_replace('[first-name]', $firstName . '-blah blah', $mail['body']);
        }

        $wpcf7-&amp;gt;set_properties(array(
            &quot;mail&quot; =&amp;gt; $mail
        )); 

        return $wpcf7;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도움이 되길 바랍니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;추신: 테스트가 안 된 제품입니다, 혹시 작동되는지 알려주세요:)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/53429325/wordpress-contact-form-7-text-value-change&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1420</guid>
      <comments>https://newsource.tistory.com/1420#entry1420comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:23:32 +0900</pubDate>
    </item>
    <item>
      <title>jquery를 사용하여 텍스트 상자를 비활성화하시겠습니까?</title>
      <link>https://newsource.tistory.com/1419</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jquery를 사용하여 텍스트 상자를 비활성화하시겠습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이름이 같고 값이 다른 라디오 버튼이 3개 있습니다.&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;pre&gt;&lt;code&gt;&amp;lt;form name=&quot;checkuserradio&quot;&amp;gt;
    &amp;lt;input type=&quot;radio&quot; value=&quot;1&quot; name=&quot;userradiobtn&quot; id=&quot;userradiobtn&quot;/&amp;gt; 
    &amp;lt;input type=&quot;radio&quot; value=&quot;2&quot; name=&quot;userradiobtn&quot; id=&quot;userradiobtn&quot;/&amp;gt;
    &amp;lt;input type=&quot;radio&quot; value=&quot;3&quot; name=&quot;userradiobtn&quot; id=&quot;userradiobtn&quot;/&amp;gt;
    &amp;lt;input type=&quot;checkbox&quot; value=&quot;4&quot; name=&quot;chkbox&quot; /&amp;gt;
    &amp;lt;input type=&quot;text&quot; name=&quot;usertxtbox&quot; id=&quot;usertxtbox&quot; /&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;span id=&quot;radiobutt&quot;&amp;gt;
  &amp;lt;input type=&quot;radio&quot; name=&quot;rad1&quot; value=&quot;1&quot; /&amp;gt;
  &amp;lt;input type=&quot;radio&quot; name=&quot;rad1&quot; value=&quot;2&quot; /&amp;gt;
  &amp;lt;input type=&quot;radio&quot; name=&quot;rad1&quot; value=&quot;3&quot; /&amp;gt;
&amp;lt;/span&amp;gt;
&amp;lt;div&amp;gt;
  &amp;lt;input type=&quot;text&quot; id=&quot;textbox1&quot; /&amp;gt;
  &amp;lt;input type=&quot;checkbox&quot; id=&quot;checkbox1&quot; /&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바스크립트&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  $(&quot;#radiobutt input[type=radio]&quot;).each(function(i){
    $(this).click(function () {
        if(i==2) { //3rd radiobutton
            $(&quot;#textbox1&quot;).attr(&quot;disabled&quot;, &quot;disabled&quot;); 
            $(&quot;#checkbox1&quot;).attr(&quot;disabled&quot;, &quot;disabled&quot;); 
        }
        else {
            $(&quot;#textbox1&quot;).removeAttr(&quot;disabled&quot;); 
            $(&quot;#checkbox1&quot;).removeAttr(&quot;disabled&quot;); 
        }
      });

  });
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;꼭 필요한 것은 아니지만, (기능 호출 외부의 조건부를 이동시키므로) 기능 호출을 더 빨리 할 수 있는 OK.W.의 코드를 약간 개선한 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#radiobutt input[type=radio]&quot;).each(function(i) {
    if (i == 2) { //3rd radiobutton
        $(this).click(function () {
            $(&quot;#textbox1&quot;).attr(&quot;disabled&quot;, &quot;disabled&quot;);
            $(&quot;#checkbox1&quot;).attr(&quot;disabled&quot;, &quot;disabled&quot;);
        });
    } else {
        $(this).click(function () {
            $(&quot;#textbox1&quot;).removeAttr(&quot;disabled&quot;);
            $(&quot;#checkbox1&quot;).removeAttr(&quot;disabled&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;a href=&quot;http://api.jquery.com/attr/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://api.jquery.com/attr/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;폼 요소의 확인, 선택 또는 비활성화 상태와 같은 DOM 속성을 검색하고 변경하려면 .prop() 메서드를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#radiobutt input[type=radio]&quot;).each(function(i){
$(this).click(function () {
    if(i==2) { //3rd radiobutton
        $(&quot;#textbox1&quot;).prop(&quot;disabled&quot;, true); 
        $(&quot;#checkbox1&quot;).prop(&quot;disabled&quot;, true); 
    }
    else {
        $(&quot;#textbox1&quot;).prop(&quot;disabled&quot;, false); 
        $(&quot;#checkbox1&quot;).prop(&quot;disabled&quot;, false);
    }
  });
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 솔루션 중 일부에서 .each()를 사용하는 이유를 잘 모르겠습니다. 필요하지 않습니다.&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;참고: 확인란에 ID를 추가했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 ID는 문서에서 고유해야 하므로 라디오 단추의 ID를 제거하거나 고유하게 만들어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;input:radio[name='userradiobtn']&quot;).click(function() {
    var isDisabled = $(this).is(&quot;:checked&quot;) &amp;amp;&amp;amp; $(this).val() == &quot;3&quot;;
    $(&quot;#chkbox&quot;).attr(&quot;disabled&quot;, isDisabled);
    $(&quot;#usertxtbox&quot;).attr(&quot;disabled&quot;, isDisabled);
});
&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;지금 JQuery에서 상태를 바꾸는 가장 좋은 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#input&quot;).prop('disabled', true); 
$(&quot;#input&quot;).prop('disabled', false);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자세한 설명은 이 링크를 확인하시기 바랍니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/1414365/disable-enable-an-input-with-jquery&quot;&gt;jQuery로 입력을 비활성화/활성화하시겠습니까?&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;조금 다르게 했을 겁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;input type=&quot;radio&quot; value=&quot;1&quot; name=&quot;userradiobtn&quot; id=&quot;userradiobtn&quot; /&amp;gt;   
 &amp;lt;input type=&quot;radio&quot; value=&quot;2&quot; name=&quot;userradiobtn&quot; id=&quot;userradiobtn&quot; /&amp;gt;    
 &amp;lt;input type=&quot;radio&quot; value=&quot;3&quot; name=&quot;userradiobtn&quot; id=&quot;userradiobtn&quot; class=&quot;disablebox&quot;/&amp;gt;   
 &amp;lt;input type=&quot;checkbox&quot; value=&quot;4&quot; name=&quot;chkbox&quot; id=&quot;chkbox&quot; class=&quot;showbox&quot;/&amp;gt;    
 &amp;lt;input type=&quot;text&quot; name=&quot;usertxtbox&quot; id=&quot;usertxtbox&quot; class=&quot;showbox&quot; /&amp;gt;   
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;공지 클래스속성&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; $(document).ready(function() {      
    $('.disablebox').click(function() {
        $('.showbox').attr(&quot;disabled&quot;, 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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클릭 이벤트를 여러 라디오 버튼에 바인딩하고 클릭한 라디오 버튼의 값을 읽고 값에 따라 확인란과 텍스트 상자를 비활성화/활성화하고 싶을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function enableInput(class){
    $('.' + class + ':input').attr('disabled', false);
}

function disableInput(class){
    $('.' + class + ':input').attr('disabled', true);
}

$(document).ready(function(){
    $(&quot;.changeBoxes&quot;).click(function(event){
        var value = $(this).val();
        if(value == 'x'){
            enableInput('foo'); //with class foo
            enableInput('bar'); //with class bar
        }else{
            disableInput('foo'); //with class foo
            disableInput('bar'); //with class bar
        }
    });
});
&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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우선 .ach()를 사용하지 말고 색인을 사용하여 특정 라디오 버튼을 가리켜서는 안 됩니다.&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;다음으로, OP가 만들어졌을 때는 그렇지 않았을 겁니다.on('클릭', function(){...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;})을(를) 클릭하는 대신...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://api.jquery.com/on/&quot; rel=&quot;nofollow&quot;&gt;http://api.jquery.com/on/&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;그래서 저는 결국 다음과 같은 코드를 갖게 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML (o.k.w 코드 기준)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;span id=&quot;radiobutt&quot;&amp;gt;
    &amp;lt;input type=&quot;radio&quot; name=&quot;rad1&quot; value=&quot;1&quot; /&amp;gt;
    &amp;lt;input type=&quot;radio&quot; name=&quot;rad1&quot; value=&quot;2&quot; /&amp;gt;
    &amp;lt;input type=&quot;radio&quot; name=&quot;rad1&quot; value=&quot;3&quot; /&amp;gt;
&amp;lt;/span&amp;gt;
&amp;lt;div&amp;gt;
    &amp;lt;input type=&quot;text&quot; id=&quot;textbox1&quot; /&amp;gt;
    &amp;lt;input type=&quot;checkbox&quot; id=&quot;checkbox1&quot; /&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JS코드&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;[name='rad1']&quot;).on('click', function() {
    var disable = $(this).val() === &quot;2&quot;;
    $(&quot;#textbox1&quot;).prop(&quot;disabled&quot;, disable); 
    $(&quot;#checkbox1&quot;).prop(&quot;disabled&quot;, disable); 
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MVC 4 @Html.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CheckBox일반적으로 사람들은 mvc 확인란의 선택과 선택을 취소할 때 작업을 수행하기를 원합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;editor-field&quot;&amp;gt;
    @Html.CheckBoxFor(model =&amp;gt; model.IsAll, new { id = &quot;cbAllEmp&quot; })
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변경할 컨트롤에 대해 id를 정의하고 자바스크립트에서 다음을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
    $(function () {
        $(&quot;#cbAllEmp&quot;).click(&quot;&quot;, function () {
            if ($(&quot;#cbAllEmp&quot;).prop(&quot;checked&quot;) == true) {
                    $(&quot;#txtEmpId&quot;).hide();
                    $(&quot;#lblEmpId&quot;).hide();
                }
                else {
                    $(&quot;#txtEmpId&quot;).show();
                    $(&quot;#txtEmpId&quot;).val(&quot;&quot;);
                    $(&quot;#lblEmpId&quot;).show();
             }
        });
    });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 또한 다음과 같이 부동산을 바꿀 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#txtEmpId&quot;).prop(&quot;disabled&quot;, true); 
$(&quot;#txtEmpId&quot;).prop(&quot;readonly&quot;, true); 
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;$(document).ready(function () {
   $(&quot;#txt1&quot;).attr(&quot;onfocus&quot;, &quot;blur()&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;true&quot; data-console=&quot;true&quot; data-babel=&quot;true&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;$(document).ready(function () {
  $(&quot;#txt1&quot;).attr(&quot;onfocus&quot;, &quot;blur()&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://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;input id=&quot;txt1&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;라디오 버튼 값을 가져오고 3이면 각각과 일치합니다. 그리고 비활성화됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;checkbox and textbox&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;$(&quot;#radiobutt input[type=radio]&quot;).click(function () {
    $(this).each(function(index){
    //console.log($(this).val());
        if($(this).val()==3) { //get radio buttons value and matched if 3 then disabled.
            $(&quot;#textbox_field&quot;).attr(&quot;disabled&quot;, &quot;disabled&quot;); 
            $(&quot;#checkbox_field&quot;).attr(&quot;disabled&quot;, &quot;disabled&quot;); 
        }
        else {
            $(&quot;#textbox_field&quot;).removeAttr(&quot;disabled&quot;); 
            $(&quot;#checkbox_field&quot;).removeAttr(&quot;disabled&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://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;span id=&quot;radiobutt&quot;&amp;gt;
  &amp;lt;input type=&quot;radio&quot; name=&quot;groupname&quot; value=&quot;1&quot; /&amp;gt;
  &amp;lt;input type=&quot;radio&quot; name=&quot;groupname&quot; value=&quot;2&quot; /&amp;gt;
  &amp;lt;input type=&quot;radio&quot; name=&quot;groupname&quot; value=&quot;3&quot; /&amp;gt;
&amp;lt;/span&amp;gt;
&amp;lt;div&amp;gt;
  &amp;lt;input type=&quot;text&quot; id=&quot;textbox_field&quot; /&amp;gt;
  &amp;lt;input type=&quot;checkbox&quot; id=&quot;checkbox_field&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&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/1648901/disable-textbox-using-jquery&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1419</guid>
      <comments>https://newsource.tistory.com/1419#entry1419comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:23:23 +0900</pubDate>
    </item>
    <item>
      <title>Mysql2:: 오류:소켓 '/tmp/mysql'을(를) 통해 로컬 MySQL 서버에 연결할 수 없습니다.양말'</title>
      <link>https://newsource.tistory.com/1418</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Mysql2:: 오류:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;소켓 '/tmp/mysql'을(를) 통해 로컬 MySQL 서버에 연결할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;양말'&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;달릴때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rake db:migrate&lt;/code&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;Mysql2::Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기에 대한 다른 사람들의 질문을 살펴보았는데, 그들의 솔루션 중 어떤 것도 도움이 되지 않았습니다. 예를 들어:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;mysql.server start
&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;Starting MySQL
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 오류!&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PID 파일(/usr/local/var/mysql/something.pid)을 업데이트하지 않고 서버를 종료했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;솔루션 투&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysqladmin variables | grep socket
&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;error: 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)'

Check that mysqld is running and that the socket: '/tmp/mysql.sock' exists!
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;추가 참고 사항:&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;홈브루를 사용하여 mysql을 재설치하려고 했는데 성공했습니다. 그런데도 여전히 같은 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 해결했습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;먼저 로 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;database.yml&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;host: localhost&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;host: 127.0.0.1&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그거에요!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;편집:&lt;/strong&gt; 일시적으로 작동하지만 오늘 컴퓨터를 다시 시작하자 동일한 오류가 표시되기 시작했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수정 사항은 웹사이트에서 mysql을 설치하는 것이었습니다. 그러면 제 애플리케이션이 다시 mysql에 성공적으로 연결될 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;env: rails5 mysql5.7.32&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;'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그러나 오류의 원인은 소켓 파일 때문에 발생하였습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;database.yml&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;default: &amp;amp;default
  socket: /tmp/mysql.sock
&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;로그인 mysql&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql -uroot -p&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고나서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;show variables like 'socket';&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;+---------------+-----------------------------+
| Variable_name | Value                       |
+---------------+-----------------------------+
| socket        | /var/run/mysqld/mysqld.sock |
+---------------+-----------------------------+
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 database.yml을 바꿉니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;default: &amp;amp;default
  socket: /var/run/mysqld/mysqld.sock # The line can also be deleted
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우분투 서버(루비 3.1.2 및 레일 7.0.3 사용)에서도 동일한 오류가 발생하여 줄을 제거하는 것만으로 수정했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;socket: /tmp/mysql.sock
&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;config/database.yml&lt;/code&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;또 다른 답은 terminal(zsh)을 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
&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;launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;괜찮을 겁니다&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/41200297/mysql2error-cant-connect-to-local-mysql-server-through-socket-tmp-mysql-so&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1418</guid>
      <comments>https://newsource.tistory.com/1418#entry1418comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:23:13 +0900</pubDate>
    </item>
    <item>
      <title>FLT_MIN이 0인 이유는 무엇입니까?</title>
      <link>https://newsource.tistory.com/1417</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;FLT_MIN이 0인 이유는 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;limits.h&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;floating이 아닌 점 산술 유형에 대한 한계를 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;INT_MIN&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;INT_MAX&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 이 값들은 int를 사용하여 나타낼 수 있는 가장 음의 값이자 가장 양의 값입니다.&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;float.h&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 에 대한 정의가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FLT_MIN&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FLT_MAX&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 다음을 수행하는 경우:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;NSLog(@&quot;%f %f&quot;, FLT_MIN, FLT_MAX);
&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;FLT_MIN = 0.000000, FLT_MAX = 340282346638528859811704183484516925440.000000
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;FLT_MAX&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 예상하는 것처럼, 정말 큰 숫자와 같지만, 왜?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FLT_MIN&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정말 큰 음수 대신에 0과 같습니까?&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;실제로는 0은 아니지만, 를 사용하여 검사하면 0처럼 보일 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;printf&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLog&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;을 이용하여&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%f&lt;/code&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;code&gt;float.h&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(적어도 Mac OS X 10.6.2에서는)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FLT_MIN&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 설명됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/* Minimum normalized positive floating-point number, b**(emin - 1).  */
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 문장의 &lt;em&gt;긍정적&lt;/em&gt;인 것을 주목하세요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FLT_MIN&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;0보다 &lt;/em&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;-FLT_MAX&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;'%f' 형식은 고정 형식으로 소수점 6자리를 인쇄합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;FLT_MIN이 훨씬 작기 때문에 고정점에서는 0으로 보입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;'%e' 또는 '%g' 형식을 사용하면 더 나은 형식의 답변을 얻을 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;FLT_MAX와 유사합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;float.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
int main(void)
{
    printf(&quot;MIN = %f, MAX = %f\n&quot;, FLT_MIN, FLT_MAX);
    printf(&quot;MIN = %e, MAX = %e\n&quot;, FLT_MIN, FLT_MAX);
    return(0);
}


MIN = 0.000000, MAX = 340282346638528859811704183484516925440.000000
MIN = 1.175494e-38, MAX = 3.402823e+38
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표준 헤더 파일 float.h에서 FLT_MIN 값을 인쇄하려고 할 때마다 0.00000000(출력 화면에서 볼 수 있듯이)을 얻을 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 사실 실수가 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;형식 지정자 %f 때문에 이 결과가 나타납니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로 %f는 소수점 뒤에 6자리를 인쇄하지만 이 경우 부호가 음인 값이 너무 작아서 소수점 뒤에 상당한 양의 숫자를 인쇄해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;%.54f(기계 종속)를 사용하여 원하는 결과를 얻었습니다(시스템의 경우 0.000000000000000000000011754943508222875).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;//시스템에서 이를 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;float.h&amp;gt;
int main()
{
    printf(&quot;Minimum signed float %.55f\n&quot;,FLT_MIN);
    printf(&quot;Minimum signed float %e\n&quot;,FLT_MIN);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;//출력 :-&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;// 최소 부호 플로트 0.0000000000000000000000117549435082228750&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;// 최소 서명 플로트 1.175494e-038&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 CHAR_MIN에 대해 0.00000000을 받는 이유와 동일한 포맷의 지정자로 정확한 결과를 얻는 방법은 이제 명확하다고 생각합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;%e을(를) 사용하면 더 나은 형식의 결과를 얻을 수 있습니다.&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;FLT_MIN&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;0과 같습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 0과 같지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0.000000&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용으로 인하여&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;%f&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;소수점 자리 뒤에 6개의 소수점 자리를 인쇄합니다.&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;br&gt; &lt;code&gt;FLT_MIN&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;종종 약 1.17549435e-38의 값을 갖습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;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;FLT_TRUE_MIN, FLT_MIN, FLT_MAX&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그들의 가장 가까운 곳 뿐만 아니라.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;float&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이웃들이웃 :&lt;/font&gt;&lt;/font&gt;&lt;code&gt;float&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Single-precision_floating-point_format&quot; rel=&quot;nofollow noreferrer&quot;&gt;2진법&lt;/a&gt; 32 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Approximate value, exact value
Before, FLT_TRUE_MIN, after
 0.00000000e+00 0.0
 1.40129846e-45 0.00000000000000000000000000000000000000000000140129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125
 2.80259693e-45 0.0000000000000000000000000000000000000000000028025969286496341418474591665798322625605238837530315435141365677795821653717212029732763767242431640625
Before, FLT_MIN, after
 1.17549421e-38 0.00000000000000000000000000000000000001175494210692441075487029444849287348827052428745893333857174530571588870475618904265502351336181163787841796875
 1.17549435e-38 0.000000000000000000000000000000000000011754943508222875079687365372222456778186655567720875215087517062784172594547271728515625
 1.17549449e-38 0.00000000000000000000000000000000000001175494490952133940450443629595204006810278684798281709160328881985245648433835441437622648663818836212158203125
Before, FLT_MAX, after
 3.40282326e+38 340282326356119256160033759537265639424.0
 3.40282347e+38 340282346638528859811704183484516925440.0
            inf inf
&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/2528039/why-is-flt-min-equal-to-zero&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1417</guid>
      <comments>https://newsource.tistory.com/1417#entry1417comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:23:06 +0900</pubDate>
    </item>
    <item>
      <title>PHP PDO 대 normal mysql_connect</title>
      <link>https://newsource.tistory.com/1416</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PHP PDO 대 normal mysql_connect&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PHP에서 데이터베이스 쿼리를 실행하려면 php PDO 또는 normal mysql_connect를 사용해야 합니까?&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;PDO의 가장 큰 이점 중 하나는 인터페이스가 여러 데이터베이스에 걸쳐 일관적이라는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;준비된 문장을 위한 멋진 기능들도 있는데, 이것은 당신의 모든 쿼리 문자열을 빠져나가는 번거로움을 덜어줍니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PDO의 휴대성이 mysql_connect보다 큽니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇다면 PDO를 사용해야 합니까 아니면 기존의 mysql_connect를 고수해야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PDO는 mysql_*보다 약간 느리지만 휴대성이 뛰어납니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PDO는 여러 데이터베이스에 걸쳐 단일 인터페이스를 제공합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, msql은 msql_query, MSsql은 msql_query 등을 사용하지 않고 여러 DB를 사용할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$db-&amp;gt;query() 같은 것만 사용하면 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;INSERT INTO...&quot;)를 항상 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 DB 드라이버를 사용하든 상관 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 더 크거나 휴대용인 프로젝트 PDO가 좋습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;젠드 프레임워크도 PDO를 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일부 빠른 타이밍은 PDO가 연결 속도가 약간 빠르다는 것을 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$start = microtime(true);
for($i=0; $i&amp;lt;10000; ++$i) {

    try {
        $db = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e-&amp;gt;getMessage().&quot;\n&quot;;
    }
    $db = null;
}

$pdotime = microtime(true) - $start;
echo &quot;PDO time: &quot;.$pdotime.&quot;\n&quot;;

$start = microtime(true);
for($i=0; $i&amp;lt;10000; ++$i) {
    $db = mysql_connect($host, $user, $password);
    if(!$db) {
        echo &quot;Connection failed\n&quot;;
    }
    if(!mysql_select_db($schema, $db)) {
        echo &quot;Error: &quot;.mysql_error().&quot;\n&quot;;
    }
    mysql_close($db);
}

$rawtime = microtime(true) - $start;
echo &quot;Raw time: &quot;.$rawtime.&quot;\n&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;PDO time: 0.77983117103577
Raw time: 0.8918719291687

PDO time: 0.7866849899292
Raw time: 0.8954758644104

PDO time: 0.77420806884766
Raw time: 0.90708494186401

PDO time: 0.77484893798828
Raw time: 0.90069103240967
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;속도 차이는 어쨌든 무시할 수 있습니다. 네트워크 연결을 설정하는 데는 PDO에서 발생하는 오버헤드보다 훨씬 더 오래 걸릴 수 있습니다. 특히 mysql 서버가 다른 호스트에 있는 경우 더욱 그렇습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PDO를 사용하는 모든 이유를 직접 말씀하셨습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제로 mysql_* 함수를 직접 사용하거나 PDO를 사용하거나 다른 &lt;a href=&quot;http://pear.php.net/package/DB_DataObject&quot; rel=&quot;noreferrer&quot; title=&quot;DB_DataObject&quot; papago-attr-id=&quot;4&quot;&gt;라이브러리&lt;/a&gt;를 사용하지 마십시오.&lt;/font&gt;&lt;/p&gt;&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PDO를 사용하면 바인딩된 매개 변수를 사용할 수 있으며 대부분의 sql 주입 공격을 방지할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PDO 준비된 문을 사용하면 속도를 높일 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 DB 백엔드에 대한 표준 인터페이스&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;fetch* 계열과 같은 유용한 방법이 많이 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PDO를 사용할 때 사람들이 원하는 것은 속도라고 생각하지 않습니다. 차이가 있는지는 모르겠지만, 솔직히 신경 쓰지 않습니다. 페이지를 생성할 때 데이터베이스에 몇 개의 쿼리를 수행하는 한 PHP 쪽에서 몇 밀리초 정도면 아무것도 변경되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PDO에는 다음과 비교하여 두 가지/세 가지 훌륭한 점이 있습니다.&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;mysql_*&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pg_*&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;oci_*&lt;/code&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;translated&quot;&gt;Object-Oriented API&lt;em&gt;(&lt;a href=&quot;http://php.net/mysqli&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;mysqli_*&lt;/code&gt;&lt;/a&gt;OO-API가 있지만 그렇지&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;MySQL &amp;gt;= 4.1의 새로운 기능을 지원합니다. (&lt;em&gt;와 동일하지만, 다시는 그렇지&lt;/em&gt; 않습니다&lt;em&gt;.)&lt;/em&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;BTW: 저는 일반적으로 PDO를 사용하고 있습니다. 즉 &quot;손으로&quot; &lt;a href=&quot;http://framework.zend.com/&quot; rel=&quot;noreferrer&quot;&gt;사용하거나 Zend&lt;/a&gt; Framework 및/&lt;a href=&quot;http://www.doctrine-project.org/&quot; rel=&quot;noreferrer&quot;&gt;또는&lt;/a&gt; Detrine에 통합되어 사용되기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고 사항 : PDO를 사용하지 않을 경우에도 mysql 대신 mysqli를 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것에 대해서는 &lt;a href=&quot;http://php.net/manual/en/mysqli.overview.php&quot; rel=&quot;noreferrer&quot;&gt;PHP 매뉴얼&lt;/a&gt;의 이 &lt;a href=&quot;http://php.net/manual/en/mysqli.overview.php&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;준비된 문과 일반적인 직접 쿼리(Mysqlnd 및 MyISAM 테이블의 select 문을 사용하여 테스트)를 모두 사용하여 Mysqli 함수와 PDO 함수를 비교하기 위해 성능 테스트를 수행했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 PDO 쿼리가 Mysqli보다 약간 느릴 뿐이지만 약간 느릴 뿐이라는 것을 발견했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 목적으로 사용된 PDO는 대부분 Mysqli 함수를 호출하는 래퍼에 불과하므로 이는 타당합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PDO를 사용하면 함수 이름이 MySQL에만 국한되지 않기 때문에 다른 데이터베이스로 마이그레이션하는 것이 조금 더 쉬워집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제 성능 차이는 준비된 쿼리를 사용하느냐 여부입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;준비된 쿼리를 사용하는 것은 성능에 큰 &lt;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;translated&quot;&gt;준비된 쿼리가 더 빠른 유일한 시간은 쿼리를 한 번 준비한 다음 서로 다른 데이터 값으로 수천 번 제출하는 경우입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇지 않으면 항상 mysqli::query() 또는 PDO::query()를 사용하는 것이 더 빠릅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 이러한 함수는 데이터 값을 벗어나지 않으므로 데이터 변수에 mysqli::real_escape_string() 또는 PDO::quote()를 사용해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;할 수 없는 특별한 이유가 없는 한 일반적으로 PDO를 사용하는 것을 추천합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;둘 사이에 별 차이가 없고 굳이 PDO를 사용하지 않을 이유가 없다면 단순히 mysql_*가 있다고 해서 사용하는 것보다 응용 프로그램에서 DB 추상화를 사용하는 연습을 시작하는 것이 더 나을 것이라고 생각합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 최선의 연습이 이기게 해주세요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 경우 모두 동일한 php 서버에서 동일한 mySQL 서버를 호출합니다...&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;좋은 성능을 원한다면 캐시(memcache 또는 단순 PHP 파일...)를 생각하고 좋은 데이터베이스 구조(INDEX...)를 만들어 보십시오.&lt;/font&gt;&lt;/p&gt;&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PDO가 SQL보다 우수합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PDO 및 그의 준비문 SQL 주입에 대비한 최상의 보안 코드 제공&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PDO가 Object Oriented ;)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PDO는 앞에서 설명한 대로 일부 데이터베이스 엔진과 호환됩니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL_*가 더 이상 사용되지 않으므로 곧 제거됩니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PDO는 더 적은 코드 라인으로 더 많은 기능을 제공합니다. 예:&lt;/font&gt;&lt;/p&gt; &lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프도&lt;/font&gt;&lt;/h2&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;&amp;lt;&quot; 및 &quot;&amp;gt;&quot; 및 &quot;#&quot; 확인 (글로벌 용도로 사용하는 경우 이 확인)&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;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL_*&lt;/font&gt;&lt;/h2&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;&quot;&amp;lt;&quot; 및 &quot;&amp;gt;&quot; 및 &quot;#&quot; 확인 (글로벌 용도로 사용하는 경우 이 확인)&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;둘 다 같은 기능이지만 코드를 비교하면 PDO가 더 인간적으로 읽을 수 있습니다 :) 그래서 어떻게 생각하십니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성능이 &quot;진짜 문제&quot;가 아니라면 PDO를 사용해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성능은 작은 차이로 다르며, PDO에는 여러 데이터베이스 드라이버를 사용해야 할 경우의 골칫거리를 덜어줄 수 있는 매우 훌륭하고 휴대성 있는 데이터베이스 간 인터페이스가 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql_connect&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기능은 PHP 5.5.0에서 더 이상 사용되지 않으며 대부분의 사용되지 않는 기능과 마찬가지로 제거됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 &lt;a href=&quot;http://php.net/manual/en/ref.pdo-mysql.php&quot; rel=&quot;nofollow&quot;&gt;PDO_MySQL&lt;/a&gt;(또는 다른 대체 &lt;a href=&quot;http://php.net/manual/en/book.mysqli.php&quot; rel=&quot;nofollow&quot;&gt;MySQLi&lt;/a&gt;)을 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql_connect&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출처 : http://php.net/manual/en/function.mysql-connect.php&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PDO의 몇 가지 장점:&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;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쉽고 효율적인 일반 작업 - 삽입, 업데이트 등&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PDO 데이터베이스 연결 코드:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$dbhost = 'localhost';
$dbname = 'clsrepair';
$dbuser = 'root';
$dbpass = '';

try {
    $db = new PDO(&quot;mysql:host={$dbhost};dbname={$dbname}&quot;,$dbuser,$dbpass);
    $db-&amp;gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

catch(PDOException $e) {
    echo &quot;Connection error: &quot;.$e-&amp;gt;getMessage();
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반 MySQL 데이터베이스 연결 코드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php 
mysql_connect(&quot;localhost&quot;,&quot;root&quot;, &quot;&quot;);
mysql_select_db (&quot;clsrepair&quot;);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;?php
$dbHost = 'localhost'; // usually localhost
$dbUsername = 'root';
$dbPassword = '';
$dbDatabase = 'clsrepair';
$db = mysql_connect($dbHost, $dbUsername, $dbPassword) or die (&quot;Unable to connect to Database Server.&quot;);
mysql_select_db ($dbDatabase, $db) or die (&quot;Could not select database.&quot;);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 데이터베이스 연결 코드는 쉽지만 PDO는 장점이 많습니다.&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/1402017/php-pdo-vs-normal-mysql-connect&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1416</guid>
      <comments>https://newsource.tistory.com/1416#entry1416comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:22:59 +0900</pubDate>
    </item>
    <item>
      <title>check_admin_referer()가 포함된 Wordpress 함수를 PHP unit에서 어떻게 테스트하시겠습니까?</title>
      <link>https://newsource.tistory.com/1415</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;check_admin_referer()가 포함된 Wordpress 함수를 PHP unit에서 어떻게 테스트하시겠습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;워드프레스로 PHPU 유닛을 막 배우기 시작했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;change.org 에서 청원 데이터를 가져오는 플러그인이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;관리 클래스 함수 중 하나는 Wordpress 관리 영역에서 설정을 검증하고 이 검증의 일부로 'check_admin_referer()'를 호출합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  public function sc_validate_settings() {
    //check nonce field is valid
    check_admin_referer($this-&amp;gt;plugin_name, 'security');    

    //get new settings 
    $settings = $this-&amp;gt;sc_clean_new_settings();

    //validate url
    $valid_url = $this-&amp;gt;sc_validate_url($settings['petition_url']);

    //validate api_key
    $valid_api_key = $this-&amp;gt;sc_validate_api_key($settings['petition_api_key']);

    if ($valid_url &amp;amp;&amp;amp; $valid_api_key) {

      $this-&amp;gt;clean_settings = $settings;
      return true;

    }

    return false;

  }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 PHPUnit 테스트는 내가 코멘트를 하면 통과합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;check_admin_referer()&lt;/code&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;  public function testValidateSettings() {    

    $this-&amp;gt;assertTrue($this-&amp;gt;plugin_admin-&amp;gt;sc_validate_settings());

  }  
&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;수동으로 nonce, action 및 _wp_http_referer를 설정해 보았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wp_nonce_field()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;경유로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$_POST&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테스트/부트스트랩에서. php와 테스트 클래스 자체에서.&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;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;check_admin_referer()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 그 근본이 되는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wp_verify_nonce()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 그러나 이 방법은 최적의 방법이 아닙니다. 통합의 맛이 있는 테스트가 있는 반면 스터브는 단위 테스트에 더 적합하기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;좋은 해결책은 테스트를 통과하기 위해 사용자를 인증하는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 비교적 쉽게 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public function testValidateSettings() {
    $_REQUEST['security'] = wp_create_nonce($this-&amp;gt;plugin_admin-&amp;gt;plugin_name);

    $this-&amp;gt;assertTrue($this-&amp;gt;plugin_admin-&amp;gt;sc_validate_settings());
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 그것을 확신할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$this-&amp;gt;plugin_admin-&amp;gt;plugin_name&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;public function testValidateSettings() {
    $_REQUEST['security'] = wp_create_nonce('whatever your plugin name is');

    $this-&amp;gt;assertTrue($this-&amp;gt;plugin_admin-&amp;gt;sc_validate_settings());
}
&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;public function tearDown() {
    unset($_REQUEST['security']);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WP 오리지널 테스트에서는 non도 cleaning하지 않기 때문에 새로 생성된 non은 테스트 후에 cleaning할 필요가 없다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;너무 예뻐요.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;개선.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테스트 케이스에 포함된 모든 테스트에서 인증이 필요한 경우에는 nonce-creation을&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setUp()&lt;/code&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;public function setUp() {
    $_REQUEST['security'] = wp_create_nonce('whatever your plugin name is');
}

public function tearDown() {
    unset($_REQUEST['security']);
}

public function testValidateSettings() {
    $this-&amp;gt;assertTrue($this-&amp;gt;plugin_admin-&amp;gt;sc_validate_settings());
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제안.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Xdebug를 설치하고 IDE를 통해 Xdebug에 연결합니다. 이렇게 하면 코드를 단계별로 살펴 보고 원하는 대로 작동하지 않는 것을 확인할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 모든 논스, http 레퍼러 등과 맹목적으로 씨름하는 것보다 낫습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메모&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WP 코드는 꽤 슬픕니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;글로벌 네임스페이스의 방대한 함수 목록, OOP 부족, 요청 처리를 위한 전체 주기 없음(예: 예상치 못한 경우)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;die()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;) - 코드베이스 확장과 테스트를 정말 어렵게 만들기 때문에 정말 실망스럽습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러니 코드로 더 많은 싸움을 준비하세요 :)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/38922259/how-would-you-phpunit-test-a-wordpress-function-containing-check-admin-referer&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1415</guid>
      <comments>https://newsource.tistory.com/1415#entry1415comment</comments>
      <pubDate>Wed, 1 Nov 2023 22:22:51 +0900</pubDate>
    </item>
    <item>
      <title>Get Value of Radio 버튼 그룹</title>
      <link>https://newsource.tistory.com/1414</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Get Value of Radio 버튼 그룹&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 구문을 사용하여 두 라디오 버튼 그룹의 값을 구하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 코드를 실행하면 각 개별 그룹의 값을 얻는 대신 첫 번째 라디오 버튼 그룹에서 두 번 선택된 값을 얻습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 여기서 분명히 뭔가 잘못하고 있는 건가요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 도움이든 감사합니다 :)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a href='#' id='check_var'&amp;gt;Check values&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;script&amp;gt;
  $('a#check_var').click(function() {
    alert($(&quot;input:radio['name=r']:checked&quot;).val()+ ' ' +
          $(&quot;input:radio['name=s']:checked&quot;).val());
  });
&amp;lt;/script&amp;gt;
Group 1&amp;lt;br/&amp;gt;
&amp;lt;input type=&quot;radio&quot;  name=&quot;r&quot; value=&quot;radio1&quot;/&amp;gt; radio1
&amp;lt;input type=&quot;radio&quot;  name=&quot;r&quot; value=&quot;radio2&quot;/&amp;gt; radio2
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;
Group 2&amp;lt;br/&amp;gt;
&amp;lt;input type=&quot;radio&quot;  name=&quot;s&quot; value=&quot;radio3&quot;/&amp;gt; radio3
&amp;lt;input type=&quot;radio&quot;  name=&quot;s&quot; value=&quot;radio4&quot;/&amp;gt; radio4
&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;a href=&quot;http://api.jquery.com/attribute-equals-selector/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;0-1&quot;&gt;동일 선택기&lt;/a&gt;의 값 부분을 둘러싸기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[attr='val']&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 다음과 같이:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('a#check_var').click(function() {
  alert($(&quot;input:radio[name='r']:checked&quot;).val()+ ' '+
        $(&quot;input:radio[name='s']:checked&quot;).val());
});​
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://jsfiddle.net/nick_craver/c857P/&quot; papago-id=&quot;5-0&quot; rel=&quot;noreferrer&quot;&gt;작업 버전은 여기서 보실&lt;/a&gt; 수 &lt;a href=&quot;http://jsfiddle.net/nick_craver/c857P/&quot; papago-id=&quot;5-0&quot; rel=&quot;noreferrer&quot;&gt;있습니다&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3464075/get-value-of-radio-button-group&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1414</guid>
      <comments>https://newsource.tistory.com/1414#entry1414comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:58:55 +0900</pubDate>
    </item>
    <item>
      <title>중첩된 내용이 후속 버전에 포함됩니까?</title>
      <link>https://newsource.tistory.com/1413</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;저는 댓글과 1대 다수의 연관성을 가진 테이블 제품을 가지고 있고, 테이블 댓글은 사용자 테이블과 1대 다수의 연관성을 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 댓글에는 user_id와 product_id가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 코드는 이렇습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var models = require('../models');

models.products.findAll({
    include: [
        {model: models.comments}
    ]
  }).then(function (products) {
    next(products);
  }).catch(function (err) {
    next(err);
  });
});
&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;models.products.findAll({
    include: [
        {model: models.comments.include(models.comments.users)}
    ]
  }) 
&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;models.products.findAll({
  include: [
    {model: models.comments, include: [models.comments.users] }
  ]
}) 
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제공된 솔루션은 제게 효과가 없었습니다. 이것이 제가 사용하는 타이프스크립트 버전이고 후속 버전을 추측하는 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;true&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;// sequelize-typescript
models.products.findAll({
  where,
  include: [{
    model: Comment,
    include: [User]
  }]
});

// without typescript (guessing here)
models.products.findAll({
  where,
  include: [{
    model: models.comments,
    include: [{
      model: models.users
    }]
  }]
});&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;아주 간단하고 간결한 방법이 있습니다! https://sequelize.org/docs/v6/advanced-association-concepts/eager-loading/ #&lt;a href=&quot;https://sequelize.org/docs/v6/advanced-association-concepts/eager-loading/#including-everything&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;5-1&quot;&gt;포함-모든 &lt;/a&gt;것&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Fetch all models associated with User
User.findAll({ include: { all: true }});

// Fetch all models associated with User and their nested associations (recursively) 
User.findAll({ include: { all: true, nested: true }});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;미래에 누군가에게 도움이 될 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 단계를 깊이 중첩하고 있었는데 호출이 오버라이드와 일치하지 않는 타이프스크립트 오류가 계속 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이전 답변(또는 문서)에서 다음을 포장해야 &lt;strong papago-id=&quot;0-1&quot;&gt;한다는&lt;/strong&gt; 것이 명확하지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;include&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 레벨에서 배열된 객체(심지어 당신이 1개의 객체만 제공함).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;User.findAll({
  include: [{
    model: Contact,
    include: [{
      model: Address,
      include: [{
        model: City,
        include: [State, Country]
      }]
    }]
  }]
});
&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;User.findAll({
  include: { // &amp;lt;-- notice the missing square bracket
    model: Contact,
    include: { // &amp;lt;-- notice the missing square bracket
      model: Address,
      include: { // &amp;lt;-- notice the missing square bracket
        model: City,
        include: [State, Country]
      } // &amp;lt;-- notice the missing square bracket
    } // &amp;lt;-- notice the missing square bracket
  } // &amp;lt;-- notice the missing square bracket
});
&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;include&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Category = sequelize.define(...);
Product = sequelize.define(...);
Product.belongsTo(Category, {foreignKey: 'fk_category'});

Product.findAll({
    include: [{
        model: Category
    }]
});
&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;ID 뿐만 아니라 중첩된 카테고리를 검색합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;category&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소유물.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p 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/33941943/nested-include-in-sequelize&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1413</guid>
      <comments>https://newsource.tistory.com/1413#entry1413comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:58:49 +0900</pubDate>
    </item>
    <item>
      <title>ExtractValue()가 업데이트에서 실패하고 SELECT에 성공하는 이유는 무엇입니까?</title>
      <link>https://newsource.tistory.com/1412</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ExtractValue()가 업데이트에서 실패하고 SELECT에 성공하는 이유는 무엇입니까?&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;UPDATE tbl a,
(SELECT id, EXTRACTVALUE(content, '//a[contains(text(), &quot;View&quot;)]/@href') AS url FROM tbl) b
SET tbl.`url` = b.`url`
&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;Error Code: 1525
Incorrect XML value: 'parse error at line 57 pos 195: '&amp;lt;/div&amp;gt;' unexpected (END-OF-INPUT wanted)'
&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;SELECT id, EXTRACTVALUE(content, '//a[contains(text(), &quot;View&quot;)]/@href') AS url FROM tbl
&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;독립 실행형 SELECT 쿼리가 성공한 경우 UPDATE 쿼리가 실패하는 이유는 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/32920029/why-does-extractvalue-fail-in-an-update-and-succeed-in-a-select&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1412</guid>
      <comments>https://newsource.tistory.com/1412#entry1412comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:58:41 +0900</pubDate>
    </item>
    <item>
      <title>mysql 데이터베이스에서 JSON 배열을 구축하는 방법</title>
      <link>https://newsource.tistory.com/1411</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql 데이터베이스에서 JSON 배열을 구축하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋아요, 저는 mysql에서 JSON 배열을 만들기 위해 머리를 짜내고 있습니다.&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;아래는 배열을 구축하는 코드이지만 현재 mysql로부터 정보를 얻지 못합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$year = date('Y');
$month = date('m');

echo json_encode(array(

    //Each array below must be pulled from database
        //1st record
        array(
        'id' =&amp;gt; 111,
        'title' =&amp;gt; &quot;Event1&quot;,
        'start' =&amp;gt; &quot;$year-$month-10&quot;,
        'url' =&amp;gt; &quot;http://yahoo.com/&quot;
    ),

         //2nd record
         array(
        'id' =&amp;gt; 222,
        'title' =&amp;gt; &quot;Event2&quot;,
        'start' =&amp;gt; &quot;$year-$month-20&quot;,
        'end' =&amp;gt; &quot;$year-$month-22&quot;,
        'url' =&amp;gt; &quot;http://yahoo.com/&quot;
    )

));
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 하고 싶은 일이 이런 것입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$return_arr = array();

$fetch = mysql_query(&quot;SELECT * FROM table&quot;); 

while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
    $row_array['id'] = $row['id'];
    $row_array['col1'] = $row['col1'];
    $row_array['col2'] = $row['col2'];

    array_push($return_arr,$row_array);
}

echo json_encode($return_arr);
&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;json 문자열을 다음 형식으로 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[{&quot;id&quot;:&quot;1&quot;,&quot;col1&quot;:&quot;col1_value&quot;,&quot;col2&quot;:&quot;col2_value&quot;},{&quot;id&quot;:&quot;2&quot;,&quot;col1&quot;:&quot;col1_value&quot;,&quot;col2&quot;:&quot;col2_value&quot;}]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 이런 식으로.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$year = date('Y');
$month = date('m');

$json_array = array(

//Each array below must be pulled from database
    //1st record
    array(
    'id' =&amp;gt; 111,
    'title' =&amp;gt; &quot;Event1&quot;,
    'start' =&amp;gt; &quot;$year-$month-10&quot;,
    'url' =&amp;gt; &quot;http://yahoo.com/&quot;
),

     //2nd record
     array(
    'id' =&amp;gt; 222,
    'title' =&amp;gt; &quot;Event2&quot;,
    'start' =&amp;gt; &quot;$year-$month-20&quot;,
    'end' =&amp;gt; &quot;$year-$month-22&quot;,
    'url' =&amp;gt; &quot;http://yahoo.com/&quot;
)

);

echo json_encode($json_array);
&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;PDO 솔루션은 보다 나은 구현을 위해 제공됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql_*&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;$array = $pdo-&amp;gt;query(&quot;SELECT id, title, '$year-month-10' as start,url 
  FROM table&quot;)-&amp;gt;fetchAll(PDO::FETCH_ASSOC);
echo json_encode($array);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 문자열이 아닌 정수를 정수로 남길 수 있다는 점도 좋은 특징입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mysqli 사용자를 위한 업데이트:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$base= mysqli_connect($dbhost,  $dbuser, $dbpass, $dbbase);

if (mysqli_connect_errno()) 
  die('Could not connect: ' . mysql_error());

$return_arr = array();

if ($result = mysqli_query( $base, $sql )){
    while ($row = mysqli_fetch_assoc($result)) {
    $row_array['id'] = $row['id'];
    $row_array['col1'] = $row['col1'];
    $row_array['col2'] = $row['col2'];

    array_push($return_arr,$row_array);
   }
 }

mysqli_close($base);

echo json_encode($return_arr);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$array = array();
$subArray=array();
$sql_results = mysql_query('SELECT * FROM `location`');

while($row = mysql_fetch_array($sql_results))
{
    $subArray[location_id]=$row['location'];  //location_id is key and $row['location'] is value which come fron database.
    $subArray[x]=$row['x'];
    $subArray[y]=$row['y'];


 $array[] =  $subArray ;
}
echo'{&quot;ProductsData&quot;:'.json_encode($array).'}';
&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/6281963/how-to-build-a-json-array-from-mysql-database&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1411</guid>
      <comments>https://newsource.tistory.com/1411#entry1411comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:58:35 +0900</pubDate>
    </item>
    <item>
      <title>Android에서 보기에 대한 불투명도(Alpha)를 설정하는 방법</title>
      <link>https://newsource.tistory.com/1410</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android에서 보기에 대한 불투명도(Alpha)를 설정하는 방법&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;Button 
     android:text=&quot;Submit&quot; 
     android:id=&quot;@+id/Button01&quot; 
     android:layout_width=&quot;fill_parent&quot; 
     android:layout_height=&quot;wrap_content&quot;&amp;gt;
&amp;lt;/Button&amp;gt;
&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;onCreate()&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;이벤트, Button01에 이렇게 전화합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;setContentView(R.layout.main);

View Button01 = this.findViewById(R.id.Button01);
Button01.setOnClickListener(this);
&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;이 보기에 불투명도를 설정하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바 쪽에 설정할 수 있는 건가요, 아니면 main.xml 파일에 설정할 수 있는 건가요?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바 쪽에서 나는 시도했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Button01.mutate().SetAlpha(100)&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;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사람들이 훨씬 &lt;strong papago-id=&quot;7-1&quot;&gt;더&lt;/strong&gt; 복잡한 대답을 하는 것에 저는 놀랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;8&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;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아주 간단하게 xml에 있는 버튼(또는 다른 보기)의 색상 정의에서 알파를 정의할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;android:color=&quot;#66FF0000&quot;    // Partially transparent red
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 예에서 색상은 부분적으로 투명한 빨간색입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;#RRGGBB&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;#AARRGGBB&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;AA&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;는 16진수 알파 값입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FF&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;완전 불투명할 것이고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;00&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;완전 투명할 겁니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;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 papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드의 불투명도를 동적으로 변경해야 하는 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;myButton.getBackground().setAlpha(128);  // 50% transparent
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;INT 범위는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;255&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;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;btnMybutton.getBackground().setAlpha(45);
&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;여기 불투명도를 45로 설정했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 &lt;strong papago-id=&quot;23-1&quot;&gt;0&lt;/strong&gt;(완전 투명)에서 &lt;strong papago-id=&quot;23-3&quot;&gt;255&lt;/strong&gt;(완전 불투명) 사이의 임의의 값으로 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에서 설명하면 훨씬 쉬워집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 알파 특성은 단추에 대해 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;android:alpha=&quot;0.5&quot;
&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;범위는 완전 투명의 경우 0이고 완전 불투명의 경우 1입니다.&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;다음과 같은 colors.xml 파일에 사용자 지정 &lt;a href=&quot;http://developer.android.com/guide/topics/resources/more-resources.html#Color&quot; papago-id=&quot;26-1&quot;&gt;ARGB 색상&lt;/a&gt;을 만드는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;resources&amp;gt;
&amp;lt;color name=&quot;translucent_black&quot;&amp;gt;#80000000&amp;lt;/color&amp;gt;
&amp;lt;/resources&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 단추 배경을 해당 색상으로 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;android:background=&quot;@android:color/translucent_black&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단추 모양을 가지고 놀려면 단추 모양 속성을 설정하는 &lt;a href=&quot;http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape&quot; papago-id=&quot;28-1&quot;&gt;Shape drawable 리소스&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;파일: res/drawable/ rounded_corner_box.xml&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;shape xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:shape=&quot;rectangle&quot;&amp;gt;
    &amp;lt;gradient
        android:startColor=&quot;#80000000&quot;
        android:endColor=&quot;#80FFFFFF&quot;
        android:angle=&quot;45&quot;/&amp;gt;
    &amp;lt;padding android:left=&quot;7dp&quot;
        android:top=&quot;7dp&quot;
        android:right=&quot;7dp&quot;
        android:bottom=&quot;7dp&quot; /&amp;gt;
    &amp;lt;corners android:radius=&quot;8dp&quot; /&amp;gt;
&amp;lt;/shape&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 단추 배경으로 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    android:background=&quot;@drawable/rounded_corner_box&quot;
&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TextView와 유사한 문제가 발생하는 동안 방금 당신의 질문을 찾았습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TextView를 확장하고 재정의하여 해결할 수 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;onSetAlpha&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해 볼 수  것입니다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 어쩌면 당신은 당신의 버튼으로 비슷한 것을 시도해 볼 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;

public class AlphaTextView extends TextView {

  public AlphaTextView(Context context) {
    super(context);
  }

  public AlphaTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public AlphaTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }

  @Override
  public boolean onSetAlpha(int alpha) {
    setTextColor(getTextColors().withAlpha(alpha));
    setHintTextColor(getHintTextColors().withAlpha(alpha));
    setLinkTextColor(getLinkTextColors().withAlpha(alpha));
    return true;
  }
}
&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;안드로이드 문서 보기 알파는 0과 1 사이의 값입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 설정하려면 다음과 같은 방법을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;View v;
v.setAlpha(.5f);
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;android:background=&quot;@android:color/transparent&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 내용은 제가 알고 있는 것입니다...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;커스텀 버튼 클래스를 만드는 것이 가장 좋은 생각이라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 11 API  11&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;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최근에 나는 0과 1사이의 값을 가지는 &lt;a href=&quot;http://developer.android.com/reference/android/view/View.html#attr_android:alpha&quot; rel=&quot;noreferrer&quot; papago-id=&quot;16-1&quot;&gt;안드로이드:alpha&lt;/a&gt; xml 속성을 발견했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 방법은 &lt;a href=&quot;http://developer.android.com/reference/android/view/View.html#setAlpha%28float%29&quot; papago-id=&quot;16-3&quot; rel=&quot;noreferrer&quot;&gt;setAlpha(float&lt;/a&gt;)입니다&lt;a href=&quot;http://developer.android.com/reference/android/view/View.html#setAlpha%28float%29&quot; papago-id=&quot;16-3&quot; rel=&quot;noreferrer&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; 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;btnMybutton.getBackground().setAlpha(45);&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋은 생각이네요, 배경에 알파를 적용할 뿐 전체 보기는 적용하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;btnMybutton.setAlpha(0.30f);&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보기에 불투명도를 적용합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;0과 1 사이의 값을 허용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의사는 이렇게 말합니다.&lt;/font&gt;&lt;/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;이 값은 0에서 1 사이의 값이며, 여기서 0은 뷰가 완전히 투명함을 의미하고 1은 뷰가 완전히 불투명함을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 보기가 SetAlpha(int)를 재정의하여 true를 반환하는 경우 이 보기는 불투명도 자체를 적용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 이 메서드를 호출하는 것은 setLayerType(int, Android.graphics)을 호출하는 것과 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도색) 및 하드웨어 계층 설정.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;알파를 반투명 값(0 &amp;lt; 알파 &amp;lt; 1)으로 설정하면 성능에 영향을 미칠 수 있습니다.&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;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;view_name.setAlpha(float_value);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부동산&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;view.setAlpha(int)&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;API 버전이 11보다 큰 경우 더 이상 사용되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이후로, 재산은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.setAlpha(0.5f)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Holo 테마의 기본 버튼이 약간 투명한 이미지로 구성되어 있어서 ICS/JB에서 이 문제가 발생했습니다.&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;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;진저브레드 vs.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ICS+:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/2oXpP.png&quot; alt=&quot;Gingerbread&quot;&gt; &lt;img src=&quot;https://i.stack.imgur.com/eykZD.png&quot; alt=&quot;ICS&quot;&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;다음은 바로 다음과 같은 작업을 수행하는 조잡한 XML 그리기(ButtonHolder)입니다.&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;XML 파일&lt;/font&gt;&lt;/strong&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;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
              style=&quot;@style/Content&quot;&amp;gt;
  &amp;lt;RelativeLayout style=&quot;@style/ButtonHolder&quot;&amp;gt;
      &amp;lt;Button android:id=&quot;@+id/myButton&quot;
              style=&quot;@style/Button&quot;
              android:text=&quot;@string/proceed&quot;/&amp;gt;
    &amp;lt;/RelativeLayout&amp;gt;
&amp;lt;/LinearLayout&amp;gt;
&lt;/code&gt;&lt;/pre&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;ButtonHolder.xml&lt;/font&gt;&lt;/strong&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;layer-list xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&amp;gt;
  &amp;lt;item&amp;gt;
    &amp;lt;shape android:shape=&quot;rectangle&quot;&amp;gt;
      &amp;lt;solid android:color=&quot;@color/white&quot;/&amp;gt;
    &amp;lt;/shape&amp;gt;
  &amp;lt;/item&amp;gt;

&amp;lt;/layer-list&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;styles.xml&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.
.
.      
  &amp;lt;style name=&quot;ButtonHolder&quot;&amp;gt;
    &amp;lt;item name=&quot;android:layout_height&quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;
    &amp;lt;item name=&quot;android:layout_width&quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;
    &amp;lt;item name=&quot;android:background&quot;&amp;gt;@drawable/buttonholder&amp;lt;/item&amp;gt;
  &amp;lt;/style&amp;gt;

  &amp;lt;style name=&quot;Button&quot; parent=&quot;@android:style/Widget.Button&quot;&amp;gt;
    &amp;lt;item name=&quot;android:layout_height&quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;
    &amp;lt;item name=&quot;android:layout_width&quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;
    &amp;lt;item name=&quot;android:textStyle&quot;&amp;gt;bold&amp;lt;/item&amp;gt;
  &amp;lt;/style&amp;gt;
.
.
.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 홀로 버튼 영상에는 눌린 공간을 설명하기 위한 여백이 포함되어 있으므로 흰색 테두리가 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/5wOPU.png&quot; alt=&quot;Too much white&quot;&gt; &lt;img src=&quot;https://i.stack.imgur.com/wG1B8.png&quot; alt=&quot;Too much white pressed&quot;&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 해결책은 흰색 배경에 여백(4dp가 적합)과 둥근 모서리(2dp)를 제공하여 흰색을 완전히 숨기면서도 단추를 견고하게 만드는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ButtonHolder.xml&lt;/font&gt;&lt;/strong&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;layer-list xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&amp;gt;

  &amp;lt;item&amp;gt;
    &amp;lt;shape android:shape=&quot;rectangle&quot;&amp;gt;
      &amp;lt;solid android:color=&quot;@android:color/transparent&quot;/&amp;gt;
    &amp;lt;/shape&amp;gt;
  &amp;lt;/item&amp;gt;

  &amp;lt;item android:top=&quot;4dp&quot; android:bottom=&quot;4dp&quot; android:left=&quot;4dp&quot; android:right=&quot;4dp&quot;&amp;gt;
    &amp;lt;shape android:shape=&quot;rectangle&quot;&amp;gt;
      &amp;lt;solid android:color=&quot;@color/white&quot;/&amp;gt;
      &amp;lt;corners android:radius=&quot;2dp&quot; /&amp;gt;
    &amp;lt;/shape&amp;gt;
  &amp;lt;/item&amp;gt;

&amp;lt;/layer-list&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최종 결과는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/3ulJl.png&quot; alt=&quot;No white&quot;&gt; &lt;img src=&quot;https://i.stack.imgur.com/LAIpb.png&quot; alt=&quot;No white pressed&quot;&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;v14+의 경우 이 스타일을 대상으로 하고, Gingerbread/Honeycomb의 경우 기본 버튼 이미지 크기가 ICS 및 JB와 다르기 때문에 이 스타일을 조정하거나 제외해야 합니다(예: Gingerbread 버튼 뒤에 있는 이 정확한 스타일로 인해 버튼 아래에 흰색이 약간 표시됨).&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;textView color에 대한 API &amp;lt; 11에 대해 다음을 수행했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int textViewColor = textView.getTextColors().getDefaultColor(); 
textView.setTextColor(Color.argb(128, Color.red(textViewColor), Color.green(textViewColor), Color.blue(textViewColor))); //50% transparent
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좀 번거롭긴 하지만, 야, 효과가 있네요 :-)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;60-1&quot;&gt;코틀린&lt;/strong&gt;을 사용하면 알파를 이렇게 쉽게 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;imageView.alpha= 0.5F
&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;strong papago-id=&quot;61-1&quot;&gt;부동 소수&lt;/strong&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;나는 이것이 이미 많은 답을 가지고 있다는 것을 알지만, 나는 버튼의 경우 당신만의 .xml 선택기를 만들고 그것을 그 버튼의 배경으로 설정하는 것이 가장 쉽다는 것을 알았습니다.&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;색상에 투명도를 추가하려면 선행 16진수 값(#XXccccc)을 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(XX == &quot;색의 알파&quot;)&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;selector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&amp;gt;
    &amp;lt;item android:state_pressed=&quot;true&quot; &amp;gt;
        &amp;lt;shape&amp;gt;
            &amp;lt;solid
                android:color=&quot;#70c656&quot; /&amp;gt;
            &amp;lt;stroke
                android:width=&quot;1dp&quot;
                android:color=&quot;#53933f&quot; /&amp;gt;
            &amp;lt;corners
                android:radius=&quot;4dp&quot; /&amp;gt;
            &amp;lt;padding
                android:left=&quot;10dp&quot;
                android:top=&quot;10dp&quot;
                android:right=&quot;10dp&quot;
                android:bottom=&quot;10dp&quot; /&amp;gt;
        &amp;lt;/shape&amp;gt;
    &amp;lt;/item&amp;gt;
    &amp;lt;item&amp;gt;
        &amp;lt;shape&amp;gt;
            &amp;lt;gradient
                android:startColor=&quot;#70c656&quot;
                android:endColor=&quot;#53933f&quot;
                android:angle=&quot;270&quot; /&amp;gt;
            &amp;lt;stroke
                android:width=&quot;1dp&quot;
                android:color=&quot;#53933f&quot; /&amp;gt;
            &amp;lt;corners
                android:radius=&quot;4dp&quot; /&amp;gt;
            &amp;lt;padding
                android:left=&quot;10dp&quot;
                android:top=&quot;10dp&quot;
                android:right=&quot;10dp&quot;
                android:bottom=&quot;10dp&quot; /&amp;gt;
        &amp;lt;/shape&amp;gt;
    &amp;lt;/item&amp;gt;
&amp;lt;/selector&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2838757/how-to-set-opacity-alpha-for-view-in-android&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Android</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1410</guid>
      <comments>https://newsource.tistory.com/1410#entry1410comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:58:27 +0900</pubDate>
    </item>
    <item>
      <title>캐시 설정 방법: jQuery.getcall에서 false</title>
      <link>https://newsource.tistory.com/1409</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;캐시 설정 방법: jQuery.getcall에서 false&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;jQuery.get()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 줄임말입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jQuery.ajax()&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 class=&quot;papago-parent&quot;&gt;하지만 내가 설정했을 때&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;cache:false&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;.get()&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;call, 서버로 전송되는 것은 false 값을 가진 cache라고 불리는 파라미터입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터가 포함된 타임스탬프를 서버로 전송하여 캐싱을 방지하려는 의도가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이는 다음을 사용할 경우 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;cache: false&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;j에서&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Query.jax 데이터에서.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery.jax 호출을 다시 작성하거나 사용하지 않고 jQuery.jax 호출을 다시 작성하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajaxSetup({
    // Disable caching of AJAX responses
    cache: false
});
&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;font class=&quot;papago-parent&quot;&gt;하지만, 저는 수신자에게 캐시하기를 원하지 않는다는 것을 알려주거나, 기본 .jax()에 해당 값을 전송하여 사용자가 어떻게 해야 할지 알 수 있는 방법이 있기를 바랍니다.&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;I. 지금까지 확인된 세 가지 방법 이외의 네 번째 방법을 찾고 있는 중.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ajaxSetup을 통해 전역적으로 수행&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.get call 대신 .ajax call 사용&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.getcall에 타임스탬프를 포함하는 새 매개 변수를 추가하여 수동으로 수행합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 단지 이 기능이 .getcall에 내장되어야 한다고 생각했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개변수를 직접 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.get(url,{ &quot;_&quot;: $.now() }, function(rdata){
  console.log(rdata);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery 3.0에서는 이제 다음 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.get({
  url: url, 
  cache: false
}).then(function(rdata){
  console.log(rdata);
});
&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;대신에 캐시를 끌 수 있는 AJAX 메서드를 사용해야 한다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
  url: &quot;test.html&quot;,
  data: 'foo',
  success: function(){
    alert('bar');
  },
  cache: false
});
&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저에게는 올바른 방법이 나열된 방법일 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어느 하나&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ajax&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;ajaxSetup&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 정말로 사용하고 싶다면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;get&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하지 않음&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ajaxSetup&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 자신만의 파라미터를 만들어 현재 날짜/시간의 값을 지정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 다른 방법을 사용하지 않는 당신의 동기에 의문을 제기하고 싶습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JQuery 에 ,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.get()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;url&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 용),&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dataType&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;success&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콜백을 매개 변수로 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 정말로 하고 싶은 일은 jqXHR 개체가 전송되기 전에 수정하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.ajax()&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;beforeSend()&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 class=&quot;papago-parent&quot;&gt;근데 그때부터.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.get()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바로 가기입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 허용되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비교적 쉽게 전환할 수 있을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.ajax()&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;.get()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래도 전화는.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,국&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.get()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;.ajax()&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;.ajax()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(물론 제외하고는)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;beforeSend()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:: 지빙스의 대답을 보시오:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;cache&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개변수!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하는 동안에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;beforeSend()&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;cache&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&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 메서드를 사용하여 jQuery.get call에서 cache를 false로 설정합니다.&lt;/font&gt;&lt;/strong&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&gt;&lt;/font&gt;&lt;code&gt;Date().getTime(),&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&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 어떤 jQuery 메서드($.get, $.ajax 등)를 사용하든 관계없이 향후 모든 AJAX 요청이 캐시되지 않도록 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajaxSetup({ cache: false });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콜백 구문은 더 &lt;a href=&quot;https://api.jquery.com/jquery.get/&quot; rel=&quot;nofollow&quot; papago-id=&quot;48-1&quot;&gt;이상&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;감가상각 통지&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery 1.5에 도입된 jqXHR.success(), jqXHR.error() 및 jqXHR.complete() 콜백 메서드는 jQuery 1.8에서 더 이상 사용되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드가 제거되도록 준비하려면 대신 jqXHR.done(), jqXHR.fail(), jqXHR.always()를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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;/font&gt;&lt;/font&gt;&lt;code&gt;promise&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&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({url: &quot;...&quot;, cache: false}).done(function( data ) {
    // data contains result
}).fail(function(err){
    // error
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 게임에 매우 늦었지만, 이것은 다른 사람들에게 도움이 될 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 $.get으로 이와 같은 문제를 해결했습니다. 캐싱을 맹목적으로 끄고 싶지 않았고 타임스탬프 패치가 마음에 들지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 약간의 조사 끝에 캐싱을 사용하지 않는 $.get 대신 $.post를 사용하면 된다는 것을 알게 되었습니다.&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;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/8841425/how-to-set-cache-false-in-jquery-get-call&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1409</guid>
      <comments>https://newsource.tistory.com/1409#entry1409comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:58:17 +0900</pubDate>
    </item>
    <item>
      <title>iPhone에서는 미디어 쿼리가 작동하지 않지만 브라우저 크기에는 문제 없음</title>
      <link>https://newsource.tistory.com/1408</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iPhone에서는 미디어 쿼리가 작동하지 않지만 브라우저 크기에는 문제 없음&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;안녕하세요 저는 현재 Bones on a WordPress라는 Boilerplate 테마를 사용하고 있지만 아이폰에서 반응형 메뉴를 작동시키는 데 문제가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메뉴 크기를 수동으로 조정하면 작동하는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 사용하는 미디어 쿼리는&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@media only 화면 및 (min-width: 960 px) {&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 출근하려고 하는 사이트는 여기에 있습니다:&lt;a href=&quot;http://www.optimise-website-marketing.com&quot; papago-id=&quot;4-1&quot;&gt;link&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 테마 작가님을 찾아갔는데 며칠째 답장이 없으셔서 어떤 도움이라도 주시면 감사하겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메타뷰포트 객체를 사용해보셨습니까?&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;meta name=&quot;viewport&quot; content=&quot;initial-scale = 1.0,maximum-scale = 1.0&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;You need to mention Media like this  for iphone and smartphones

/* Smartphones (portrait and landscape) ----------- */
@media only screen 
and (min-device-width : 320px) 
and (max-device-width : 480px) {
/* Styles */
}

/* Smartphones (landscape) ----------- */
@media only screen 
and (min-width : 321px) {
/* Styles */
}

/* Smartphones (portrait) ----------- */
@media only screen 
and (max-width : 320px) {
/* Styles */
}
&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;&amp;lt;link src=&quot;mobile.css&quot; media=&quot;only screen and (min-width: 400px)&quot; /&amp;gt;
&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;mobile.css&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;@media screen and (min-width: 400px) {
    body {
        background: red;
    }
}

h1 {
    color: blue;
}
&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;background:red;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;규칙(&quot;nested&quot; 미디어 쿼리), &quot;inline&quot; 미디어 쿼리 외부에 있는 &lt;em papago-id=&quot;3-1&quot;&gt;규칙&lt;/em&gt;(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;h1&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;@media only screen and (max-width: 480px), only screen and (max-device-width: 480px) { 
    ... 
}
&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;@media only screen and (max-width: 480px), 
@media only screen and (max-device-width: 480px) { 
    ... 
}
&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;@media only screen and (max-width: 480px) and (max-device-width: 480px) { 
    ... 
}
&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;또한 귀하의 문서 유형에 대해 XHTML에서 HTML5로 이동하는 것도 고려해 볼 수 있습니다.&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/13241617/media-queries-not-working-on-iphone-but-fine-on-browser-resize&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1408</guid>
      <comments>https://newsource.tistory.com/1408#entry1408comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:58:09 +0900</pubDate>
    </item>
    <item>
      <title>Oracle 및 Postgre의 쓰기 Skew 변칙SQL이 트랜잭션을 롤백하지 않음</title>
      <link>https://newsource.tistory.com/1407</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle 및 Postgre의 쓰기 Skew 변칙&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL이 트랜잭션을 롤백하지 않음&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle과 Postgre 모두에서 다음과 같은 현상이 발생하는 것을 확인했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 입니다.&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;create table post (
    id int8 not null, 
    title varchar(255), 
    version int4 not null, 
    primary key (id));    

create table post_comment (
    id int8 not null, 
    review varchar(255), 
    version int4 not null, 
    post_id int8, 
    primary key (id));

alter table post_comment 
    add constraint FKna4y825fdc5hw8aow65ijexm0 
    foreign key (post_id) references post;  
&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;insert into post (title, version, id) values ('Transactions', 0, 1);
insert into post_comment (post_id, review, version, id) 
    values (1, 'Post comment 1', 459, 0);
insert into post_comment (post_id, review, version, id) 
    values (1, 'Post comment 2', 537, 1);
insert into post_comment (post_id, review, version, id) 
    values (1, 'Post comment 3', 689, 2); 
&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;두 개의 별도 SQL 콘솔을 열고 다음 문을 실행하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;TX1: BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;

TX2: BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;

TX1: SELECT COUNT(*) FROM post_comment where post_id = 1;

TX1: &amp;gt; 3

TX1: UPDATE post_comment SET version = 100 WHERE post_id = 1;

TX2: INSERT INTO post_comment (post_id, review, version, id) VALUES (1, 'Phantom', 0, 1000);

TX2: COMMIT;

TX1: SELECT COUNT(*) FROM post_comment where post_id = 1;

TX1: &amp;gt; 3

TX1: COMMIT;

TX3: SELECT * from post_comment;

     &amp;gt; 0;&quot;Post comment 0&quot;;100;1
       1;&quot;Post comment 1&quot;;100;1
       2;&quot;Post comment 2&quot;;100;1
       1000;&quot;Phantom&quot;;0;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;SERIALIZABLE&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;분리 수준은 스냅샷 데이터를 TX1 트랜잭션의 시작부터 유지하고 TX1에는 3만 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;post_comment&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기록.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle 및 Postgre의 MVCC 모델 때문에&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL, TX2는 새 레코드를 삽입하고 커밋할 수 있습니다.&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;TX1에서 커밋이 허용되는 이유는 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 Write Skew 변칙이므로 TX1이 &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;MVCC Serializable 모델이 Postgre에서 실행됩니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 및 Oracle은 스냅샷 격리만 보장하고 Write Skew 이상 감지는 제공하지 않습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;11&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;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;심지어 Tx1을 변경하여 UPDATE 문을 발행하기도 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;version&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;post_comment&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;post&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 방식으로 Tx2는 새 레코드를 생성하고 Tx1은 UPDATE 필터링 기준을 충족하는 새 레코드가 추가된 것을 모른 채 커밋합니다.&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;SQL은 팬텀 레코드를 삽입하기 전에 Tx2에서 다음 COUNT 쿼리를 실행하는 경우입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Tx2: SELECT COUNT(*) FROM post_comment where post_id = 1 and version = 0

TX2: INSERT INTO post_comment (post_id, review, version, id) VALUES (1, 'Phantom', 0, 1000);

TX2: COMMIT;
&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;그러면 Tx1은 다음과 함께 롤백됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;org.postgresql.util.PSQLException: ERROR: could not serialize access due to read/write dependencies among transactions
  Detail: Reason code: Canceled on identification as a pivot, during conflict out checking.
  Hint: The transaction might succeed if retried.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마도 쓰기 스큐 이상 방지 메커니즘이 이 변경 사항을 감지하고 트랜잭션을 롤백했을 가능성이 높습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;흥미로운 점은 Oracle이 이 문제에 대해 신경쓰지 않는 것 같고 그래서 Tx1이 성공적으로 커밋한다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle은 쓰기 스큐가 발생하는 것을 방지하지 않으므로 Tx1은 정상적으로 커밋합니다.&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;a href=&quot;https://github.com/vladmihalcea/high-performance-java-persistence/tree/master/core/src/test/java/com/vladmihalcea/book/hpjp/jdbc/transaction&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;21-1&quot;&gt;GitHub&lt;/a&gt;에 있기 때문에 직접 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1995년 &lt;a href=&quot;https://www.microsoft.com/en-us/research/publication/a-critique-of-ansi-sql-isolation-levels/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;22-1&quot;&gt;ANSI SQL 격리 수준에 대한 비평&lt;/a&gt;, Jim Gray and co는 팬텀 리드를 다음과 같이 설명했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;P3: r1[P]...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;w2[y in P]...(c1 또는 a1)(팬텀)&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;한 가지 중요한 사항은 ANSI SQL P3는 술어에 대한 삽입(및 일부 해석에 따르면 업데이트)만 금지하는 반면 위의 P3의 정의는 술어를 읽고 나면 술어를 만족시키는 쓰기(쓰기는 삽입, 업데이트 또는 삭제)를 금지한다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 팬텀 리드는 현재 실행 중인 트랜잭션의 시작 시점에 스냅샷을 반환하고 쿼리에 대해 동일한 결과를 제공하면 실제 팬텀 리드 이상으로부터 사용자를 보호할 수 있는 것처럼 간주할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원래 SQL Server 2PL(Two-Phase Locking) 구현에서 쿼리에 포함된 술어 잠금에 대해 동일한 결과를 반환합니다.&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;MVCC(Multi-Version Concurrency Control) 스냅샷 격리(Orgly name Serializable in Oracle)는 다른 트랜잭션이 이미 실행 중인 트랜잭션에 설정된 결과를 이미 실행하고 반환한 쿼리와 동일한 필터링 기준과 일치하는 행을 삽입/삭제하는 것을 실제로 방지하지 않습니다.&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;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Tx1:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SELECT SUM(salary) FROM employee where company_id = 1;&lt;/code&gt;&lt;/li&gt; 
 &lt;li&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;Tx2:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;INSERT INTO employee (id, name, company_id, salary) VALUES (100, 'John Doe', 1, 100000);&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Tx1:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UPDATE employee SET salary = salary * 1.1;&lt;/code&gt;&lt;/li&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;Tx2:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;COMMIT;&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;Tx1:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;COMMIT:&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 시나리오에서 CEO는 첫 번째 트랜잭션(Tx1)을 실행하므로 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;35&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;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한편, 인사부에서는 최근 John Do를 고용하여 10만 달러의 급여를 지급함에 따라 2차 거래(Tx2)를 진행하고 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사장님은 연봉이 10만원으로 인상된 것을 모르고 연봉 총액을 고려해 10% 인상이 가능하다고 판단합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한편, HR 트랜잭션 Tx2가 커밋됩니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Tx1이 커밋되었습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;흥! 사장님께서 오래된 스냅샷에 대한 결정을 내리셔서 현재 업데이트된 급여 예산으로는 유지할 수 없는 인상을 주셨군요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 사용 사례에 대한 자세한 설명(많은 다이어그램 포함)은 &lt;a href=&quot;https://vladmihalcea.com/write-skew-2pl-mvcc/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;41-1&quot;&gt;다음 게시물&lt;/a&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;a href=&quot;https://www.google.ro/webhp?sourceid=chrome-instant&amp;amp;ion=1&amp;amp;espv=2&amp;amp;ie=UTF-8#q=write%20skew&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;42-1&quot;&gt;쓰기 스큐입니까&lt;/a&gt;?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.microsoft.com/en-us/research/publication/a-critique-of-ansi-sql-isolation-levels/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;43-1&quot;&gt;Jim Gray and co&lt;/a&gt;에 따르면 Write Skew는 다음과 같이 정의되므로 이는 Phantom Read라고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;A5B 쓰기 스큐 T1이 C()와 일치하는 x와 y를 읽은 다음 T2가 x와 y를 읽고 x를 쓰고 커밋한다고 가정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 T1은 y라고 씁니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 x와 y사이에 제약조건이 있다면 그것은 위반될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이력 측면에서:&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;A5B: r1[x]...r2[y]...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;w1[y]...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;w2[x]...(c1 및 c2 발생)&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle에서 트랜잭션 관리자는 MySQL과&lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html#innodb-next-key-locks&quot; papago-id=&quot;46-1&quot; rel=&quot;nofollow noreferrer&quot;&gt; &lt;/a&gt;같이 술어 잠금 또는 &lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html#innodb-next-key-locks&quot; papago-id=&quot;46-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;인덱스 범위 잠금(다음&lt;/a&gt; 키 잠금)을 사용하지 않기 때문에 위의 이상 징후를 탐지하거나 탐지하지 못할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PostgreSQL은 Bob이 직원 테이블에 대한 읽기를 실행하는 경우에만 이 이상 현상을 탐지할 수 있습니다. 그렇지 않으면 이 현상을 방지할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;48&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;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;그러나 &lt;a href=&quot;http://www.bailis.org/blog/linearizability-versus-serializability/&quot; papago-id=&quot;49-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Peter Bailis가 &lt;/a&gt;잘&lt;a href=&quot;http://www.bailis.org/blog/linearizability-versus-serializability/&quot; papago-id=&quot;49-1&quot; rel=&quot;nofollow noreferrer&quot;&gt; 설명&lt;/a&gt;한 바와 같이 벽 시계 순서화 또는 선형화 가능성은 엄격한 직렬화 가능성에 대해서만 가정됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 엄격한 직렬화 가능 시스템에 대한 가정이 이루어졌습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 그건 시리얼라이블이 제공해야 할 사항이 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;직렬화 가능 격리 모델은 시간에 대한 보장이 없으며, 작업이 직렬 &lt;em papago-id=&quot;50-1&quot;&gt;실행&lt;/em&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;따라서 Serialable(직렬 가능) 정의에 따르면 두 번째 트랜잭션에서 읽기가 발생하지 않으면 이러한 Phantom Read(팬텀 읽기)가 발생할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 2PL에서 제공하는 Strict Serializable 모델에서는 두 번째 트랜잭션이 팬텀 리드로부터 보호하려는 동일한 항목에 대해 리드를 발행하지 않더라도 팬텀 리드가 방지됩니다.&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;em papago-id=&quot;52-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&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle 및 Postgre 모두에서 팬텀 읽기로부터 보호됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL with&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SERIALIZABLE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고립의&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle과 Postgre의 차이점&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SERIALIZABLE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle의 isolation level은 스냅샷 isolation(팬텀이 나타나지 않도록 방지하기에 충분한)만 제공하는 반면 Postgre에서는 snapshot isolation(스냅샷 격리)을 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL은 진정한 직렬화 가능성을 보장합니다(즉, 동일한 결과를 초래하는 SQL 문의 직렬화가 항상 존재함).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 것을 Oracle 및 Postgre에서 얻고 싶다면&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL, 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;REPEATABLE READ&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;SQL 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;블라드 미할체아의 대답이 완전히 틀렸다는 것을 지적하고 싶었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 팬텀 읽기입니까 아니면 쓰기 스큐입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 가지 모두 - 여기에는 이상이 없습니다. 트랜잭션은 Tx1 -&amp;gt; Tx2로 직렬화할 수 있습니다.&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;SQL 표준 상태: &quot;시리얼화 가능한 실행이란 SQL 트랜잭션을 동시에 실행하는 작업의 실행으로 정의되며, 이는 동일한 SQL 트랜잭션의 일부 &lt;em papago-id=&quot;61-1&quot;&gt;직렬&lt;/em&gt; 실행과 동일한 효과를 가져옵니다.&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PostgreSQL은 Bob이 직원 테이블에 대한 읽기를 실행하는 경우에만 이 이상 현상을 탐지할 수 있습니다. 그렇지 않으면 이 현상을 방지할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 PostgreSQL의 동작은 100% 정확하며, 명백한 트랜잭션 순서를 &quot;뒤집기&quot;할 뿐입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Postgres 설명서에서는 &lt;a href=&quot;https://www.postgresql.org/docs/current/static/transaction-iso.html&quot; papago-id=&quot;64-1&quot; rel=&quot;nofollow&quot;&gt;다음&lt;/a&gt;과 같이 &lt;a href=&quot;https://www.postgresql.org/docs/current/static/transaction-iso.html&quot; papago-id=&quot;64-1&quot; rel=&quot;nofollow&quot;&gt;팬텀 판독값을 정의&lt;/a&gt;합니다.&lt;/font&gt;&lt;/p&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;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택한 항목은 커밋된 다른 트랜잭션의 이전과 이후 모두 동일한 값을 반환하기 때문에 팬텀 읽기의 기준을 충족하지 못합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/39567266/write-skew-anomaly-in-oracle-and-postgresql-does-not-rollback-transaction&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1407</guid>
      <comments>https://newsource.tistory.com/1407#entry1407comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:58:02 +0900</pubDate>
    </item>
    <item>
      <title>c에서 시간 지연을 실행합니다.</title>
      <link>https://newsource.tistory.com/1406</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;c에서 시간 지연을 실행합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 검색어를 정확히 어떻게 써야 할지 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 운 좋게도 아무것도 못 찾았는데요.. :S&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;저는 C에서 시간 지연을 시행해야 합니다.&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;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 말이 됩니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 도와줄 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; C(C99)를 할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;time()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위해서는 다음과 같은 것이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;time.h&amp;gt;
:
void waitFor (unsigned int secs) {
    unsigned int retTime = time(0) + secs;   // Get finishing time.
    while (time(0) &amp;lt; retTime);               // Loop until it arrives.
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그건 그렇고, 이 가정은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;time()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1초 분해능 값을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그건 기준상 의무사항은 아닌 것 같아서 조정하셔야 할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명확하게 하기 위해 ISO C99로 이 작업을 수행할 수 있는 &lt;em papago-id=&quot;9-1&quot;&gt;유일&lt;/em&gt;한 방법입니다. 질문에는 &quot;C&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;em papago-id=&quot;10-1&quot;&gt;이를 사용하십시오.&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 의견에서 알 수 있듯이, CPU 사용량 및 배터리 수명과 관련하여 이와 같은 엄격한 루프에 특정한 문제가 있을 수 있습니다.&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;적절한 타임슬라이싱 OS라면 전체 타임슬라이싱을 지속적으로 사용하는 작업의 동적 우선 순위를 떨어뜨릴 수 있지만 배터리 전력은 더 문제가 될 수 있습니다.&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;그러나 C는 호스트 환경의 OS 세부 정보에 대해 &lt;em papago-id=&quot;12-1&quot;&gt;아무것&lt;/em&gt;도 지정하지 않으며, 이 대답은 ISO C 및 ISO C 단독에 대한 것입니다(따라서 사용하지 않음).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sleep&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;select&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; Win32 API ).&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://www.opengroup.org/onlinepubs/000095399/functions/sleep.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15-1&quot;&gt;POSIX&lt;/a&gt;는 신호에 의해 방해될 수 있다는 것을 기억하세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 길을 &lt;em papago-id=&quot;15-3&quot;&gt;내려가려면&lt;/em&gt; 다음과 같은 작업을 수행해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int finishing = 0; // set finishing in signal handler 
                   // if you want to really stop.

void sleepWrapper (unsigned int secs) {
    unsigned int left = secs;
    while ((left &amp;gt; 0) &amp;amp;&amp;amp; (!finishing)) // Don't continue if signal has
        left = sleep (left);           //   indicated exit needed.
}
&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;#ifdef _WIN32
    #include &amp;lt;windows.h&amp;gt;
#else
    #include &amp;lt;unistd.h&amp;gt;
#endif

void wait( int seconds )
{   // Pretty crossplatform, both ALL POSIX compliant systems AND Windows
    #ifdef _WIN32
        Sleep( 1000 * seconds );
    #else
        sleep( seconds );
    #endif
}

int
main( int argc, char **argv)
{
    int running = 3;
    while( running )
    {   // do something
        --running;
        wait( 3 );
    }
    return 0; // OK
}
&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;int wait_loop0 = 10000;
int wait_loop1 = 6000;

// for microprocessor without timer, if it has a timer refer to vendor documentation and use it instead.
void
wait( int seconds )
{   // this function needs to be finetuned for the specific microprocessor
    int i, j, k;
    for(i = 0; i &amp;lt; seconds; i++)
    {
        for(j = 0; j &amp;lt; wait_loop0; j++)
        {
            for(k = 0; k &amp;lt; wait_loop1; k++)
            {   // waste function, volatile makes sure it is not being optimized out by compiler
                int volatile t = 120 * j * i + k;
                t = t + 5;
            }
        }
    }
}

int
main( int argc, char **argv)
{
    int running = 3;
    while( running )
    {   // do something
        --running;
        wait( 3 );
    }
    return 0; // OK
}
&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;Waitloop 변수는 미세 조정이 되어야 합니다. 제 컴퓨터에서는 거의 작동했지만, 주파수 척도 때문에 현대적인 데스크톱 시스템에서는 매우 부정확합니다. 따라서 금속을 완전히 벗어서 그런 작업을 하지 않는 한 사용하지 마십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.manpagez.com/man/3/Sleep/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19-1&quot;&gt;sleep(3) man page&lt;/a&gt; 또는 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms686298(VS.85).aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19-3&quot;&gt;MSDN에서 sleep 확인&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 구현이 초 &lt;em papago-id=&quot;20-3&quot;&gt;단위&lt;/em&gt;로 현재 시간을 반환하는 기능을 가지고 있지만, 모든 구현이 이 기능을 &lt;em papago-id=&quot;20-5&quot;&gt;수행한다는 보장&lt;/em&gt;은 없습니다(예: 초 &lt;em papago-id=&quot;20-9&quot;&gt;단위&lt;/em&gt;가 아닌 &lt;em papago-id=&quot;20-7&quot;&gt;밀리초&lt;/em&gt; 단위로 반환되는 경우도 있습니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 같이, 더 휴대하기 쉬운 해결책은 그 기능을 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;difftime&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;em papago-id=&quot;21-3&quot;&gt;초&lt;/em&gt;)를 반환하기 위해 C &lt;strong papago-id=&quot;21-1&quot;&gt;표준&lt;/strong&gt;에 의해 보장됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;time_t&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가치.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 우리는 C &lt;strong papago-id=&quot;22-1&quot;&gt;표준&lt;/strong&gt;의 모든 호환 구현에서 실행될 휴대용 시간 지연 함수를 작성할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;time.h&amp;gt;

void delay(double dly){
    /* save start time */
    const time_t start = time(NULL);

    time_t current;
    do{
        /* get current time */
        time(&amp;amp;current);

        /* break loop when the requested number of seconds have elapsed */
    }while(difftime(current, start) &amp;lt; dly);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&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;time&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;difftime&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수는 C &lt;strong papago-id=&quot;25-1&quot;&gt;표준&lt;/strong&gt;이 세분화를 지정하지 않는다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 구현은 &lt;em papago-id=&quot;25-3&quot;&gt;1초&lt;/em&gt;의 세부사항을 갖습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 초 &lt;em papago-id=&quot;25-5&quot;&gt;동안&lt;/em&gt;의 지연은 괜찮지만, 지연 기능은 &lt;em papago-id=&quot;25-7&quot;&gt;1초 미만&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;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;휴대용 표준 C 대안이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;clock&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;blockquote&gt; 
 &lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 함수는 프로그램 호출과 관련된 구현 정의 시대가 시작된 이래로 구현의 최적 근사치를 프로그램이 사용한 프로세서 시간으로 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시간(초)을 결정하려면 함수가 반환하는 값을 매크로 값으로 나누어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;clock&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;time&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;pre&gt;&lt;code&gt;#include &amp;lt;time.h&amp;gt;

void delay(double dly){
    /* save start clock tick */
    const clock_t start = clock();

    clock_t current;
    do{
        /* get current clock tick */
        current = clock();

        /* break loop when the requested number of seconds have elapsed */
    }while((double)(current-start)/CLOCKS_PER_SEC &amp;lt; dly);
}
&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 class=&quot;papago-parent&quot;&gt;이 경우에는 다음과 유사한 주의사항이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;time&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;difftime&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;clock&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능은 구현에 맡깁니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 시스템에 대한 32비트 값이 있는 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;clock_t&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;em papago-id=&quot;36-1&quot;&gt;마이크로초&lt;/em&gt; 단위의 해상도로 반환되는 값을 랩핑할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;clock&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;2147초 후(약 36분).&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;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;time&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;difftime&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;40-1&quot;&gt;최소 1초&lt;/em&gt; 이상 지속되는 지연에 대한 지연 함수의 구현, 그리고&lt;/font&gt;&lt;/font&gt;&lt;code&gt;clock&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;em papago-id=&quot;41-1&quot;&gt;1초 미만&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;font class=&quot;papago-parent&quot;&gt;마지막으로 주의를 당부합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;clock&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;em papago-id=&quot;43-3&quot;&gt;캘린더 시간&lt;/em&gt;이 아닌 &lt;em papago-id=&quot;43-1&quot;&gt;프로세서 시간&lt;/em&gt;을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;clock&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&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;1분 정도의 지연에 대해서는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sleep()&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 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;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언젠가 1초보다 작은 지연으로 잠시 멈추고 싶다면 다음을 고려해 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;poll()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타임아웃으로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 다 POSIX입니다.&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;sleep()&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;C11 C 이전의 표준 라이브러리에서 기능하지만, POSIX는 몇 가지 옵션을 제공합니다.&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;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;POSIX 함수(unistd.h)는 다음을 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;unsigned int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잠자기 원하는 시간(초)을 나타내는 인수입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 Standard Library 기능은 아니지만 널리 사용할 수 있으며 glibc는 다음과 같은 더 엄격한 설정으로 컴파일할 때에도 지원하는 것으로 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--std=c11&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;POSIX 함수(time.h)는 다음과 같은 두 가지 포인터를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;timespec&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구조를 인수로 사용하고 수면 시간에 대한 보다 세밀한 제어를 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 인수는 지연 기간을 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용하는 프로그램&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nanosleep()&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;a href=&quot;https://www.gnu.org/software/libc/manual/html_mono/libc.html#Feature-Test-Macros&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;42-1&quot;&gt;&lt;em papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;피쳐 테스트 매크로&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;를 포함해야 할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드 샘플은 내가 일반적인 컴파일러 호출을 사용할 때 특징 테스트 매크로 없이 내 리눅스 시스템에서 컴파일되지 않을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gcc -std=c11 -Wall -Wextra -Wpedantic&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;POSIX는 한때 다음과 같은 기능(unistd.h)을 가지고 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;useconds_t&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;microseconds 단위로 sleep duration을 지정하는 인수입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 이 기능은 엄격한 컴파일러 설정과 함께 사용할 때 특징 테스트 매크로가 필요했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;usleep()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;POSIX.1-2001과 함께 더 이상 사용되지 않도록 만들어졌습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 권장합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nanosleep()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에 지금 사용되고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;usleep()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#define _POSIX_C_SOURCE  199309L     // feature test macro for nanosleep()

#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;unistd.h&amp;gt;    // for sleep()
#include &amp;lt;time.h&amp;gt;      // for nanosleep()

int main(void)
{
    // use unsigned sleep(unsigned seconds)
    puts(&quot;Wait 5 sec...&quot;);
    sleep(5);

    // use int nanosleep(const struct timespec *req, struct timespec *rem);
    puts(&quot;Wait 2.5 sec...&quot;);
    struct timespec ts = { .tv_sec = 2,          // seconds to wait
                           .tv_nsec = 5e8 };     // additional nanoseconds
    nanosleep(&amp;amp;ts, NULL);
    puts(&quot;Bye&quot;);

    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;65&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;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C11은 머리말이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;threads.h&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제공, 에 동일하게 작동하는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nanosleep()&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;. GCC가 지원하지 않음&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;threads.h&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2018년까지 &lt;a href=&quot;https://sourceware.org/bugzilla/show_bug.cgi?id=14092&quot; papago-id=&quot;52-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;glibc&lt;/a&gt; 2&lt;a href=&quot;https://sourceware.org/bugzilla/show_bug.cgi?id=14092&quot; papago-id=&quot;52-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;.28&lt;/a&gt;이 출시되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지원을 통해 구현을 찾는 것은 일반적으로 어려웠습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;threads.h&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(클랑은 오랫동안 지지하지 않았지만 그곳의 현재 상황에 대해서는 잘 모르겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주의해서 이 옵션을 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sleep(int number_of_seconds)&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;sleep(int)&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상당한 지연으로 작용합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;//Doing some stuff...
sleep(60); //Freeze for A minute
//Continue doing stuff...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런가요?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;timer&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WIN32의 경우 http://msdn.microsoft.com/en-us/library/ms687012%28VS.85%29.aspx 을 이용해 보십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단히 지연 () 함수를 호출할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 3초 안에 처리를 지연시키려면 지연(3000)을 호출합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기다리면서 방해받지 않으려면 POSIX에서 절전 또는 Windows에서 절전을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;POSIX에서 수면시간은 몇초 안에 걸리므로 더 짧은 시간을 원한다면 다음과 같은 다양한 것들이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;usleep()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마이크로초를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows에서 절전 모드를 실행하는 데는 밀리초가 소요됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font 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;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 일정 시간을 기다리기를 원할지도 모르지만, 아마도 긴급한 경우에, 방해를 허용하기를 원할 수도 있습니다. 신호에 의해 수면이 방해될 수 있지만, 이 경우에는 더 나은 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 실제로 당신이 하는 일은 이벤트나 타임아웃 상태의 조건 변수를 기다리는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;WaitForSingleObject&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;pthread_cond_timedwait&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows(윈도우)에서도 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WaitForSingleObjectEx&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;그러면 실제로 호출을 통해 대기 중인 작업에 대해 스레드를 &quot;interrupt&quot;할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;QueueUserAPC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;65&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 을 알 수 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; WaitForSingleObject(Ex)는 종료된 이유를 결정하는 코드를 반환하므로, &quot;TIMEDOUT&quot; 상태를 반환할 때 실제로 시간 초과되었음을 알 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트를 종료할 때 대기 중인 이벤트를 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;pthread_cond_timedwait&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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(여러 스레드가 동일한 스레드에서 대기 중인 경우 해당 스레드를 모두 깨우기 위해 브로드캐스트해야 합니다.)&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루프를 할 때마다 상태를 확인해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스레드는 현재 시간을 파악하여 시간이 지났는지 확인하거나 어떤 조건이 충족되었는지 확인하여 작업을 결정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;// x밀리초 지연 ANSIC 방법 제공&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;time.h&amp;gt;

void delayMillis(unsigned long ms) {
    clock_t start_ticks = clock();
    unsigned long millis_ticks = CLOCKS_PER_SEC/1000;
    while (clock()-start_ticks &amp;lt; ms*millis_ticks) {
    }
}    

/* 
 * Example output:
 * 
 * CLOCKS_PER_SEC:[1000000]
 * 
 * Test Delay of 800 ms....
 * 
 * start[2054], end[802058], 
 * elapsedSec:[0.802058]
 */
int testDelayMillis() {

    printf(&quot;CLOCKS_PER_SEC:[%lu]\n\n&quot;, CLOCKS_PER_SEC);
    clock_t start_t, end_t;
    start_t = clock();
    printf(&quot;Test Delay of 800 ms....\n&quot;, CLOCKS_PER_SEC);
    delayMillis(800); 
    end_t = clock();
    double elapsedSec = end_t/(double)CLOCKS_PER_SEC;
    printf(&quot;\nstart[%lu], end[%lu], \nelapsedSec:[%f]\n&quot;, start_t, end_t, elapsedSec);

}

int main() {    
    testDelayMillis();
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;90&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C11은 다음과 같은 기능을 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-c prettyprint-override&quot;&gt;&lt;code&gt;#include &amp;lt;threads.h&amp;gt;
#include &amp;lt;time.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;

void sleep(time_t seconds) {
    struct timespec time;
    time.tv_sec = seconds;
    time.tv_nsec = 0;
    while (thrd_sleep(&amp;amp;time, &amp;amp;time)) {}
}

int main() {
    puts(&quot;Sleeping for 5 seconds...&quot;);
    sleep(5);
    puts(&quot;Done!&quot;);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;91&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 glibc 2.28부터만 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;92&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GCC를 사용하는 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;#include &amp;lt;창문&amp;gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;h&amp;gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;93&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Sleep(); // Sleep()을 s로 사용하지 않고 S로 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;//Sleep(1000)은 1초///일 수 있습니다.&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;clang에서 수면 지원 (), sleep(1)은 1초 지연/대기입니다.&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;리눅스 OS에서 짧은 지연(예: 마이크로초)이 발생하는 경우 &quot;usleep&quot;을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// C Program to perform short delays
#include &amp;lt;unistd.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;

int main(){
    printf(&quot;Hello!\n&quot;);
    usleep(1000000); // For a 1-second delay
    printf(&quot;Bye!\n);
    return 0;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;system(&quot;timeout /t 60&quot;); // waits 60s. this is only for windows vista,7,8
system(&quot;ping -n 60 127.0.0.1 &amp;gt;nul&quot;); // waits 60s. for all windows
&lt;/code&gt;&lt;/pre&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;void delay(int x)
{   int i=0,j=0;
    for(i=0;i&amp;lt;x;i++){for(j=0;j&amp;lt;200000;j++){}}
}

int main()
{
    int i,num;

    while(1) {

    delay(500);

    printf(&quot;Host name&quot;);
    printf(&quot;\n&quot;);}

}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3930363/implement-time-delay-in-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1406</guid>
      <comments>https://newsource.tistory.com/1406#entry1406comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:57:54 +0900</pubDate>
    </item>
    <item>
      <title>스위프트의 C++ 클래스와 교류</title>
      <link>https://newsource.tistory.com/1405</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트의 C++ 클래스와 교류&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 C++로 작성된 중요한 수업 라이브러리를 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 그것들을 스위프트 코드로 다시 쓰는 것보다 스위프트 내의 어떤 종류의 브리지를 통해 사용하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;주된 동기는 C++ 코드가 여러 플랫폼에서 사용되는 핵심 라이브러리를 나타낸다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실상 저는 핵심 기능이 OS X에서 작동할 수 있도록 스위프트 기반 UI를 만드는 것입니다.&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;스위프트의 C++ 기능을 어떻게 부르느냐는 질문도 있습니다.&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 class=&quot;papago-parent&quot;&gt;C++ 함수로 브리지하려면 다음이 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;C&quot;를 통해 브리징 헤더를 정의합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#ifndef ImageReader_hpp
#define ImageReader_hpp

#ifdef __cplusplus
extern &quot;C&quot; {
#endif

    const char *hexdump(char *filename);
    const char *imageType(char *filename);

#ifdef __cplusplus
}
#endif

#endif /* ImageReader_hpp */
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트 코드는 이제 함수를 직접 호출할 수 있습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let type = String.fromCString(imageType(filename))
let dump = String.fromCString(hexdump(filename))
&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;Swift 내에서 &lt;em papago-id=&quot;5-1&quot;&gt;C++ 클래스&lt;/em&gt;를 인스턴스화하고 조작하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것에 관해 출판된 것을 찾을 수 없는 것 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 완벽하게 관리할 수 있는 답을 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;얼마나 깨끗했으면 좋겠는지는 전적으로 얼마나 많은 일을 하고 싶은지에 따라 결정됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 C++ 클래스를 수강하고 C &quot;wrapper&quot; 기능을 만들어 인터페이스를 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, C++ 클래스가 있는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class MBR {
    std::string filename;

public:
    MBR (std::string filename);
    const char *hexdump();
    const char *imageType();
    const char *bootCode();
    const char *partitions();
private:
    bool readFile(unsigned char *buffer, const unsigned int length);
};
&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;그런 다음 다음 C++ 기능을 구현합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &quot;MBR.hpp&quot;

using namespace std;
const void * initialize(char *filename)
{
    MBR *mbr = new MBR(filename);

    return (void *)mbr;
}

const char *hexdump(const void *object)
{
    MBR *mbr;
    static char retval[2048];

    mbr = (MBR *)object;
    strcpy(retval, mbr -&amp;gt; hexdump());
    return retval;
}

const char *imageType(const void *object)
{
    MBR *mbr;
    static char retval[256];

    mbr = (MBR *)object;
    strcpy(retval, mbr -&amp;gt; imageType());
    return retval;
}
&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;#ifndef ImageReader_hpp
#define ImageReader_hpp

#ifdef __cplusplus
extern &quot;C&quot; {
#endif

    const void *initialize(char *filename);
    const char *hexdump(const void *object);
    const char *imageType(const void *object);

#ifdef __cplusplus
}
#endif

#endif /* ImageReader_hpp */
&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;Swift를 통해 개체를 인스턴스화하고 다음과 같이 상호 작용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let cppObject = UnsafeMutablePointer&amp;lt;Void&amp;gt;(initialize(filename))
let type = String.fromCString(imageType(cppObject))
let dump = String.fromCString(hexdump(cppObject))                
self.imageTypeLabel.stringValue = type!
self.dumpDisplay.stringValue = dump!
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보다시피, 해결책은 개체를 인스턴스화하고 해당 개체에 포인터를 반환하는 래퍼를 만드는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 이를 해당 클래스에 맞는 객체로 쉽게 취급하고 멤버 함수를 호출할 수 있는 래퍼 함수로 다시 전달할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 깨끗하게 만들기&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 환상적인 시작이고 작은 다리로 기존의 C++ 클래스를 사용하는 것이 완전히 가능하다는 것을 증명하지만, 그것은 더 깨끗할 수 있습니다.&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;UnsafeMutablePointer&amp;lt;Void&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리의 스위프트 코드 중간부터 그것을 스위프트 클래스로 캡슐화합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로, 우리는 동일한 C/C++ 래퍼 기능을 사용하지만 스위프트 클래스와 인터페이스합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Swift 클래스는 객체 참조를 유지하며 기본적으로 모든 메서드 및 속성 참조 호출을 브리지를 통해 C++ 객체로 전달합니다!&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 모든 브리징 코드가 스위프트 클래스에 완전히 캡슐화됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아직 C 브리지를 사용하고 있지만 Objective-C 또는 Objective-C++에 기록할 필요 없이 C++ 객체를 투명하게 사용하고 있습니다.&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;스위프트는 현재 C++ 인터럽트가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 장기적인 목표이지만 가까운 미래에 일어날 가능성은 매우 낮습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자신만의 해결책 외에 또 다른 방법이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;c++ code는 objective-c+에 직접 전화하거나 작성할 수 있습니다.&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;따라서 C++ 코드 위에 목적-C++ 래퍼를 만들고 적합한 인터페이스를 만들 수 있습니다.&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;그럼 swift code에서 objective-C++ code를 호출합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;objective-C++ 코드를 쓰려면 파일 확장자 이름을 .m에서 .mm로 바꾸어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;적절한 경우 C++ 개체가 할당한 메모리를 해제하는 것을 잊지 마십시오.&lt;/font&gt;&lt;/p&gt;&lt;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://www.scapix.com&quot; rel=&quot;noreferrer&quot; papago-id=&quot;22-1&quot;&gt;Scapix Language Bridge&lt;/a&gt;를 사용하여 C++와 Swift(다른 언어 중에서도)를 자동으로 브리지할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;브리지 코드는 C++ 헤더 파일에서 즉시 자동으로 생성됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/scapix-com/example1&quot; rel=&quot;noreferrer&quot; papago-id=&quot;22-3&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;C++:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-cpp prettyprint-override&quot;&gt;&lt;code&gt;#include &amp;lt;scapix/bridge/object.h&amp;gt;

class contact : public scapix::bridge::object&amp;lt;contact&amp;gt;
{
public:
    std::string name();
    void send_message(const std::string&amp;amp; msg, std::shared_ptr&amp;lt;contact&amp;gt; from);
    void add_tags(const std::vector&amp;lt;std::string&amp;gt;&amp;amp; tags);
    void add_friends(std::vector&amp;lt;std::shared_ptr&amp;lt;contact&amp;gt;&amp;gt; friends);
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class ViewController: UIViewController {
    func send(friend: Contact) {
        let c = Contact()

        contact.sendMessage(&quot;Hello&quot;, friend)
        contact.addTags([&quot;a&quot;,&quot;b&quot;,&quot;c&quot;])
        contact.addFriends([friend])
    }
}
&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;언급된 또 다른 대답은 ObjC++를 사용하여 상호 작용하는 것이 훨씬 더 쉽습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;.m과 xcode/clang 대신 파일 이름을 .mm로 지정하면 해당 파일의 c++에 액세스할 수 있습니다.&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;ObjC++는 C++ 상속을 지원하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 당신이 ObjC++에서 c++ 클래스를 서브클래스 하기를 원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;서브클래스를 C++로 작성해서 ObjC++ 클래스로 감싸야 할 것입니다.&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;그럼 보통 objc를 swift에서 호출할 때 사용하는 bridging header.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/35229149/interacting-with-c-classes-from-swift&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Swift</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1405</guid>
      <comments>https://newsource.tistory.com/1405#entry1405comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:57:43 +0900</pubDate>
    </item>
    <item>
      <title>워드프레스 = 강력한 결합에서 디스크를 전통적인 포럼으로 활용하기</title>
      <link>https://newsource.tistory.com/1404</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스 = 강력한 결합에서 디스크를 전통적인 포럼으로 활용하기&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;문 닫았습니다.&lt;/b&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문은 책, 도구, 소프트웨어 라이브러리 등에 대한 권장 사항을 찾고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;충족되지 않습니다.&lt;/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;/font&gt;&lt;font class=&quot;papago-parent&quot;&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;2018-10-08 09:11:37Z&quot; papago-attr-id=&quot;1&quot;&gt;4년전&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/13548620/edit&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문을 개선합니다.&lt;/font&gt;&lt;/a&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 포럼의 힘과 스레드의 역동성과 편리성을 결합한 좋은 토론 시스템을 디스커스/슬래쉬닷/레딧과 같은 플라이 코멘트 시스템에서 발견하지 못했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프론트엔드의 전통적인 포럼으로 작동하는 워드프레스에서 디스커스를 이용한 토론 시스템을 만들고 싶습니다. 사용자는 마지막 답변에 따라 순서대로 순서를 매기는 새로운 카테고리와 하위 카테고리를 만들 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 저는 디스커스와 bbPress + Thread comments를 비교하고 있습니다.&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://stackoverflow.com/questions/4578314/creating-a-website-forum-discussion-group-with-disqus&quot; papago-id=&quot;7-1&quot;&gt;이전 논의&lt;/a&gt;를 찾았는데, 이는 디스크 &lt;a href=&quot;http://disqus.com/api/docs/forums/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;7-3&quot;&gt;포럼의 API&lt;/a&gt;에 대한 링크를 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 나는 그것을 사용하는 웹사이트의 간단한 예를 찾을 수 없는 것 같습니다.&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;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 포럼 API가 위에서 언급한 제가 하고 싶은 일을 할 수 있을까요?&lt;/font&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;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 포럼에 대한 &lt;em papago-id=&quot;9-1&quot;&gt;작성&lt;/em&gt; &lt;em papago-id=&quot;9-3&quot;&gt;옵션&lt;/em&gt;과 listCategories 옵션이 있지만, 애초에 카테고리와 하위 카테고리를 어떻게 작성할지는 명확하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 한 번 말씀드리지만, 제가 볼 수 있는 예가 있다면 모든 것이 분명할 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;채널은 디스커스로 구동될 경우 미니 포럼이 어떻게 코딩되는지를 보여주는 파이썬 예입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GitHub repo: https://github.com/disqus/channels&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;데모: https://pycon.disqus.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;워드프레스는 &lt;a href=&quot;http://wordpress.org/extend/plugins/bbpress-threaded-replies/&quot; papago-id=&quot;13-3&quot; rel=&quot;nofollow&quot;&gt;bbPress&lt;/a&gt; 스레드 &lt;a href=&quot;http://wordpress.org/extend/plugins/bbpress-threaded-replies/&quot; papago-id=&quot;13-3&quot; rel=&quot;nofollow&quot;&gt;응답 플러그인&lt;/a&gt;으로 &lt;a href=&quot;http://bbpress.org/&quot; rel=&quot;nofollow&quot; papago-id=&quot;13-1&quot;&gt;bbPress&lt;/a&gt; 포럼 플러그인을 사용할 것을 제안합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/13548620/using-disqus-as-a-traditional-forum-in-wordpress-powerful-combination&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1404</guid>
      <comments>https://newsource.tistory.com/1404#entry1404comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:57:34 +0900</pubDate>
    </item>
    <item>
      <title>Angular Resources Service를 통한 JSON 읽기</title>
      <link>https://newsource.tistory.com/1403</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular Resources Service를 통한 JSON 읽기&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용방법&lt;/font&gt;&lt;/font&gt;&lt;code&gt;angular-resources.js&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서비스를 통해 JSON 파일을 읽는 것?&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;저는 테스트 목적으로 아주 기본적인 Angular 앱을 작업하고 있으며 지금 JSON 파일에서 데이터를 읽으려고 하고 있습니다.&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;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;App&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;App.controller&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선언문은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;'use strict';

// create module for custom directives
var App = angular.module('App', ['jsonService']);

// controller business logic
App.controller('AppCtrl', function AppCtrl($scope, JsonService) {
    console.log(&quot;marker 1&quot;);

    if (!$scope.jsonData) {
        console.log(&quot;marker 2&quot;);
        JsonService.getData(function (d) {
            console.log(d);
            $scope.jsonData = d;
            $scope.records = d.length;
        });
    } else {
        console.log(&quot;I have data already... &quot; + $scope.jsonData);
    }

    console.log($scope.jsonData);
});
&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;JsonService&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;'use strict';

angular.module('jsonService', ['ngResource'])
.factory('JsonService', function($resource, $filter) {
    // define the remote service using Angular's $resource module
    var service = $resource('/data/ProcessModeling-Resources.json', {});

    var JsonService = {
        // calls $resource.query() to retrieve the remote data.
        getData : function getData(callback) {
            console.log(&quot;marker 3&quot;);
            service.query(function (data) {
                console.log(&quot;marker 4&quot;);
            });
        }
    };

    return JsonService;
});
&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;marker 1 app.js:8
marker 2 app.js:11
marker 3 services.js:13
undefined app.js:21
TypeError: Object #&amp;lt;Resource&amp;gt; has no method 'push'
    at copy (http://127.0.0.1:8000/lib/angular.js:556:21)
    at new Resource (http://127.0.0.1:8000/lib/angular-resource.js:330:9)
    at http://127.0.0.1:8000/lib/angular-resource.js:386:32
    at forEach (http://127.0.0.1:8000/lib/angular.js:117:20)
    at http://127.0.0.1:8000/lib/angular-resource.js:385:19
    at wrappedCallback (http://127.0.0.1:8000/lib/angular.js:6650:59)
    at http://127.0.0.1:8000/lib/angular.js:6687:26
    at Object.Scope.$eval (http://127.0.0.1:8000/lib/angular.js:7840:28)
    at Object.Scope.$digest (http://127.0.0.1:8000/lib/angular.js:7707:25)
    at Object.Scope.$apply (http://127.0.0.1:8000/lib/angular.js:7926:24) angular.js:5582
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전화를 걸려고 할 때 오류가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;service.query(function (data) { }&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&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;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://ericterpstra.com/apps/jsCats/ngCatsHOM/&quot; papago-id=&quot;12-1&quot; rel=&quot;noreferrer&quot;&gt;앵귤러&lt;/a&gt;를 계속 써왔습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터를 끌어오기 위한 예로 &lt;a href=&quot;http://ericterpstra.com/apps/jsCats/ngCatsHOM/&quot; papago-id=&quot;12-1&quot; rel=&quot;noreferrer&quot;&gt;JS Cats App&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;@pkozlowski의 조언을 따르고 응답이 배열인지 확인하겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든 여기 댓글에 설명한 것과 유사한 JSON 파일에서 데이터를 로드하는 예가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;13-1&quot;&gt;ngResource&lt;/strong&gt;를 사용하며 http://plnkr.co/edit/Ofq7Md8udEnIhAPF1NgL?p=preview 을 통해 여러 가지 정보를 통합할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서비스를&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;angular.module('jsonService', ['ngResource'])
.factory('JsonService', function($resource) {
  return $resource('cats.json',{ }, {
    getData: {method:'GET', isArray: false}
  });
});
&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;isArray&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;false&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱과 컨트롤러&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var app = angular.module('app', ['jsonService']);

app.controller('ctrl', function($scope, JsonService){
  JsonService.getData(function(data){
    $scope.name = data.name;
    $scope.children = data.children;
  });
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;getData&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;19-1&quot;&gt;리소스&lt;/strong&gt; 클래스는 당신에게 다음과 같은 유용한 편의 방법을 제공하기 때문에 실제로 필요하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;get&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;angular.module('jsonService', ['ngResource'])
.factory('JsonService', function($resource) {
  return $resource('cats.json');
});

app.controller('ctrl', function($scope, JsonService){
  JsonService.get(function(data){
    $scope.name = data.name;
    $scope.children = data.children;
  });
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/13849902/reading-in-json-through-angular-resources-service&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1403</guid>
      <comments>https://newsource.tistory.com/1403#entry1403comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:57:28 +0900</pubDate>
    </item>
    <item>
      <title>ORA-22275 오류: 잘못된 LOB 로케이터가 지정되었습니다.</title>
      <link>https://newsource.tistory.com/1402</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ORA-22275 오류: 잘못된 LOB 로케이터가 지정되었습니다.&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;BLOB 변수를 PDF 문서로 채우는 절차가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 하려는 것은 고정된 날짜로부터 60일 이내에 PDF 문서만 표시하도록 로직을 추가하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 참조:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;check_staticdate     number(1); 

function DisplayPDF (audit in number) RETURN blob is

person_id     person.person_id%type;
z_lob         blob;
blob_length   NUMBER;


CURSOR getPDF(audit number) IS
   select report
   from report_table
   where report_type = 'PDF'
   and job_no = audit order by rec_no;


begin

/* Check Valid ID */
if not package.ValidID(person_id, check_only=&amp;gt;TRUE) then
   return z_lob;
end if;


/* Here is the case statement.*/
select case
   when exists
      (
       SELECT 'x' from table
       where table_id = person_id
       and trunc(sysdate) &amp;lt; trunc(table_static_date + 60)
      )

    then 1
    else 0
   end into check_staticdate
from dual;


if (check_staticdate = 0) then
   return z_lob;
end if;



open getPDF(audit);
fetch getPDF into z_lob;
close getPDF;
return z_lob;


end DisplayPDF;
&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;ORA-22275: invalid LOB locator specified.&lt;/code&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;Oracle SQL을 처음 사용하는데 왜 내가 유효한지 잘 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ID 체크는 z_lob을 반환하여 작동하지만 나의 case statement는 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 전체 오류 스택 추가 중&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Failed to execute target procedure ORA-22275: invalid LOB locator specified

ORA-06512: at &quot;SYS.WPG_DOCLOAD&quot;, line 51

ORA-06512: at &quot;User.Package&quot;, line 733

ORA-06512: at line 33
&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;DBMS_LOB.CREATETEMPORARY(z_lob,true); --true if you want it to be cached.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자의 기능이 반환되는 것 같습니다(사용자에 따라).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;audit&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;parameter value) NULL 값을 가진 blob.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SYS.WPG_DOCLOAD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;처리되지 않은 예외를 던지는 메소드입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;return z_lob;&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;return nvl(z_lob, empty_blob());&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/13978242/ora-22275-error-invalid-lob-locator-specified&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1402</guid>
      <comments>https://newsource.tistory.com/1402#entry1402comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:57:20 +0900</pubDate>
    </item>
    <item>
      <title>Python에서의 프로세스간 통신</title>
      <link>https://newsource.tistory.com/1401</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python에서의 프로세스간 통신&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;ul&gt; 
 &lt;li papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름 있는 파이프에 읽기/쓰기(예: feels 해킹&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; services(데스크톱에서는 worked이지만 헤드리스를 사용하기에는 무게가 너무 무겁습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소켓(seems가 너무 낮아서 사용할 수 있는 모듈이 있나요?)&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&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;python listen.py&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;python client.py&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 클라이언트는 기존 프로세스에 메시지를 보내고 반환 코드와 함께 종료해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성공의 경우 0이 아닌 경우(즉, 양방향 통신이 필요합니다).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://docs.python.org/library/multiprocessing.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;라이브러리&lt;/a&gt;는 소켓을 랩핑하는 &lt;a href=&quot;http://docs.python.org/library/multiprocessing.html#multiprocessing-listeners-clients&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-3&quot;&gt;리스너와 클라이언트&lt;/a&gt;를 제공하며 임의의 파이썬 객체를 전달할 수 있게 해줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버에서 python 개체 수신을 들을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from multiprocessing.connection import Listener

address = ('localhost', 6000)     # family is deduced to be 'AF_INET'
listener = Listener(address, authkey=b'secret password')
conn = listener.accept()
print 'connection accepted from', listener.last_accepted
while True:
    msg = conn.recv()
    # do something with msg
    if msg == 'close':
        conn.close()
        break
listener.close()
&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;from multiprocessing.connection import Client

address = ('localhost', 6000)
conn = Client(address, authkey=b'secret password')
conn.send('close')
# can also send arbitrary objects:
# conn.send(['a', 2.5, None, int, sum])
conn.close()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니요, &lt;a href=&quot;http://zeromq.org&quot; papago-id=&quot;12-1&quot;&gt;제로맥&lt;/a&gt;이 가야 할 길입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;맛있죠?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import argparse
import zmq

parser = argparse.ArgumentParser(description='zeromq server/client')
parser.add_argument('--bar')
args = parser.parse_args()

if args.bar:
    # client
    context = zmq.Context()
    socket = context.socket(zmq.REQ)
    socket.connect('tcp://127.0.0.1:5555')
    socket.send(args.bar)
    msg = socket.recv()
    print msg
else:
    # server
    context = zmq.Context()
    socket = context.socket(zmq.REP)
    socket.bind('tcp://127.0.0.1:5555')
    while True:
        msg = socket.recv()
        if msg == 'zeromq':
            socket.send('ah ha!')
        else:
            socket.send('...nah')
&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;@vsekhar의 답변을 바탕으로, 더 자세한 내용과 여러 연결이 포함된 Python 3 버전을 소개합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버&lt;/font&gt;&lt;/h2&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;from multiprocessing.connection import Listener

listener = Listener(('localhost', 6000), authkey=b'secret password')
running = True
while running:
    conn = listener.accept()
    print('connection accepted from', listener.last_accepted)
    while True:
        msg = conn.recv()
        print(msg)
        if msg == 'close connection':
            conn.close()
            break
        if msg == 'close server':
            conn.close()
            running = False
            break
listener.close()
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고객&lt;/font&gt;&lt;/h2&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;from multiprocessing.connection import Client
import time

# Client 1
conn = Client(('localhost', 6000), authkey=b'secret password')
conn.send('foo')
time.sleep(1)
conn.send('close connection')
conn.close()

time.sleep(1)

# Client 2
conn = Client(('localhost', 6000), authkey=b'secret password')
conn.send('bar')
conn.send('close server')
conn.close()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 경험으로는, 그것을 실행하는 가장 단순하고 우아한 방법입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 소켓을 사용합니다. 로컬 통신은 강력하게 최적화되었기 때문에 성능 문제가 발생하지 않아야 하며, 필요한 경우 애플리케이션을 다른 물리적 노드에 배포할 수 있는 기능을 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;저수준&quot; 접근법에 관해서는, 당신이 맞습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 필요에 따라 항상 높은 수준의 포장지를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://docs.python.org/library/xmlrpclib.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;18-1&quot;&gt;XMLRPC&lt;/a&gt;가 적합한 후보가 될 수 있지만 수행하려는 작업에는 너무 부족할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://twistedmatrix.com/trac/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19-0&quot;&gt;Twisted&lt;/a&gt;는 &lt;a href=&quot;http://twistedmatrix.com/documents/8.2.0/api/twisted.protocols.basic.LineReceiver.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19-2&quot;&gt;LineReceiver&lt;/a&gt;(간단한 라인 기반 메시지용) 또는 보다 우아한 AMP(참고로 &lt;a href=&quot;http://amp-protocol.net/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19-4&quot;&gt;표준화되어 다른 언어로 구현&lt;/a&gt;된)와 같은 몇 가지 훌륭한 프로토콜 간단한 구현을 제공합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;RabbitMQ라고 불리는 크로스 플랫폼 라이브러리/서버를 확인해 보십시오. 2-프로세스 통신에는 너무 무거울 수 있지만, 다중 프로세스 또는 다중 코드베이스 통신이 필요한 경우(예를 들어, 일대일, 대기열 등 다양한 수단을 사용하는) 좋은 옵션입니다.&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;$ pip install pika
$ pip install bson # for sending binary content
$ sudo apt-get rabbitmq-server # ubuntu, see rabbitmq installation instructions for other platforms
&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;import pika, time, bson, os

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.exchange_declare(exchange='logs', type='fanout')

i = 0
while True:
    data = {'msg': 'Hello %s' % i, b'data': os.urandom(2), 'some': bytes(bytearray(b'\x00\x0F\x98\x24'))}
    channel.basic_publish(exchange='logs', routing_key='', body=bson.dumps(data))
    print(&quot;Sent&quot;, data)
    i = i + 1
    time.sleep(1)

connection.close()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가입자(데이터 수신, 여러 개일 수 있음):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import pika, bson

connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()

channel.exchange_declare(exchange='logs', type='fanout')

result = channel.queue_declare(exclusive=True)
queue_name = result.method.queue

channel.queue_bind(exchange='logs', queue=queue_name)

def callback(ch, method, properties, body):
    data = bson.loads(body)
    print(&quot;Received&quot;, data)

channel.basic_consume(callback, queue=queue_name, no_ack=True)
channel.start_consuming()
&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;https://www.rabbitmq.com/tutorials/tutorial-two-python.html 을 기반으로 한 예제&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;소켓을 사용하고 싶지만 Twisted를 사용하여 추상화를 제공하고 쉽게 작업할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://twistedmatrix.com/documents/current/core/examples/#auto0&quot; rel=&quot;nofollow&quot; papago-id=&quot;25-1&quot;&gt;간단한 에코 클라이언트/서버 예제&lt;/a&gt;는 시작하기 좋은 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전달된 인수에 따라 파일을 결합하고 클라이언트 또는 서버를 인스턴스화하여 실행하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python IPC의 첫 번째 결과 중 하나로 이 스레드를 찾았지만 &lt;a href=&quot;https://docs.python.org/3/library/asyncio.html&quot; papago-id=&quot;27-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Async&lt;/a&gt;로 실행할 수 있는 것을 찾고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.python.org/3/library/asyncio.html&quot; papago-id=&quot;27-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;IO&lt;/a&gt;. 결국 좋은 비동기 기능을 제공하는 &lt;a href=&quot;https://ipyc.readthedocs.io/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;27-3&quot;&gt;IPyC&lt;/a&gt;를 발견하고 그 보석을 공유하기 위해 돌아왔습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;IPyC는 동기화 구현도 지원합니다.&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;두 개의 다른 프로세스에서 IPyC 라이브러리를 사용할 수 있지만, 여기 같은 파일에 두 개의 비동기 작업이 있는 작은 예가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;TCP:9999를 기본 포트로 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 이 예제는 다음과 충돌합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;unexpected keyword argument 'loop'&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;Python &amp;gt;=3.10에서, 이는 비동기의 인터페이스 변경으로 인한 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;v3.9로 테스트를 해봤습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;import asyncio
import ipyc
import json
import logging
logging.basicConfig(level=logging.INFO)  # Set to DEBUG to see inner workings

# IPyC has support for custom (de)serialization; using json as example here
ipyc.IPyCSerialization.add_custom_serialization(list, json.dumps)
ipyc.IPyCSerialization.add_custom_deserialization(list, json.loads)


## Host stuff
host = ipyc.AsyncIPyCHost()

@host.on_connect
async def on_client_connect(connection: ipyc.AsyncIPyCLink):
    logging.info(&quot;Got a connection&quot;)
    while connection.is_active():
        message = await connection.receive()
        if message:
            logging.info(f&quot;Received: {message}&quot;)
    logging.info(&quot;Connection closed&quot;)

## Client stuff
async def client_task():
    client = ipyc.AsyncIPyCClient()

    link = await client.connect()

    for i in range(3):
        await link.send([&quot;Hello World!&quot;, i, 3.14])
        await asyncio.sleep(1)

    await client.close()  # Close the connection
    await asyncio.sleep(1)

## AsyncIO stuff
loop = asyncio.get_event_loop()
loop.create_task(host.start())
loop.run_until_complete(client_task())
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/6920858/interprocess-communication-in-python&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>python</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1401</guid>
      <comments>https://newsource.tistory.com/1401#entry1401comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:57:13 +0900</pubDate>
    </item>
    <item>
      <title>docker- compose mysql 컨테이너에서 워드프레스 컨테이너에 대한 액세스를 거부함</title>
      <link>https://newsource.tistory.com/1400</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;docker- compose 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 5.7 container에서 wordpress container에 대한 접근을 거부하는 문제가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 도커 컴포지트를 사용하고 있고 맥 OSX에서 도커를 실행하고 있습니다.&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;version: '2'

services:
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    container_name: wordpress
    ports:
      - &quot;8000:80&quot;
      - &quot;443:443&quot;
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: blog
      WORDPRESS_DB_USER: blog_admin
      WORDPRESS_DB_PASSWORD: userpasswd
    networks:
      - wordpress_net
  db:
    image: mysql:5.7
    container_name: db
    ports:
      - &quot;3306:3306&quot;
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpasswd
      MYSQL_DATABASE: blog
      MYSQL_USER: blog_admin
      MYSQL_PASSWORD: userpasswd
    networks:
      - wordpress_net
networks:
  wordpress_net:
volumes:
  db_data:
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;db 컨테이너의 로그는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;2017-05-12T23:28:06.138429Z 321 [Note] Access denied for user 'blog_admin'@'172.19.0.3' (using password: YES)
&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;MySQL Connection Error: (1045) Access denied for user 'blog_admin'@'172.19.0.3' (using password: YES)
Warning: mysqli::mysqli(): (HY000/1045): Access denied for user 'blog_admin'@'172.19.0.3' (using password: YES) in - on line 22
&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;CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                        NAMES
1b02f0146fe7        wordpress:latest    &quot;docker-entrypoint...&quot;   25 minutes ago      Up 26 seconds       0.0.0.0:443-&amp;gt;443/tcp, 0.0.0.0:8000-&amp;gt;80/tcp   wordpress
5d932ed6c269        mysql:5.7           &quot;docker-entrypoint...&quot;   25 minutes ago      Up 25 minutes       0.0.0.0:3306-&amp;gt;3306/tcp                       db
&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;ol&gt; 
 &lt;li papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 호스트를 다시 시작하는 중입니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 - compose rm -v 를 다시 도커 - compose합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스 컨테이너 외부에 있는 사용자 자격 증명 및 루트 자격 증명으로 로그인합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 이미지를 제거하고 처음부터 다시 꺼냅니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&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;WORDPRESS_DB_HOST, WORDPRESS_DB_USER&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;db 컨테이너에 접속하면 db의 모든 환경을 볼 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스 컨테이너가 계속 자체적으로 다시 시작됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스택 오버플로에서 플러시 권한 및 새 사용자 계정 설정을 권장하는 답변을 하나 보았지만 다른 컴퓨터에서 이 문제가 다시 나타날 수 있는 잘못된 행동을 하고 있는지 알고 싶습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경 사항:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;WORDPRESS_DB_USER: blog_admin
WORDPRESS_DB_PASSWORD: userpasswd
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;받는 사람:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: rootpasswd
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음은:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;docker-compose up -d --build&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;Blog_admin&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;create database&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 한 일:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;docker-compose rm -v&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;docker-compose down&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;ul&gt; 
 &lt;li&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;docker-compose.yml&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 새로운 것을 만들었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 구성만으로 작성 파일을 만들었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨테이너, 그것을 발사하고 연결을 시도했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버 이름:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;root&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;됐습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음에 컨테이너를 멈추어야 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker stop containerID&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 뛰었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker-compose rm -v&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&gt;&lt;/font&gt;&lt;code&gt;rm -v&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨테이너를 중지할 때만 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 시 사용 안 함&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker-compose down&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 제가 db컨테이너용 볼륨을 사용하고 wordpress container config로 yml 파일을 완성하면서 db의 상태가 지속되게 만들었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 결국 이런 일을 당했습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;version: '2'

services:
  wordpress:
    image: wordpress:latest
    container_name: wordpress-blog
    depends_on:
      - mysql
    ports:
      - &quot;8000:80&quot;
      - &quot;443:443&quot;
    restart: always
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: admin
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_NAME: wordpress
  mysql:
    image: mysql:5.7
    container_name: mysql-db
    ports:
      - &quot;3306:3306&quot;
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: wordpress
      MYSQL_USER: admin
      MYSQL_PASSWORD: password 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;35-0&quot;&gt;참고:&lt;/strong&gt; 이전에 워드프레스 컨테이너 뿐만 아니라 db 컨테이너 자체에서 데이터베이스에 연결하는 데 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에서 설명한 방법이 이 문제를 해결하는 데 도움이 되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 솔루션 변경&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;volumes:
- db_data:/var/lib/mysql
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 비슷한 정도로&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;volumes:
- db_data:/var/lib/mysqlx
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/43947824/docker-compose-mysql-container-denies-access-to-wordpress-container&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1400</guid>
      <comments>https://newsource.tistory.com/1400#entry1400comment</comments>
      <pubDate>Fri, 27 Oct 2023 21:57:04 +0900</pubDate>
    </item>
    <item>
      <title>phpMyAdmin에서 저장 프로시저를 작성하는 방법은?</title>
      <link>https://newsource.tistory.com/1399</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;phpMyAdmin에서 저장 프로시저를 작성하는 방법은?&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;저장 프로시저를 phpMyAdmin에 어디에 적어야 하는지, MVC 아키텍처를 사용하여 어떻게 호출해야 하는지 찾을 수 없습니다.&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;phpMyAdmin에서 쉽게 프로시저를 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스로 이동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;헤더에서 '루틴' 탭 클릭&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'Add routine(루틴 추가)' 클릭&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/yr6Rp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 팝업 창이 열립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;절차를 작성하고 &quot;GO&quot;를 클릭합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&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;img src=&quot;https://i.stack.imgur.com/Sf6Vp.png&quot; alt=&quot;enter image description here&quot;&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;'Routine' 탭 자체에서 작성한 프로시저를 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/415Fa.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;phpMyAdmin에서는 SQL 창에서 저장 프로시저를 만들 수 있습니다.&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;구분 기호를 기본 &quot;;&quot; 대신 &quot;$$&quot; 같은 것으로 설정해야 할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 창 하단에서 이를 변경할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/x15Ey.png&quot; alt=&quot;enter image description here&quot;&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;또한 당신은 이것을 참고할 수 있습니다: http://www.mysqltutorial.org/mysql-stored-procedure-tutorial.aspx&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;다른 쿼리를 작성할 때 phphmyadmin의 sql 쿼리 창에 저장 프로시저를 만들 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 SP를 실행하는 즉시 데이터베이스의 information_schema에 저장됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 명령을 통해 SP의 존재 여부를 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SHOW PROCEDURE STATUS
SHOW FUNCTION STATUS
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT ROUTINE_NAME 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE 
       ROUTINE_TYPE=&quot;PROCEDURE&quot; 
   AND ROUTINE_SCHEMA=&quot;dbname&quot;
;
&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;저장 프로시저는 에서 사용 가능한 SQL 박스에 일반 SQL 언어를 사용하여 작성됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;phpmyadmin-&amp;gt;database-&amp;gt;table-&amp;gt;execute sql&lt;/code&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;참조: - http://dev.mysql.com/doc/refman/5.0/en/stored-routines.html&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/17481890/how-to-write-a-stored-procedure-in-phpmyadmin&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1399</guid>
      <comments>https://newsource.tistory.com/1399#entry1399comment</comments>
      <pubDate>Sun, 22 Oct 2023 20:06:18 +0900</pubDate>
    </item>
    <item>
      <title>UIScrollView에서 스크롤을 프로그래밍 방식으로 강제 중지하려면 어떻게 해야 합니까?</title>
      <link>https://newsource.tistory.com/1398</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UIScrollView에서 스크롤을 프로그래밍 방식으로 강제 중지하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: &lt;a href=&quot;https://stackoverflow.com/questions/986392/programmatically-force-a-uiscrollview-to-stop-scrolling-for-sharing-a-table-view&quot; papago-id=&quot;1-1&quot;&gt;여기에 제시된 답변&lt;/a&gt;은 제게 맞지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UISscrollView(테이블 보기가 아니라 사용자 지정 작업)가 있으며, 사용자가 특정 작업을 수행할 때 뷰 내부의 스크롤(드래그 또는 감속)을 모두 삭제하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 예를 들어 이것을 시도해 보았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[scrollView scrollRectToVisible:CGRectInset([scrollView bounds], 10, 10) animated:NO];
&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;strong papago-id=&quot;3-3&quot;&gt;벗어나&lt;/strong&gt; 뷰의 내용 크기 안에 있는 rect를 지정하면 스크롤을 중지할 수 &lt;strong papago-id=&quot;3-1&quot;&gt;있습니다&lt;/strong&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 예상대로 전망을 멈추게 하는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 장소로 뛰어내리게 할 뿐만 아니라&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업을 합리적으로 정상적으로 수행하기 위해 가장자리에서 약간의 장난을 칠 수 있을 것입니다. 하지만 스크롤 뷰를 중지하는 깨끗한 방법을 아는 사람이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;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;거의 다 가신 것 같은데, 너무 많이 쓴 정류장을 그냥 상쇄하고 있었고, 정류장을 원래 정류장으로 바로 스크롤할 수 있다는 것을 잊어버린 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크롤 동작에 대한 일반화된 솔루션은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- (void)killScroll 
{
    CGPoint offset = scrollView.contentOffset;
    offset.x -= 1.0;
    offset.y -= 1.0;
    [scrollView setContentOffset:offset animated:NO];
    offset.x += 1.0;
    offset.y += 1.0;
    [scrollView setContentOffset:offset animated:NO];
}
&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;[편집] iOS 4.3 (그리고 아마도 그 이전) 시점에서 이것 또한 작동하는 것으로 보입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- (void)killScroll 
{
    CGPoint offset = scrollView.contentOffset;
    [scrollView setContentOffset:offset animated:NO];
}
&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;[scrollView setContentOffset:offset animated:NO]&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;strong papago-id=&quot;9-1&quot;&gt;같지 않습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[scrollView setContentOffset:offset]&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;ul&gt; 
 &lt;li&gt;&lt;code&gt;[scrollView setContentOffset:offset animated:NO]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 중인 애니메이션을 실제로 중지합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;[scrollView setContentOffset:offset]&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&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마찬가지.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scrollView.contentOffset = offset&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 중인 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 실행 중인 애니메이션을 중지하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 어디에도 기록되어 있지 않지만 iOS 6.1 및 iOS 7.1에서 테스트한 것과 같은 동작입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 실행 중인 애니메이션/감속을 중지하는 &lt;strong papago-id=&quot;16-1&quot;&gt;방법&lt;/strong&gt;은 다음과 같이 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-objc prettyprint-override&quot;&gt;&lt;code&gt;// Objective-C
[scrollView setContentOffset:scrollView.contentOffset animated:NO];
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre class=&quot;lang-swift prettyprint-override&quot;&gt;&lt;code&gt;// Swift
scrollView.setContentOffset(scrollView.contentOffset, animated:false)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 데이비드 류가 그의 편집된 답변에서 한 말입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 저는 이 두 API가 동일하지 &lt;strong papago-id=&quot;17-1&quot;&gt;않다는&lt;/strong&gt; 것을 분명히 하고 싶었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 &lt;a href=&quot;https://stackoverflow.com/a/3421387/470225&quot; papago-id=&quot;18-1&quot;&gt;데이비드 루이의 대답&lt;/a&gt;은 저에게는 통하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 제가 한 일입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- (void)killScroll {
    self.scrollView.scrollEnabled = NO;
    self.scrollView.scrollEnabled = YES;
}
&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;그럴만한 가치가 있어서, 저는 iOS 6.0 아이폰 시뮬레이터를 사용하고 있습니다.&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;- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
 {
    *targetContentOffset = scrollView.contentOffset;
 }
&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;targetContentOffset&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scrollView&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 현재 오프셋이므로 목표에 도달했기 때문에 스크롤을 중지합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 목표를 설정할 수 있도록 하는 것이 목적인 방법을 사용하는 것이 방법은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;contentOffset&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;h3 papago-id=&quot;25&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;func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer&amp;lt;CGPoint&amp;gt;) {
    targetContentOffset.pointee = scrollView.contentOffset
}
&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;pre&gt;&lt;code&gt;scrollView.setContentOffset(scrollView.contentOffset, animated: false)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 &quot;현대적인&quot; 방법은 --&amp;gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;scrollview.panGestureRecognizer.enabled = false;
scrollview.panGestureRecognizer.enabled = true;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 현재 터치가 중단되는 순간 스크롤을 담당하는 제스처 인식기가 비활성화됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 다시 스크롤을 시작하려면 손가락을 들었다 놨다 해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 실제로는 사용자의 현재 드래그를 종료할 뿐 스크롤 뷰가 현재 이 상태일 경우 감속을 즉시 중지하지는 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위해서는 허용된 답변 편집이 거의 최선의 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[scrollview setContentOffset: scrollview.contentOffset animated:false];
&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;가장 깨끗한 방법은 UIScrollView를 서브클래스하고 자신만의 setContentOffset 메서드를 제공하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 메시지를 전달할 것입니다, 단지 당신이 당신의 컴퓨터를 켜지 않은 &lt;em papago-id=&quot;11-1&quot;&gt;경우&lt;/em&gt;에만.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;freeze&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부울 속성&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;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;BOOL freeze; // and the @property, @synthesize lines..

-(void)setContentOffset:(CGPoint)offset
{
    if ( !freeze ) [super setContentOffset:offset];
}
&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;scrollView.freeze = YES;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/1105647/deactivate-uiscrollview-decelerating&quot; papago-id=&quot;34-1&quot;&gt;UIScrollView 감속&lt;/a&gt; 중에 UIScrollView &lt;a href=&quot;https://stackoverflow.com/questions/1105647/deactivate-uiscrollview-decelerating&quot; papago-id=&quot;34-1&quot;&gt;비활성화&lt;/a&gt;라는 답변이 효과적이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
    [scrollView setContentOffset:scrollView.contentOffset animated:YES];
}
&lt;/code&gt;&lt;/pre&gt;&lt;h3 papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크롤 사용자 상호 작용만 비활성화합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(swift)&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;scrollView.isScrollEnabled = false
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;드래그 후 스크롤 애니메이션 중에는 비활성화합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(swift)&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;var scrollingByVelocity = false

func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
    if !scrollingByVelocity {
        scrollView.setContentOffset(scrollView.contentOffset, animated: false)
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트 5+&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;&lt;strong papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Extension을 사용하여&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;extension UIScrollView  {
    
    func stopDecelerating() {
        let contentOffset = self.contentOffset
        self.setContentOffset(contentOffset, animated: false)
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;39&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;    myScrollView.stopDecelerating()
    // your stuff
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;40-1&quot;&gt;Swift 4.2&lt;/strong&gt;에서는 이 기능을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   func killScroll() {
    self.scrollView.isScrollEnabled = false;
    self.scrollView.isScrollEnabled = true;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;... 내선으로:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;extension UIScrollView {
    func killScroll() {
        self.isScrollEnabled = false;
        self.isScrollEnabled = true;

    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컬렉션 뷰에서 이 메서드를 사용해 보았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;self.collectionView.collectionViewLayout.finalizeCollectionViewUpdates()&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크롤 뷰 내의 특정 UIView가 스와이프 중에 터치의 소스인 경우에만 스크롤을 비활성화하고 싶었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;UIView를 UIScrollView 밖으로 이동하려면 상당한 리팩토링이 필요했을 것입니다. 복잡한 뷰 계층 구조를 가지고 있었기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 해결하기 위해 스크롤 방지를 원하는 하위 보기에 UIP PanGesture Recognizer를 하나 추가했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이  Recognizer는 UI PanGesture Recognizer를.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;cancelsTouchesInView&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 UIScrollView의 panGesture가 활성화되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;약간의 '핵'이지만, 아주 쉬운 변화이며, XIB나 스토리보드를 사용하는 경우에는 팬 제스처를 문제의 서브뷰로 끌어오기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;h2&gt;&lt;strong papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트 5, Xcode 13&lt;/font&gt;&lt;/strong&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 사용자가 내부에 스크롤 뷰와 이미지를 가지고 있고, 사용자가 내부의 프리 스크롤 방지 이미지를 줌하기 시작하면 스크롤 뷰와 컨텐츠 오프셋의 위임 기능을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;48-1&quot;&gt;scrollView.delegate&lt;/strong&gt; = &lt;strong papago-id=&quot;48-1&quot;&gt;self&lt;/strong&gt;를 잊지 마십시오. 전체 코드가 필요한 경우 My code:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private var contentOffsetHolder: CGPoint = CGPoint(x: 0, y: 0)
    
    func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer&amp;lt;CGPoint&amp;gt;) {
        contentOffsetHolder = scrollView.contentOffset
        
    }
    
    func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
        scrollView.setContentOffset(contentOffsetHolder, animated:false)
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3410777/how-can-i-programmatically-force-stop-scrolling-in-a-uiscrollview&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>iphone</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1398</guid>
      <comments>https://newsource.tistory.com/1398#entry1398comment</comments>
      <pubDate>Sun, 22 Oct 2023 20:06:10 +0900</pubDate>
    </item>
    <item>
      <title>MySQL WITH RECURIC을 사용하여 계정의 계층도를 어떻게 수행합니까?</title>
      <link>https://newsource.tistory.com/1397</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL WITH RECURIC을 사용하여 계정의 계층도를 어떻게 수행합니까?&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;저는 인접 모델을 사용하여 일반적인 쿼리와 보고서를 구현하기 위해 WITH RECURIC을 사용하는 방법을 이해하는 데 어려움을 겪고 있습니다. 여기서 하나의 레코드는 &quot;슈퍼&quot; 레코드를 의미합니다.&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;동일한 테이블에 외래 키인 필드가 있는 InnoDB 테이블이 여러 개 있습니다.&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;예를 들어, 'general_journal' table holding(그 중에서도)으로 2부제 회계 시스템을 구현했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Amount&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;Source&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;Destination&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;뒤의 두 열은 계층 구조로 배열된 표준 7자리 계정 번호를 사용하는 '계정' 표를 참조합니다.&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;ID&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'1000000' 포함,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Super&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NULL 포함, 그리고&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Name&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'자산'을 포함하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음에 '1000010' 같은 다른 행이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ID&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;), '1000000' (&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Super&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;Name&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 및 '1000011'().&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ID&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;), '1000010' (&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Super&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;Name&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 여러 하위 계정이 각자의 합계('일반 저널'의 합계)를 나타내는 표준 재무제표에 대해 표준 &quot;대차대조표&quot;와 &quot;손익&quot; 보고서를 만드는 방법에 대해 난처합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Amount&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;Source&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;Destination&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;account), 그리고 각 슈퍼 계정은 포함된 모든 하위 계정 롤업의 합계를 보여줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 곤란하게 생각하는 또 다른 예는 우리 비영리 협동조합이 동물을 사육한다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각각의 동물 기록은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ID&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 들판들&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Dam&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Sire&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 동물의 어미와 아버지의 신분증을 각각 포함하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 정보가 어떻게 '가계목' 같은 보고서로 표현될 수 있는지 알 수가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 발견한 예들은 이중적인 상황을 보여주기 위해 쉽게 바뀌지 않는 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MariaDB 10.2.13을 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그것을 샅샅이 뒤지고, 재귀적인 예들을 찾아봤지만, 뭔가가 제 머리 속을 헤집지 못하고 있어요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시간이 길어지고 있지만 도움이 된다면 스키마와 샘플 데이터를 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 조언이라도 해주셔서 감사합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/53965434/how-do-you-do-a-hierarchical-chart-of-accounts-using-mysql-with-recursive&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1397</guid>
      <comments>https://newsource.tistory.com/1397#entry1397comment</comments>
      <pubDate>Sun, 22 Oct 2023 20:06:02 +0900</pubDate>
    </item>
    <item>
      <title>WebKitFormBoundary는 무엇을 의미합니까?</title>
      <link>https://newsource.tistory.com/1396</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WebKitFormBoundary는 무엇을 의미합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/danialfarid/ng-file-upload 을 이용해서 파일 업로드를 하고 있는데 실제로 파일을 보내는 건지 아닌지 모르겠어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이로드에는 이렇게만 적혀있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-none prettyprint-override&quot;&gt;&lt;code&gt;------WebKitFormBoundaryaym16ehT29q60rUx
Content-Disposition: form-data; name=&quot;file&quot;; filename=&quot;webfonts.zip&quot;
Content-Type: application/zip


------WebKitFormBoundaryaym16ehT29q60rUx--
&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;업로드되고 있는 것처럼 보이지만 POST가 즉시 복귀하고 일종의 파일 스트림을 볼 수 있을 것으로 기대했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 된 거죠, 파일을 보내는 건가요, 안 보내는 건가요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다중 부분 메시지의 각 항목은 경계 마커로 구분됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹킷 기반 브라우저들은 그 경계의 이름으로 &quot;WebKitFormBoundary&quot;를 넣었습니다.&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;개발자 도구의 Network(네트워크) 탭에는 다중 부분 메시지 리포트에 파일 데이터가 표시되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;너무 클 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 안에 있는 것을 정확하게 모니터링하려면 &lt;a href=&quot;https://www.charlesproxy.com/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;Charles Proxy&lt;/a&gt;와 같은 도구를 사용하여 대신 요청을 감시합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포스트 방식으로 임시 이미지 또는 문서의 페이로드입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 php를 이용하여 위의 코드에 접근할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;?php

  print_r($_FILES); // to print the file type params
  $target_dir = &quot;/var/www/html/me_docs/&quot;;
  $date = date_create();
  $timestamp = date_timestamp_get($date);

  $filename = pathinfo($_FILES[&quot;filepond&quot;][&quot;name&quot;],PATHINFO_FILENAME);
  $extension = pathinfo($_FILES[&quot;filepond&quot;][&quot;name&quot;],PATHINFO_EXTENSION);
  $fullname = $filename.'_'.$timestamp.'.'.$extension; 

  $target_file_name = $target_dir.$fullname;

  if(move_uploaded_file($_FILES[&quot;filepond&quot;][&quot;tmp_name&quot;], $target_file_name))
  {     
    echo &quot;moving file success&quot;;
  }
  else
  {
    echo &quot;failed moving file&quot;;
  }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가에게 유용했으면 좋겠습니다, 감사합니다.&lt;/font&gt;&lt;/p&gt;&lt;p 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;URL : https://stackoverflow.com/questions/41188903/what-does-webkitformboundary-mean&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1396</guid>
      <comments>https://newsource.tistory.com/1396#entry1396comment</comments>
      <pubDate>Sun, 22 Oct 2023 20:05:56 +0900</pubDate>
    </item>
    <item>
      <title>그룹화되지 않은 Oracle 결과:</title>
      <link>https://newsource.tistory.com/1395</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그룹화되지 않은 Oracle 결과:&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle Exadata에 대한 아래 쿼리를 실행하고 있습니다.&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;Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64비트 프로덕션(파티셔닝, 실제 애플리케이션 클러스터, 자동 스토리지 관리, OLAP, 데이터 마이닝 및 실제 애플리케이션 테스트 옵션 포함)&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;select sum (t.sum_edw_trx_cnt) 
  from ( 
         select max(x.edw_trx_cnt)sum_edw_trx_cnt, 
                x.prctr_cell_nbr
           from p_prctr_smpl_pf_sp3 x
          where  mdld_prctr_flg = 'Y'
       )t;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 이후로 오라클에서 오류가 발생할 것으로 예상했습니다. 보시다시피 오류가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;group 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;내부 쿼리 &quot;t&quot;에 있는 절인데 이 쿼리가 실패할 것으로 예상했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각각 수백만 개의 기록이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;prctr_cell_nbr&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;prctr_cell&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 간단한 질문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 쿼리가 실행되고 출력이 반환됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;112&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내부 쿼리의 최대 카운트입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리에서 반환된 결과가 아니기 때문에 저는 이 행동이 혼란스럽습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이건 알려진 행동이 아닌 것 같은데, 최근에 본 사람 있나요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/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;Optimizer에 의한 &quot;select list pruning&quot; 적용 효과를 확인할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 버그로 간주됩니다. 인라인 뷰에 집계 함수가 포함되어 있고 메인 쿼리에 참조되지 않은 열이 없는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;group by&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;절, optimizer는 단순히 참조되지 않은 열을 제거하기로 결정합니다(SLP - select list pruning).&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;환경: Windows x64; Oracle 12.1.0.1.0&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-- test-table 
create table t1 as
  select level as col1
       , level as col2
    from dual
  connect by level &amp;lt;= 7;

-- gather statistic on t1 table. 
exec dbms_stats.gather_table_stats('', 'T1');
&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;이제 10053 추적이 활성화된 상태에서 버그 쿼리를 실행하고 커버 아래에서 어떤 일이 발생할지 알아보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;alter session set tracefile_identifier='no_group_by';

alter session set events '10053 trace name context forever';

select /*+ qb_name(outer) */ col1
  from (
         select /*+ qb_name(inner) */ max(col1) as col1
              , col2
           from t1
       );


      COL1
----------
         7 

alter session set events '10053 trace name context off';
&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;ORA-00937&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;OPTIMIZER INFORMATION

******************************************
----- Current SQL Statement for this session (sql_id=d14y7zuxvvfbw) -----
select /*+ qb_name(outer)  */ col1
  from (
         select /*+ qb_name(inner)*/max(col1) as col1
              , col2
           from t1
       )
*******************************************
.....

Query transformations (QT)
**************************
....
SVM: SVM bypassed: Single grp set fct (aggr) without group by.

/* That's where we lose our COL2 */

SLP: Removed select list item COL2 from query block INNER
query block OUTER (#0) unchanged

....

Final query after transformations:******* UNPARSED QUERY IS *******
SELECT /*+ QB_NAME (&quot;OUTER&quot;) */ &quot;from$_subquery$_001&quot;.&quot;COL1&quot; &quot;COL1&quot; 
  FROM  (SELECT /*+ QB_NAME (&quot;INNER&quot;) */ MAX(&quot;T1&quot;.&quot;COL1&quot;) &quot;COL1&quot; 
           FROM &quot;HR&quot;.&quot;T1&quot; &quot;T1&quot;) &quot;from$_subquery$_001&quot;
&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;_query_rewrite_vop_cleanup&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;false&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그러나 운영 환경에서 이 매개 변수를 설정해야 하는 경우에는 당연히 오라클 지원부에 문의해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;alter session set &quot;_query_rewrite_vop_cleanup&quot;=false;
session altered

select /*+ qb_name(outer)  */ col1
  from (
         select /*+ qb_name(inner) */ max(col1) as col1
              , col2
           from t1
       );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Error report -
SQL Error: ORA-00937: not a single-group group function
00937. 00000 -  &quot;not a single-group group function&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 우리가 추가할 때는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;group by&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;clause, 쿼리가 예상대로 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select /*+ qb_name(outer) */ col1
  from (
         select /*+ qb_name(inner) */ max(col1) as col1
              , col2
           from t1
          group by col2
       );
&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;COL1
----------
         1 
         6 
         2 
         4 
         5 
         3 
         7 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MOS에 액세스할 수 있는 경우 &lt;a href=&quot;https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=17137722185027&amp;amp;id=1589317.1&amp;amp;displayIndex=11&amp;amp;_afrWindowMode=0&amp;amp;_adf.ctrl-state=13q79ssqhl_298#FIX&quot; rel=&quot;nofollow&quot; papago-id=&quot;24-1&quot;&gt;1589317.1&lt;/a&gt;, &lt;a href=&quot;https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=576941298744414&amp;amp;id=16989676.8&amp;amp;displayIndex=10&amp;amp;_afrWindowMode=0&amp;amp;_adf.ctrl-state=17tnb17ah8_441&quot; rel=&quot;nofollow&quot; papago-id=&quot;24-3&quot;&gt;16989676.8&lt;/a&gt;(Bug 16989676 - 12.1.0.2 릴리스에서 수정되어야 함), &lt;a href=&quot;https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=17143777600666&amp;amp;id=8945586.8&amp;amp;displayIndex=12&amp;amp;_afrWindowMode=0&amp;amp;_adf.ctrl-state=13q79ssqhl_335&quot; rel=&quot;nofollow&quot; papago-id=&quot;24-5&quot;&gt;Bug 8945586&lt;/a&gt; 노트를 살펴보십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조항별 그룹을 제외하면 결과가 정확하지 않을 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 쿼리에 의한 결과는 내부 쿼리가 열별 그룹을 제외하는 것과 같은 단일 레코드를 생성할 때만 정확합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-- 클래스별 그룹이 없으며 Oracle이 묵묵히 그룹별 그룹을 무시합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;-- inner 쿼리를 실행하고 max numbre를 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;카운트 = 1을 나타내는 출력 참조&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;합계 선택(t.sum_edw_trx_cnt), 카운트(1)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택max(x.edw_trx_cnt)sum_edw_trx_cnt, x.prctr_cell_nbr&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;from p_prctr_smpl_pf_sp3 x&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 x.mdld_prctr_flg = 'Y'&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;)t;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SUM(T)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SUM_EDW_TRX_CNT) 카운트(1)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;----------------------------------&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;112                     1&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;`&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;-- 다음은 절별 그룹이 있는 쿼리입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;-- 셀 수는 카운트로 표시되며 edw_trx_cnt의 합은&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;-- 예상대로 19838749.&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;합계 선택(t.sum_edw_trx_cnt), 카운트(1)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택max(x.edw_trx_cnt)sum_edw_trx_cnt, x.prctr_cell_nbr&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;from p_prctr_smpl_pf_sp3 x&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 x.mdld_prctr_flg = 'Y'&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;x.prctr_cell_nbr로 그룹화&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;)t;'&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SUM(T)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SUM_EDW_TRX_CNT) 카운트(1)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;----------------------------------&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;19838749               14106326&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;/pre&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/27322566/oracle-result-without-group-by&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>newsource</author>
      <guid isPermaLink="true">https://newsource.tistory.com/1395</guid>
      <comments>https://newsource.tistory.com/1395#entry1395comment</comments>
      <pubDate>Sun, 22 Oct 2023 20:05:49 +0900</pubDate>
    </item>
  </channel>
</rss>