<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>closeapi</title>
    <link>https://closeapi.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Wed, 27 May 2026 22:19:22 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>closeapi</managingEditor>
    <item>
      <title>팬더 데이터 프레임에서 선택한 값이 목록에 있는지 확인하는 방법은 무엇입니까?</title>
      <link>https://closeapi.tistory.com/780</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;b&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/12096252/use-a-list-of-values-to-select-rows-from-a-pandas-dataframe&quot; dir=&quot;ltr&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;값 목록을 사용하여 Pandas 데이터 프레임에서 행 선택&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(8개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;닫힘&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;span class=&quot;relativetime&quot; title=&quot;2023-02-15 20:25:46Z&quot; papago-attr-id=&quot;1&quot;&gt;7개월 전&lt;/span&gt;에.&lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보기 흉함:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df_cut = df_new[
             (
             (df_new['l_ext']==31) |
             (df_new['l_ext']==22) |
             (df_new['l_ext']==30) |
             (df_new['l_ext']==25) |
             (df_new['l_ext']==64)
             )
            ]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작동하지 않음:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df_cut = df_new[(df_new['l_ext'] in [31, 22, 30, 25, 64])]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위의 &quot;문제&quot;의 우아하고 효과적인 해결책이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://pandas.pydata.org/pandas-docs/dev/generated/pandas.Series.isin.html#pandas.Series.isin&quot; rel=&quot;noreferrer&quot;&gt;사용처&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df_new[df_new['l_ext'].isin([31, 22, 30, 25, 64])]
&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_values = [31, 22, 30, 25, 64]
df_cut = df_new.query('l_ext in @select_values')
&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/18250298/how-to-check-if-a-value-is-in-the-list-in-selection-from-pandas-data-frame&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>DataFrame</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/780</guid>
      <comments>https://closeapi.tistory.com/780#entry780comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:55:30 +0900</pubDate>
    </item>
    <item>
      <title>워드프레스 - 사용자 정의 사용자 프로파일 필드 저장</title>
      <link>https://closeapi.tistory.com/779</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;php 하지만 어떤 이유로 입력된 데이터가 저장되지 않습니다...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//** CUSTOM USER META **//

add_action( 'show_user_profile', 'my_show_extra_profile_fields' );
add_action( 'edit_user_profile', 'my_show_extra_profile_fields' );

function my_show_extra_profile_fields( $user ) { ?&amp;gt;
    &amp;lt;h3&amp;gt;Extra profile information&amp;lt;/h3&amp;gt;
    &amp;lt;table class=&quot;form-table&quot;&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;th&amp;gt;&amp;lt;label for=&quot;club&quot;&amp;gt;Club You Support&amp;lt;/label&amp;gt;&amp;lt;/th&amp;gt;
            &amp;lt;td&amp;gt;
                &amp;lt;input type=&quot;text&quot; name=&quot;club&quot; id=&quot;club&quot; value=&quot;&amp;lt;?php echo esc_attr( get_the_author_meta( 'club', $user-&amp;gt;ID ) ); ?&amp;gt;&quot; class=&quot;regular-text&quot; /&amp;gt;&amp;lt;br /&amp;gt;
            &amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
    &amp;lt;/table&amp;gt;
&amp;lt;?php }

   add_action( 'personal_options_update', 'my_save_extra_profile_fields' );
   add_action( 'edit_user_profile_update', 'my_save_extra_profile_fields' );

   function my_save_extra_profile_fields( $user_id ) {
       update_usermeta( $user_id, 'club', sanitize_text_field( $_POST['club']) );
   } 
&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 papago-translate=&quot;translated&quot;&gt;위의 코드를 바탕으로 아래의 코드를 아래의 코드에 내려보시기 바랍니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;functions.php&lt;/code&gt;&lt;font 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-php prettyprint-override&quot;&gt;&lt;code&gt;function my_show_extra_profile_fields {
    $user_contact_method['club'] = 'Club You Support';
    return $user_contact_method;
}
add_filter( 'user_contactmethods', 'my_show_extra_profile_fields' );
&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;the_author_meta('club');&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/29912342/wordpress-saving-custom-user-profile-fields&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/779</guid>
      <comments>https://closeapi.tistory.com/779#entry779comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:55:23 +0900</pubDate>
    </item>
    <item>
      <title>문자열을 angularjs에서 날짜로 구문 분석하는 방법</title>
      <link>https://closeapi.tistory.com/778</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열을 angularjs에서 날짜로 구문 분석하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;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;2016-05-01&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;$scope.parseDate = function (date) {
  return new Date(Date.parse(date));
} 
&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;{{ parseDate(item.startDate) }}`
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 브라우저에서 결과는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;2016-07-12T00:00:00.000Z&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;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서버: 2016-05-01과 같은 형식으로 문자열을 구문 분석해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;간단한 필터 기능이 필요합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쓰기 싫어요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;moment.js&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 저의 백엔드 플랫폼은 자바스크립트입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;html에서 사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{{item.startDate | date: 'MMM dd, yyyy'}}
&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;아래와 같은 JS 필터.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.parseDate = function (date) {
    $filter('date')(new Date(Date.parse(date)), 'yyyy-MM-dd');
} 
&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(date) {
   var d = new Date(Date.parse(date));
   return d.getDate() + &quot; &quot; + d.getMonth() + &quot; &quot; + d.getFullYear();
}
&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;app.filter('mydate', function () {
    return function (input) {
        if (input) {

        var d = new Date(input);
        return d.getDate() + &quot; &quot; + d.getMonth() + &quot; &quot; + d.getFullYear();

    }
};
});
&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;font papago-translate=&quot;translated&quot;&gt;{{ parseDate(item.startDate) | 날짜: 'yyyyyy-MM-dd'}&lt;/font&gt;&lt;/pre&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;date&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Angular가 제공하는 필터.&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;{{ date_variable | date:'dd-mm-yyyy' }}
&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/46279603/how-to-parse-string-into-date-in-angularjs&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/778</guid>
      <comments>https://closeapi.tistory.com/778#entry778comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:55:17 +0900</pubDate>
    </item>
    <item>
      <title>스코프에 대한 각도 ng-init 패스 요소</title>
      <link>https://closeapi.tistory.com/777</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스코프에 대한 각도 ng-init 패스 요소&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 ng-init가 바인딩되어 있는 현재 요소를 얻을 수 있는 방법이 있습니까?&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;div ng-init=&quot;doSomething($element)&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;ng-click 할 수 있는 방법이 있다고 생각하지만 ng-init을 사용해서는 이렇게 할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ng-click=&quot;doSomething($event)&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;$scope.doSomething = function(e){ 
    var element = angular.element(e.srcElement); 
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ng-init으로 이걸 어떻게 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ng-app='app' ng-controller=&quot;Ctrl&quot;&amp;gt;
    &amp;lt;div my-dir&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바스크립트:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var app = angular.module('app', [], function () {});

app.controller('Ctrl', function ($scope) {
    $scope.doSomething = function (e) {
        alert(e);
    };
});

app.directive('myDir', function () {
    return function (scope, element, attrs) {
        scope.doSomething(element);
    };
});
&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;element&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DOM 개체가 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지 마세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;@CodeHater가 말했듯이, 지시에 따라 DOM 조작을 처리하는 것이 컨트롤러를 요소와 연결하는 것보다 더 나은 해결책입니다.&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;또한 $scope 객체에 요소를 추가하면 이 객체를 다른 곳에서도 사용할 수 있고 필요할 때마다 찾을 필요가 없습니다.&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/22292832/angular-ng-init-pass-element-to-scope&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/777</guid>
      <comments>https://closeapi.tistory.com/777#entry777comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:55:10 +0900</pubDate>
    </item>
    <item>
      <title>Mysql 도커 컨테이너가 계속 다시 시작되고 있습니다.</title>
      <link>https://closeapi.tistory.com/776</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Mysql 도커 컨테이너가 계속 다시 시작되고 있습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컨테이너가 계속 다시 시작됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 노력했다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도커- compose 다운 -v&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도커 볼륨 rm&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아까는 컨테이너가 잘 작동하고 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로그&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;2021-03-27 13:16:08+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started.

2021-03-27 13:16:08+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'

2021-03-27 13:16:08+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started.

2021-03-27 13:16:08+00:00 [ERROR] [Entrypoint]: MYSQL_USER=&quot;root&quot;, MYSQL_USER and MYSQL_PASSWORD are for configuring a regular user and cannot be used for the root user

Remove MYSQL_USER=&quot;root&quot; and use one of the following to control the root user password:

- MYSQL_ROOT_PASSWORD

- MYSQL_ALLOW_EMPTY_PASSWORD

- MYSQL_RANDOM_ROOT_PASSWORD
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도커-작곡.yml&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt; mysql:
    image: mysql:8.0
    ports:
      - 3306:3306
    expose:
      - &quot;3306&quot;
    cap_add:
      - SYS_NICE # CAP_SYS_NICE
    volumes:
      - ./cache/mysql:/var/lib/mysql
      - ./conf-mysql.cnf:/etc/mysql/conf.d/mysql.cnf
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_PASSWORD=root
      - MYSQL_USER=root
      - MYSQL_DATABASE=mydb
    restart: unless-stopped
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제거만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MYSQL_USER&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 그것은 잘 작동할 것입니다. 왜냐하면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;root&lt;/code&gt;&lt;font 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;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PS. 이전에는 오류가 발생하지 않고 작동했었기 때문에 새로운 도커 버전에서는 문제가 있는 것 같습니다.&lt;/font&gt;&lt;/em&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;root&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이미 mysql로 작성되어 있을 때 예약되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;MYSQL_USER&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 이름이어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;root&lt;/code&gt;&lt;font 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;docker-compose.yml 파일로 이동하여 다음을 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;MYsql_USER:root&quot;에서 &quot;MYsql_ROOT_USER:root&quot;으로 이동한 다음 이전 파일을 삭제합니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;MYQL_PASSERORD:YourPassord&quot;에서 &quot;MYQL_ROOT_PASSERORD:YourPassord&quot;로 이동한 다음 이전 암호를 삭제합니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 제 환경설정이 있습니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;database_server:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;image: mysql:8.0
       container_name: mysql
       restart: always
       environment:
         MYSQL_DATABASE: DB_epraca
         MYSQL_ROOT_USER: root
         MYSQL_ROOT_PASSWORD: Password
         MYSQL_ROOT_HOST: localhost
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최근에 공식적인 mysql 도커가 이 문제를 일으킨 방법이 변경되었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자세한 사항은 &lt;a href=&quot;https://github.com/docker-library/mysql/pull/749&quot; rel=&quot;noreferrer&quot;&gt;github&lt;/a&gt;에서 이 &lt;a href=&quot;https://github.com/docker-library/mysql/pull/749&quot; rel=&quot;noreferrer&quot;&gt;PR&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;MYSQL_USER=root&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 당신의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker-compose.yaml&lt;/code&gt;&lt;font 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;mysql:
    image: mysql:8.0
    ports:
      - 3306:3306
    expose:
      - &quot;3306&quot;
    cap_add:
      - SYS_NICE # CAP_SYS_NICE
    volumes:
      - ./cache/mysql:/var/lib/mysql
      - ./conf-mysql.cnf:/etc/mysql/conf.d/mysql.cnf
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=mydb
    restart: unless-stopped
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.env 파일만 업데이트합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DB_USERNAME=sail
DB_PASSWORD=password
&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/66831863/mysql-docker-container-keeps-restarting&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/776</guid>
      <comments>https://closeapi.tistory.com/776#entry776comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:53:55 +0900</pubDate>
    </item>
    <item>
      <title>자체 마감 태그 사용 시 AngularJS 요소 지시사항이 표시되지 않음</title>
      <link>https://closeapi.tistory.com/775</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자체 마감 태그 사용 시 AngularJS 요소 지시사항이 표시되지 않음&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;html 파일에 지시사항이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;add /&amp;gt;
&amp;lt;back /&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;.directive('add', ['$window', ...
&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;.directive('back', ['$window', 
&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;.directive('addPlayer', ['$window', ...

&amp;lt;add_player /&amp;gt;
&amp;lt;back /&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;add:player /&amp;gt;
&amp;lt;back /&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;add-player /&amp;gt;  regular dash
&amp;lt;back /&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;add-player&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이후의 내용은 모두 표시되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;왜 그런지 아시겠어요?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편집:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저도 똑같은 행동을 하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://plnkr.co/edit/cpP4c2TyZwv5Y4BrNUBb?p=preview&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://plnkr.co/edit/cpP4c2TyZwv5Y4BrNUBb?p=preview&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 질문을 잠재우기 위해, 나는 Angular의 공식적인 성명을 인용하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JS팀: (sic)&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 사양이 정의하는 자체 closing 또는 void 요소는 브라우저 파서에 매우 특별합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;독자적인 요소를 만들 수 없으므로 사용자 지정 요소의 경우 void가 아닌 요소를 고수해야 합니다(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;foo&amp;gt;&amp;lt;/foo&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각도는 변경할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;- 이고르 미나르&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;sup&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출처 : https://github.com/angular/angular.js/issues/1953#issuecomment-13135021&lt;/font&gt;&lt;/sup&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/angular/angular.js/issues/1953&quot; rel=&quot;noreferrer&quot;&gt;Angular&lt;/a&gt;의 나머지 대화를 따릅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/angular/angular.js/issues/1953&quot; rel=&quot;noreferrer&quot;&gt;JS issue&lt;/a&gt;의 사용 가능성을 논의하는 &lt;a href=&quot;https://github.com/angular/angular.js/issues/1953&quot; rel=&quot;noreferrer&quot;&gt;페이지&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XHTML&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;브라우저에서 허용 가능한 자체 closing 태그를 사용하여 컨텐츠를 전송할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 Angular에서는 완전히 지원되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JS.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML 규격에서는 무효가 아닌 요소에 대한 자체 닫기 태그를 허용하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML 구문 규칙&lt;/font&gt;&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소에는 시작 위치를 나타내는 시작 태그가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;무효가 아닌 요소에는 종료 위치를 나타내는 종료 태그가 있습니다.&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;ol&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;&amp;lt;&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;li&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;선택적으로, 요소가 공백 요소인 경우에만 존재할 수 있는 &quot;/&quot; 문자입니다.&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;&amp;gt;&quot; 문자.&lt;/font&gt;&lt;/li&gt; 
 &lt;/ol&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML5 사양에는 &lt;a href=&quot;http://www.w3.org/TR/html-markup/syntax.html#void-element&quot; rel=&quot;noreferrer&quot;&gt;void 요소&lt;/a&gt;의 개수가 제한되어 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전체 목록은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;area&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;base&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;br&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;col&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;command&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;embed&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;hr&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;img&lt;/code&gt;&lt;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;code&gt;keygen&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;link&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;meta&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;param&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;source&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;track&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wbr&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정말 무슨 일이 일어나고 있는 거지?&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;브라우저의 파서는 사양을 들어야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;무효가 아닌 요소 태그에 슬래시를 사용하는 것은 유효하지 않으므로 파서는 끝을 무시합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;back /&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수단&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;back&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 따라서 다른 요소가 작동하지 않도록 하는 첫 번째 요소를 닫지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://plnkr.co/edit/cpP4c2TyZwv5Y4BrNUBb?p=preview&quot; rel=&quot;noreferrer&quot;&gt;Plunker&lt;/a&gt;에는 다음이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
   &amp;lt;back&amp;gt;&amp;lt;/back&amp;gt;
   Self closing &amp;lt;back /&amp;gt;
   Self closing &amp;lt;back /&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로 파싱되는.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
   &amp;lt;back&amp;gt;&amp;lt;/back&amp;gt;
   Self closing &amp;lt;back&amp;gt;
      Self closing &amp;lt;back&amp;gt;
    &amp;lt;/back&amp;gt;
  &amp;lt;/back&amp;gt;
&amp;lt;/body&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;template: '&amp;lt;button&amp;gt;back&amp;lt;/button&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;back&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;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
   &amp;lt;back&amp;gt;
       &amp;lt;button&amp;gt;back&amp;lt;/button&amp;gt;
   &amp;lt;/back&amp;gt;
   Self closing &amp;lt;back&amp;gt;
       &amp;lt;button&amp;gt;back&amp;lt;/button&amp;gt;
   &amp;lt;/back&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그럼 난 어쩌라는 거야?&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;back&amp;gt;&amp;lt;/back&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 사람들을 위해 그리고 그것은 잘 작동할 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 요소 특성을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;div back=&quot;attr&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자세한 내용은 다음 토론을 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/3558119/are-self-closing-tags-valid-in-html5&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Q: HTML5에서 셀프 클로징 태그가 유효합니까?&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/angular/angular.js/issues/1953&quot; rel=&quot;noreferrer&quot;&gt;AngularJS &lt;/a&gt;- 자체 &lt;a href=&quot;https://github.com/angular/angular.js/issues/1953&quot; rel=&quot;noreferrer&quot;&gt;마감 태그가 있는 사용자&lt;/a&gt; 지정 &lt;a href=&quot;https://github.com/angular/angular.js/issues/1953&quot; rel=&quot;noreferrer&quot;&gt;지시문은 태그 형제를 캡처&lt;/a&gt;합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/angular/angular.js/issues/1237&quot; rel=&quot;noreferrer&quot;&gt;AngularJS &lt;/a&gt;- 자동 &lt;a href=&quot;https://github.com/angular/angular.js/issues/1237&quot; rel=&quot;noreferrer&quot;&gt;닫기 지시가 항상 렌더링되지는 않습니다&lt;/a&gt;.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최근에 똑같은 문제가 생겨서 자기닫기 태그를 사용하지 않아서 해결했어요. 시도해보세요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;add-player&amp;gt;&amp;lt;/add-player&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자기 closing 버전 대신에.&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;과거에 빠르게 조사를 해보았지만 HTML/XHTML 쪽에서 아무것도 찾지 못했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Angular의 버그/제한?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Angular v15.1.0은 이제 사용자 지정 요소의 자체 닫힘 태그에 지원이 추가되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;확인해보세요: https://github.com/angular/angular/blob/main/CHANGELOG.md&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/18103183/angularjs-element-directives-not-displaying-when-using-self-closing-tags&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/775</guid>
      <comments>https://closeapi.tistory.com/775#entry775comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:53:47 +0900</pubDate>
    </item>
    <item>
      <title>가상 시스템에서 작동하지 않는 캐스케이드에서 삭제</title>
      <link>https://closeapi.tistory.com/774</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;따라서 로컬 호스트에서 &quot;프로젝트&quot;를 삭제하면 해당 프로젝트에 연결된 모든 &quot;태스크&quot;가 삭제되지만 VM에서는 작동하지 않으며 페이지를 새로 고치면 오류만 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;Trying to get property of non-object&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로컬 호스트에서는 xampp를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Project Controller의 Delete 함수:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public function destroy(Project $project)
    {
        $project-&amp;gt;delete();
        return redirect('/projects')-&amp;gt;with('delete','');
    }
&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 tasks (){
        return $this-&amp;gt;hasMany('App\Task','proj_id');
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작업 모델:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public function project(){

        return $this-&amp;gt;belongsTo('App\Project','proj_id');
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;뭐가 도움이 될지 모르니까 필요한 정보가 있으면 물어보세요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;프로젝트 모델&lt;/strong&gt;에 이 코드를 추가하여 프로젝트를 제거하기 전에 관련 작업을 제거합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;protected static function boot ()
{
    parent::boot();

    static::deleting (function ($project) {
        $project-&amp;gt;tasks()-&amp;gt;delete();
    });
}
&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/56022170/delete-on-cascade-not-working-on-virtual-machine&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/774</guid>
      <comments>https://closeapi.tistory.com/774#entry774comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:53:24 +0900</pubDate>
    </item>
    <item>
      <title>href와 on click to HTML 태그 모두 포함</title>
      <link>https://closeapi.tistory.com/773</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;href와 on click to HTML &lt;a&gt;태그&lt;/a&gt; 모두 포함&lt;/font&gt;&lt;/h2&gt;&lt;a&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;www.mysite.com&quot; onClick=&quot;javascript.function();&quot;&amp;gt;Item&amp;lt;/a&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;href&lt;/code&gt;&lt;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;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;translated&quot;&gt;약간의 구문 변경과 함께 필요한 것을 이미 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a href=&quot;www.mysite.com&quot; onclick=&quot;return theFunction();&quot;&amp;gt;Item&amp;lt;/a&amp;gt;

&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
    function theFunction () {
        // return true or false, depending on whether you want to allow the `href` property to follow through or not
    }
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의 기본 동작입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;a&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;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;href&lt;/code&gt;&lt;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;code&gt;href&lt;/code&gt;&lt;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;code&gt;false&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 이벤트 취소(또는 이벤트가 차단되지 않았음)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/a&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://jquery.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;jQuery&lt;/a&gt;를 &lt;a&gt;사용&lt;/a&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;/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;#myHref&quot;).on('click', function() {
  alert(&quot;inside onclick&quot;);
  window.location = &quot;http://www.google.com&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/2.1.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;a href=&quot;#&quot; id=&quot;myHref&quot;&amp;gt;Click me&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 달성하려면 html을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;a href=&quot;www.mysite.com&quot; onclick=&quot;make(event)&quot;&amp;gt;Item&amp;lt;/a&amp;gt;

&amp;lt;script&amp;gt;
    function make(e) {
        // ...  your function code
        // e.preventDefault();   // use this to NOT go to href site
    }
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://jsfiddle.net/qe9g8s5h/14/&quot; rel=&quot;noreferrer&quot;&gt;여기&lt;/a&gt; 작동 &lt;a href=&quot;https://jsfiddle.net/qe9g8s5h/14/&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;jQuery는 필요없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/5871640/why-is-using-onclick-in-html-a-bad-practice&quot;&gt;&lt;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;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 예제에서는 순수 브라우저 자바스크립트를 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 클릭 핸들러가 탐색 전에 평가를 수행하는 것으로 표시되므로 탐색을 취소하고 원하는 경우 직접 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;a id=&quot;myButton&quot; href=&quot;http://google.com&quot;&amp;gt;Click me!&amp;lt;/a&amp;gt;
&amp;lt;script&amp;gt;
    window.addEventListener(&quot;load&quot;, () =&amp;gt; {
        document.querySelector(&quot;#myButton&quot;).addEventListener(&quot;click&quot;, e =&amp;gt; {
            alert(&quot;Clicked!&quot;);
            // Can also cancel the event and manually navigate
            // e.preventDefault();
            // window.location = e.target.href;
        });
    });
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;button&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;일반적으로 실제 URL로 이동할 때는 하이퍼링크만 사용해야 합니다.&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;출처: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#onclick_events&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;앵커 요소는 페이지 새로 고침을 방지하기 위해 href를 # 또는 javascript:void(0)로 설정한 후 클릭 이벤트를 청취함으로써 가짜 버튼으로 악용되는 경우가 많습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 boghref 값은 링크를 복사/드래그하거나, 새 탭/윈도우에서 링크를 열거나, 북마크를 지정하거나, JavaScript가 로드 중이거나, 오류가 발생하거나, 사용하지 않도록 설정할 때 예기치 않은 동작을 발생시킵니다.&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 papago-translate=&quot;translated&quot;&gt;그러나 의 기본 동작을 방지합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a href&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 링크를 따라 'manually'가 작동했습니다&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;https://example.com&quot; onClick=&quot;myFunction(event)&quot;&amp;gt;Link&amp;lt;/a&amp;gt;
&amp;lt;script&amp;gt;
function myFunction(event) {
    event.preventDefault();
    // do your thing here
    window.location.href = event.currentTarget.href;
}
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng-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;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;pre&gt;&lt;code&gt;&amp;lt;a href=&quot;www.mysite.com&quot; ng-click=&quot;return theFunction();&quot;&amp;gt;Item&amp;lt;/a&amp;gt;

&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
function theFunction () {
    // return true or false, depending on whether you want to allow 
    // the`href` property to follow through or not
 }
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/14867558/including-both-href-and-onclick-to-html-a-tag&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>javascript</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/773</guid>
      <comments>https://closeapi.tistory.com/773#entry773comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:53:18 +0900</pubDate>
    </item>
    <item>
      <title>WordPress REST API가 등록되지 않는 사용자 지정 끝점 만들기</title>
      <link>https://closeapi.tistory.com/772</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WordPress REST API가 등록되지 않는 사용자 지정 끝점 만들기&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;몇 가지 예를 따랐는데 사용자 지정 엔드포인트를 등록할 수 없는 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자 지정 플러그인을 만들고 있는데 사용자 지정 엔드포인트를 등록하려고 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 내 코드가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_action( 'init', 'setup_init' );


function setup_init() {

   add_action( 'rest_api_init', 'wpc_register_wp_api_endpoints' );

   function wpc_register_wp_api_endpoints() {

    register_rest_route( 'setup', '/client/menu', array(
        'methods' =&amp;gt; 'GET',
        'callback' =&amp;gt; 'menu_setup',
    ));
}

   function menu_setup($request_data){
       return 'hello world';
   }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;mysite.com/setup/client/menu 을 방문했는데 페이지를 찾을 수 없습니다 오류가 발생합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 mysite.com/wp-json/wp/v2/ 을 확인했는데 내 경로/종점이 등록되어 있지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;플러그인이 활성화되어 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 뭘 잘못하고 있나요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;엔드포인트를 등록하는 데 한 가지 작은 실수가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;선을 바꿉니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;register_rest_route( 'setup', '/client/menu'
&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;register_rest_route( 'setup/client', '/menu'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래는 귀하의 코드의 전체 부분입니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_action( 'init', 'setup_init' );


function setup_init() {

   add_action( 'rest_api_init', 'wpc_register_wp_api_endpoints' );

   function wpc_register_wp_api_endpoints() {

    register_rest_route( 'setup/client', '/menu', array(
        'methods' =&amp;gt; 'GET',
        'callback' =&amp;gt; 'menu_setup',
    ));
}

   function menu_setup($request_data){
       return 'hello world';
   }
}
&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/41943347/creating-custom-endpoint-for-wordpress-rest-api-not-registering&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/772</guid>
      <comments>https://closeapi.tistory.com/772#entry772comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:53:10 +0900</pubDate>
    </item>
    <item>
      <title>끈이 미쳐가고 있어요 제가 좀 더 여유를 주지 않으면요여기서 무슨 일이 일어나고 있는지 설명해 줄 사람?</title>
      <link>https://closeapi.tistory.com/771</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;끈이 미쳐가고 있어요 제가 좀 더 여유를 주지 않으면요&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 무슨 일이 일어나고 있는지 설명해 줄 사람?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;먼저, 저는 C/C++에 처음입니다. 저는 원래 PHP 개발자이기 때문에 변수를 마음대로 남용하도록 길러집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C는 엄격한 나라이고, 컴파일러들은 나를 여기서 별로 좋아하지 않아요. 나는 일을 처리하기 위해 규칙을 어기는 것에 익숙합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어쨌든, 이건 제 간단한 암호입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char IP[15] = &quot;192.168.2.1&quot;;
char separator[2] = &quot;||&quot;;   

puts( separator );
&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;||192.168.2.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;separator&lt;/code&gt;&lt;font 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 separator[3] = &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;||
&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;그 이유는 당신이 null-terminated 문자열을 얻을 수 있기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;separator&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;길이는 2로 강제됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;항상 null 터미네이터에 추가 문자를 할당해야 합니다.&lt;/font&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&gt;&lt;code&gt;N+1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성격.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 요구 사항을 위반하면 null-terminated 문자열이 필요한 모든 코드(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;puts()&lt;/code&gt;&lt;font 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 separator[] = &quot;||&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정확한 크기의 배열을 할당합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C의 문자열은 NUL-종료됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 두 문자로 구성된 문자열에 3바이트(문자의 경우 2개, 문자열의 끝을 나타내는 0바이트의 경우 3개)가 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예제에서는 배열 크기를 생략할 수 있으며 컴파일러는 올바른 양의 스토리지를 할당합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char IP[] = &quot;192.168.2.1&quot;;
char separator[] = &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;마지막으로, C가 아닌 C++로 코딩을 하고 있다면 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어쨌든 C++를 사용하는 경우 C 문자열 대신 std::string 클래스를 사용하는 것이 좋습니다. 특히 스크립트 언어 배경이 있는 사용자의 경우 훨씬 쉽고 오류가 발생하기 쉬운 IMHO입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 문자열 끝에 숨겨진 nul 문자 '\0'이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 그것을 위해 공간을 남겨야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네가 한다면.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char seperator[] = &quot;||&quot;;    
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2사이즈가 아닌 3사이즈의 끈을 받으실 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C에서 문자열은 null로 종료되기 때문입니다(끝은 0바이트로 표시됨).).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구분자를 두 문자의 배열로 선언하고 두 문자에 모두 0이 아닌 값을 지정하면 종단자가 없습니다!&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러므로 당신이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;puts&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열은 거의 모든 것이 끝에 부착될 수 있습니다(whatever는 배열의 끝을 지나 메모리에 저장됩니다). 이 경우에는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;IP&lt;/code&gt;&lt;font 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;font papago-translate=&quot;translated&quot;&gt;아래 댓글을 참고하세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열 길이를 3으로 만들면 여분의 바이트에 0이 들어 있어서 문자열이 종료됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 값이 초기화되지 않은 경우에는 실제로 무엇이든 포함할 수 있으므로 이러한 동작에 의존할 수 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;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;'\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;사실 한 글자가 더 깁니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;puts&lt;/code&gt;&lt;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;- IP 문자열 뒤에 하나씩 입력합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C에서 문자열은 끝에 (보이지 않는) null 바이트를 포함합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 null 바이트를 계산해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char ip[15] = &quot;1.2.3.4&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;ip&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;15자를 위한 충분한 공간이 있습니다. 14자의 &quot;일반 문자&quot;와 null 바이트.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;너무 짧습니다: 그래야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char ip[16] = &quot;1.2.3.4&quot;;&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ip[0] == '1';
ip[1] == '.';
/* ... */
ip[6] == '4';
ip[7] == '\0';
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지금까지 아무도 그것을 지적하지 않았기 때문에.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이와 같이 변수를 선언하면 문자열이 자동으로 null로 종료되므로 배열 크기를 어슬렁거리지 않아도 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const char* IP = &quot;192.168.2.1&quot;; 
const char* seperator = &quot;||&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 이 문자열들을 바꿀 생각은 없으리라 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 이미 언급했듯이 C++에서 안전한 방법은 std::string 클래스를 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C &quot;String&quot;은 항상 NULL로 끝나지만 문자 구분 기호[2] = &quot;||&quot;로 적으면 문자열에 지정하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 puts는 \0을 찾을 때까지 ned에서 이 \0을 예상합니다. 여기서 IP 주소의 끝에서 찾을 수 있는 위치를 볼 수 있습니다.&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;char seperator[2] = &quot;||&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;; 해당 문자 배열의 길이(끝에 null 포함)가 3이므로 정의되지 않은 동작을 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 위의 코드를 어떤 컴파일러로 컴파일했습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 g++로 컴파일을 했는데 위 줄을 오류로 표시하였습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C\C++의 &lt;a href=&quot;http://en.wikipedia.org/wiki/C_string&quot; rel=&quot;nofollow&quot;&gt;문자열&lt;/a&gt;은 null로 종료됩니다. 즉, 끝에 숨겨진 0이 있습니다.&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;{'|', '|', '\0'} = &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/5882772/string-going-crazy-if-i-dont-give-it-a-little-extra-room-can-anyone-explain-wh&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/771</guid>
      <comments>https://closeapi.tistory.com/771#entry771comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:53:03 +0900</pubDate>
    </item>
    <item>
      <title>Angular2 입력이 변경되면 동적 입력 필드가 포커스를 잃음</title>
      <link>https://closeapi.tistory.com/770</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Angular2 입력이 변경되면 동적 입력 필드가 포커스를 잃음&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;역동적인 형태를 만들고 있습니다. A.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;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 papago-translate=&quot;translated&quot;&gt;각 값은 문자열로 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;export class Field{
    name: string;
    values: string[] = [];
    fieldType: string;
    constructor(fieldType: string) {this.fieldType = fieldType;}
}
&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;addValue(field){
    field.values.push(&quot;&quot;);
}
&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;dropdown-values&quot; *ngFor=&quot;let value of field.values; let j=index&quot;&amp;gt;
    &amp;lt;input type=&quot;text&quot; class=&quot;form-control&quot; [(ngModel)]=&quot;field.values[j]&quot; [name]=&quot;'value' + j + '.' + i&quot;/&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;text-center&quot;&amp;gt;
    &amp;lt;a href=&quot;javascript:void(0);&quot; (click)=&quot;addValue(field)&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-plus-circle&quot; aria-hidden=&quot;true&quot;&amp;gt;&amp;lt;/i&amp;gt;&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;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;이것은 배열이 원시 유형일 때 발생합니다. 당신의 경우 a.&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;array. 이것은 사용하여 해결할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TrackBy&lt;/code&gt;&lt;font 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 *ngFor=&quot;let value of field.values; let i=index; trackBy:trackByFn&quot;&amp;gt;
    &amp;lt;input type=&quot;text&quot; [(ngModel)]=&quot;field.values[i]&quot;  /&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;
    &amp;lt;button (click)=&quot;addValue(field)&quot;&amp;gt;Click&amp;lt;/button&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;그리고 ts 파일에 함수를 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;trackByFn&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, (unique)을 반환합니다.&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&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;trackByFn(index: any, item: any) {
   return index;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 AngularJS에 대한 문제를 제외하고는 동일한 문제에 대한 &lt;a href=&quot;https://github.com/angular/angular.js/issues/13327&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;링크&lt;/strong&gt;&lt;/a&gt;입니다만, 문제는 당신의 것에 해당합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해당 페이지에서 가장 중요하게 발췌한 내용:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열을 반복하는 중이며 배열의 항목을 변경하는 중입니다(항목은 문자열이며, 이 문자열은 JS의 프리미티브이므로 &quot;값에 따라&quot; 비교됩니다).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 항목이 감지되면 DOM에서 이전 요소가 제거되고 새 요소가 생성됩니다(분명히 포커스가 맞지 않음).&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;TrackBy&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Angular는 고유 식별자에 따라 어떤 항목이 추가(또는 제거)되었는지 추적하고 변경된 항목만 생성 또는 소멸할 수 있으므로 입력 필드에 대한 초점을 잃지 않습니다 :)&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;[(ngModel)]=&quot;value.id&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 class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;div *ngFor=&quot;let thing of getThings()&quot; [attr.thingname]=&quot;thing.key&quot;&amp;gt;
  ... {{ applyThing(thing.value) }}
&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;export ThingComponent {
  ...

  //this.things = { a: { ... }, b: { ... }, c: { ... } }

  public getThings() {
    return Object.keys(this.things).map((key) =&amp;gt; {
      return {key: key, value: this.things[key] }
    })
  }
}
&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;@AJT_82에서 제시한 답변은 분명히 광고대로 정확하게 작동합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 필자의 경우에는 도우미 기능이 문제가 된 것이고,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getThings()&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;getThings()&lt;/code&gt;&lt;font 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 *ngFor=&quot;let thing of cachedThings&quot; [attr.thingname]=&quot;thing.key&quot;&amp;gt;
  ... {{ applyThing(thing.value) }}
&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;export ThingComponent {
  public cachedThings = getThings()
  ...

  //this.things = { a: { ... }, b: { ... }, c: { ... } }

  private getThings() {
    return Object.keys(this.things).map((key) =&amp;gt; {
      return {key: key, value: this.things[key] }
    })
  }
}
&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;cachedThings&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변경 감지기가 다시 rendering하도록 수동으로 업데이트해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;텍스트를 입력하면 각 ngOnChange 수신기가 실행되므로 ngFor 인덱스가 다시 렌더링되고 포커스가 손실됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 문제를 방지하기 위해 ngFor에 trackFn을 추가할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 주제에 대한 자세한 내용은 https://angular.io/api/core/TrackByFunction 을 참조하십시오.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제에 대한 코드 솔루션 아래:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 html 코드는 .ts 파일에 선언된 trackByFn 함수에 해당할 ngFor a trackFn 함수를 정의합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;div *ngFor=&quot;let value of field.values; let i=index; trackBy:trackByFn&quot;&amp;gt;
    &amp;lt;input type=&quot;text&quot; [(ngModel)]=&quot;field.values[i]&quot;  /&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;
    &amp;lt;button (click)=&quot;addValue(field)&quot;&amp;gt;Click&amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 ts 파일에서 위에 언급한 trackByFn 함수를 선언합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;trackByFn(i: number, items: any) {
return index //returning the index itself for avoiding ngFor to change focus after ngModelChange
}
&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/42322968/angular2-dynamic-input-field-lose-focus-when-input-changes&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Angular</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/770</guid>
      <comments>https://closeapi.tistory.com/770#entry770comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:52:56 +0900</pubDate>
    </item>
    <item>
      <title>jquery $(window).높이 ()이(가) 문서 높이를 반환합니다.</title>
      <link>https://closeapi.tistory.com/769</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jquery $(window).&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;$(window).height()&lt;/code&gt;&lt;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).height()&lt;/code&gt;&lt;font 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;저는 13&quot; MBA를 받고 있으며 브라우저의 창 높이는 780px - 820px (대략) 사이에서 최대가 되지만 매번 문서 높이와 동일한 창 높이를 반환합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 작업하고 있는 사이트의 경우 모두 1000px 이상입니다.&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;alert($(window).height());
alert($(document).height()); 
&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;doctype&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;tag, Chrome은 두 호출에 대해 동일한 값을 보고합니다.&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;&amp;lt;!DOCTYPE html&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;값이 광고된 대로 작동하게 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;doctype&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;태그는 당신의 문서에서 &lt;em&gt;가장&lt;/em&gt; 첫번째 일이어야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 텍스트가 렌더링되지 않더라도 텍스트 앞에 있을 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/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 w = window.innerWidth;
var h = window.innerHeight;
&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/3044230/difference-between-screen-availheight-and-window-height&quot;&gt; 화면.avail&lt;/a&gt; 높이와 &lt;a href=&quot;https://stackoverflow.com/questions/3044230/difference-between-screen-availheight-and-window-height&quot;&gt;창의 차이.&lt;/a&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/3044230/difference-between-screen-availheight-and-window-height&quot;&gt;높낮이&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사진도 있어서 실제로 차이를 볼 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(window).height()&lt;/code&gt;&lt;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).height()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;브라우저 내부의 문서 높이를 알려줍니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대부분의 경우 스크롤 바를 사용하더라도 완전히 똑같을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 생각에 당신의 문서는 내용을 보여주기에 충분한 공간이 있을 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 문서의 더 이상 부분을 보기 위해 아래로 스크롤할 필요가 없습니다.&lt;/font&gt;&lt;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(창)에서 Docytype을 사용하면 뷰포트 높이가 반환되고 그렇지 않으면 전체 문서 높이가 반환됩니다.&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;!DOCTYPE html&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/12103208/jquery-window-height-is-returning-the-document-height&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/769</guid>
      <comments>https://closeapi.tistory.com/769#entry769comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:52:49 +0900</pubDate>
    </item>
    <item>
      <title>현재 GMT 시간에 대한 MySQL 쿼리</title>
      <link>https://closeapi.tistory.com/768</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 GMT 시간에 대한 MySQL 쿼리&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;간단해 보이지만 GMT에서 현재 시간을 되돌리기 위해 간단한 SELECT 문을 사용하는 방법을 찾을 수 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서버 시간대와 GMT 시간대를 기준으로 NOW()를 GMT로 변환하기 위해 &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_convert-tz&quot; rel=&quot;noreferrer&quot;&gt;CONVERT_TZ()&lt;/a&gt;를 사용하려고 했는데 어떤 이유로 문자 시간대를 입력하면 NULL이 반환됩니다.&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;mysql&amp;gt; SELECT CONVERT_TZ(NOW(),@@global.system_time_zone,'GMT');
NULL

mysql&amp;gt; SELECT CONVERT_TZ(NOW(),'PST','GMT');
NULL

mysql&amp;gt; SELECT CONVERT_TZ(NOW(),'-08:00','+00:00');
2010-02-13 18:28:22
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GMT에서 현재 시간을 반환하는 간단한 쿼리만 있으면 됩니다. 도움을 주셔서 미리 감사드립니다!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;UTC만 사용하면 됩니다(낮 시간 절약에 영향 받지 않음).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT UTC_TIMESTAMP();
&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;font papago-translate=&quot;translated&quot;&gt;이것은 효과가 있을 것이지만, 하지만.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT CONVERT_TZ(NOW(),'PST','GMT');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;결과적으로 NULL도 받았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;mysql 문서의 예제 또한 null을 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_convert-tz&quot; rel=&quot;noreferrer&quot;&gt;http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_convert-tz&lt;/a&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strike&gt;  mysql에서 버그를 발견한 것 같습니다.&lt;/strike&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. &lt;strike&gt; &lt;/strike&gt;(+Stephen Pritchard 덕분에)&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;SET @OLD_TIME_ZONE=@@TIME_ZONE;
SET TIME_ZONE='+00:00';
SELECT NOW();
SET TIME_ZONE=@OLD_TIME_ZONE;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ok는 정확히 당신이 원하는 것이 아닙니다. (4개의 쿼리가 있지만 한 개만 선택합니다 :-)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CONVERT_TZ()에 버그 없음&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CONVERT_TZ()를 사용하려면 표준 시간대 테이블을 설치해야 합니다. 그렇지 않으면 MySql이 NULL을 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CLI에서 다음을 root으로 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;# mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://www.ArcanaVision.com&quot;&gt;http://www.ArcanaVision.com&lt;/a&gt; (SJP 2011-08-18)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고: GMT에는 DST UTC가 없을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT UTC_TIMESTAMP();
&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/19023978/should-mysql-have-its-timezone-set-to-utc&quot;&gt;MySQL의 표준 시간대를 UTC로 설정해야 합니까?&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 UTC 날짜 시간을 가져오는 확실한 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT CONVERT_TZ(NOW(), @@session.time_zone, '+0:00')
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위의 모든 답변을 보고 PST로 변환하는 것이 신뢰할 수 없다는 것을 알고 이를 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DATE_SUB(사용자_마지막_로그인, 인터벌 7시간)&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 방법은 효과가 있을 것입니다. 시간대를 잘못 지정한 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시카고를 예로 들며&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT CONVERT_TZ(NOW(), 'America/Chicago', 'GMT')
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;소스 서버 타임스탬프를 알 수 없지만 특정 tz에 대한 요구 사항인 경우 다음 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select convert_tz(utc_timestamp(),'+05:00','+00:00')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 CST를 예로 들 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;utc_timestamp는 '+00:00' 결과를 어디에 문의하든 보장합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원하는 오프셋은 '+05:00' 입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 알 수 없는 여러 서버를 칠 때 효과적이며, 반환 결과가 모두 공통 tz 결과 집합에 포함된다는 것을 보장합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GMT+6(아시아/다카 시간대)이라는 시간대를 찾고 있었습니다.&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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SELECT CONVERT_TZ ( UTC_TIMESTamp( ), '+06:00', '+00:00' )&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CONVERT_TZ 기능에 버그가 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시간대 이름/약어를 사용하기 때문에 NULL이 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;mysql.time_zone_name 테이블을 설치하지 않으면 이 'GMT' 'PST' 등이 무엇을 의미하는지 Mysql은 알 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 숫자를 사용하면 항상 효과가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; SELECT CONVERT_TZ(NOW(), 'America/Chicago', 'GMT');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NULL을 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; SELECT CONVERT_TZ(NOW(),'-08:00','+00:00');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반품 2016-06-24 17:58:33&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/2258274/mysql-query-for-current-gmt-time&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/768</guid>
      <comments>https://closeapi.tistory.com/768#entry768comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:52:42 +0900</pubDate>
    </item>
    <item>
      <title>플라스크에서 MySQL 사용</title>
      <link>https://closeapi.tistory.com/767</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;플라스크에서 MySQL 사용&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL DB에 액세스하는 방법에 대한 예제 코드를 플라스크에서 공유할 수 있는 사람이 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;sqlite에 연결하는 방법을 보여주는 문서가 있지만 MySql에는 연결되지 않습니다.&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;우선 Flask-MySQL 패키지를 설치해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pip&lt;/code&gt;&lt;font 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;pip install flask-mysql&lt;/code&gt;&lt;/p&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;from flask import Flask
from flaskext.mysql import MySQL

app = Flask(__name__)
mysql = MySQL()
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = 'root'
app.config['MYSQL_DATABASE_DB'] = 'EmpData'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)
&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;conn = mysql.connect()
cursor =conn.cursor()

cursor.execute(&quot;SELECT * from User&quot;)
data = cursor.fetchone()
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@server/db'
db = SQLAlchemy(app)


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    def __repr__(self):
        return '&amp;lt;User %r&amp;gt;' % self.username
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도움말 링크&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;pymysql을 사용하면 매우 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from flask import Flask, request, render_template
import pymysql

db = pymysql.connect(&quot;localhost&quot;, &quot;username&quot;, &quot;password&quot;, &quot;database&quot;)

app = Flask(__name__)
api = Api(app)

@app.route('/')
def someName():
    cursor = db.cursor()
    sql = &quot;SELECT * FROM table&quot;
    cursor.execute(sql)
    results = cursor.fetchall()
    return render_template('index.html', results=results)

if __name__ == '__main__':
app.run(debug=True)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;index.html 파일에서 다음과 같은 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div&amp;gt;
&amp;lt;% for row in results %}
      &amp;lt;tr&amp;gt;
         &amp;lt;td&amp;gt;{{ row[0] }}&amp;lt;/td&amp;gt;
         &amp;lt;td&amp;gt;{{ row[1] }}&amp;lt;/td&amp;gt;
         &amp;lt;td&amp;gt;{{ row[2] }}&amp;lt;/td&amp;gt;
         &amp;lt;td&amp;gt;{{ row[3] }}&amp;lt;/td&amp;gt;
      &amp;lt;/tr&amp;gt;
{% endfor %}
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;#!/usr/bin/python
from flask import Flask,jsonify,abort, make_response
import MySQLdb

app = Flask(__name__)

db = MySQLdb.connect(&quot;localhost&quot;, &quot;root&quot;, &quot;yourDbPassWord&quot;, &quot;DBname&quot;)

@app.route('/api/v1.0/items', methods=['GET'])
def get_items():
    curs = db.cursor()
    try:
        curs.execute(&quot;SELECT * FROM items&quot;)
        ...

    except:
        print &quot;Error: unable to fetch items&quot;
    return jsonify({&quot;desired: &quot; response})
&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;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 명령으로 db 만들기&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;CREATE TABLE MyUsers ( firstname VARCHAR(30) NOT NULL,  lastname VARCHAR(30) NOT NULL);
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;app.py 파일의 코드 아래에 복사 붙여넣기&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;from flask import Flask, render_template, request 
from flask_mysqldb import MySQL

app = Flask(__name__)


app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = 'root'
app.config['MYSQL_DB'] = 'MyDB'

    mysql = MySQL(app)


@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == &quot;POST&quot;:
        details = request.form
        firstName = details['fname']
        lastName = details['lname']
        cur = mysql.connection.cursor()
        cur.execute(&quot;INSERT INTO MyUsers(firstName, lastName) VALUES (%s, %s)&quot;, (firstName, lastName))
        mysql.connection.commit()
        cur.close()
        return 'success'
    return render_template('index.html')


if __name__ == '__main__':
       app.run()
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;mysql 버전: 5.7&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;mysql-connector를 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;python3에 mysql-connector 패키지를 설치합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;python3 -m pip install mysql-connector
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터베이스에 연결하고 쿼리하려면 python 스크립트에서 다음 코드 줄을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import mysql.connector

database=mysql.connector.connect(host='localhost',user='user',passwd='password',datbase='dbname')
    cursor=database.cursor()
    query=&quot;select * from test_table&quot;
    cursor.execute(query)
    database.commit()
&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;pymysql&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신에게&lt;/font&gt;&lt;/font&gt;&lt;code&gt;app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@server/db'&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@server/db'
&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;app.config를 사용하여 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;우리는 항상 웁스 컨셉을 추구해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우선 생산/개발 환경에 대한 mysql config를 확인하고 설정할 파일을 만들고 app.config로 값을 설정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# config.py you can put this file anywhere in the project
class Config(object):
    DEBUG = False
    TESTING = False


class DevelopmentConfig(Config):
    &quot;&quot;&quot;
    Development configurations
    &quot;&quot;&quot;
    MYSQL_DATABASE_USER = 'root'
    MYSQL_DATABASE_PASSWORD = ''
    MYSQL_DATABASE_HOST = '127.0.0.1'
    MYSQL_DATABASE_DB = 'FlaskProject'  # can be any

    DEBUG = True


class ProductionConfig(Config):
    &quot;&quot;&quot;
    Production configurations
    &quot;&quot;&quot;
    MYSQL_DATABASE_USER = 'yourusername'
    MYSQL_DATABASE_PASSWORD = 'yourpassword'
    MYSQL_DATABASE_HOST = 'linktoyourdb' # eg to amazone db :- yourdbname.xxxxxxxxxx.us-east-2.rds.amazonaws.com
    MYSQL_DATABASE_DB = 'yourdbname'

    DEBUG = 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;pip3 install flask-mysql&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# app.py
from flask import Flask,
from flaskext.mysql import MySQL

app = Flask(__name__)
mysql = MySQL()
if app.config['ENV'] == 'production':
    app.config.from_object('config.ProductionConfig')
else:
    app.config.from_object('config.DevelopmentConfig')
mysql.init_app(app)

@app.route('/')
def yrfunname():
    try:
        conn = mysql.connect()
        cursor = conn.cursor()
        cursor.execute(&quot;SELECT * from yrtablename&quot;)
        data = cursor.fetchone()
        conn.commit()
        cursor.close()
        return 'success', 200
    except Exception as fail:
        print(&quot;Something is wrong with your database user name or password {}&quot;.format(fail))
    
&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;프로젝트가 커지면 dbconn을 계속해서 만들 필요가 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;db 연결을 위해 다른 py 파일을 사용하고 프로젝트의 어느 곳에서나 해당 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;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/9845102/using-mysql-in-flask&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/767</guid>
      <comments>https://closeapi.tistory.com/767#entry767comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:52:35 +0900</pubDate>
    </item>
    <item>
      <title>TabHost Activity에서 결과(ActivityForResult 시작)를 반환하는 방법은 무엇입니까?</title>
      <link>https://closeapi.tistory.com/766</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;TabHost Activity에서 결과(ActivityForResult 시작)를 반환하는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 예를 들어 3개의 수업이 있습니다. 주요 활동인 A반입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클래스 A에서 startActivityForResult:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Intent intent = new Intent(this, ClassB.class);
startActivityForResult(intent, &quot;STRING&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클래스 B, 이 클래스는 TabActivity입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Intent intent = new Intent(this, ClassC.class);
tabHost.addTab...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클래스 C, 이 클래스는 정규 활동입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Intent intent = this.getIntent();
intent.putExtra(&quot;SOMETHING&quot;, &quot;EXTRAS&quot;);
this.setResult(RESULT_OK, intent);
finish();
&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;onActivityResult는 클래스 A에서 호출되지만 resultCode는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RESULT_CANCELED&lt;/code&gt;&lt;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_OK&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반환된 의도는 null입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;TabHost 내의 Activity에서 무언가를 반환하려면 어떻게 해야 합니까?&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반이 실제로 B반 안에서 운영되고 있다는 것과 B반이 그것을 돌려주는 것이라는 것을 알고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RESULT_CANCELED&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 papago-translate=&quot;translated&quot;&gt;저는 아직 일을 잘 모릅니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오, 하나님!&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;몇 시간을 들여 안드로이드 소스를 다운로드한 끝에 드디어 해결책을 찾았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Activity 클래스를 보면 다음을 보실 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;finish()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;method는 다음이 있는 경우에만 결과를 다시 보냅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mParent&lt;/code&gt;&lt;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;pre&gt;&lt;code&gt;public void finish() {
    if (mParent == null) {
        int resultCode;
        Intent resultData;
        synchronized (this) {
            resultCode = mResultCode;
            resultData = mResultData;
        }
        if (Config.LOGV) Log.v(TAG, &quot;Finishing self: token=&quot; + mToken);
        try {
            if (ActivityManagerNative.getDefault()
                .finishActivity(mToken, resultCode, resultData)) {
                mFinished = true;
            }
        } catch (RemoteException e) {
            // Empty
        }
    } else {
        mParent.finishFromChild(this);
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 제 해결책은 다음과 같이 부모 활동에 결과를 설정하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Intent data = new Intent();
 [...]
if (getParent() == null) {
    setResult(Activity.RESULT_OK, data);
} else {
    getParent().setResult(Activity.RESULT_OK, data);
}
finish();
&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://tylenoly.wordpress.com/2010/10/27/how-to-finish-activity-with-results/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://tylenoly.wordpress.com/2010/10/27/how-to-finish-activity-with-results/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;param_result&quot;를 약간 수정한 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/* Start Activity */
public void onClick(View v) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setClassName(&quot;com.thinoo.ActivityTest&quot;, &quot;com.thinoo.ActivityTest.NewActivity&quot;);
    startActivityForResult(intent,90);
}
/* Called when the second activity's finished */
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch(requestCode) {
    case 90:
        if (resultCode == RESULT_OK) {
            Bundle res = data.getExtras();
            String result = res.getString(&quot;param_result&quot;);
            Log.d(&quot;FIRST&quot;, &quot;result:&quot;+result);
        }
        break;
    }
}

private void finishWithResult()
{
    Bundle conData = new Bundle();
    conData.putString(&quot;param_result&quot;, &quot;Thanks Thanks&quot;);
    Intent intent = new Intent();
    intent.putExtras(conData);
    setResult(RESULT_OK, intent);
    finish();
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Intent.FLAG_ACTIVE_FORWARD_RESULT?&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 목적이 설정되어 있고 기존 활동에서 새 활동을 시작하는 데 사용되는 경우, 기존 활동의 회신 대상이 새 활동으로 옮겨집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클래스 B에서도 ActivityResult를 구현하고 startActivityForResult를 사용하여 클래스 C를 시작할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클래스 B에서 결과를 얻으면 클래스 C의 결과를 기반으로 클래스 A의 결과를 설정합니다.&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;또 다른 주의해야 할 점은 활동 A가 단일 인스턴스 활동이 되어서는 안 된다는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;StartActivityForResult가 작동하려면 클래스 B가 액티비티 A의 하위 액티비티여야 하며 단일 인스턴스 액티비티에서는 불가능하므로 새 액티비티(클래스 B)가 새 태스크에서 시작됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Activity 1에서 Activity 2를 시작하고 결과를 얻는 경우, start ActivityForResult를 사용하고 Activity 1에서 ActivityResult를 구현하고 Activity2에서 setResult를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Intent intent = new Intent(this, Activity2.class);
intent.putExtra(NUMERO1, numero1);
intent.putExtra(NUMERO2, numero2);
//startActivity(intent);
startActivityForResult(intent, MI_REQUEST_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;URL : https://stackoverflow.com/questions/2497205/how-to-return-a-result-startactivityforresult-from-a-tabhost-activity&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Android</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/766</guid>
      <comments>https://closeapi.tistory.com/766#entry766comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:52:26 +0900</pubDate>
    </item>
    <item>
      <title>utf-8의 utf-8에서 php로 오라클의 데이터</title>
      <link>https://closeapi.tistory.com/765</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;utf-8의 utf-8에서 php로 오라클의 데이터&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;utf-8 브라우저에서 데이터를 가져오는 방법은 에코가 있는 기호를 표시하지만 오라클의 데이터에는 문자 대신 ? 표시가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;head&amp;gt;
&amp;lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=utf-8&quot;&amp;gt;&amp;lt;/meta&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;?php

 $tns2 = &quot;(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521)) (CONNECT_DATA = (SID = sidname)))&quot;;
   if ($conn = oci_connect(&quot;user&quot;,&quot;pass&quot;, $tns2))
   {
       echo &quot;YAY!&quot;;
       //oci_close($conn);
   }
   else
   {
       die(&quot;Nesiseka&quot;);
   }

$stid = oci_parse($conn, 'SELECT * rowname where rownum&amp;lt;=10');
oci_execute($stid);

oci_close($conn);

echo &quot;&amp;lt;table border='1'&amp;gt;\n&quot;;
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
    echo &quot;&amp;lt;tr&amp;gt;\n&quot;;
    foreach ($row as $item) {
        echo &quot;    &amp;lt;td&amp;gt;&quot; . ($item !== null ? htmlentities($item, ENT_QUOTES) : &quot;&amp;amp;nbsp;&quot;) . &quot;&amp;lt;/td&amp;gt;\n&quot;;
    }
    echo &quot;&amp;lt;/tr&amp;gt;\n&quot;;
}
echo &quot;&amp;lt;/table&amp;gt;\n&quot;;
echo&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 papago-translate=&quot;translated&quot;&gt;'AL32'만 추가&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;UTF8'부터 줄까지&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if ($conn = oci_connect(username,pass, $tns2 , 'AL32UTF8'))&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;$conn = oci_connect(username,pass, $tns2 , 'AL32UTF8')
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;php 인코딩을 outf 8로 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mb_internal_encoding(&quot;UTF-8&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 많은 http://php.net/manual/en/function.mb-internal-encoding.php 링크&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/19996077/data-from-oracle-in-utf-8-with-php&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/765</guid>
      <comments>https://closeapi.tistory.com/765#entry765comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:45:15 +0900</pubDate>
    </item>
    <item>
      <title>오라클 - dblink 위에 커밋?</title>
      <link>https://closeapi.tistory.com/764</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오라클 - dblink 위에 커밋?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;user smith로 Oracle 데이터베이스에 연결하여 다음 3개의 명령을 실행하면 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;update smith.tablea
set col_name = 'florence' where col_id = 8;

insert into bob.other_table@mylink
values ('blah',2,'uncle','new');

commit;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로컬 테이블(smith.tablea)에 대한 업데이트와 원격 db 테이블(bob.other_table)에 대한 삽입이 모두 커밋되었다는 뜻입니까, 아니면 로컬 테이블에 대한 업데이트만 커밋되었다는 뜻입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고: 'mylink'는 원격 데이터베이스로의 링크를 나타냅니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://docs.oracle.com/cd/B19306_01/server.102/b14220/transact.htm#sthref661&quot; rel=&quot;noreferrer&quot;&gt;설명서에서&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오라클 2단계 커밋 메커니즘은 분산 트랜잭션을 발행하는 사용자에게 완전히 투명합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사실, 사용자들은 거래가 분산되어 있는지조차 알 필요가 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;트랜잭션의 종료를 나타내는 COMIT 문은 트랜잭션을 커밋하기 위해 2단계 커밋 메커니즘을 자동으로 트리거합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터베이스 응용프로그램 본문 내에 분산 트랜잭션을 포함하기 위해 코딩이나 복잡한 문 구문이 필요하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네, 모든 것이 잘 되면 두 가지 작업이 모두 완료됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 경우 트랜잭션은 원격 트랜잭션과 로컬 트랜잭션이 성공한 경우에만 작동해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;분산 트랜잭션에 대한 자세한 정보:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://docs.oracle.com/cd/B19306_01/server.102/b14231/ds_txnman.htm&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://docs.oracle.com/cd/B19306_01/server.102/b14231/ds_txnman.htm&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/9582125/oracle-commit-over-dblink&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/764</guid>
      <comments>https://closeapi.tistory.com/764#entry764comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:45:09 +0900</pubDate>
    </item>
    <item>
      <title>하위 쿼리 결과에서 ID 삭제</title>
      <link>https://closeapi.tistory.com/763</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하위 쿼리 결과에서 ID 삭제&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;users&lt;/code&gt;&lt;font 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;id email
1  test@gmail.com
2  xxp@gmail.com
3  test@gmail.com
4  zzz@gmail.com
&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;emails&lt;/code&gt;&lt;font 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;select id
group by email
having count(*)&amp;gt;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;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;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;delete&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;조항:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;delete from users
where id in(
    select id
    group by email
    having count(*)&amp;gt;1 )
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;결과는 No Errors(오류 없음)이지만 영향을 받는 행은 0개...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아무 일도 없었단 뜻이죠&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 제가 무엇을 잘못하고 있는지 그리고 이것을 하는 다른 방법들을 알고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사양:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Mac에서 Sequel Pro를 사용하는 MySQL 5.5.5-10.1.16-MariaDB&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 또는 ID를 가져온 후 테이블에서 제거할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데모 참조: http://sqlfiddle.com/ #!&lt;a href=&quot;http://sqlfiddle.com/#!9/f14d05/1&quot; rel=&quot;nofollow noreferrer&quot;&gt;9/f14d05/1&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DELETE from users 
where id in (
     SELECT id 
     from (
           SELECT a.id, count(*) as rn 
             FROM users a
            JOIN users b ON a.email = b.email AND a.id &amp;lt;= b.id
           GROUP BY a.id, a.email
          )  t
      where rn&amp;gt;1
      );
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MSSQL에 대한 테스트.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select min(id) id, email 
into #users 
from [users]
group by email

delete from [users] where id not in (select id from #users)

drop table #users
&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/49781354/delete-ids-from-subquery-results&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/763</guid>
      <comments>https://closeapi.tistory.com/763#entry763comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:45:03 +0900</pubDate>
    </item>
    <item>
      <title>클래스가 같은 원소의 개수는 어떻게 셀 수 있습니까?</title>
      <link>https://closeapi.tistory.com/762</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클래스가 같은 원소의 개수는 어떻게 셀 수 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 페이지에 특정한 것이 있는 메인 디브가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;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;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;div&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;jQuery&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;jQuery&lt;/code&gt;&lt;font 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;$('#main-div .specific-class').length
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇지 &lt;em&gt;않으면&lt;/em&gt; VanillaJS에서 (from.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;IE8&lt;/code&gt;&lt;font 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.querySelectorAll('#main-div .specific-class').length;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;document.getElementsByClassName(&quot;classstringhere&quot;).length&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;document.getElementsByClassName(&quot;classstringhere&quot;)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;method는 해당 클래스 이름을 가진 모든 요소의 배열을 반환하므로,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.length&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그들의 양을 알려줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;상위 노드로 이동한 다음 검색 중인 클래스가 있는 모든 노드를 쿼리할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 우리는 사이즈를 얻습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var parent = document.getElementById(&quot;parentId&quot;);
var nodesSameClass = parent.getElementsByClassName(&quot;test&quot;);
console.log(nodesSameClass.length);&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 id=&quot;parentId&quot;&amp;gt;
  &amp;lt;p class=&quot;prueba&quot;&amp;gt;hello word1&amp;lt;/p&amp;gt;
  &amp;lt;p class=&quot;test&quot;&amp;gt;hello word2&amp;lt;/p&amp;gt;
  &amp;lt;p class=&quot;test&quot;&amp;gt;hello word3&amp;lt;/p&amp;gt;
  &amp;lt;p class=&quot;test&quot;&amp;gt;hello word4&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$('#maindivid').find('input .inputclass').length
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;&lt;em&gt;이를 순수&lt;/em&gt;&lt;/strong&gt; 자바스크립트로 수행할 수 있는 두 가지 방법을 &lt;strong&gt;명시적&lt;/strong&gt;으로 작성하고자 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.getElementsByClassName('realClasssName').length
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;참고 1:&lt;/em&gt; 이 메서드의 인수에는 이 문자열의 &lt;strong&gt;맨 앞에 점이 없는 실제 클래스 이름을 가진 문자열&lt;/strong&gt;이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.querySelectorAll('.realClasssName').length
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;주 2:&lt;/em&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;em&gt;참고 3:&lt;/em&gt; 이 방법은 &lt;strong&gt;클래스 선택기뿐만 아니라 다른&lt;/strong&gt; &lt;strong&gt;&lt;em&gt;CSS&lt;/em&gt;&lt;/strong&gt; &lt;strong&gt;선택기에서도 작동&lt;/strong&gt;합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;그래서&lt;/strong&gt; 더 &lt;strong&gt;보편적입니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저도 &lt;strong&gt;하나의 방법을 쓰지만,&lt;/strong&gt; &lt;strong&gt;&lt;em&gt;jQuery&lt;/em&gt;&lt;/strong&gt;를 사용하여 이 문제를 해결하기 위해 두 &lt;strong&gt;개의 이름 표기법&lt;/strong&gt;을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery('.realClasssName').length
&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;$('.realClasssName').length
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;참고 4:&lt;/em&gt; 여기서는 &lt;strong&gt;클래스 이름 앞에 있는 점에 대해서&lt;/strong&gt;도 기억해야 하며 &lt;strong&gt;다른&lt;/strong&gt; &lt;strong&gt;&lt;em&gt;CSS&lt;/em&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;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;document.getElementById(&quot;demo&quot;).innerHTML = &quot;count: &quot; + document.querySelectorAll('.test').length;&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;html&amp;gt;
    &amp;lt;body&amp;gt;
    
    &amp;lt;p id=&quot;demo&quot;&amp;gt;&amp;lt;/p&amp;gt;
    &amp;lt;ul&amp;gt;
      &amp;lt;li class=&quot;test&quot;&amp;gt;Coffee&amp;lt;/li&amp;gt;
      &amp;lt;li class=&quot;test&quot;&amp;gt;Milk&amp;lt;/li&amp;gt;
      &amp;lt;li class=&quot;test&quot;&amp;gt;Soda&amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt;

 &amp;lt;/body&amp;gt; 
 &amp;lt;/html&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/9681601/how-can-i-count-the-number-of-elements-with-same-class&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/762</guid>
      <comments>https://closeapi.tistory.com/762#entry762comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:44:56 +0900</pubDate>
    </item>
    <item>
      <title>앱이 독립 실행형 상태인 경우 PWA 앱에서 Facebook 로그인이 작동하지 않음</title>
      <link>https://closeapi.tistory.com/761</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;앱이 독립 실행형 상태인 경우 PWA 앱에서 Facebook 로그인이 작동하지 않음&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 PWA 웨비스트를 만들고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 Angular JS를 사용하고 있고 웹사이트에서 javascript facebook 로그인을 사용했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 브라우저에서 내 앱을 보면 페이스북 로그인이 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런데 홈스크린에 바로가기를 추가하고 홈스크린에서 앱을 실행하면 FB 로그인이 되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Facebook 페이지를 로드하고 있습니다.&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;여기 제 FB 로그인 코드입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var doBrowserLogin = function(){
  var deferred = $q.defer();
  FB.login(
    function(response){
      if (response.authResponse) {
              deferred.resolve(response);
            }else{
              deferred.reject(response);
            }
          },
          {scope:'email,public_profile'}
       );
  return deferred.promise;
}&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;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZXMhl.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img alt=&quot;Blank page&quot; src=&quot;https://i.stack.imgur.com/ZXMhl.jpg&quot;&gt;&lt;/a&gt; manifest.json 파일에서 display property가 독립 실행형으로 설정되어 있습니다.&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;1) fb 로그인 응답(ex: /fb-login-receiver.html)을 받을 정적 html을 만듭니다. 로그인 결과를 postMessage와 함께 어플리케이션에 다시 보냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;utf-8&quot; /&amp;gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    Facebook login completed.
    &amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
    window.opener.postMessage(window.location.toString(), window.location.href);
    window.close();
  &amp;lt;/script&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;2) 응용프로그램에서 팝업창에 fb로그인 페이지를 여는 기능을 작성합니다.&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;async loginFacebook(): Promise&amp;lt;string&amp;gt; {
    let popup = window.open(&quot;https://www.facebook.com/v3.1/dialog/oauth?client_id=**&amp;lt;YOUR_CLIENT_ID&amp;gt;**&amp;amp;display=popup&amp;amp;scope=email&amp;amp;response_type=token,granted_scopes&amp;amp;auth_type=rerequest&amp;amp;redirect_uri=&quot; + window.location.origin + &quot;/fb-login-receiver.html&quot;, 'Facebook Login', 'width=500,height=500');
    var promise = new Promise&amp;lt;string&amp;gt;((resolve, reject) =&amp;gt; {
      let finished = false;
      let listener = (e: MessageEvent) =&amp;gt; {
        finished = true;
        let url = new URL(e.data);
        let hash = url.hash.substring(1);
        let splitted = hash.split('&amp;amp;');
        let dct: { [key: string]: string } = {};
        for (let s of splitted) {
          var spltd = s.split('=');
          dct[spltd[0]] = spltd[1];
        }

        if (dct['granted_scopes'].indexOf('email') &amp;lt; 0) {
          reject(&quot;Email required&quot;);
          return;
        }
        resolve(dct['access_token']);
      };
      addEventListener('message', listener);

      let intervalChecker = setInterval(() =&amp;gt; {
        if (popup.closed) {
          clearInterval(intervalChecker);
          removeEventListener('message', listener);
          if (!finished) {
            reject('Login canceled');
          }
        }
      }, 10);
    });
    return promise;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Facebook API to login 사용자가 로그인 양식으로 새 탭을 열기 때문에 올바른 동작입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Facebook은 OAuth2 솔루션을 구현하고 사용자가 API를 사용하여 인증할 수 있도록 OAuth2 Implicit Flow를 활성화합니다.&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;새 탭을 여는 대신 페이스북 로그인 양식으로 iframe을 만들 수 있고 사용자가 로그인하면 닫기 후 리디렉션할 수 있습니다.&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/48112300/facebook-login-not-working-in-pwa-app-if-app-is-in-stand-alone-state&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/761</guid>
      <comments>https://closeapi.tistory.com/761#entry761comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:44:49 +0900</pubDate>
    </item>
    <item>
      <title>node.js 앱에 대한 코딩 스타일 가이드?</title>
      <link>https://closeapi.tistory.com/760</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;node.js 앱에 대한 코딩 스타일 가이드?&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;/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;/font&gt;&lt;font papago-translate=&quot;translated&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;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;span class=&quot;relativetime&quot; title=&quot;2016-11-26 20:26:28Z&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/5495984/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;node.js에 대한 코딩 스타일 안내서가 있습니까?)가 있습니까?&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;translated&quot;&gt;&lt;a href=&quot;http://www.python.org/dev/peps/pep-0008/&quot; rel=&quot;noreferrer&quot;&gt;PEP&lt;/a&gt; 8의 &lt;a href=&quot;http://www.python.org/dev/peps/pep-0008/&quot; rel=&quot;noreferrer&quot;&gt;줄&lt;/a&gt;에 따른 가이드(또는 여러 가이드), Python의 표준 코딩 스타일 가이드를 찾고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 다양한 자바스크립트 가이드가 여기서 링크할 가치가 없는 것을 보았습니다. (대부분 오래되고 클라이언트 쪽 자바스크립트를 대상으로 함)&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;흥미로운 node.js &lt;a href=&quot;http://nodeguide.com/style.html&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;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드 레이아웃: 들여쓰기(2칸, 4칸, 탭 등), 새 줄, 줄 바꿈 등&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;공백(예: &quot;function (arg)&quot; vs &quot;function (arg)&quot;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;세미콜론 또는 세미콜론 없음, var 선언, ...&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이름 지정(예: do_this() vs. doThis(), var_name vs. varName, ...&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;node.js 및 자바스크립트 숙어(예: == vs.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;===, 콜백의 첫번째 arg는 오류 개체입니다. ...&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;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 주제는 분명 주관적이지만 성숙해지는 과정에서 공통적이고 널리 받아들여지는 코딩 스타일을 정립하는 것이 공동체의 중요한 단계라고 생각합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한, 그것은 단지 맛에 관한 것이 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특히 &quot;== 대신 === 사용&quot;과 같은 규칙은 코드 품질에 직접적인 영향을 미칩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 &lt;a href=&quot;http://www.javascriptlint.com/&quot; rel=&quot;noreferrer&quot;&gt;JSLint&lt;/a&gt;에서 확인한 코딩 표준을 &lt;a href=&quot;https://github.com/isaacs/npm&quot; rel=&quot;noreferrer&quot;&gt;검토&lt;/a&gt;하거나 NPM(Isac Shlueter's) 코딩 &lt;a href=&quot;https://docs.npmjs.com/misc/coding-style&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;font papago-translate=&quot;translated&quot;&gt;JS 코더:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/visionmedia&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;TJ 홀로웨이척&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/isaacs&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아이작 슐루터&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/creationix&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;팀 캐스웰&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jashkenas&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제레미 아슈케나스&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/felixge&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;펠릭스 가이젠더퍼&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/indexzero&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;찰리 로빈스&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Marak&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마라크 스콰이어스&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/aheckmann&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에런 헤크만&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/guille&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기예르모 라우흐&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mikeal&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마이컬 로저스&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/ry&quot; rel=&quot;noreferrer&quot;&gt;Ryan Dahl&lt;/a&gt; + &lt;a href=&quot;https://github.com/joyent/node/tree/master/lib&quot; rel=&quot;noreferrer&quot;&gt;실제 노드&lt;/a&gt;를 볼 수 있습니다&lt;a href=&quot;https://github.com/joyent/node/tree/master/lib&quot; rel=&quot;noreferrer&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/joyent/node/tree/master/lib&quot; rel=&quot;noreferrer&quot;&gt;JS코드베이스&lt;/a&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;좋은 &lt;a href=&quot;http://github.com/chriso&quot; rel=&quot;noreferrer&quot;&gt;방법&lt;/a&gt;으로 제 것을 &lt;a href=&quot;http://github.com/chriso&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;a href=&quot;https://stackoverflow.com/users/389442/alienhard&quot;&gt;@alienhard&lt;/a&gt;의 제안&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://google.github.io/styleguide/javascriptguide.xml&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Google 자바스크립트 스타일 가이드&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/felixge/node-style-guide&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Felix's Node.js 스타일 가이드&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IMO 당신이 지켜야 할 몇 가지 황금 규칙이 있습니다.&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;with&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;eval&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;===&lt;/code&gt;&lt;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;/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;var&lt;/code&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;(function(){})()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;브라우저에서뿐만 아니라 서버측에서 실행되는 코드를 릴리스할 계획인 경우&lt;/font&gt;&lt;/font&gt;&lt;/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;err&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫 번째 주장으로서 그리고 만약 그들 자신이 주장으로서 콜백을 받아들인다면, 그것은 마지막이어야 합니다, 예를 들어.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;callback(err, param1, param2, callback)&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;들여쓰기, 괄호와 키워드 사이의 간격, 세미콜론 배치는 모두 선호도의 문제입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마을에 새로운 기준이 생겼습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/feross/standard&quot; rel=&quot;noreferrer&quot;&gt;표준 스타일&lt;/a&gt;을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/feross/standard&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/feross/standard/master/badge.png&quot; alt=&quot;js-standard-style&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클라이언트와 서버 간의 차이가 언어 자체가 아닌 라이브러리에 있기 때문에 대부분 node.js에도 적용됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, &lt;a href=&quot;http://oreilly.com/catalog/9780596806767&quot; rel=&quot;noreferrer&quot;&gt;JavaScript Patterns&lt;/a&gt; 책은 이 항목에 대해 설명합니다. 이 &lt;a href=&quot;http://my.safaribooksonline.com/book/programming/javascript/9781449399115/essentials/essentials&quot; rel=&quot;noreferrer&quot;&gt;항목은 2장&lt;/a&gt;의 일부입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 더글러스 크록포드의 &lt;a href=&quot;http://javascript.crockford.com/&quot; rel=&quot;noreferrer&quot;&gt;웹사이트&lt;/a&gt;, &lt;a href=&quot;http://oreilly.com/catalog/9780596517748&quot; rel=&quot;noreferrer&quot;&gt;책&lt;/a&gt;, &lt;a href=&quot;http://yuiblog.com/crockford/&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;font papago-translate=&quot;translated&quot;&gt;그렇지 않으면 &quot;여기 오류&quot; 캐럿이 줄을 서지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;탭 포함:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        var preps = files.map(function(f) { 
            ^
TypeError: Cannot call method 'map' of null
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;공백 포함:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        var preps = files.map(function(f) { 
                          ^
TypeError: Cannot call method 'map' of null
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 Mac만의 문제일 수도 있지만, 저는 그렇지 않을 것이라고 생각합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 이 질문을 한 지가 꽤 됐습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 사이에 훌륭한 자바스크립트 가이드를 찾았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일관성 있고 관용적인 자바스크립트를 쓰는 원리&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/rwldrn/idiomatic.js/&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://github.com/rwldrn/idiomatic.js/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Airbnb는 꽤 좋은 자바스크립트 스타일 가이드 https://github.com/airbnb/javascript 를 가지고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Coffee-Script의 경우, 잘못된 들여쓰기는 컴파일 오류를 의미합니다.&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;:set tabstop=2
:set shiftwidth=2
:set expandtab
&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;zombie&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;brunch&lt;/code&gt;&lt;font 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 papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/paulmillr/code-style-guides&quot; rel=&quot;nofollow&quot;&gt;https://github.com/paulmillr/code-style-guides&lt;/a&gt; (주요 기여자 중 하나입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;brunch&lt;/code&gt;&lt;font 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/5495984/coding-style-guide-for-node-js-apps&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>node.js</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/760</guid>
      <comments>https://closeapi.tistory.com/760#entry760comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:44:41 +0900</pubDate>
    </item>
    <item>
      <title>텍스트를 태그로 래핑</title>
      <link>https://closeapi.tistory.com/759</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;텍스트를 태그로 래핑&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에 추가된 텍스트를 래핑하고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;td&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 시도해 봤습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;style=&quot;word-wrap: break-word;&quot; width=&quot;15%&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 papago-translate=&quot;translated&quot;&gt;폭 100%를 꼭 줘야 하는 건가요?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표시할 수 있는 다른 컨트롤이 있어서 너비가 15%밖에 안 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;TD 텍스트를 래핑하려면&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;table{
    table-layout: fixed;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 TD Style&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;td{
    word-wrap:break-word
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML 테이블은 &quot;table-layout:fixed&quot; CSS 스타일을 지원하여 사용자 에이전트가 열 너비를 내용에 적용하지 못하도록 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 그것을 사용하고 싶을 수도 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 당신이 22개의 테이블을 잡았다고 믿습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블은 테이블 구조로 컨텐츠를 포장하는 데 매우 적합하며, 테이블에 포함된 컨텐츠의 요구사항을 충족시키기 위해 &quot;스트레칭&quot;하는 훌륭한 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 테이블 셀은 내용에 맞게 늘어납니다...&lt;/font&gt;&lt;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;1.) TD에서 최대 너비를 설정해 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;td style=&quot;max-width:150px;&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2.) 랩핑 요소(예: 스판)에 텍스트를 넣고 제약 조건을 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;td&amp;gt;&amp;lt;span style=&quot;max-width:150px;&quot;&amp;gt;Hello World...&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전 버전의 IE는 min/max-width를 지원하지 않습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IE가 기본적으로 최대 너비를 지원하지 않기 때문에 강제로 사용하려면 해킹을 추가해야 합니다.&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;페이지 로드의 경우 IE6에 한해 테이블의 렌더링된 너비(픽셀 단위)를 얻은 다음 이의 15%를 해당 열의 첫 번째 TD(또는 헤더가 있는 경우 TH)에 다시 픽셀 단위로 적용합니다.&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;word-break&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스타일링없이 사용가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;table&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;table-layout: fixed&lt;/code&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;table {
  width: 140px;
  border: 1px solid #bbb
}

.tdbreak {
  word-break: break-all
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;p&amp;gt;without word-break&amp;lt;/p&amp;gt;
&amp;lt;table&amp;gt;
  &amp;lt;tr&amp;gt;
    &amp;lt;td&amp;gt;LOOOOOOOOOOOOOOOOOOOOOOOOOOOOGGG&amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;

&amp;lt;p&amp;gt;with word-break&amp;lt;/p&amp;gt;
&amp;lt;table&amp;gt;
  &amp;lt;tr&amp;gt;
    &amp;lt;td class=&quot;tdbreak&quot;&amp;gt;LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOGGG&amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;table-layout:fixed&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;IE는 기본적으로 오버플로를 숨기지만 Mozilla는 해당 오버플로를 상자 외부에 렌더링합니다.&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;overflow:hidden;width:?px&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;table style=&quot;table-layout:fixed; width:100px&quot;&amp;gt;
 &amp;lt;tr&amp;gt;
   &amp;lt;td style=&quot;overflow:hidden; width:50px;&quot;&amp;gt;fearofthedarkihaveaconstantfearofadark&amp;lt;/td&amp;gt;
   &amp;lt;td&amp;gt;
     test
   &amp;lt;/td&amp;gt;
 &amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 몇 가지 CSS 프레임워크(Material Design Lite [MDL])와 함께 작동했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;table {
  table-layout: fixed;
  white-space: normal!important;
}

td {
  word-wrap: break-word;
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;.tbl {
    table-layout:fixed;
    border-collapse: collapse;
    background: #fff;
 }

.tbl td {
    text-overflow:ellipsis;
    overflow:hidden;
    white-space:nowrap;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://www.blakems.com/archives/000077.html 에 대한 크레딧&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;td&lt;/code&gt;&lt;font 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;white-space: pre;
&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;white-space: pre-wrap;
&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;td&amp;gt;&amp;lt;div style = &quot;width:80px; word-wrap: break-word&quot;&amp;gt; your text &amp;lt;/div&amp;gt;&amp;lt;/td&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;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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 고정된 테이블 폭이나 복잡한 CSS를 가지고 장난칠 필요가 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;셀 너비를 텍스트의 가장 긴 단어와 정확히 동일하게 만들려면 셀 너비를 다음으로 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1px&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;td {
  width: 1px;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 &lt;strong&gt;실험적&lt;/strong&gt;이고 &lt;strong&gt;시행착오&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;라이브 피들: http://jsfiddle.net/harshjv/5e2oLL8L/2/&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 효과가 있을 수도 있지만, 미래의 어느 시점에서 (즉각은 아닐지라도) 약간 성가신 것으로 판명될 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt; 
tbody td span {display: inline-block;
               width: 10em; /* this is the nuisance part, as you'll have to define a particular width, and I assume -without testing- that any percent widths would be relative to the containing `&amp;lt;td&amp;gt;`, not the `&amp;lt;tr&amp;gt;` or `&amp;lt;table&amp;gt;` */
               overflow: hidden; 
               white-space: nowrap; }

&amp;lt;/style&amp;gt;

...

&amp;lt;table&amp;gt;

&amp;lt;thead&amp;gt;...&amp;lt;/thead&amp;gt;
&amp;lt;tfoot&amp;gt;...&amp;lt;/tfoot&amp;gt;

&amp;lt;tbody&amp;gt;

&amp;lt;tr&amp;gt;

&amp;lt;td&amp;gt;&amp;lt;span title=&quot;some text&quot;&amp;gt;some text&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;lt;span title=&quot;some more text&quot;&amp;gt;some more text&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;lt;span title=&quot;yet more text&quot;&amp;gt;yet more text&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;

&amp;lt;/tr&amp;gt;

&amp;lt;/tbody&amp;gt;

&amp;lt;/table&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 근거는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;span&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;&amp;lt;td&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로 콘텐츠를 수용하기 위해 확장되는 반면, a.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지정할 수 있으며 설정된 폭을 유지할 것으로 예상됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;overflow: hidden&lt;/code&gt;&lt;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;td&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;확장하기 위해.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하는 것을 추천합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;title&lt;/code&gt;&lt;font 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;td {...}&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;td는 잠재적 폭을 채우기 위해 확장(또는 잠재적으로 수축)할 것입니다(제가 볼 때 이것은 다음과 같습니다).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;table-width/number-of-cells&lt;/code&gt;&lt;font 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;TD에 클래스를 적용하고 적절한 너비를 적용합니다(그 중 하나는 너비의 나머지를 가정하도록 너비가 없는 상태로 유지해야 함). 그 다음 적절한 스타일을 적용합니다.&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;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&amp;gt;
&amp;lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&amp;gt;
&amp;lt;title&amp;gt;Untitled Document&amp;lt;/title&amp;gt;
&amp;lt;style type=&quot;text/css&quot;&amp;gt;
&amp;lt;!--
td { vertical-align: top; }
.leftcolumn { background: #CCC; width: 20%; padding: 10px; }
.centercolumn { background: #999; padding: 10px; width: 15%; }
.rightcolumn { background: #666; padding: 10px; }
--&amp;gt;
&amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;

&amp;lt;body&amp;gt;
&amp;lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&amp;gt;
  &amp;lt;tr&amp;gt;
    &amp;lt;td class=&quot;leftcolumn&quot;&amp;gt;This is the left column. It is set to 20% width.&amp;lt;/td&amp;gt;
    &amp;lt;td class=&quot;centercolumn&quot;&amp;gt;
        &amp;lt;p&amp;gt;Hi,&amp;lt;/p&amp;gt;
        &amp;lt;p&amp;gt;I want to wrap a text that is added to the TD. I have tried with style=&quot;word-wrap: break-word;&quot; width=&quot;15%&quot;. But the wrap is not happening. Is it mandatory to give 100% width ? But I have got other controls to display so only 15% width available.&amp;lt;/p&amp;gt;
        &amp;lt;p&amp;gt;Need help.&amp;lt;/p&amp;gt;
        &amp;lt;p&amp;gt;TIA.&amp;lt;/p&amp;gt;
    &amp;lt;/td&amp;gt;
    &amp;lt;td class=&quot;rightcolumn&quot;&amp;gt;This is the right column, it has no width so it assumes the remainder from the 15% and 20% assumed by the others. By default, if a width is applied and no white-space declarations are made, your text will automatically wrap.&amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
&amp;lt;/table&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제로 텍스트 래핑은 테이블에서 자동으로 이루어집니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사람들이 시험을 하면서 저지르는 실수는 &quot;gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제로 영어에는 이렇게 긴 단어가 없고 설사 있다 하더라도 그 안에서 사용될 가능성은 희박합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;td&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;일정한 상황에서 상대 위치는 미신입니다.&quot;와 같은 문장으로 테스트를 해보세요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 해결할 수 있는 방법은 텍스트가 랩을 원하는 열에 다음을 추가하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;white-space:normal&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Chrome &amp;amp; Firefox에서도 동일한 동작이 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고: Vue/Quasar q-table에 문제가 있었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 css/sass를 통해 열의 최대 너비를 제한했습니다(Quasar의 q-table과 관련하여 이것이 맞는지 확실하지 않음).&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;style&amp;gt;
table, th, td {
    border: 1px solid black;
}
&amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;

&amp;lt;table&amp;gt;
  &amp;lt;tr&amp;gt;
    &amp;lt;th&amp;gt;Poem&amp;lt;/th&amp;gt;
    &amp;lt;th&amp;gt;Poem&amp;lt;/th&amp;gt;
  &amp;lt;/tr&amp;gt;
  &amp;lt;tr&amp;gt;
    &amp;lt;td nowrap&amp;gt;Never increase, beyond what is necessary, the number of entities required to explain anything&amp;lt;/td&amp;gt;
    &amp;lt;td&amp;gt;Never increase, beyond what is necessary, the number of entities required to explain anything&amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;

&amp;lt;p&amp;gt;The nowrap attribute is not supported in HTML5. Use CSS instead.&amp;lt;/p&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/1057574/wrap-text-in-td-tag&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>CSS</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/759</guid>
      <comments>https://closeapi.tistory.com/759#entry759comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:44:34 +0900</pubDate>
    </item>
    <item>
      <title>사전 키가 열 레이블인 다중 인덱스 데이터 프레임에 중첩된 사전</title>
      <link>https://closeapi.tistory.com/758</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사전 키가 열 레이블인 다중 인덱스 데이터 프레임에 중첩된 사전&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 다음과 같은 사전이 있다고 합시다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dictionary = {'A' : {'a': [1,2,3,4,5],
                     'b': [6,7,8,9,1]},

              'B' : {'a': [2,3,4,5,6],
                     'b': [7,8,9,1,2]}}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 저는 다음과 같은 형태의 데이터 프레임을 원합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;     A   B
     a b a b
  0  1 6 2 7
  1  2 7 3 8
  2  3 8 4 9
  3  4 9 5 1
  4  5 1 6 2
&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;In [99]:

DataFrame(dictionary)

Out[99]:
     A               B
a   [1, 2, 3, 4, 5] [2, 3, 4, 5, 6]
b   [6, 7, 8, 9, 1] [7, 8, 9, 1, 2]
&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;위와 같이 각 레벨이 중첩된 dict의 키와 목록의 각 요소에 해당하는 행에 해당하는 다중 인덱스가 필요합니다.&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;Pandas는 MultiIndex 값을 중첩된 명령이 아닌 튜플로 원합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가장 간단한 방법은 사전을 DataFrame에 전달하기 전에 올바른 형식으로 변환하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; reform = {(outerKey, innerKey): values for outerKey, innerDict in dictionary.items() for innerKey, values in innerDict.items()}
&amp;gt;&amp;gt;&amp;gt; reform
{('A', 'a'): [1, 2, 3, 4, 5],
 ('A', 'b'): [6, 7, 8, 9, 1],
 ('B', 'a'): [2, 3, 4, 5, 6],
 ('B', 'b'): [7, 8, 9, 1, 2]}
&amp;gt;&amp;gt;&amp;gt; pandas.DataFrame(reform)
   A     B   
   a  b  a  b
0  1  6  2  7
1  2  7  3  8
2  3  8  4  9
3  4  9  5  1
4  5  1  6  2

[5 rows x 4 columns]
&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;.stack&lt;/code&gt;&lt;font 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;df = pandas.DataFrame.from_dict(dictionary, orient=&quot;index&quot;).stack().to_frame()
# to break out the lists into columns
df = pandas.DataFrame(df[0].values.tolist(), index=df.index)
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;dict_of_df = {k: pd.DataFrame(v) for k,v in dictionary.items()}
df = pd.concat(dict_of_df, axis=1)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;python &amp;lt; 3.6의 경우 열 순서가 손실됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 재귀적 함수는 다음과 같이 작동해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def reform_dict(dictionary, t=tuple(), reform={}):
    for key, val in dictionary.items():
        t = t + (key,)
        if isinstance(val, dict):
            reform_dict(val, t, reform)
        else:
            reform.update({t: val})
        t = t[:-1]
    return reform
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사전의 목록이 동일한 길이가 아닐 경우 BrenBarn의 방법을 적용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; dictionary = {'A' : {'a': [1,2,3,4,5],
                         'b': [6,7,8,9,1]},
                 'B' : {'a': [2,3,4,5,6],
                        'b': [7,8,9,1]}}

&amp;gt;&amp;gt;&amp;gt; reform = {(outerKey, innerKey): values for outerKey, innerDict in dictionary.items() for innerKey, values in innerDict.items()}
&amp;gt;&amp;gt;&amp;gt; reform
 {('A', 'a'): [1, 2, 3, 4, 5],
  ('A', 'b'): [6, 7, 8, 9, 1],
  ('B', 'a'): [2, 3, 4, 5, 6],
  ('B', 'b'): [7, 8, 9, 1]}

&amp;gt;&amp;gt;&amp;gt; pandas.DataFrame.from_dict(reform, orient='index').transpose()
&amp;gt;&amp;gt;&amp;gt; df.columns = pd.MultiIndex.from_tuples(df.columns)
   A     B   
   a  b  a  b
0  1  6  2  7
1  2  7  3  8
2  3  8  4  9
3  4  9  5  1
4  5  1  6  NaN
[5 rows x 4 columns]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 솔루션은 더 큰 데이터 프레임에 적합하며 요구 사항에 적합합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;cols = df.columns
int_cols = len(cols)
col_subset_1 = [cols[x] for x in range(1,int(int_cols/2)+1)]
col_subset_2 = [cols[x] for x in range(int(int_cols/2)+1, int_cols)]

col_subset_1_label = list(zip(['A']*len(col_subset_1), col_subset_1))
col_subset_2_label = list(zip(['B']*len(col_subset_2), col_subset_2))
df.columns = pd.MultiIndex.from_tuples([('','myIndex'),*col_subset_1_label,*col_subset_2_label])
&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                      B
     myIndex    a              b          c          d
0   0.159710    1.472925    0.619508    -0.476738   0.866238
1   -0.665062   0.609273    -0.089719   0.730012    0.751615
2   0.215350    -0.403239   1.801829    -2.052797   -1.026114
3   -0.609692   1.163072    -1.007984   -0.324902   -1.624007
4   0.791321    -0.060026   -1.328531   -0.498092   0.559837
5   0.247412    -0.841714   0.354314    0.506985    0.425254
6   0.443535    1.037502    -0.433115   0.601754    -1.405284
7   -0.433744   1.514892    1.963495    -2.353169   1.285580
&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/24988131/nested-dictionary-to-multiindex-dataframe-where-dictionary-keys-are-column-label&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>DataFrame</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/758</guid>
      <comments>https://closeapi.tistory.com/758#entry758comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:44:25 +0900</pubDate>
    </item>
    <item>
      <title>jQuery 토글 CSS?</title>
      <link>https://closeapi.tistory.com/757</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery 토글 CSS?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자가 버튼을 클릭할 때 CSS 간에 전환하고 싶습니다 (&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#user_button&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;) 메뉴가 표시됩니다(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#user_options&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;) 및 CSS를 변경하고 사용자가 다시 클릭하면 정상으로 돌아갑니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지금까지 제가 가진 것은 이것뿐입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#user_button').click( function() {
    $('#user_options').toggle();
    $(&quot;#user_button&quot;).css({    
        borderBottomLeftRadius: '0px',
        borderBottomRightRadius: '0px'
    }); 
    return false;
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;누가 도와줄 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1.9 이전 버전의 jQuery(jQuery)인 경우(https://api.jquery.com/toggle-event) 참조:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#user_button').toggle(function () {
    $(&quot;#user_button&quot;).css({borderBottomLeftRadius: &quot;0px&quot;});
}, function () {
    $(&quot;#user_button&quot;).css({borderBottomLeftRadius: &quot;5px&quot;});
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 경우 클래스를 사용하는 것이 css를 직접 설정하는 것보다 낫지만, 언급한 addClass 메소드와 removeClass 메소드를 살펴보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#user_button').toggle(function () {
    $(&quot;#user_button&quot;).addClass(&quot;active&quot;);
}, function () {
    $(&quot;#user_button&quot;).removeClass(&quot;active&quot;);
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 jQuery에서 &lt;a href=&quot;http://api.jquery.com/toggleClass/&quot; rel=&quot;noreferrer&quot;&gt;toggleClass&lt;/a&gt; 함수를 사용하고 CSS를 클래스에 정의할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/* start of css */
#user_button.active {
    border-bottom-right-radius: 5px;
    border-bottom-left-radius: 5px;
    -webkit-border-bottom-right-radius: 5px; /* user-agent specific */
    -webkit-border-bottom-left-radius: 5px;
    -moz-border-radius-bottomright: 5px;
    -moz-border-radius-bottomleft: 5px; /* etc... */
}
/* start of js */
$('#user_button').click(function() {
    $('#user_options').toggle();
    $(this).toggleClass('active');
    return false;
})
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery의 &lt;a href=&quot;http://api.jquery.com/addClass/&quot; rel=&quot;nofollow noreferrer&quot;&gt;.addClass&lt;/a&gt; 및 &lt;a href=&quot;http://api.jquery.com/removeClass/&quot; rel=&quot;nofollow noreferrer&quot;&gt;.removeClass&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;strong&gt;borderBottomLeftRadius: 0px&lt;/strong&gt;가 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#user_button').toggle().css('borderBottomLeftRadius','+5px');
&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;가장 좋은 선택은 CSS에서 클래스 스타일을 설정하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.showMenu&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.hideMenu&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;$(&quot;#user_button&quot;).addClass(&quot;showMenu&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;$('#user_button').on('click',function(){
    if($(this).attr('data-click-state') == 1) {
        $(this).attr('data-click-state', 0);
        $(this).css('background-color', 'red')
      }
    else {
      $(this).attr('data-click-state', 1);
      $(this).css('background-color', 'orange')
    }
  });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://codepen.io/pekul/pen/qwqVOm&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 코드 펜 예제에서 참조하십시오.&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;$('#user_button').on('click', function() {
  $(&quot;#user_button&quot;).toggleClass('active');
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;#user_option.active {
  border-bottom-right-radius: 5px;
  border-bottom-left-radius: 5px;
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;$(document).ready(function(){

    $('#toggle').active('click', function(){
        $(&quot;.navbar-collapse&quot;).addClass(&quot;show&quot;);
    });

    $('#toggle .active').on('click', function(){
        $(&quot;.navbar-collapse&quot;).removeClass(&quot;hide&quot;);
    });

});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Toggle(토글) 메뉴는 닫혔다가 열렸지만 Navigation(탐색) 항목은 닫히지 않았습니다.&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/3337621/jquery-toggle-css&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/757</guid>
      <comments>https://closeapi.tistory.com/757#entry757comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:44:17 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 트리거 행 필드가 존재하는지 확인</title>
      <link>https://closeapi.tistory.com/756</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 트리거 행 필드가 존재하는지 확인&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 테이블에 트리거를 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;delimiter //
CREATE TRIGGER tb_ins BEFORE UPDATE ON tb
FOR EACH ROW
BEGIN
    IF (NEW.size &amp;lt;&amp;gt; size) THEN

    END IF;
END;//
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제는 다음 이외의 필드를 개별적으로 업데이트하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;size&lt;/code&gt;&lt;font 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;UPDATE tb SET color = 'red' WHERE id = 1;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;업데이트에 다음 필드가 포함되어 있지 않아 필드를 찾을 수 없다는 오류가 나타납니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;size&lt;/code&gt;&lt;font 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;ROW&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필드는 내 트리거 함수에 존재합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 어떻게 이루어 질 수 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 다음과 같은 것이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;IF EXISTS(ROW.size) THEN

END IF;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 오류는 UPDATE 문에 참조된 열과 관련이 없습니다.&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;size&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;size&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 우리는 다음의 가치를 비교해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NEW.size&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;OLD.size&lt;/code&gt;&lt;font 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;pre&gt;&lt;code&gt;DELIMITER $$

DROP TRIGGER IF EXISTS tb_ins $$

CREATE TRIGGER tb_ins 
BEFORE UPDATE ON tb
FOR EACH ROW
BEGIN
   IF NOT (NEW.size &amp;lt;=&amp;gt; OLD.size) THEN
      -- value of size column has been modified
      BEGIN END;
   END IF;
END$$
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 사이에 아무 것도 없는 것은 타당하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;THEN&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;END IF&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 우리는 거기에 뭔가를 가지고 있어야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL은 비어 있음을 허용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BEGIN&lt;/code&gt; &lt;code&gt;END;&lt;/code&gt;&lt;font 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/44191940/mysql-trigger-check-if-row-field-exists&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/756</guid>
      <comments>https://closeapi.tistory.com/756#entry756comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:44:10 +0900</pubDate>
    </item>
    <item>
      <title>IntelliSense가 SQL Server Management Studio에서 작동하지 않습니다.</title>
      <link>https://closeapi.tistory.com/755</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IntelliSense가 SQL Server Management Studio에서 작동하지 않습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SQL Server Management Studio 2008 R2를 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IntelliSense는 SA 계정과 완벽하게 연동됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 Windows Authentication(윈도우 인증) 사용자에게는 작동하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자가 db_owner 역할로 마스터 db에 액세스할 수 있지만 sysadmin은 아닙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 문제를 해결하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 질문 1 &lt;a href=&quot;https://stackoverflow.com/q/552458/4275342&quot;&gt;또는&lt;/a&gt; 질문 &lt;a href=&quot;https://stackoverflow.com/q/20379681/4275342&quot;&gt;2&lt;/a&gt; 및 질문 &lt;a href=&quot;https://stackoverflow.com/a/13270249/4275342&quot;&gt;3&lt;/a&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;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IntelliSense 사용:&lt;/font&gt;&lt;/font&gt;&lt;ul&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 쿼리 창은 도구 &amp;gt;&amp;gt; 옵션 &amp;gt; 텍스트 편집기 &amp;gt;&amp;gt; Transact-SQL &amp;gt;&amp;gt; IntelliSense로 이동하여 Enable IntelliSense를 선택하십시오.&lt;/font&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쿼리 창이 열릴 때마다 쿼리 &amp;gt;&amp;gt; Intellisense Enabled로 이동하십시오.&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문장 완성 활성화 : 도구 &amp;gt;&amp;gt; 옵션 &amp;gt; 텍스트 편집기 &amp;gt;&amp;gt; Transact-SQL &amp;gt;&amp;gt; General로 이동하여 Auto list members 및 Parameter 정보 상자를 확인하십시오.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IntelliSense 로컬 캐시 새로 고침 : &amp;gt; &amp;gt; 편집 &amp;gt; &amp;gt; IntelliSense &amp;gt; &amp;gt; 로컬 캐시 새로 고침 또는 키보드 단축키를 사용하여 새로 고침을 하십시오.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다시 시도하기 전에 새로 고침이 완료될 때까지 1-2분 정도 기다립니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저도 같은 문제가 있었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 것이 적절한 인텔리센스 기능을 보장하기 위해 활성화되었지만 작동하지 않았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SQLCMD 모드가 기본적으로 활성화되어 있다는 것을 깨달았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비활성화하면 Intellisense 기능이 복원됨 :)&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;kbd&gt;CTRL&lt;/kbd&gt;+&lt;kbd&gt;SHIFT&lt;/kbd&gt;+&lt;kbd&gt;R&lt;/kbd&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://msdn.microsoft.com/en-us/library/ms173434.aspx&quot; rel=&quot;noreferrer&quot;&gt;IntelliSense(SQL Server Management Studio) 문제 해결&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도구, 옵션, 텍스트 편집기, Transact-SQL, IntelliSense fixed Intellisense for me 아래의 Maximum 스크립트 크기를 늘립니다.&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;Edit &amp;gt; IntelliSense &amp;gt; Toggle Completion Mode
&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;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;Tools &lt;/strong&gt;&amp;gt; &lt;strong&gt;Options &lt;/strong&gt;&amp;gt; &lt;strong&gt;Text Editor &lt;/strong&gt;&amp;gt; &lt;strong&gt;Transact-SQL &lt;/strong&gt;&amp;gt; &lt;strong&gt;IntelliSense&lt;/strong&gt;로 이동하여 모든 항목을 체크하고 설정을 이렇게 설정합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8Tqm5.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8Tqm5.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;쿼리 &lt;/strong&gt;&amp;gt; &lt;strong&gt;SQLCMD 모드&lt;/strong&gt;로 이동하여 다음을 실행 중지합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VQnI2.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VQnI2.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;strong&gt;쿼리 &lt;/strong&gt;&amp;gt; &lt;strong&gt;SQLCMD 모드&lt;/strong&gt;를 켜고 끄는 것은 처음부터 활성화되지 않았음에도 불구하고 SSMS 18.1에서 문제를 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 모든 답변을 시도해 보았지만 소용이 없었고 포기한 후에도 Chow Lover의 답변에 언급된 &lt;strong&gt;SQLCMD 모드&lt;/strong&gt;가 궁금했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작동 여부를 확인하기 위해 전원을 켰지만 변경 사항이 없는 것을 확인하고 다시 전원을 끕니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인텔리센스는 갑자기 깨어났고 그 이후로 잘 일하고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 위/아래의 제안을 모두 시도해 보았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아무 효과도 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;옵션으로 이동하여 모든 것을 껐다 켰다 하는 것은&lt;strong&gt;&lt;em&gt; 효과&lt;/em&gt;&lt;/strong&gt;가 &lt;strong&gt;&lt;em&gt;없었습니다&lt;/em&gt;&lt;/strong&gt;.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SQLCMD 전환이&lt;strong&gt;&lt;em&gt; 작동&lt;/em&gt;&lt;/strong&gt;하지 &lt;strong&gt;&lt;em&gt;않았습니다&lt;/em&gt;&lt;/strong&gt;.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;편집 &lt;/em&gt;&amp;gt; &lt;em&gt;인텔리센스&lt;/em&gt;로 이동하여 모든 것을 껐다가 켰다 하는 것이 &lt;strong&gt;&lt;em&gt;작동&lt;/em&gt;&lt;/strong&gt;하지 &lt;strong&gt;&lt;em&gt;않았습니다&lt;/em&gt;&lt;/strong&gt;.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;RAM 및 캐시 크기를 &lt;strong&gt;&lt;em&gt;변경할 &lt;/em&gt;&lt;/strong&gt;수 없습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;재부팅을 해봤는데 안&lt;strong&gt;&lt;em&gt; 되더라고&lt;/em&gt;&lt;/strong&gt;요.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 마지막으로 한 가지는 (어떤 것이든 시도할 수 있는 절망적인 행동에서)...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지금까지 제시된 가장 어리석은 생각조차도...) 마침내...&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;translated&quot;&gt;새 쿼리 탭을 열었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열려 있던 스크립트 파일에서 코드를 복사하여 새 쿼리 탭에 붙여넣었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 지능이 다시 작동하기 시작하자 공포에 질려 계속해서 아연실색했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 쿼리 탭에서 작동하기 시작했을 뿐만 아니라...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원래 제가 쓰던 것에서도 작동하기 시작했어요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가끔 책상에 머리를 부딪치고 싶을 때가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 계획이 너무 컸습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 이것을 해야만 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도구 &amp;gt;&amp;gt; 옵션 &amp;gt;&amp;gt; 텍스트 편집기 &amp;gt;&amp;gt; Transact-SQL &amp;gt;&amp;gt; Intellisence&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;최대 스크립트 크기:&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;무제한&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;IntelliSense를 비활성화/다시&lt;/strong&gt; 활성화하는 것이 효과적이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도구 &amp;gt; 옵션 &amp;gt; 텍스트 편집기 &amp;gt; Transact-SQL &amp;gt; IntelliSense &amp;gt; Enable IntelliSense&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;제 SSMS Intellisense가 작동하지 않았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도구에서 Intellisense가 활성화되었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Intellisense Local 캐시를 새로 고쳤으나 여전히 운이 없습니다.&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;a href=&quot;https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-min-memory-per-query-server-configuration-option?view=sql-server-ver15&quot; rel=&quot;nofollow noreferrer&quot;&gt;쿼리당 SQL&lt;/a&gt; Server &lt;a href=&quot;https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-min-memory-per-query-server-configuration-option?view=sql-server-ver15&quot; rel=&quot;nofollow noreferrer&quot;&gt;최소 메모리&lt;/a&gt;(KB)를 늘리는 것이었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1024KB(1M)로 설정했는데 100MB로 늘려서 문제가 해결되었습니다.&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;strong&gt;DBA&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 papago-translate=&quot;translated&quot;&gt;따라서 사용자를 너무 많이 설정하면 메모리 서버가 부족하고 더 높은 값으로 설정하면 &lt;strong&gt;서버&lt;/strong&gt;가 다운될 수 &lt;strong&gt;있습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쿼리 설정당 최소 메모리:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Z7Rxd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Z7Rxd.png&quot; alt=&quot;Minimum memory per query settings:&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;SQL2008 R2 SP3를 설치했습니다.&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;예를 들어 서버 2005의 경우, 인텔리센스는 작동하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 확인하기 위한 명령은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT SERVERPROPERTY('ProductVersion');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;버전이 8 &lt;strong&gt;또는 9&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;a href=&quot;https://www.mssqltips.com/sqlservertip/2591/troubleshooting-intellisense-in-sql-server-management-studio-2012/&quot; rel=&quot;nofollow noreferrer&quot;&gt;sql&lt;/a&gt; server &lt;a href=&quot;https://www.mssqltips.com/sqlservertip/2591/troubleshooting-intellisense-in-sql-server-management-studio-2012/&quot; rel=&quot;nofollow noreferrer&quot;&gt;intellense 문제&lt;/a&gt;에 대한 자세한 내용은 &lt;a href=&quot;https://www.mssqltips.com/sqlservertip/2591/troubleshooting-intellisense-in-sql-server-management-studio-2012/&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;해결 방법으로는 sql 서버 플러그인을 &lt;a href=&quot;https://www.devart.com/dbforge/sql/sqlcomplete/download.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Autocomplete version express&lt;/a&gt;로 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://support.microsoft.com/en-us/help/2531482/fix-the-intellisense-feature-in-ssms-2008-r2-may-stop-working-after-yo&quot; rel=&quot;nofollow noreferrer&quot;&gt;비주얼&lt;/a&gt; 스튜디오를 설치하거나 업그레이드한 후 이 문제가 발생할 수 있습니다. &lt;a href=&quot;https://support.microsoft.com/en-us/help/2531482/fix-the-intellisense-feature-in-ssms-2008-r2-may-stop-working-after-yo&quot; rel=&quot;nofollow noreferrer&quot;&gt;sqIntelliSense의 IntelliSense의 문제&lt;/a&gt;는 무엇이며 &lt;a href=&quot;https://support.microsoft.com/en-us/help/2531482/fix-the-intellisense-feature-in-ssms-2008-r2-may-stop-working-after-yo&quot; rel=&quot;nofollow noreferrer&quot;&gt;이&lt;/a&gt;를 해결하기 위해 최신 버전으로 업데이트하여 &lt;a href=&quot;https://support.microsoft.com/en-us/help/2527041/archived-how-to-obtain-the-latest-service-pack-for-sql-server-2008-r2&quot; rel=&quot;nofollow noreferrer&quot;&gt;sql server를 업데이트&lt;/a&gt;하면 해결책을 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Auto list members 및 Parameter 정보 상자가 ENABLE이면 비활성화한 다음 ok 버튼을 누릅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작업이 끝나면 박스를 다시 활성화한 후 확인 버튼을 누릅니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Auto list members 및 Parameter 정보 상자가 DISUBLE이면 활성화 시킨 후 ok 버튼을 누릅니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;텍스트가 빨간색으로 표시되고 문장이 여러 개 있는 경우 인용문이 누락되어 있을 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구문 검사가 잘못됐거나.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마지막에 따옴표를 입력해 보세요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇다면 인텔센스는 다음 성명에 다시 참여해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 지능이 폭발할 때마다 저에게 효과가 있는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작업 중인 쿼리 맨 위로 이동하여 다음을 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Use DatabaseName; 
go
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SQL Server Management Studio에서 강조 표시하고 F5(데이터베이스 이름을 현재 작업 중인 데이터베이스로 바꿉니다)를 누릅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작동이 완료되면 Ctrl-shift-R을 누른 다음 약 30초 동안 기다립니다(최대 2분).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인텔리센스는 다시 시작해 다시 한번 현명한 제안을 해야 합니다(위의 F5 킥과 동일한 쿼리 창에 있다고 가정).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;천만에요, 제 것은 사이다 1파인트입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위의 모든 답변이 문제를 해결할 수 없을 때 추가하고 싶은 것이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 SSMS에서 인텔리센스가 작동하지 않는 구문 오류가 발생하면 이를 발견했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로 코드 블록 주변에서 /* */ 빠르게 처리하면 해결됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;누군가에게 도움이 되었으면 좋겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 단지 특정 데이터베이스에 문제가 있었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;같은 인스턴스의 다른 데이터베이스는 문제가 없었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로컬 캐시(Ctrl+Shift+R)를 새로 고치고 도구 --&amp;gt; 옵션을 통해 IntelliSense를 비활성화 및 활성화하려고 했지만 SQLCMD 모드를 활성화하고 비활성화하는 &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;SQL Server 업데이트 시 동일한 문제가 있었습니다. SQLCMD 모드 도구 &amp;gt; 옵션 &amp;gt; 쿼리 실행 &amp;gt; SQL Server &amp;gt; 일반 -&amp;gt; 선택 취소(기본적으로 SQLCMD 모드에서 쿼리 열기)를 해제하면 작동이 시작되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KRmrN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KRmrN.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;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/31580885/intellisense-is-not-working-in-sql-server-management-studio&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>sql-server</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/755</guid>
      <comments>https://closeapi.tistory.com/755#entry755comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:44:04 +0900</pubDate>
    </item>
    <item>
      <title>jQuery.on('change'), 함수() {}이(가) 동적으로 생성된 입력에 대해 트리거되지 않음</title>
      <link>https://closeapi.tistory.com/754</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery.on('change'), 함수() {}이(가) 동적으로 생성된 입력에 대해 트리거되지 않음&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;$('input').on('change', function() {
  // Does some stuff and logs the event to the console
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만, 그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.on('change')&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;.on&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의 대체물이 될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.live()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.delegate()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모두 포장지입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.bind()&lt;/code&gt;&lt;font 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;on&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).on('change', 'input', function() {
  // Does some stuff and logs the event to the console
});
&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;더 나은 이해를 위해 이 기사를 읽으십시오: http://elijahmanor.com/differences-between-jquery-bind-vs-live-vs-delegate-vs-on/&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 방법 중 하나를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#Input_Id&quot;).change(function(){   // 1st way
    // do your code here
    // Use this when your element is already rendered
});


$(&quot;#Input_Id&quot;).on('change', function(){    // 2nd way
    // do your code here
    // This will specifically call onChange of your element
});

$(&quot;body&quot;).on('change', '#Input_Id', function(){    // 3rd way
    // do your code here
    // It will filter the element &quot;Input_Id&quot; from the &quot;body&quot; and apply &quot;onChange effect&quot; on it
});
&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;$('body').on('change', '#id', function() {
  // Action goes here.
});
&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;요소가 DOM 로드에 있는 경우에만 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#target&quot;).change(function(){
    //does some stuff;
});
&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;.parent-element&quot;).on('change', '#target', function(){
   //does some stuff;
});
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;$(&quot;#id&quot;).change(function(){
    //does some stuff;
});
&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;$('body').ready(function(){
   $(document).on('change', '#elemID', function(){
      // 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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소가 사용자 입력을 받을 때 발생하는 '입력' 이벤트를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).on('input', '#input_id', function() {
  // this will fire all possible change actions
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://www.w3schools.com/jsref/event_oninput.asp&quot; rel=&quot;nofollow noreferrer&quot;&gt;w3&lt;/a&gt;의 문서&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$(document).on('change', '#id', aFunc);

function aFunc() {
  // code here...
}
&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/13418963/jquery-onchange-function-not-triggering-for-dynamically-created-inputs&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/754</guid>
      <comments>https://closeapi.tistory.com/754#entry754comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:43:55 +0900</pubDate>
    </item>
    <item>
      <title>릴리스 버전 iOS Swift에 대해 println()을 제거합니다.</title>
      <link>https://closeapi.tistory.com/753</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;릴리스 버전 iOS Swift에 대해 println()을 제거합니다.&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;println()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 디버그 빌드에 있지 않으면 Swift 코드를 호출합니다.&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;println()&lt;/code&gt;&lt;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 DEBUG/#ENDIF&lt;/code&gt;&lt;font 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;println&lt;/code&gt;&lt;font 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;func println(object: Any) {
    Swift.println(object)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로깅을 중지할 시간이 되면 해당 기능의 본문을 주석으로 달기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;func println(object: Any) {
    // Swift.println(object)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 조건을 사용하여 자동으로 만들 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;func println(object: Any) {
    #if DEBUG
        Swift.println(object)
    #endif
}
&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;스위프트 2.0에서 &lt;strong&gt;편집&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;println&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로 변경됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;print&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 불행히도 이제는 가변 첫 번째 매개 변수가 있습니다. 멋지지만 Swift에는 &quot;스플랫&quot; 연산자가 없으므로 코드의 가변을 전달할 수 없기 때문에 쉽게 재정의할 수 없습니다(문자 그대로만 만들 수 있음).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 일반적으로 한 가지 값만 인쇄하는 경우에는 축소된 버전을 만들 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;func print(items: Any..., separator: String = &quot; &quot;, terminator: String = &quot;\n&quot;) {
    Swift.print(items[0], separator:separator, terminator: terminator)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Swift 3에서는 첫 번째 파라미터의 외부 라벨을 억제해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;func print(_ items: Any..., separator: String = &quot; &quot;, terminator: String = &quot;\n&quot;) {
    Swift.print(items[0], separator:separator, terminator: terminator)
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Swift 4.x용으로 업데이트됨:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Swift 2.0/3.0과 Xcode 7/8이 베타 버전이 아닌 상태에서 릴리스 빌드에서 인쇄 기능을 비활성화하는 방법에 약간의 변화가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위에서 @matt 와 @Nate Birkholz 가 언급한 몇가지 중요한 사항들은 여전히 유효합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;println()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기능이 대체되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;print()&lt;/code&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;#if DEBUG&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;macro 값을 포함하려면 &quot;Swift Compiler - Custom Flags - Other Flags&quot;를 정의해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-D DEBUG&lt;/code&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;Swift.print()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;를 사용할 수 있도록 전역 범위에서 기능합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;print()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드에서는 정상적으로 작동하지만 debug가 아닌 빌드의 경우 출력이 제거됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Swift 2.0/3.0에서 이 작업을 수행하기 위해 전역 범위에서 추가할 수 있는 기능 서명은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;func print(items: Any..., separator: String = &quot; &quot;, terminator: String = &quot;\n&quot;) {

    #if DEBUG

    var idx = items.startIndex
    let endIdx = items.endIndex

    repeat {
        Swift.print(items[idx], separator: separator, terminator: idx == (endIdx - 1) ? terminator : separator)
        idx += 1
    }
    while idx &amp;lt; endIdx

    #endif
}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고: 기본 구분 기호는 공백으로 설정하고 기본 종단 기호는 새 줄로 설정했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원하는 경우 프로젝트에서 이를 다르게 구성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;print&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;이를 구성하는 가장 좋은 방법은 DebugOptions와 같은 유틸리티 파일을 프로젝트에 추가하는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Swift) 이 함수를 전역 범위에 배치할 수 있습니다.&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;스위프트 3 기준으로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;++&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연산자가 더 이상 사용되지 않습니다.&lt;/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;print&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;print(myExpensiveFunction())
&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;DEBUG&lt;/code&gt;&lt;font 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;#if DEBUG
print(myExpensiveFunction())
#endif
&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;myExpensiveFunction&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;릴리스 빌드에서 호출된 것으로부터.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 자동 &lt;em&gt;폐쇄&lt;/em&gt;를 사용하여 평가를 한 단계 뒤로 밀 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 제 솔루션(Swift 3)을 다음과 같이 다시 작성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;func print(_ item: @autoclosure () -&amp;gt; Any, separator: String = &quot; &quot;, terminator: String = &quot;\n&quot;) {
    #if DEBUG
    Swift.print(item(), separator: separator, terminator: terminator)
    #endif
}
&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;item()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;릴리스 모드에서 호출되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;print(myExpensiveFunction())&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 통화는 평가되지 않고 종료 상태로 포장되며 릴리스 모드에서는 전혀 평가되지 않기 때문에 비용 부담이 중단됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;h1&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쉬운 답 - Xcode 14, Swift 5&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트에 새 파일을 만들고 다음 코드에 붙여넣습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import Foundation

func print(_ items: Any..., separator: String = &quot; &quot;, terminator: String = &quot;\n&quot;) {
    #if DEBUG
    Swift.print(items, separator: separator, terminator: terminator)
    #endif
}
&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;이 함수 서명은 기본 Swift와 일치합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;print&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;Swift.print()&lt;/code&gt;&lt;font 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;print()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;평소와 다름없이 디버그 빌드로만 인쇄됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;말씀하신 것처럼, 저는 학생이기 때문에 조금 더 명확하게 정의된 것들이 뒤따라야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;많은 연구 끝에 제가 따라야 할 순서는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Xcode 프로젝트 창의 왼쪽에 있는 File Navigator(파일 탐색기) 상단에 있는 프로젝트 이름을 클릭합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트 이름과 빌드 대상이 몇 개인지, iOS SDK 버전이 적혀있는 라인입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;Build Settings&lt;/strong&gt;(빌드 설정) 탭을 선택하고 아래쪽 가까운 &quot;&lt;strong&gt;Swift Compiler(&lt;/strong&gt;스위프트 컴파일러) - Custom Flags(&lt;strong&gt;사용자&lt;/strong&gt; 지정 &lt;strong&gt;플래그&lt;/strong&gt;)&quot; 섹션으로 스크롤합니다.&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;translated&quot;&gt;&lt;strong&gt;디버그&lt;/strong&gt; 행을 클릭하여 선택합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마우스 커서를 선 오른쪽에 놓고 두 번 클릭합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;목록 보기가 나타납니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;목록 보기의 왼쪽 하단에 있는&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;텍스트 필드에 텍스트를 입력합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-D DEBUG&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;Return&lt;/strong&gt;을 눌러 줄을 커밋합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 Swift 파일을 프로젝트에 추가합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일에 대한 사용자 지정 클래스를 만들 수 있으므로 다음 행에 텍스트를 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class Log {

  var intFor : Int

  init() {
    intFor = 42
   }

  func DLog(message: String, function: String = __FUNCTION__) {
    #if DEBUG
      println(&quot;\(function): \(message)&quot;)
    #endif
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오늘 Xcode에서 수업을 받는 데 어려움을 겪고 있어서 필요 이상으로 무게가 많이 나갈 수도 있습니다.&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;println()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;적용 가능한 모든 클래스의 속성으로 추가:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   let logFor = Log()
&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;이제 모든 인스턴스(instance)를 교체할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;println()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;logFor.DLog()&lt;/code&gt;&lt;font 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;println()&lt;/code&gt;&lt;font 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;스위프트 3에서 완벽하게 작동하는 기능은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;func gLog&amp;lt;T&amp;gt;( _ object: @autoclosure() -&amp;gt; T, _ file: String = #file, _ function: String = #function, _ line: Int = #line)
    {
    #if DEBUG
        let value = object()
        let stringRepresentation: String

        if let value = value as? CustomDebugStringConvertible
            {
            stringRepresentation = value.debugDescription
            }
        else if let value = value as? CustomStringConvertible
            {
            stringRepresentation = value.description
            }
        else
            {
            fatalError(&quot;gLog only works for values that conform to CustomDebugStringConvertible or CustomStringConvertible&quot;)
            }

        let fileURL = NSURL(string: file)?.lastPathComponent ?? &quot;Unknown file&quot;
        let queue = Thread.isMainThread ? &quot;UI&quot; : &quot;BG&quot;
    let gFormatter = DateFormatter()
    gFormatter.dateFormat = &quot;HH:mm:ss:SSS&quot;
        let timestamp = gFormatter.string(from: Date())

        print(&quot;✅ \(timestamp) {\(queue)} \(fileURL) &amp;gt; \(function)[\(line)]: &quot; + stringRepresentation + &quot;\n&quot;)
    #endif
    }
&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://i.stack.imgur.com/53fVw.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/53fVw.png&quot; alt=&quot;screenshot of output&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;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;녹색 체크 표시는 콘솔에서 인쇄(gLog) 메시지를 빠르게 볼 수 있도록 하는데 사용되며, 다른 메시지가 바다에 잠겨 있을 수도 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시간/날짜 도장&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행 중인 스레드 - MainThread(UI라고 함) 또는 MainThread(배경 스레드의 경우 BG라고 함) 중 하나입니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;gLog 메시지가 있는 파일의 이름&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;gLog 메시지가 있는 파일 내의 함수&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;gLog 메시지의 행 번호&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출력하고자 하는 실제 gLog 메시지&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 다른 누군가에게 유용하기를 바랍니다!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;Swift 2.1&lt;/strong&gt; 및 &lt;strong&gt;Xcode 7.1.1&lt;/strong&gt;로 테스트됨&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;스위프트 컴파일러에 의해 &lt;/strong&gt;빈&lt;strong&gt; 함수가 제거&lt;/strong&gt;되는 것을 알게 되면 릴리스 버전에서 모든 인쇄문을 제외할 수 있는 쉬운 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고 사항: Objective-C 시대에는 컴파일러가 시작하기 전 NSLog 문을 제거하는 데 사용할 수 있는 pre-parser가 있었습니다. &lt;a href=&quot;https://stackoverflow.com/a/21366390/1869369&quot;&gt;여기&lt;/a&gt; 제 답변에서 설명한 것처럼 말입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 Swift는 더 이상 사전 파서가 없기 때문에 이러한 접근 방식은 더 이상 유효하지 않습니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;릴리스 빌드에서 로그를 제거할 필요 없이 쉽게 구성할 수 있는 고급 로그 기능으로 오늘날 사용하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 서로 다른 컴파일러 플래그를 설정하여 필요에 따라 기록되는 정보를 조정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필요에 따라 기능을 조정할 수 있습니다. 개선을 위한 어떤 제안이라도 환영합니다!&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Gobal log() function
//
// note that empty functions are removed by the Swift compiler -&amp;gt; use #if $endif to enclose all the code inside the log()
// these log() statements therefore do not need to be removed in the release build !
//
// to enable logging
//
// Project -&amp;gt; Build Settings -&amp;gt; Swift Compiler - Custom flags -&amp;gt; Other Swift flags -&amp;gt; Debug
// add one of these 3 possible combinations :
//
//      -D kLOG_ENABLE
//      -D kLOG_ENABLE -D kLOG_DETAILS
//      -D kLOG_ENABLE -D kLOG_DETAILS -D kLOG_THREADS
//
// you can just call log() anywhere in the code, or add a message like log(&quot;hello&quot;)
//
func log(message: String = &quot;&quot;, filePath: String = #file, line: Int = #line, function: String = #function) {
            #if kLOG_ENABLE

            #if kLOG_DETAILS

            var threadName = &quot;&quot;
            #if kLOG_THREADS
                threadName = NSThread.currentThread().isMainThread ? &quot;MAIN THREAD&quot; : (NSThread.currentThread().name ?? &quot;UNKNOWN THREAD&quot;)
                threadName = &quot;[&quot; + threadName + &quot;] &quot;
            #endif

            let fileName = NSURL(fileURLWithPath: filePath).URLByDeletingPathExtension?.lastPathComponent ?? &quot;???&quot;

            var msg = &quot;&quot;
            if message != &quot;&quot; {
                msg = &quot; - \(message)&quot;
            }

            NSLog(&quot;-- &quot; + threadName + fileName + &quot;(\(line))&quot; + &quot; -&amp;gt; &quot; + function + msg)
        #else
            NSLog(message)
        #endif
    #endif
}
&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://i.stack.imgur.com/fw7Nf.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fw7Nf.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 플래그가 켜져 있는 출력 예는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   2016-01-13 23:48:38.026 FoodTracker[48735:4147607] -- [MAIN THREAD] ViewController(19) -&amp;gt; viewDidLoad() - hello
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;log()가 있는 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    override func viewDidLoad() { log(&quot;hello&quot;)
    super.viewDidLoad()

   // Handle the text field's user input through delegate callbacks
   nameTextField.delegate = self
}
&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;-D DEBUG&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;준비되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;OTHER_SWIFT_FLAGS&lt;/code&gt;&lt;font 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;#if !DEBUG
    func print(_ items: Any..., separator: String = &quot; &quot;, terminator: String = &quot;\n&quot;) { }
#endif
&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;X코드 8은 몇 가지 &lt;a href=&quot;https://miqu.me/blog/2016/07/31/xcode-8-new-build-settings-and-analyzer-improvements/&quot; rel=&quot;noreferrer&quot;&gt;새로운 빌드 설정&lt;/a&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;Active Compilation Conditions&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;기타 플래그&lt;/strong&gt; 설정과 유사한 방식으로 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;Active Compilation Conditions&quot;는 조건부 컴파일 플래그를 스위프트 컴파일러에 전달하기 위한 새로운 빌드 설정입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;XCode 8(8.3.2에서 테스트)에 따라 기본적으로 다음을 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/b0B18.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/b0B18.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 아무런 구성 없이 다음을 작성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#if DEBUG
    print(&quot;⚠️ Something weird happened&quot;)
#endif
&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;Varun Naharia는 지금까지 더 나은 해결책을 가지고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그의 대답과 리베라의...&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;창조하다, 창안&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-D DEBUG&lt;/code&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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 코드를 추가합니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;#if !DEBUG
 public func print(_ items: Any..., separator: String = &quot; &quot;, terminator: String = &quot;\n&quot;) {
}
#endif
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 코드는 다음과 같이 변환됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;print&lt;/code&gt;&lt;font 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;스위프트 4 X코드 10.0&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;func dPrint(_ message: @autoclosure () -&amp;gt; Any) {
    #if DEBUG
    print(message())
    #endif
}
&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;@autoclosure&lt;/code&gt;&lt;font 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;Swift.print(_ items: Any..., separator: String = default, terminator: String = default)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수, 제 솔루션에는 파라미터가 하나밖에 없습니다. 대부분의 경우 인쇄 함수가 콘솔에 정보만 표시하기 때문에 여러 개의 파라미터를 전달하지 않고, 파라미터를 String으로 변환할 수 있기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;\(param1)&quot;+&quot;\(param2)&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 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;import UIKit

class DLog: NSObject {

   init(title:String, log:Any) {
       #if DEBUG
           print(title, log)
       #endif

   }

}
&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;_ = DLog(title:&quot;any title&quot;, log:Any)
&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://i.stack.imgur.com/WArzf.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WArzf.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 정의할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;debug_println&lt;/code&gt;&lt;font 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;#if DEBUG
  println()
#endif
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 솔루션은 수업 전에 AppDelegate에서 이 코드를 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Disable console log in live app
#if !arch(x86_64) &amp;amp;&amp;amp; !arch(i386)
    public func debugPrint(items: Any..., separator: String = &quot; &quot;, terminator: String = &quot;\n&quot;) {

    }
    public func print(_ items: Any..., separator: String = &quot; &quot;, terminator: String = &quot;\n&quot;) {

    }
#endif

class AppDelegate: UIResponder, UIApplicationDelegate {
// App Delegate Code 

}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더욱 간단합니다. 릴리스 빌드에서 assert를 제거하고 인쇄만 호출한다는 사실을 활용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 릴리스를 위해 작성할 때 비어 있으므로 모든 &lt;em&gt;로그 호출&lt;/em&gt;(예, Log.da에 대한 호출)이 제거됩니다.&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;Log&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래. 저는 GitHub에서 이모티콘(가독성을 위해)과 로그 주제(일관성을 위해)가 포함된 좀 더 충실한 버전을 가지고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/Gatada/JBits/blob/master/Project/Utility/Log.swift&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://github.com/Gatada/JBits/blob/master/Project/Utility/Log.swift&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public enum Log {

    /// A date formatter used to create the timestamp in the log.
    ///
    /// This formatter is only created if it is actually used, reducing the
    /// overhead to zero.
    static var formatter: DateFormatter?

    // MARK: - API

    /// Call to print message in debug area.
    ///
    /// Asserts are removed in release builds, which make
    /// the function body empty, which caused all calls to
    /// be removed as well.
    ///
    /// Result is zero overhead for release builds.
    public static func da(_ message: String) {
        assert(debugAreaPrint(message))
    }

    // MARK: - Helpers

    /// The function that actually does the printing. It returns `true` to
    /// prevent the assert from kicking in on debug builds.
    private static func debugAreaPrint(_ message: String) -&amp;gt; Bool {
        print(&quot;\(timestamp) - \(message)&quot;)
        return true
    }

    /// Creates a timestamp used as part of the temporary logging in the debug area.
    static private var timestamp: String {

        if formatter == nil {
            formatter = DateFormatter()
            formatter!.dateFormat = &quot;HH:mm:ss.SSS&quot;
        }

        let date = Date()
        return formatter!.string(from: date)
    }
}
&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;Log.da(&quot;This is only handled in a debug build.&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;디버그 빌드를 실행할 &lt;em&gt;때&lt;/em&gt;만 Xcode 디버그 영역에 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;13:36:15.047 - 디버그 빌드에서만 처리됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 프로젝트는 Objective C에서 개발되었지만 작년부터 Swift에서 새로운 코드를 병합하기 시작하여 아래 솔루션이 효과가 있었고 My Swift 상수 파일에 해당 코드를 추가했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;func print(_ items: Any..., separator: String = &quot; &quot;, terminator: String = &quot;\n&quot;) {
    #if DEBUG
    items.forEach {
        Swift.print($0, separator: separator, terminator: terminator)
    }
    #endif
}
&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;func print(_ items: Any...) {
    #if DEBUG
        Swift.print(items[0])
    #endif
}
&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/26913799/remove-println-for-release-version-ios-swift&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>SWIFT</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/753</guid>
      <comments>https://closeapi.tistory.com/753#entry753comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:43:48 +0900</pubDate>
    </item>
    <item>
      <title>x-www-form-urlencoded를 사용하여 Angular2를 강제 POST하는 방법</title>
      <link>https://closeapi.tistory.com/752</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;x-www-form-urlencoded를 사용하여 Angular2를 강제 POST하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Angular2(최종)를 사용하여 .jsp 페이지를 사용하여 다소 REST-ish API를 제공하는 오래된 레거시 Tomcat 7 서버에 게시해야 하는 프로젝트가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트가 단순한 JQuery 앱에서 AJAX 요청을 수행할 때는 잘 작동했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만, 프로젝트의 범위가 점점 넓어져 더 현대적인 틀을 사용하여 다시 써야 할 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Angular2는 한 가지 예외를 제외하고는 작업에 매우 적합해 보입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;API가 추출하지 않는 폼 데이터를 제외한 어떤 옵션도 사용하여 POST 요청을 수행하는 것을 거부합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;API는 모든 것이 자바의 것에 의존하여 urlencoded 될 것으로 예상합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;request.getParameter(&quot;param&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;내 사용자.service.ts:에서 가져온 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;import { Injectable }    from '@angular/core';
import { Headers, Response, Http, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';

@Injectable()
export class UserService {
    private loggedIn = false;
    private loginUrl = 'http://localhost:8080/mpadmin/api/login.jsp';
    private headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded'});

    constructor(private http: Http) {}

    login(username, password) {
        return this.http.post(this.loginUrl, {'username': username, 'password':  password}, this.headers)
            .map((response: Response) =&amp;gt; {
                let user = response.json();
                if (user) {
                    localStorage.setItem('currentUser', JSON.stringify(user));
                }
            }
        );
    }
}
&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 사람이 이런 일을 겪었습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Angular2가 오래된 Java API를 사용하여 읽을 수 있는 형식으로 데이터를 게시하도록 강제하는 방법은 무엇입니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;request.getParameter(&quot;param&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;Angular &amp;gt; 4.3(New HTTP Client)의 경우 다음을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let body = new URLSearchParams();
body.set('user', username);
body.set('password', password);

let options = {
    headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded')
};

this.http
    .post('//yourUrl.com/login', body.toString(), options)
    .subscribe(response =&amp;gt; {
        //...
    });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예상대로 작동하기 위한 3가지 사항을 참고합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;신체에 URL 검색 파라미터 사용&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;본문을 문자열로 변환&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;머리글의 내용 유형 설정&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;주의&lt;/strong&gt;:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오래된 브라우저는 폴리필이 필요합니다!&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm i url-search-params-polyfill --save&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음을 폴리필에 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;import 'url-search-params-polyfill';&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;업데이트 2020년 6월:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 답변은 4년이 지났으며 Angular의 API 변경으로 인해 더 이상 유효하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 버전 접근 방법에 대해서는 좀 더 최근 답변을 참고하시기 바랍니다.&lt;/font&gt;&lt;/strong&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;이 작업은 다음을 사용하여 수행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;URLSearchParams&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요청 및 각도의 본문은 자동으로 컨텐츠 유형을 다음과 같이 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;application/x-www-form-urlencoded&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 신체를 제대로 부호화합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let body = new URLSearchParams();
body.set('username', username);
body.set('password', password);

this.http.post(this.loginUrl, body).map(...);
&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;let body = `username=${username}&amp;amp;password=${password}`;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;헤더 옵션을 다음과 같이 설정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;this.http.post(this.loginUrl, body, { headers: headers }).map(...);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여전히 답을 찾고 있는 분들을 위해 Angular 5와 HttpClient로 해결한 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const formData = new FormData();

// append your data
formData.append('myKey1', 'some value 1');
formData.append('myKey1', 'some value 2');
formData.append('myKey3', true);

this.httpClient.post('apiPath', formData);
&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;이것이 Angular 7의 효과입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const payload = new HttpParams()
  .set('username', username)
  .set('password', password);

this.http.post(url, payload);
&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;HttpParams 개체는 불변입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 다음과 같은 것을 하는 것은 효과가 없을 것이고, 그것은 당신에게 빈 몸을 줄 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const payload = new HttpParams();
payload.set('username', username);
payload.set('password', password);

this.http.post(url, payload);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각9&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;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; let params = new HttpParams({
      fromObject: { email: usuario.email, password: usuario.password, role: usuario.role },
    });

    let httpOptions = {
      headers: new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' }),
    };
    
    return this.http.post(`${this.url}/usuario/signup`, params.toString(), httpOptions).pipe(
      map(
        (resp) =&amp;gt; {
        
          console.log('return http', resp);
          return resp;
        },
        (error) =&amp;gt; {
          console.log('return http error', error);
          return error;
        }
      )
    );&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;fromString&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아닌&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fromObject&lt;/code&gt;&lt;font 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;login(userName: string, password: string) {
const headers = new Headers();
headers.append('Accept', 'application/json');
headers.append('Content-Type', 'application/x-www-form-urlencoded');
headers.append( 'No-Auth', 'True');

const body = new URLSearchParams();
body.set('username', userName);
body.set('password', password);
body.set('grant_type', 'password');

return this.http.post(
    this.baseUrl + '/token'
   , body.toString()
   , { headers: headers }
  )
  .pipe(map(res =&amp;gt; res.json()))
  .pipe(map(res =&amp;gt; {
    localStorage.setItem('auth_token', res.auth_token);
    return true;
  }))
  .pipe(catchError((error: any) =&amp;gt; {
    return Observable.throw(error);
  }));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각도 형태를 사용할 경우 대부분의 매개 변수가 개체로 전송되므로 로그인 함수에 이 개체가 있을 가능성이 높습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;form.value = {username: 'someone', password:'1234', grant_type: 'password'}&lt;/code&gt;&lt;font 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;x-www-form-&lt;/strong&gt;url 부호화로 보내면 코드는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;export class AuthService {
    private headers = new HttpHeaders(
        {
            'Content-Type':  'application/x-www-form-urlencoded',
            Accept: '*/*',
        }
    );
  constructor(private http: HttpClient) { }

  login(data): Observable&amp;lt;any&amp;gt; {
    const body = new HttpParams({fromObject: data});
    const options = { headers: this.headers};
    return this.http.post(`${environment.baseUrl}/token`, body.toString(), options);
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Angular 12의 경우, 이것이 저에게 효과적이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;
  options = {
    headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded')
  };

  params = new HttpParams()
  .set(&quot;client_id&quot;, &quot;client_id&quot;)
  .set(&quot;client_secret&quot;, &quot;client_secret&quot;)
  .set(&quot;grant_type&quot;, &quot;grant_type&quot;)
  .set(&quot;scope&quot;, &quot;scope&quot;)

  getToken(){
    return this._http.post(`${URL}`, this.params, this.options)
  }

&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;import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; &lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 다른 것과 달리 String()은 중복되므로 사용하지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;얘들아 나는 이것에 대해 꽤 오랫동안 노력해왔고 조쉬 모로니 https://www.joshmorony.com/integrating-an-ionic-application-with-a-nodejs-backend/ 의 이 게시물 덕분에 나는 무엇이 문제인지 알아냈습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 api 테스트를 시작했을 때는 POSTMAN을 사용하고 있었는데 완벽하게 작동하고 있었는데 Ionic Angular로 구현을 해보니 문제가 되었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 게시물의 솔루션은 가져오기에 관한 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;body-parser&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 앱 미들웨어로 활용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;app.use(bodyParser.json())&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서버측 루트 파일(인덱스)에 저장할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 도움이 되기를 바랍니다, 감사합니다!&lt;/font&gt;&lt;/p&gt;&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각8&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;const headers = new HttpHeaders({
  'Content-Type': 'application/x-www-form-urlencoded'
});
const params = new HttpParams();
params.set('username', 'username');
params.set('password', 'password');

this.http.post(
  'https://localhost:5000/api',
  params.toString(),
  { headers }
);
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;export class MaintenanceService {

  constructor(private http: HttpClient) { }

  //header de requete http
  private headers = new HttpHeaders(
    {  'Content-Type':  'application/x-www-form-urlencoded' }
  );





// requete http pour recuperer le type des maintenances
 createMaintenance(data: createMaintenance){
  const options = { headers: this.headers};
   return this.http.post('api/v2/admin/maintenances', data, options ).subscribe(status=&amp;gt; console.log(JSON.stringify(status)));
 }
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;let options = {
    headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded')
};
let body = new URLSearchParams();

body.set('userId', userId);
body.set('discussionId', discussionId);
&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/39863317/how-to-force-angular2-to-post-using-x-www-form-urlencoded&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Angular</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/752</guid>
      <comments>https://closeapi.tistory.com/752#entry752comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:43:35 +0900</pubDate>
    </item>
    <item>
      <title>파일에 로컬 데이터 로드가 새 행을 추가하는 대신 mariadb 열 저장소의 이전 데이터를 바꿉니다.</title>
      <link>https://closeapi.tistory.com/751</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일에 로컬 데이터 로드가 새 행을 추가하는 대신 mariadb 열 저장소의 이전 데이터를 바꿉니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;mariadb load data local in file을 사용하여 bulk data를 로딩하고 있는데 매번 새로운 데이터를 기존 데이터로 대체하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전 데이터와 새 데이터를 모두 mariadb 컬럼 스토어 엔진 데이터 웨어하우스에 보관해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이에 관한 어떤 도움이라도 대단히 감사하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;self.log.info(&quot;Bulk inserting rows into MySQL destination...&quot;)
with closing(mysql_destination.get_conn()) as conn:
   with closing(conn.cursor()) as cursor:
      cursor.execute(
      &quot;LOAD DATA LOCAL INFILE '%s' INTO &quot;
      &quot;TABLE %s LINES TERMINATED BY '\r\n' (%s)&quot; %
      (tmpfile.name,
      self.mysql_destination_table,
      &quot;, &quot;.join(selected_columns))
      )
   conn.commit()
tmpfile.close()

&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블 구조&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE TABLE `daily_sales_msr_fact`  (
  `id` int(11) NULL DEFAULT NULL COMMENT 'autoincrement=1',
  `mtime` timestamp(0) NOT NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP,
  `dpid` int(11) NOT NULL,
  `route_id` int(11) NOT NULL,
  `skid` int(11) NOT NULL,
  `prid` int(11) NOT NULL,
  `group` int(11) NOT NULL,
  `family` int(11) NOT NULL,
  `date` date NOT NULL DEFAULT '1990-01-01',
  `sale` double NOT NULL,
  `dprice` double NOT NULL,
  `rprice` double NOT NULL,
  `dcc_price` double NOT NULL,
  `issue` double NOT NULL,
  `return` double NULL DEFAULT NULL,
  `memos` int(11) NOT NULL,
  `vmemos` int(11) NOT NULL,
  `tlp` double NOT NULL,
  `cnc` double NOT NULL,
  `vp` double NOT NULL,
  `mvp` double NOT NULL,
  `p` double NOT NULL,
  `tcc` double NOT NULL,
  `dcc` double NOT NULL,
  `ecnc` double NOT NULL,
  `gt` double NOT NULL,
  `struc` double NOT NULL,
  `semi_struc` double NOT NULL,
  `streetk` double NOT NULL,
  `mass_hrc` double NOT NULL,
  `pop_hrc` double NOT NULL,
  `prem_hrc` double NOT NULL,
  `kaccounts` double NOT NULL,
  `ogrocery` double NOT NULL,
  `snb_cnc` double NULL DEFAULT NULL,
  `pay_n_go` double NULL DEFAULT NULL,
  `shop_n_browse` double NULL DEFAULT NULL,
  `entertainment` double NULL DEFAULT NULL,
  `outlets` int(11) NOT NULL,
  `apps_version` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
  `updated` timestamp(0) NULL DEFAULT NULL,
  `visited` int(11) NULL DEFAULT NULL
) ENGINE = Columnstore CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/69264363/load-data-local-in-file-is-replacing-old-data-in-mariadb-columnstore-instead-of&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/751</guid>
      <comments>https://closeapi.tistory.com/751#entry751comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:43:25 +0900</pubDate>
    </item>
    <item>
      <title>Spring Controller @RequestBody 파일 업로드 가능합니까?</title>
      <link>https://closeapi.tistory.com/750</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring Controller @RequestBody 파일 업로드 가능합니까?&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;또한, 저는 @RequestBody를 사용하여 더 많은 변수가 추가될 것이므로 포장지에 @Valid 주석을 사용할 수 있도록 하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public @ResponseBody WebResponse&amp;lt;Boolean&amp;gt; updateEUSettings(
    final Locale locale,
    @Validated @ModelAttribute final EUPSettingsWrapper endUserPortalSettingsWrapper) {
}
&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;public class EUPSettingsWrapper {

    private String label;
    private MultipartFile logo;
// getter , setters..etc...
}
&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;하지만 모델 속성에서 @RequestBody로 변환하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 시도하는 방법은 파일 업로드를 요청 매개변수로 분리하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public @ResponseBody WebResponse&amp;lt;Boolean&amp;gt; updateEUSettings(
    final Locale locale,
    @Validated @RequestBody final EUPSettingsWrapper endUserPortalSettingsWrapper, 
    @RequestParam(value = &quot;file1&quot;, required = true) final MultipartFile logo) {

    endUserPortalSettingsWrapper.setLogo(logo);

    // ...
}
&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;모의 MVC에서는 다음과 같이 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;getMockMvc().perform(fileUpload(uri).file(logo)
                        .accept(MediaType.APPLICATION_JSON)
                        .content(JSONUtils.toJSON(wrapper))
                        .contentType(MediaType.MULTIPART_FORM_DATA))
                        .andExpect(status().isOk());
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 이런 오류가 발생하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data' not supported
&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;멀티파트 파일 업로드가 @RequestBody에서 어떻게 사용될 수 있는지 아는 사람?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에 제가 잘못하고 있는 게 있나요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 필드와 파일이 포함된 양식을 제출하는 것만 하면 되기 때문에 실제로 생활을 간소화할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;@RequestBody는 당신이 하려는 일을 위해 &lt;strong papago-id=&quot;8-1&quot;&gt;필요&lt;/strong&gt;하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반 Spring MVC 기능을 사용할 수 있으므로 컨트롤러 방식은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@ResponseBody
public WebResponse&amp;lt;Boolean&amp;gt; updateEUSettings(
     Locale locale, 
     @Valid EUPSettingsWrapper endUserPortalSettingsWrapper, 
     @RequestParam(value = &quot;file1&quot;, required = true) MultipartFile logo
) {


}
&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;enctype=&quot;multipart/form-data&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring MVC 테스트에서는 다음과 같이 적을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;getMockMvc().perform(fileUpload(uri).file(&quot;file1&quot;, &quot;some-content&quot;.getBytes()) 
                        .param(&quot;someEuSettingsProperty&quot;, &quot;someValue&quot;)
                        .param(&quot;someOtherEuSettingsProperty&quot;, &quot;someOtherValue&quot;)
                        .accept(MediaType.APPLICATION_JSON)
                        .contentType(MediaType.MULTIPART_FORM_DATA))
                        .andExpect(status().isOk());
&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;spring-servlet.xml에 다음 bean을 추가하여 multipart 요청에 대한 지원을 추가하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;bean id=&quot;multipartResolver&quot;
    class=&quot;org.springframework.web.multipart.commons.CommonsMultipartResolver&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 &lt;strong papago-id=&quot;13-1&quot;&gt;commons-file&lt;/strong&gt; update &lt;strong papago-id=&quot;13-1&quot;&gt;jar&lt;/strong&gt;에 대한 종속성을 추가하는 것도 잊지 마십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@RequestBody를 사용할 방법을 찾을 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 다음과 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@RequestMapping(value = &quot;/uploadStuff&quot;, method = RequestMethod.POST)
public MyViewDto doStuff(@RequestPart(&quot;json&quot;) @Valid MyDto dto,
                         @RequestPart(&quot;file&quot;) MultipartFile file) { ... }
&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;MockMultipartFile jsonFile = new MockMultipartFile(&quot;json&quot;, &quot;&quot;,
            &quot;application/json&quot;, &quot;{}&quot;.getBytes());
MockMultipartFile dataFile = new MockMultipartFile(&quot;file&quot;, &quot;foo.zip&quot;, &quot;application/octet-stream&quot;, bytes);

mockMvc.perform(fileUpload(&quot;/uploadStuff&quot;)
            .file(dataFile)
            .file(jsonFile))
            .andExpect(status().isOk());
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 문제로 조금 힘들어하다가 결국 단순한 매개변수로 통과하게 되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;요청 시 전달할 내용이 많지 않으면 괜찮습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;myMethod(@RequestParam(&quot;file&quot;) MultipartFile myFile,
        @RequestParam(&quot;param1&quot;) Float param1, @RequestParam(&quot;param2&quot;) String param2 {}
&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;스프링 4 이상의 경우 다음을 수행하여 전체 개체를 가져올 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public ResponseEntity&amp;lt;Object&amp;gt; upload(@Payload EUPSettingsWrapper wrapper) {

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 또한 태그 없이 작동해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public ResponseEntity&amp;lt;Object&amp;gt; upload(EUPSettingsWrapper wrapper) {

}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/23533355/spring-controller-requestbody-with-file-upload-is-it-possible&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>spring</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/750</guid>
      <comments>https://closeapi.tistory.com/750#entry750comment</comments>
      <pubDate>Sat, 28 Oct 2023 07:57:51 +0900</pubDate>
    </item>
    <item>
      <title>유튜브 동영상 URL을 코드 내장으로 변환</title>
      <link>https://closeapi.tistory.com/749</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유튜브 동영상 URL을 코드 내장으로 변환&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유튜브 url을 url을 embed로 변환하기 위해 이것을 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;text(t).html().replace(/(?:http:\/\/)?(?:www\.)?(?:youtube\.com)\/(?:watch\?v=)?(.+)/g, '&amp;lt;iframe width=&quot;320&quot; height=&quot;280&quot; src=&quot;//www.youtube.com/embed/$1&quot; frameborder=&quot;0&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 하면 스스로를 무시할 수 있을까요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;t = $('&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;').text(t).html().replace(/(?:http:\/\/)?(?:www\.)?(?:youtube\.com)\/(?:watch\?v=)?(.+)/g, '&amp;lt;iframe width=&quot;400&quot; height=&quot;380&quot; src=&quot;//www.youtube.com/embed/$1&quot; frameborder=&quot;0&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 내장된 링크.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/1adfD9&quot; frameborder=&quot;0&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 말해, 어떻게 하면 이런 링크에서만 작동하고 다른 모든 것은 무시할 수 있을까요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;http://www.youtube.com/watch?v=1adfD9
www.youtube.com/watch?v=1adfD9
youtube.com/watch?v=1adfD9
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/3452546/javascript-regex-how-to-get-youtube-video-id-from-url&quot; papago-id=&quot;5-1&quot;&gt;저&lt;/a&gt;는 이 &lt;a href=&quot;https://stackoverflow.com/questions/3452546/javascript-regex-how-to-get-youtube-video-id-from-url&quot; papago-id=&quot;5-1&quot;&gt;질문&lt;/a&gt;에 따라 비디오 ID를 간단히 잡아서 당신이 원하는 대로 당신의 내장 마크업을 공식화하는 데 사용하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/isherwood/cH6e8/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://jsfiddle.net/isherwood/cH6e8/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;function getId(url) {
    const regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&amp;amp;v=)([^#&amp;amp;?]*).*/;
    const match = url.match(regExp);

    return (match &amp;amp;&amp;amp; match[2].length === 11)
      ? match[2]
      : null;
}
    
const videoId = getId('http://www.youtube.com/watch?v=zbYf5_S7oJo');
const iframeMarkup = '&amp;lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/' 
    + videoId + '&quot; frameborder=&quot;0&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;';

console.log('Video ID:', videoId)&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;http://jsfiddle.net/isherwood/cH6e8/6&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-0&quot;&gt;정교한 데모가 있습니다.&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2020년에 이를 보는 사람들은 embed API를 이용하여 임베디드 코드를 얻을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 이유는 유튜브 URL에 여러 가지 변형이 있을 수 있고 regEx를 사용하는 것이 최적의 해결책이 아닐 수 있기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;https://www.youtube.com/oembed?url=&amp;lt;URL&amp;gt;&amp;amp;format=&amp;lt;FORMAT&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=gBrmnB5aOSI&amp;amp;format=json
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 받을 답변은.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{
&quot;type&quot;: &quot;video&quot;,
&quot;thumbnail_width&quot;: 480,
&quot;provider_name&quot;: &quot;YouTube&quot;,
&quot;title&quot;: &quot;Intro To Live Streaming on YouTube&quot;,
&quot;thumbnail_height&quot;: 360,
&quot;provider_url&quot;: &quot;https://www.youtube.com/&quot;,
&quot;version&quot;: &quot;1.0&quot;,
&quot;height&quot;: 270,
&quot;author_name&quot;: &quot;YouTube Creators&quot;,
&quot;html&quot;: &quot;&amp;lt;iframe width=\&quot;480\&quot; height=\&quot;270\&quot; src=\&quot;https://www.youtube.com/embed/gBrmnB5aOSI?feature=oembed\&quot; frameborder=\&quot;0\&quot; allow=\&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;&quot;,
&quot;author_url&quot;: &quot;https://www.youtube.com/user/creatoracademy&quot;,
&quot;width&quot;: 480,
&quot;thumbnail_url&quot;: &quot;https://i.ytimg.com/vi/gBrmnB5aOSI/hqdefault.jpg&quot;
}
&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;iframe에 html 데이터를 사용할 수 있습니다.&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;ytUrl = &quot;https://www.youtube.com/watch?v=DGIXT7ce3vQ&quot;
// replace:
ytUrl.replace('/watch?v=', '/embed/')
&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;답변이 늦었지만 유튜브 url을 Embed로 변환하여 동영상이 작동되도록 하기 위해 사용한 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
    function myFunction() {
        var str = &quot;https://www.youtube.com/watch?v=1adfD9&quot;;
        var res = str.split(&quot;=&quot;);
        var embeddedUrl = &quot;https://www.youtube.com/embed/&quot;+res[1];
        document.getElementById(&quot;demo&quot;).innerHTML = res;
    }
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 도움이 됐으면 좋겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 기능 쌍을 사용하여 html 블록의 유튜브 링크를 wywyg 편집기에서 임베디드 iframe으로 변환했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 솔루션과 마찬가지로, 이것은 여전히 블록의 다른 HTML을 망치게 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 텍스트 블록에 여러 개의 비디오를 사용하여 작업합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http 또는 https 링크와 함께 작동합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비디오의 직접 URL 둘 다와 함께 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;youtube.com/watch?v=UxSOKvlAbwI&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;youtu.be/UxSOKvlAbwI&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;createYoutubeEmbed = (key) =&amp;gt; {
  return '&amp;lt;iframe width=&quot;420&quot; height=&quot;345&quot; src=&quot;https://www.youtube.com/embed/' + key + '&quot; frameborder=&quot;0&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;&amp;lt;br/&amp;gt;';
};

transformYoutubeLinks = (text) =&amp;gt; {
  if (!text) return text;
  const self = this;

  const linkreg = /(?:)&amp;lt;a([^&amp;gt;]+)&amp;gt;(.+?)&amp;lt;\/a&amp;gt;/g;
  const fullreg = /(https?:\/\/)?(www\.)?(youtube\.com\/watch\?v=|youtu\.be\/)([^&amp;amp; \n&amp;lt;]+)(?:[^ \n&amp;lt;]+)?/g;
  const regex = /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/watch\?v=|youtu\.be\/)([^&amp;amp; \n&amp;lt;]+)(?:[^ \n&amp;lt;]+)?/g;

  let resultHtml = text;  

  // get all the matches for youtube links using the first regex
  const match = text.match(fullreg);
  if (match &amp;amp;&amp;amp; match.length &amp;gt; 0) {
    // get all links and put in placeholders
    const matchlinks = text.match(linkreg);
    if (matchlinks &amp;amp;&amp;amp; matchlinks.length &amp;gt; 0) {
      for (var i=0; i &amp;lt; matchlinks.length; i++) {
        resultHtml = resultHtml.replace(matchlinks[i], &quot;#placeholder&quot; + i + &quot;#&quot;);
      }
    }

    // now go through the matches one by one
    for (var i=0; i &amp;lt; match.length; i++) {
      // get the key out of the match using the second regex
      let matchParts = match[i].split(regex);
      // replace the full match with the embedded youtube code
      resultHtml = resultHtml.replace(match[i], self.createYoutubeEmbed(matchParts[1]));
    }

    // ok now put our links back where the placeholders were.
    if (matchlinks &amp;amp;&amp;amp; matchlinks.length &amp;gt; 0) {
      for (var i=0; i &amp;lt; matchlinks.length; i++) {
        resultHtml = resultHtml.replace(&quot;#placeholder&quot; + i + &quot;#&quot;, matchlinks[i]);
      }
    }
  }
  return resultHtml;
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://jsfiddle.net/phlare/j6tjk4tr/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jsfiddle&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;function popYouTubeId(buttonid) {
    var youTubeUrl = $(buttonid).attr('data-url');
    var youTubeId;
    var regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&amp;amp;v=)([^#\&amp;amp;\?]*).*/;
    var match = youTubeUrl.match(regExp);
    if (match &amp;amp;&amp;amp; match[2].length == 11) {
       youTubeId = match[2];
    } else {
        youTubeId = 'no video found';
   }
   $('#ytvideo').html('&amp;lt;div class=&quot;youtubepopup&quot;&amp;gt;&amp;lt;a class=&quot;closex&quot;&amp;gt;x&amp;lt;/a&amp;gt;&amp;lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/' + youTubeId + '&quot; frameborder=&quot;0&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;&amp;lt;/div&amp;gt;');
   $('a.closex').click( function(){
       $('.youtubepopup').remove();
   });
}

var buttonid;

$('.videobutton').click( function(){
    buttonid = '#'+$(this).attr('id');
    popYouTubeId(buttonid);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이셔우드의 데모에 대한 자세한 설명을 들어보시기 바랍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 번 사용할 수 있도록 기능을 단순화하고 더 많이 포장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/slabmedia/n8x9oadh/&quot; rel=&quot;nofollow&quot; papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jsfiddle&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 ReactJS에서 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;iframe src={`https://www.youtube.com/embed/${url.split('='}[1]&amp;amp;autoplay=false`} controls allowfullscreen /&amp;gt;
&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;jQuery 필요하신 분.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래는 얻는 기능을 이용한 순수 자바스크립트 코드입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;v&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;YouTube URL의 파라미터와 전류 대체의 파라미터&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;꼬리에 꼬리를 물다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
const url = &quot;https://www.youtube.com/watch?v=qRv7G7WpOoU&quot;;
const v = new URL(url).searchParams.get('v');

document.currentScript.insertAdjacentHTML(
  'beforebegin',
  `&amp;lt;h1&amp;gt;Video id=${v}&amp;lt;/h1&amp;gt;` +
  `&amp;lt;iframe
      width=&quot;480&quot; height=&quot;270&quot;
      src=&quot;https://www.youtube.com/embed/${v}?feature=oembed&quot;
      allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;`
  );
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데스크톱 링크에서 내장된 ID를 얻는 방법이 이해하기에 더 쉬워 보이지 않습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; const convertLinkToEmbedId = () =&amp;gt; {
    const link = &quot;https://www.youtube.com/watch?v=gBrmnB5aOSI&amp;amp;...&quot;;
    return link.substring(link.indexOf(&quot;=&quot;) + 1, link.indexOf(&quot;&amp;amp;&quot;));
  };
&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; &amp;lt;iframe
      width='560'
      height='315'
      src={`https://www.youtube.com/embed/${convertLinkToEmbedId()}`}
      title='YouTube video player'
      frameborder='0'
      allow='accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture;fullscreen;'
    &amp;gt;
&amp;lt;/iframe&amp;gt;
&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;문제는 '='와 '&amp;amp;' 사이에 id가 없는 곳에서는 이것이 작동하지 않는다는 것입니다 :(&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt; @if (path.Contains('&amp;amp;'))
                            path = path.Split('&amp;amp;')[0];

                &amp;lt;iframe width=&quot;690&quot; height=&quot;400&quot; src=&quot;@Model.YourModelNameHERE.Replace(&quot;watch?v=&quot;,&quot;embed/&quot;)&quot; frameborder=&quot;0&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C# 면도기 페이지 솔루션!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/21607808/convert-a-youtube-video-url-to-embed-code&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/749</guid>
      <comments>https://closeapi.tistory.com/749#entry749comment</comments>
      <pubDate>Sat, 28 Oct 2023 07:57:44 +0900</pubDate>
    </item>
    <item>
      <title>속성으로 인해 Java 코드가 컴파일되지 않습니다. 상수 식 오류여야 합니다.</title>
      <link>https://closeapi.tistory.com/748</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성으로 인해 Java 코드가 컴파일되지 않습니다. 상수 식 오류여야 합니다.&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;IDE가 주는 오류는 &quot;주석 속성 RequestParam.defaultValue는 상수 표현이어야 합니다.&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;제 프로젝트는 스프링과 메이븐과 관련된 것으로, 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private static final String MAX_LONG_AS_STRING = Long.toString(Long.MAX_VALUE);

@RequestMapping(method=RequestMethod.GET)
public List&amp;lt;Spittle&amp;gt; spittles(
        @RequestParam(value=&quot;max&quot;,
                    defaultValue=MAX_LONG_AS_STRING) long max,
        @RequestParam(value=&quot;count&quot;, defaultValue=&quot;20&quot;) int count) {
    return spittleRepository.findSpittles(max, count);
}
&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;오류가 Long에서 String으로 변환된 것으로 생각하고 있는데 어떻게 수정해야 할지 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 주석과 봄을 처음 접합니다. 어떤 도움이라도 감사합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바 규칙은 주석이 있을 때, 그리고 그것은 원시적인 타입을 기대하는 매개변수)을 기대하는 파라미터를 가지고 있다고 말합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 또는 a&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 값은 &lt;em papago-id=&quot;6-1&quot;&gt;일정한 식&lt;/em&gt;이어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;[이것은 봄과는 아무 상관이 없습니다.]&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대략 일정한 표현식은 컴파일 시 컴파일러가 파악할 수 있는 값입니다.&lt;/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.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.28&quot; papago-id=&quot;6-3&quot; rel=&quot;noreferrer&quot;&gt;JLS 15.28&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;/font&gt;&lt;code&gt;Long.toString()&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;em papago-id=&quot;7-1&quot;&gt;아니라는&lt;/em&gt; 것을 의미합니다. (당신이 보기에는 그렇게 보입니다, 왜냐하면 당신은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Long.toString&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;상수&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;+&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;연산자는, 인수들 중 하나가 문자열이 아닐 때에도 사용될 수 있고, 따라서 a.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;toString()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;method가 암묵적으로 호출됩니다.&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;private static final String MAX_LONG_AS_STRING = &quot;&quot; + Long.MAX_VALUE;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;근데 저는 안 먹어봤어요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/39157370/java-code-wont-compile-due-to-attribute-must-be-a-constant-expression-error&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>spring</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/748</guid>
      <comments>https://closeapi.tistory.com/748#entry748comment</comments>
      <pubDate>Sat, 28 Oct 2023 07:57:35 +0900</pubDate>
    </item>
    <item>
      <title>VBA를 사용하여 Excel의 셀에 텍스트 추가</title>
      <link>https://closeapi.tistory.com/747</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;VBA를 사용하여 Excel의 셀에 텍스트 추가&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL과 엑셀 매크로로 작업을 해왔지만 셀에 텍스트를 추가하는 방법을 모릅니다.&lt;/font&gt;&lt;/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;&quot;01/01/13 00:00&quot;&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;A1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 매크로가 먼저 시트의 내용을 지우고 나중에 정보를 추가하기 때문에 그냥 셀에 쓸 수는 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;VBA에서는 어떻게 해야 하나요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;Range(&quot;$A$1&quot;).Value = &quot;'01/01/13 00:00&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 겁니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 따옴표를 주목하십시오. 그러면 숫자 유형으로 자동 변환되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 그게 당신이 정말 &lt;em papago-id=&quot;7-1&quot;&gt;원하는&lt;/em&gt; 겁니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜-시간 값을 갖도록 셀을 포맷하는 것도 대안이 될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 문자열에서 따옴표 하나를 삭제합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[A1].Value = &quot;'O1/01/13 00:00&quot;
&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;em papago-id=&quot;9-1&quot;&gt;텍스트&lt;/em&gt;로 추가하려는 경우(첫 번째 문자로 아포스트로피에 유의하십시오).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[A1].Value&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 VBA의 줄임말입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Range(&quot;A1&quot;).Value&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;날짜를 입력하려면 대신(@SiddharthRoute 덕분에 편집된 순서) 다음을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[A1].NumberFormat = &quot;mm/dd/yyyy hh:mm;@&quot;
[A1].Value = DateValue(&quot;01/01/2013 00:00&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하셔야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Range&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Valu&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;e기능.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;code&gt;Range&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;br&gt; &lt;code&gt;Value&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 그 감방에서 원하는 텍스트가 될 것입니다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Range(&quot;A1&quot;).Value=&quot;whatever text&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;셀 속성을 사용할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Cells(1, 1).Value = &quot;Hey, what's up?&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;A를 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Cells(1,1).Value&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 같이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.Cells(1,1).Value&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;With&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 class=&quot;papago-parent&quot;&gt;시트를 선택하는 경우.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/20612415/adding-text-to-a-cell-in-excel-using-vba&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Excel</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/747</guid>
      <comments>https://closeapi.tistory.com/747#entry747comment</comments>
      <pubDate>Sat, 28 Oct 2023 07:57:29 +0900</pubDate>
    </item>
    <item>
      <title>csv로 헤더 행 쓰는 법딕트 라이터?</title>
      <link>https://closeapi.tistory.com/746</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;csv로 헤더 행 쓰는 법&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;딕트 라이터?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 가지고 있다고 가정해봐요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;csv.DictReader&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;object와 CSV 파일로 작성하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 어떻게 해요?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 &lt;strong papago-id=&quot;3-1&quot;&gt;데이터 행&lt;/strong&gt;을 작성할 수 있다는 것을 알고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dr = csv.DictReader(open(f), delimiter='\t')
# process my dr object
# ...
# write out object
output = csv.DictWriter(open(f2, 'w'), delimiter='\t')
for item in dr:
    output.writerow(item)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 필드 이름을 어떻게 포함할 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집:&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2.7/3.2에는 &lt;a href=&quot;http://docs.python.org/dev/library/csv.html#csv.DictWriter.writeheader&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-1&quot;&gt;새로운 방법&lt;/a&gt;이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 John Machine의 답변은 헤더 행을 작성하는 더 간단한 방법을 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하는 간단한 예&lt;/font&gt;&lt;/font&gt;&lt;code&gt;writeheader()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 2.7/3.2에서 사용 가능한 방법:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from collections import OrderedDict
ordered_fieldnames = OrderedDict([('field1',None),('field2',None)])
with open(outfile,'wb') as fou:
    dw = csv.DictWriter(fou, delimiter='\t', fieldnames=ordered_fieldnames)
    dw.writeheader()
    # continue on to write data
&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;DictWriter를 인스턴스화하려면 필드 이름 인수가 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://docs.python.org/library/csv.html#csv.DictWriter&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-1&quot;&gt;설명서&lt;/a&gt;에서:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;fieldnames 매개 변수는 writerow() 메서드로 전달된 사전의 값이 csv 파일에 기록되는 순서를 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 말로 하자면:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python dicts는 본질적으로 순서가 없기 때문에 Fieldnames 인수가 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래는 헤더와 데이터를 파일에 쓰는 방법의 예입니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;with&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문은 2.6에 추가되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;2.5를 사용하는 경우:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;from __future__ import with_statement&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;with open(infile,'rb') as fin:
    dr = csv.DictReader(fin, delimiter='\t')

# dr.fieldnames contains values from first row of `f`.
with open(outfile,'wb') as fou:
    dw = csv.DictWriter(fou, delimiter='\t', fieldnames=dr.fieldnames)
    headers = {} 
    for n in dw.fieldnames:
        headers[n] = n
    dw.writerow(headers)
    for row in dr:
        dw.writerow(row)
&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;@FM이 코멘트에서 언급한 것처럼, 헤더 쓰기를 다음과 같이 원-라이너로 압축할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;with open(outfile,'wb') as fou:
    dw = csv.DictWriter(fou, delimiter='\t', fieldnames=dr.fieldnames)
    dw.writerow(dict((fn,fn) for fn in dr.fieldnames))
    for row in dr:
        dw.writerow(row)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 가지 옵션:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(1) csv가 되도록 필드 이름에서 ID 매핑(즉, 아무 것도 하지 않음) 명령을 힘들게 만듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DictWriter는 목록으로 다시 변환하여 csv.writer 인스턴스로 전달할 수 있습니다.&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;(2) 이 문서에는 &quot;기본적인 것은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;writer&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인스턴스(instance)&quot; ...그러므로 그냥 사용하십시오(마지막에 example).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dw.writer.writerow(dw.fieldnames)
&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;(3) csv를 피합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오버헤드를 받아쓰기하고 csv.writer로 직접 수행합니다.&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;w.writerow([d[k] for k in fieldnames])
&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;w.writerow([d.get(k, restval) for k in fieldnames])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;extrasaction&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;기능성&quot;은 제가 직접 코딩하는 것을 선호합니다. 그렇게 하면 첫 번째 추가 키뿐만 아니라 키와 값으로 모든 &quot;추가&quot;를 보고할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DictWriter에서 정말 번거로운 점은 각 Dict가 작성될 때 직접 키를 확인했다면 extraction='ignore'을 사용해야 한다는 것입니다. 그렇지 않으면 천천히(필드 이름은 목록) 확인이 반복됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;wrong_fields = [k for k in rowdict if k not in self.fieldnames]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;============&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; f = open('csvtest.csv', 'wb')
&amp;gt;&amp;gt;&amp;gt; import csv
&amp;gt;&amp;gt;&amp;gt; fns = 'foo bar zot'.split()
&amp;gt;&amp;gt;&amp;gt; dw = csv.DictWriter(f, fns, restval='Huh?')
# dw.writefieldnames(fns) -- no such animal
&amp;gt;&amp;gt;&amp;gt; dw.writerow(fns) # no such luck, it can't imagine what to do with a list
Traceback (most recent call last):
  File &quot;&amp;lt;stdin&amp;gt;&quot;, line 1, in &amp;lt;module&amp;gt;
  File &quot;C:\python26\lib\csv.py&quot;, line 144, in writerow
    return self.writer.writerow(self._dict_to_list(rowdict))
  File &quot;C:\python26\lib\csv.py&quot;, line 141, in _dict_to_list
    return [rowdict.get(key, self.restval) for key in self.fieldnames]
AttributeError: 'list' object has no attribute 'get'
&amp;gt;&amp;gt;&amp;gt; dir(dw)
['__doc__', '__init__', '__module__', '_dict_to_list', 'extrasaction', 'fieldnam
es', 'restval', 'writer', 'writerow', 'writerows']
# eureka
&amp;gt;&amp;gt;&amp;gt; dw.writer.writerow(dw.fieldnames)
&amp;gt;&amp;gt;&amp;gt; dw.writerow({'foo':'oof'})
&amp;gt;&amp;gt;&amp;gt; f.close()
&amp;gt;&amp;gt;&amp;gt; open('csvtest.csv', 'rb').read()
'foo,bar,zot\r\noof,Huh?,Huh?\r\n'
&amp;gt;&amp;gt;&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;output.writerow(dict(zip(dr.fieldnames, dr.fieldnames)))
&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;pre&gt;&lt;code&gt;writer.writeheader() 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위는 매력적으로 작용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 것을 추가하는 것을 잊지 마세요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fieldnames&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자의 초기화 시 속성&lt;/font&gt;&lt;/font&gt;&lt;code&gt;csv.DictWriter&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2982023/how-to-write-header-row-with-csv-dictwriter&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PYTHON</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/746</guid>
      <comments>https://closeapi.tistory.com/746#entry746comment</comments>
      <pubDate>Sat, 28 Oct 2023 07:57:23 +0900</pubDate>
    </item>
    <item>
      <title>php myadmin에서 sql을 업로드할 때 오류가 발생했습니다.</title>
      <link>https://closeapi.tistory.com/745</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;php myadmin에서 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;php my admin으로 sql을 업로드할 때 문제가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    Error
    SQL query: DocumentationEdit Edit

    SELECT `comment`
               FROM `phpmyadmin`.`pma__column_info`
              WHERE db_name     = 'sql_route10'
                AND table_name  = ''
                AND column_name = '(db_comment)'
MySQL said: Documentation

#1100 - Table 'pma__column_info' was not locked with LOCK TABLES
&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;데이터를 업로드할 때 오류가 발생합니다. config.inc.에서 편집을 시도합니다. php 이 줄에 코멘트를 줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$cfg['Servers'][$i]['pmadb'] = $dbname; 
&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;/* Optional: User for advanced features */
 77     $cfg['Servers'][$i]['controluser'] = 'dbuser';
 78     $cfg['Servers'][$i]['controlpass'] = 'dbpass';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 일은 안하고,&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/42291466/i-have-got-an-error-when-i-upload-sql-in-phpmyadmin&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/745</guid>
      <comments>https://closeapi.tistory.com/745#entry745comment</comments>
      <pubDate>Sat, 28 Oct 2023 07:57:16 +0900</pubDate>
    </item>
    <item>
      <title>MariaDB Database [JAVA]에 연결할 수 없습니다.</title>
      <link>https://closeapi.tistory.com/744</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MariaDB Database [JAVA]에 연결할 수 없습니다.&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;명령은 TB라는 MariaDB Database에 저장되고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 문제는 데이터베이스에 연결할 수 없다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스택 오버플로우 게시물을 많이 보았지만 아무 것도 도움이 되지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바 프로그램에 데이터베이스를 연결해 본 적이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 데이터베이스 연결 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; public void DBConnect(){

        try {

            String url = &quot;jdbc:mariadb://localhost:3306/TB&quot;;
            String user = &quot;root&quot;;
            String password = &quot;&quot;;

            Connection con = DriverManager.getConnection(url, user, password);

            if (con != null) {
                System.out.println(&quot;Connected to the database test&quot;);
            }

        }catch(Exception ex){

            ex.printStackTrace();

        }

    }
&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;public TwitchBotFenster() throws IOException, Exception {

    UIManager.setLookAndFeel(&quot;com.sun.java.swing.plaf.windows.WindowsLookAndFeel&quot;);
    initComponents();

    ReadServerMessages.start();

    DBConnect();

    }
&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;java.sql.SQLException: No suitable driver found for jdbc:mariadb://localhost:3306/TB
at java.sql.DriverManager.getConnection(DriverManager.java:689)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at main.TwitchBotFenster.DBConnect(TwitchBotFenster.java:166)
at main.TwitchBotFenster.&amp;lt;init&amp;gt;(TwitchBotFenster.java:31)
at main.Main.main(Main.java:9)
&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;저는 이미 jdbc를 다운로드하여 제 라이브러리로 불러왔습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Apache와 MySql은 XAMPP에서 실행되고 있습니다.&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;메이븐을 사용하는 경우 JDBC를 JAR에 음영으로 표시하는 것이 가장 빠를 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 지금 일어나고 있는 일은 종속성이 나열되어 있기 때문에 코드화할 수 있지만 실제로 봇을 실행할 때 종속성을 로드하지 않는다는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/40825147/cant-connect-to-mariadb-database-java&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/744</guid>
      <comments>https://closeapi.tistory.com/744#entry744comment</comments>
      <pubDate>Sat, 28 Oct 2023 07:57:10 +0900</pubDate>
    </item>
    <item>
      <title>NetBeans의 JSTestDriver가 어설션 실패 후 테스트를 중지함</title>
      <link>https://closeapi.tistory.com/743</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NetBeans의 JSTestDriver가 어설션 실패 후 테스트를 중지함&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 링크에 따라 넷빈즈에서 JS Test Driver로 자바스크립트 유닛 &lt;a href=&quot;https://netbeans.org/kb/docs/webclient/html5-js-support.html#jstestdriver&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;테스트&lt;/a&gt;를 설정하였습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 해당 자습서의 결과와 달리 어설션이 실패한 후에는 더 이상 테스트가 실행되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 동작을 어떻게 변경할 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 이 테스트 파일이 주어졌을 때:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;test.js&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;AssertionsTestCase = TestCase(&quot;AssertionsTestCase&quot;);

AssertionsTestCase.prototype.testAlwaysPass = function(){
  assertEquals(1, 1);
  assertEquals(2, 2);
};
AssertionsTestCase.prototype.testAlwaysFail1 = function(){
  assertEquals(1, 2);
};
AssertionsTestCase.prototype.testAlwaysFail2 = function(){
  assertEquals(3, 4);
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;진행률 막대는 50%(2개 검정)를 나타내고 33%로 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lBkZq.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lBkZq.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jsTestDriver.conf&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;server: http://localhost:42442
load:
  - test/lib/jasmine/jasmine.js
  - test/lib/jasmine-jstd-adapter/JasmineAdapter.js
  - test/unit/*.js
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 테스트를 명령줄로 실행할 수 있습니다(Windows PowerShell의 경우).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 실행하면 고장 후 테스트 실행이 중지되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;java-jar $env:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JSTD\JsTestDriver-1.3.5.jar --test all --config jsTestDriver.conf --tests all --config jsTestDriver.conf&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jsTestDriver.conf&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;pre&gt;&lt;code&gt;server: http://localhost:4244
load:
  - test/lib/jasmine/jasmine.js
  - test/lib/jasmine-jstd-adapter/JasmineAdapter.js
  - test/unit/*.js
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;세 가지 테스트가 모두 실행됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;크롬에서는 잘 작동하는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코멘트와 같은 파이어폭스에 대해서는 정답이 아니라고 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럭저럭 부분적으로 일을 처리했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 netbeans가 실패한 테스트를 처리하는 방법과 jstestdriver.jar가 시작되는 방법입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 문제를 해결할 수 없다는 것을 알고 있지만 올바른 방향을 가리키고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zNcis.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zNcis.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 재현하는 단계.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서비스에서 JS 테스트 드라이버 시작&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트를 실행합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&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;현재 사용자를 위해 Netbeans 구성 폴더에서 jstestdriver.properties를 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우에는 위치하고 있습니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;/home/{user}/.netbeans/8.2/config/Preferences/org/netbeans/modules/javascript/jstestdriver.properties&lt;/code&gt;&lt;/p&gt; &lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jstestdriver.jar --tests all --reset에 인수를 추가하여 위치 속성을 편집합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 속성을 편집한 후에는 이렇게 보입니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;location=/home/user/Downloads/jstestdriver-1.3.5.jar --tests all --reset server.url=http://localhost:42442 strict.mode=false use.browser.ANDROID_DEVICE_CHROME=false use.browser.ANDROID_DEVICE_DEFAULT=false use.browser.ANDROID_EMULATOR_DEFAULT=false use.browser.Chrome=false use.browser.Chrome.INTEGRATED=false use.browser.SL__Browsers_FirefoxBrowser=true use.browser.SL__Browsers_MozillaBrowser=false&lt;/code&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2회 반복합니다.&lt;/font&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서비스에서 JS 테스트 드라이버를 다시 시작합니다.&lt;/font&gt;&lt;/li&gt; 
   &lt;li papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트를 실행합니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째 재시작 후 실행하면 위 그림과 같이 모든 테스트를 실행해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;netbeans의 JS Test Driver에 대해 인수 --test all --reset을 추가할 수 있다면 Chrome에서와 같이 작동할 수 있는 문제를 해결해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/38856677/jstestdriver-on-netbeans-stops-testing-after-a-failed-assertion&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>javascript</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/743</guid>
      <comments>https://closeapi.tistory.com/743#entry743comment</comments>
      <pubDate>Sat, 28 Oct 2023 07:57:03 +0900</pubDate>
    </item>
    <item>
      <title>Mysql SELECT CASE when something and return 필드</title>
      <link>https://closeapi.tistory.com/742</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mysql SELECT CASE when something and return 필드&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;em papago-id=&quot;1-1&quot;&gt;nmu와 nmi&lt;/em&gt; 두개의 필드를 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if nnmu is equal to 1, I need to return naziv_mesta from **mesto_istovara**,
else if it's =0 I need to return naziv_mesta from mesto_utovara table
&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;if nnmi is equal to 1, then I need  to return naziv_mesta from **mesto_utovara,** 
else if it's =0 need to return naziv_mesta from mesto_istovara.
&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;처음에는 모든 것이 좋아 보이지만 어떻게든 값을 섞습니다. nnmi와 nnmu가 모두 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;select u.id_utovar,
             u.datum_isporuke,
             u.broj_otpremnice,
             r.naziv_robe,              
             CASE u.nnmu 
              WHEN u.nnmu ='0' THEN mu.naziv_mesta
              WHEN u.nnmu ='1' THEN m.naziv_mesta
             ELSE 'GRESKA'
             END as mesto_utovara,
             CASE u.nnmi
              WHEN u.nnmi = '0' THEN m.naziv_mesta 
              WHEN u.nnmi = '1' THEN mu.naziv_mesta
              ELSE 'GRESKA'
             END as mesto_istovara,                                                
             m.adresa,
             m.kontakt_osoba,
             m.br_telefona,
             u.broj_paleta,
             u.bruto,
             k.username,
             u.napomena,                  
             v.registracija,
             p.naziv_prevoznika,
             u.cena,
             u.korisnik_logistika,
             u.korisnik_analitika,
             u.datum_unosa,
             u.vreme_unosa,
             u.zakljucan,
             u.id_mesto_utovara,
             u.id_mesto_istovara,
             u.nnmu,
             u.nnmi             
      FROM utovar u ,mesto_utovara mu, mesto_istovara m, roba r, vozila v,prevoznik p, korisnik k
      WHERE u.id_mesto_istovara=m.id_mesto_istovara
       and k.id_korisnik = u.korisnik
       and r.id_robe=u.id_robe 
       and u.id_mesto_utovara = mu.id_mesto_utovara 
       and v.id_vozilo = u.id_vozilo 
       and p.id_prevoznik = u.id_prevoznik
       ORDER by u.id_utovar DESC
&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;https://dev.mysql.com/doc/refman/5.6/en/case.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;0-1&quot;&gt;두개의 다른&lt;/a&gt; 것을 섞고 있습니다.&lt;/font&gt;&lt;/font&gt; &lt;code&gt;CASE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구문이 부적절합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;6&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;  CASE  
  WHEN u.nnmu ='0' THEN mu.naziv_mesta
  WHEN u.nnmu ='1' THEN m.naziv_mesta
 ELSE 'GRESKA'
 END as mesto_utovara,
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;7&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;  CASE u.nnmu 
  WHEN '0' THEN mu.naziv_mesta
  WHEN '1' THEN m.naziv_mesta
 ELSE 'GRESKA'
 END as mesto_utovara,
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;없음(단순하지만 부울 검색 술어 사용)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  CASE u.nnmu 
  WHEN u.nnmu ='0' THEN mu.naziv_mesta
  WHEN u.nnmu ='1' THEN m.naziv_mesta
 ELSE 'GRESKA'
 END as mesto_utovara,
&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;MySQL에서는 다음을 테스트합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;u.nnmu&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;u.nnmu ='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&gt;&lt;font class=&quot;papago-parent&quot;&gt;여부와 관계없이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;u.nnmu&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&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;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 경우의 표현 자체의 결과적으로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 만약&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nmu = '0'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그때()&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nnmu ='0'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)로 평가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(1) 그리고 ()&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nnmu ='1'&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;false&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(0). 이들을 사례에 대입하면 다음과 같은 결과를 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; SELECT CASE  '0'
  WHEN 1 THEN '0'
  WHEN 0 THEN '1'
 ELSE 'GRESKA'
 END as mesto_utovara
&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;nmu = '1'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그때()&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nnmu ='0'&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;false&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(0) 그리고 ()&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nnmu ='1'&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;true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(1). 이들을 사례에 대입하면 다음과 같은 결과를 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; SELECT CASE  '1'
  WHEN 0 THEN '0'
  WHEN 1 THEN '1'
 ELSE 'GRESKA'
 END as mesto_utovara
&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;URL : https://stackoverflow.com/questions/4356318/mysql-select-case-when-something-then-return-field&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/742</guid>
      <comments>https://closeapi.tistory.com/742#entry742comment</comments>
      <pubDate>Sat, 28 Oct 2023 07:56:56 +0900</pubDate>
    </item>
    <item>
      <title>TypeScript - setInterval로 설정된 유형</title>
      <link>https://closeapi.tistory.com/741</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TypeScript - setInterval로 설정된 유형&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;나중에 setInterval이 할당되는 변수에 유형을 할당하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;this.autoSaveInterval = setInterval(function(){
      if(this.car.id){
        this.save();
      }
      else{
        this.create();
      }
    }.bind(this), 50000);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 할당해야 할 유형은 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인터벌 자동 저장 가능?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;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;clearInterval()&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;ReturnType&amp;lt;typeof setInterval&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유형은 사용할 기능에 따라 2개의 오버로드가 있으며, 반환 유형은 빨간색 경계 상자에 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KOQrY.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KOQrY.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;번호를 반환하는 번호를 사용하려면 다음을 사용하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;window.setInterval(...)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유형은 숫자입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;private autoSaveInterval: number = setInterval(() =&amp;gt; {
  console.log('123');
}, 5000);
&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;NodeJS인 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시간 초과와 미망인.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;setInterval은 number:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const nodeInterval: NodeJS.Timeout = setInterval(() =&amp;gt; {
  // do something
}, 1000);

const windowInterval: number = window.setInterval(() =&amp;gt; {
  // do something
}, 1000);
&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;setInterval&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;:number&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;:NodeJS.Timer&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&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;setInterva&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;7-1&quot;&gt;반응&lt;/strong&gt; 및 &lt;strong papago-id=&quot;7-1&quot;&gt;유형 스크립트&lt;/strong&gt; 포함&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const Clock: React.FC = () =&amp;gt; {
  const secondsRef = useRef&amp;lt;NodeJS.Timer&amp;gt;();

  useEffect(() =&amp;gt; {
    secondsRef.current = setInterval(() =&amp;gt; { // type is taken correctly and no errors
      // do your stuff...
    }, 1000);
  }, []);

  return (
    &amp;lt;div&amp;gt;
      {/* your jsx... */}
    &amp;lt;/div&amp;gt;
  );
};

export default Clock;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가 내 대답이 도움이 되길...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해피코딩 :)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비록 나는 앱을 실행할 수 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;id: number;

this.id = setInterval(...)
&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;테스트를 통해 Type 'Timeout'이 Type 'number'에 할당될 수 없음을 알려줄 것입니다. 그래서 저는 https://stackoverflow.com/a/59681620/18975994 접근 방식으로 진행했고, 그것은 저에게 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 같은 경우에는 불투명한 핸들로 취급되므로 윈도우 대 노드 환경을 만족시키기 위해서만 유형과 씨름할 가치가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것만 사용하고 끝내면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let timerHandle: any = null;

function start() {
  timerHandle = setInterval(...);
}

export function stop() {
  if (timerHandle) clearInterval(timerHandle);
}
&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;이 유형은 setInterval:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NodeJS.Timer&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;blockquote&gt; 
 &lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;type of는 모든 유형의 단일 피연산자 앞에 배치되는 단항 연산자입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 값은 피연산자 유형을 지정하는 문자열입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var variable1 = &quot;Hello&quot;;
var autoSaveInterval;

this.autoSaveInterval = setInterval(function(){
      if(this.car.id){
        this.save();
      }
      else{
        this.create();
      }
    }.bind(this), 50000);
    
console.log(&quot;1st: &quot; + typeof(variable1))
console.log(&quot;2nd: &quot; + typeof(autoSaveInterval ))&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/51376589/typescript-what-type-is-setinterval&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Angular</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/741</guid>
      <comments>https://closeapi.tistory.com/741#entry741comment</comments>
      <pubDate>Sat, 28 Oct 2023 07:56:49 +0900</pubDate>
    </item>
    <item>
      <title>슬래시를 닫기 전의 공간?</title>
      <link>https://closeapi.tistory.com/740</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;XML 및 HTML 태그에서 클로징 슬래시 앞에 공백이 있는 것을 자주 보았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;XHTML 줄 바꿈은 아마도 표준적인 예일 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;br /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;br/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 공간은 불필요해 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실 나는 그것이 불필요하다고 생각합니다.&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;p papago-id=&quot;5&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;이러한 문제가 여전히 관련이 있습니까? 아니면 IE3 호환성을 위해 추가 공간을 추가하고 있습니까?&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;Great Open Curly Brace 토론과 비슷합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void it_goes_up_here() {

int no_you_fool_it_goes_down_there()
{
&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;a href=&quot;http://www.w3.org/TR/xhtml1/#guidelines&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-1&quot;&gt;XHTML1.0 사양의 부록&lt;/a&gt; C를 준수하기를 원한다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.w3.org/TR/xhtml1/#media&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-3&quot;&gt;XHTML을 text/html로 제공&lt;/a&gt;하는 경우에만 수행하면 되는 작업입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;XHTML의 실제 MIME 유형(응용프로그램/html+xml)이 Internet Explorer에서 작동하지 않기 때문에 대부분의 사용자가 이 작업을 수행합니다.&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;HTML 구문 분석에서 후행 슬래시를 인식할 수 없는 특성으로 처리하는 데 필요한 공간입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MYnJO.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MYnJO.png&quot; alt=&quot;Netscape 4.80 showing different behaviour of &lt;br/&gt; and &lt;br /&gt; in HTML&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서를 보여주는 넷스케이프 &lt;strong papago-id=&quot;11-3&quot;&gt;4.80&lt;/strong&gt;의 스크린샷으로 &lt;a href=&quot;https://stackoverflow.com/a/463692/540955&quot; papago-id=&quot;11-1&quot;&gt;보빈스의 답변&lt;/a&gt;을 뒷받침합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;data:text/html,&amp;lt;title&amp;gt;space&amp;lt;/title&amp;gt;foo&amp;lt;br /&amp;gt;bar
&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;data:text/html,&amp;lt;title&amp;gt;no space&amp;lt;/title&amp;gt;foo&amp;lt;br/&amp;gt;bar
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(왼쪽 아래, 줄 바꿈 무시).&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사진을 보여주기 위한 답변으로 포스팅하기&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;접선 관련: 사실 저는 오해된 SGML 사양, 즉 &lt;a href=&quot;https://en.wikipedia.org/wiki/Standard_Generalized_Markup_Language#NET&quot; papago-id=&quot;15-1&quot; rel=&quot;noreferrer&quot;&gt;SGML Null End Tag&lt;/a&gt;(&lt;a href=&quot;https://en.wikipedia.org/wiki/Standard_Generalized_Markup_Language#NET&quot; papago-id=&quot;15-1&quot; rel=&quot;noreferrer&quot;&gt;&lt;em papago-id=&quot;15-1-1&quot;&gt;NET&lt;/em&gt;)&lt;/a&gt;에서 고대 브라우저의 그러한 잘못된 동작의 원인(그리고 공간을 포함하도록 권장하는 것)을 식별하는 긴 답변을 받았습니다(여기서).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&amp;lt;tag/2/3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대등한&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&amp;lt;tag&amp;gt;2&amp;lt;/tag&amp;gt;3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&amp;lt;tag/&amp;gt;2&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;1&amp;lt;tag&amp;gt;&amp;gt;2&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 class=&quot;papago-parent&quot;&gt;참고할 원시 링크가 몇 개 되지 않음:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://validator.w3.org/docs/errors.html#ve-63&quot; rel=&quot;noreferrer&quot; papago-id=&quot;20-0&quot;&gt;w3c validator notice는 문제가 있는 클로징 슬래시&lt;/a&gt;를 언급하고 가리키고 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.cs.tut.fi/~jkorpela/html/empty.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SGML, HTML, XML 및 XHTML @ www.cs.tut.fi /~jkorpela/의 요소가 비어 있습니다.&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.webdevout.net/articles/beware-of-xhtml#net&quot; papago-id=&quot;23-0&quot; rel=&quot;noreferrer&quot;&gt;XHTML 주의: Null End Tags(NET)&lt;/a&gt;는 다음을 명시합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;  &lt;/font&gt;&lt;/font&gt;&lt;blockquote&gt; 
   &lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 Null End 태그를 제대로 지원하는 일부 소규모 사용자 에이전트가 여전히 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 지원하는 더 잘 알려진 사용자 에이전트 중 하나가 W3C 검증기입니다.&lt;/font&gt;&lt;/p&gt; 
  &lt;/blockquote&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(지금은 그곳에서 재현할 수 없지만, 이로 인해 영향을 받는 여러 브라우저에 대한 Lee Kowalkowski의 진술을 지지합니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.w3.org/TR/WD-xml-970807.html&quot; papago-id=&quot;25-0&quot; rel=&quot;noreferrer&quot;&gt;XML W3C Working&lt;/a&gt; Draft &lt;a href=&quot;http://www.w3.org/TR/WD-xml-970807.html&quot; papago-id=&quot;25-0&quot; rel=&quot;noreferrer&quot;&gt;07-Aug-97&lt;/a&gt; - DTD 스니펫의 Null End Tag 참조를 포함하는 최신 사양 초안:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NET &quot;/&amp;gt;&quot;&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 문제가 여전히 관련이 있습니까? 아니면 IE3 호환성을 위해 추가 공간을 추가하고 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가까이 있었군요. 넷스케이프 4입니다.&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;XHTML은 XML에서 상속받은 것이기 때문에 이를 수행하는 적절한 방법은 여유 공간이 없는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XHTML에서는 br 태그를 닫아야 &lt;a href=&quot;http://www.w3.org/TR/xhtml1/#h-4.6&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;30-1&quot;&gt;하지만 공백은 필요하지 않습니다&lt;/a&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스타일리시한 거예요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML에서 br 태그는 닫을 수 없으므로 둘 다 틀렸습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 공간은 단지 태그를 더 잘 읽을 수 있게 해줍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 더 읽을 수 있는 코드를 위해 포맷하는 것을 크게 지지합니다.&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;32&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;33&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;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아주 게으른 HTML 작성자가 있거나 인용 표시에 대한 두려움을 가지고 있다면 어떨까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 그의 로봇 페이지 크롤러라면 다음을 생각해보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;&amp;lt;img src=http://myunquotedurl.com/image.jpg /&amp;gt;&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;&amp;lt;img src=http://myunquotedurl.com/image.jpg/&amp;gt;&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 작게 보일 수 있지만 공간이 없다면 어떻게 할 수 있는지 보세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;로봇은 슬래시가 URL의 일부인지 아니면 닫기 태그의 일부인지 알 수 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/462741/space-before-closing-slash&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>XML</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/740</guid>
      <comments>https://closeapi.tistory.com/740#entry740comment</comments>
      <pubDate>Sat, 28 Oct 2023 07:56:41 +0900</pubDate>
    </item>
    <item>
      <title>특정 속성을 가진 모든 요소를 선택하는 방법?TinyXPath로</title>
      <link>https://closeapi.tistory.com/739</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 속성을 가진 모든 요소를 선택하는 방법?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;TinyXPath로&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;속성이 A인 모든 요소를 선택하기 위한 XPath 표현은 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const char* xpath = &quot;//\*/\*[@A]&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;이 XPath는 A 속성을 가지는 모든 요소를 선택합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//*[@A]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/5617692/how-to-select-all-elements-with-a-specific-attribute-with-tinyxpath&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>XML</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/739</guid>
      <comments>https://closeapi.tistory.com/739#entry739comment</comments>
      <pubDate>Sat, 28 Oct 2023 07:56:34 +0900</pubDate>
    </item>
    <item>
      <title>OpenSSL API를 사용하여 인증서 체인을 프로그래밍 방식으로 확인</title>
      <link>https://closeapi.tistory.com/738</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OpenSSL API를 사용하여 인증서 체인을 프로그래밍 방식으로 확인&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;자기 서명된 CA 인증서와 해당 CA 인증서로 서명된 다른 두 개의 인증서가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;opensl verify'가 작동하므로 인증서가 정확하다고 확신합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ openssl verify -CAfile ca.pem server.pem
server.pem: OK
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(위 내용은 기억에서 나온 것으로, 앞에 없는 것이라 살짝 꺼졌을 수 있습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 나는 프로그램적으로 자격증을 확인하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 의사코드를 가진 유틸리티 기능이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int verify_cert(X509 *cert, X509 *cacert)
{
     int ret;
     X509_STORE *store;
     X509_STORE_CTX *ctx;

     store = X509_STORE_new();
     X590_STORE_add_cert(store, cacert);

     ctx = X509_STORE_CTX_new();
     X509_STORE_CTX_init(ctx, store, cert, NULL);

     ret = X509_verify_cert(ctx);

     /* check for errors and clean up */
}
&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;CA가 포함된 스토어에 대한 포인터로 새로운 스토어를 생성하고, 캐서트를 추가하고, 새로운 컨텍스트를 생성하고, 컨텍스트에 검증할 자식 인증서를 추가하는 것으로 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 뭔가 잘못하고 있는 게 분명한데, 뭐가 뭔지 모르겠어요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;무슨 생각 있어요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;6-0&quot;&gt;업데이트:&lt;/strong&gt; 이 인증서들을 디스크에 저장하고 X509와 같은 것을 사용할 수 있다는 것을 알고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LOUNK_file 등이 있습니다.&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;OpenSSL의 -verify 기능처럼 일반 유효성 검사 루틴(개인 CA에서 &lt;a href=&quot;https://stackoverflow.com/questions/3412032/openssl-c-how-do-you-verify-a-public-key-was-issued-by-your-private-ca&quot; papago-id=&quot;7-1&quot;&gt;공개 키를 발급한 경우 어떻게 확인&lt;/a&gt;합니까? &lt;a href=&quot;https://stackoverflow.com/questions/3412032/openssl-c-how-do-you-verify-a-public-key-was-issued-by-your-private-ca&quot; papago-id=&quot;7-1&quot;&gt;참조)&lt;/a&gt;을 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;X509와 같은 룩업 메소드(X509_LOOKUP_Method)를 생성해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LOUNK_file()이지만 파일 이름 대신 문자열과 함께 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;X509 코드_&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LOUNK_buffer()는 다음과 같습니다.&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;헤더 파일 by_buffer 입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;h:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/* File:   by_buffer.h */

#ifndef BY_BUFFER_H
#define    BY_BUFFER_H

#include &amp;lt;openssl/x509.h&amp;gt;

#ifdef    __cplusplus
extern &quot;C&quot; {
#endif
#define X509_L_BUF_LOAD    1
#define X509_LOOKUP_load_buf(x,name,type) \
        X509_LOOKUP_ctrl((x),X509_L_BUF_LOAD,(name),(long)(type),NULL)
X509_LOOKUP_METHOD *X509_LOOKUP_buffer(void);

#ifdef    __cplusplus
}
#endif

#endif    /* BY_BUFFER_H */
&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;c 프로그램 by_buffer.c:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/* by_buffer.c - copied and modified from crypto/x509/by_file.c */
/* Copyright (C) - should be the same as for OpenSSL
*/
#include &quot;by_buffer.h&quot;

#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;time.h&amp;gt;
#include &amp;lt;errno.h&amp;gt;

#include &quot;../crypto/cryptlib.h&quot;
#include &amp;lt;openssl/lhash.h&amp;gt;
#include &amp;lt;openssl/buffer.h&amp;gt;
#include &amp;lt;openssl/pem.h&amp;gt;
#include &amp;lt;openssl/err.h&amp;gt;

static int by_buffer_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc,
    long argl, char **ret);
X509_LOOKUP_METHOD x509_buffer_lookup=
    {
    &quot;Load buffer into cache&quot;,
    NULL,        /* new */
    NULL,        /* free */
    NULL,         /* init */
    NULL,        /* shutdown */
    by_buffer_ctrl,    /* ctrl */
    NULL,        /* get_by_subject */
    NULL,        /* get_by_issuer_serial */
    NULL,        /* get_by_fingerprint */
    NULL,        /* get_by_alias */
    };

X509_LOOKUP_METHOD *X509_LOOKUP_buffer(void)
    {
    return(&amp;amp;x509_buffer_lookup);
    }

static int by_buffer_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, long argl,
         char **ret)
    {
    int ok=0;
    char *certBuf;

    switch (cmd)
        {
    case X509_L_BUF_LOAD:
        if (argl == X509_FILETYPE_DEFAULT)
            {
            X509err(X509_F_BY_FILE_CTRL,X509_R_LOADING_DEFAULTS);
            }
        else
            {
            if(argl == X509_FILETYPE_PEM)
                ok = (X509_load_cert_crl_buf(ctx,argp,
                    X509_FILETYPE_PEM) != 0);
            else
                ok = (X509_load_cert_buf(ctx,argp,(int)argl) != 0);
            }
        break;
        }
    return(ok);
    }

int X509_load_cert_buf(X509_LOOKUP *ctx, const char *certBuf, int type)
    {
    int ret=0;
    BIO *in=NULL;
    int i,count=0;
    X509 *x=NULL;

    if (certBuf == NULL) return(1);
        in=BIO_new(BIO_s_mem());
        if(in==NULL) goto err;

    if (type == X509_FILETYPE_PEM)
        {
        for (;;)
            {
            x=PEM_read_bio_X509_AUX(in,NULL,NULL,NULL);
            if (x == NULL)
                {
                if ((ERR_GET_REASON(ERR_peek_last_error()) ==
                    PEM_R_NO_START_LINE) &amp;amp;&amp;amp; (count &amp;gt; 0))
                    {
                    ERR_clear_error();
                    break;
                    }
                else
                    {
                    X509err(X509_F_X509_LOAD_CERT_FILE,
                        ERR_R_PEM_LIB);
                    goto err;
                    }
                }
            i=X509_STORE_add_cert(ctx-&amp;gt;store_ctx,x);
            if (!i) goto err;
            count++;
            X509_free(x);
            x=NULL;
            }
        ret=count;
        }
    else if (type == X509_FILETYPE_ASN1)
        {
        x=d2i_X509_bio(in,NULL);
        if (x == NULL)
            {
            X509err(X509_F_X509_LOAD_CERT_FILE,ERR_R_ASN1_LIB);
            goto err;
            }
        i=X509_STORE_add_cert(ctx-&amp;gt;store_ctx,x);
        if (!i) goto err;
        ret=i;
        }
    else
        {
        X509err(X509_F_X509_LOAD_CERT_FILE,X509_R_BAD_X509_FILETYPE);
        goto err;
        }
err:
    if (x != NULL) X509_free(x);
    if (in != NULL) BIO_free(in);
    return(ret);
    }

int X509_load_crl_buf(X509_LOOKUP *ctx, const char *certBuf, int type)
    {
    int ret=0;
    BIO *in=NULL;
    int i,count=0;
    X509_CRL *x=NULL;

    if (certBuf == NULL) return(1);
    //in=BIO_new(BIO_s_file_internal());
        in=BIO_new(BIO_s_mem());

        if(in==NULL) goto err;

    if (type == X509_FILETYPE_PEM)
        {
        for (;;)
            {
            x=PEM_read_bio_X509_CRL(in,NULL,NULL,NULL);
            if (x == NULL)
                {
                if ((ERR_GET_REASON(ERR_peek_last_error()) ==
                    PEM_R_NO_START_LINE) &amp;amp;&amp;amp; (count &amp;gt; 0))
                    {
                    ERR_clear_error();
                    break;
                    }
                else
                    {
                    X509err(X509_F_X509_LOAD_CRL_FILE,
                        ERR_R_PEM_LIB);
                    goto err;
                    }
                }
            i=X509_STORE_add_crl(ctx-&amp;gt;store_ctx,x);
            if (!i) goto err;
            count++;
            X509_CRL_free(x);
            x=NULL;
            }
        ret=count;
        }
    else if (type == X509_FILETYPE_ASN1)
        {
        x=d2i_X509_CRL_bio(in,NULL);
        if (x == NULL)
            {
            X509err(X509_F_X509_LOAD_CRL_FILE,ERR_R_ASN1_LIB);
            goto err;
            }
        i=X509_STORE_add_crl(ctx-&amp;gt;store_ctx,x);
        if (!i) goto err;
        ret=i;
        }
    else
        {
        X509err(X509_F_X509_LOAD_CRL_FILE,X509_R_BAD_X509_FILETYPE);
        goto err;
        }
err:
    if (x != NULL) X509_CRL_free(x);
    if (in != NULL) BIO_free(in);
    return(ret);
    }

int X509_load_cert_crl_buf(X509_LOOKUP *ctx, const char *certBuf, int type)
{
    STACK_OF(X509_INFO) *inf;
    X509_INFO *itmp;
    BIO *in;
    int i, count = 0;
    if(type != X509_FILETYPE_PEM)
        return X509_load_cert_buf(ctx, certBuf, type);
        in = BIO_new(BIO_s_mem());
    if(!in) {
        X509err(X509_F_X509_LOAD_CERT_CRL_FILE,ERR_R_SYS_LIB);
        return 0;
    }
        BIO_write(in, certBuf, strlen(certBuf));
    inf = PEM_X509_INFO_read_bio(in, NULL, NULL, NULL);
    BIO_free(in);
    if(!inf) {
        X509err(X509_F_X509_LOAD_CERT_CRL_FILE,ERR_R_PEM_LIB);
        return 0;
    }
    for(i = 0; i &amp;lt; sk_X509_INFO_num(inf); i++) {
        itmp = sk_X509_INFO_value(inf, i);
        if(itmp-&amp;gt;x509) {
            X509_STORE_add_cert(ctx-&amp;gt;store_ctx, itmp-&amp;gt;x509);
            count++;
        }
        if(itmp-&amp;gt;crl) {
            X509_STORE_add_crl(ctx-&amp;gt;store_ctx, itmp-&amp;gt;crl);
            count++;
        }
    }
    sk_X509_INFO_pop_free(inf, X509_INFO_free);
    return count;
}
&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;C++의 루틴은 위의 루틴을 호출합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &quot;by_buffer.h&quot;
static int check(X509_STORE *ctx, const char *certBuf);
static X509 *load_cert(const char *certBuf);

int validateKey(const char *rsaKeyCA, const char *rsaCertificate) {
    int ret=0;
    X509_STORE *cert_ctx=NULL;
    X509_LOOKUP *lookup=NULL;

    cert_ctx=X509_STORE_new();
    if (cert_ctx == NULL) goto end;

    OpenSSL_add_all_algorithms();

    lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_buffer());
    if (lookup == NULL)
        goto end;

    if(!X509_LOOKUP_load_buf(lookup,rsaKeyCA,X509_FILETYPE_PEM))
        goto end;

    lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_hash_dir());
    if (lookup == NULL)
        goto end;

    X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);

    ret = check(cert_ctx, rsaCertificate);
end:
    if (cert_ctx != NULL) X509_STORE_free(cert_ctx);

    return ret;
}

static X509 *load_cert(const char *certBuf)
{
    X509 *x=NULL;
    BIO *cert;

    if ((cert=BIO_new(BIO_s_mem())) == NULL)
        goto end;

    BIO_write(cert, certBuf, strlen(certBuf));

    x=PEM_read_bio_X509_AUX(cert,NULL, NULL, NULL);
end:
    if (cert != NULL) BIO_free(cert);
    return(x);
}

static int check(X509_STORE *ctx, const char *certBuf)
{
    X509 *x=NULL;
    int i=0,ret=0;
    X509_STORE_CTX *csc;

    x = load_cert(certBuf);
    if (x == NULL)
        goto end;

    csc = X509_STORE_CTX_new();
    if (csc == NULL)
        goto end;
    X509_STORE_set_flags(ctx, 0);
    if(!X509_STORE_CTX_init(csc,ctx,x,0))
        goto end;
    ////// See crypto/asn1/t_x509.c for ideas on how to access and print the values
    //printf(&quot;X.509 name: %s\n&quot;, x-&amp;gt;name);
    i=X509_verify_cert(csc);
    X509_STORE_CTX_free(csc);

    ret=0;
end:
    ret = (i &amp;gt; 0);
    if (x != NULL)
        X509_free(x);

    return(ret);
}
&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;저는 이 문제를 직접 접했고 OP에 매우 가까운 코드로 시작했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 인증서 체인에는 3개의 인증서가 포함되어 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인증서1(root-ca) 발급자 : root-ca 발급자 : root-ca 발급자 : root-ca 발급자 : signing-ca 인증서3(기기) 발급자 : signing-ca 발급자 : device&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 기기 인증서를 확인하고 싶었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 ca.pem 등가물(wrt OP)에는 root-ca와 signing-ca가 포함되어 있습니다.&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;X509_verify_cert 함수는 X509_store의 루트(root-ca &amp;amp; signing-ca)까지 전체 인증서 체인이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래는 나에게 맞는 나의 코드입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;반환 값에 대한 검사는 코드를 아래로 기울이기 위해 생략되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int getIssuerCert(X509_STORE *x509_store){
    STACK_OF(X509_INFO) *inf;
    X509_INFO *itmp;
    BIO *in;
    int i, count = 0;

    in = BIO_new(BIO_s_mem());
    BIO_write(in, issuerCertStr, strlen(issuerCertStr)); //string containing root-ca &amp;amp; signing-ca
    inf = PEM_X509_INFO_read_bio(in, NULL, NULL, NULL);
    if(in != NULL) BIO_free(in);
    for(i = 0; i &amp;lt; sk_X509_INFO_num(inf); i++) {
        itmp = sk_X509_INFO_value(inf, i);
        if(itmp-&amp;gt;x509) {
            X509_STORE_add_cert(x509_store, itmp-&amp;gt;x509);
            count++;
        }
        if(itmp-&amp;gt;crl) {
            X509_STORE_add_crl(x509_store, itmp-&amp;gt;crl);
            count++;
        }
    }
    sk_X509_INFO_pop_free(inf, X509_INFO_free);
    return 0;
}


int verify_cert(){
    int ret = 0;
    X509 *devCert = NULL;
    X509_STORE *x509_store = NULL;
    X509_STORE_CTX *x509_store_ctx = NULL;

    OpenSSL_add_all_algorithms();
    devCert = getDeviceCert(); //  Returns X509 pointer

    x509_store = X509_STORE_new();
    X509_STORE_set_verify_cb(x509_store, verify_cb);
    X509_STORE_set_flags(x509_store, 0);

    x509_store_ctx = X509_STORE_CTX_new();

    X509_STORE_CTX_init(x509_store_ctx, x509_store, devCert, NULL)

    X509_STORE_CTX_set_purpose(x509_store_ctx, X509_PURPOSE_ANY);
    ret = X509_verify_cert(x509_store_ctx);

    if(x509_store_ctx != NULL) X509_STORE_CTX_free(x509_store_ctx);
    if(x509_store != NULL) X509_STORE_free(x509_store);
    if(devCert != NULL) X509_free(devCert);
    EVP_cleanup();
    return ret;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조회 방법을 만들 필요가 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저에게 중요한 것은 메모리에 있는 문자열에서 인증서를 반복 검색하는 것이었기 때문에 체인을 완성하는 데 필요한 모든 인증서를 가지고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열은 옵션인 CA 파일에 대해 openssl verify에 입력했을 때와 동일합니다.&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;또한 를 사용할 때 X509 포인터가 null이 아닌지 확인합니다.&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;제 생각에는 &quot;X509_STORE_set_verify_cb&quot;를 사용하여 실제 오류를 식별할 수 있는 콜백을 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;static int  verify_cb(int ok, X509_STORE_CTX *ctx)
{
    if (!ok)
    {
        /* check the error code and current cert*/
        X509 *currentCert = X509_STORE_CTX_get_current_cert(ctx);
        int certError = X509_STORE_CTX_get_error(ctx);
        int depth = X509_STORE_CTX_get_error_depth(ctx);
        printCert(currentCert);
        printf(&quot;Error depth %d, certError %d&quot;, depth, certError)
    }

    return(ok);
}

int verify_cert(X509 *cert, X509 *cacert)
{
     int ret;
     X509_STORE *store;
     X509_STORE_CTX *ctx;

     store = X509_STORE_new();
     X509_STORE_set_verify_cb(store, verify_cb);
     X590_STORE_add_cert(store, cacert);

     ctx = X509_STORE_CTX_new();
     X509_STORE_CTX_init(ctx, store, cert, NULL);

     ret = X590_verify_cert(ctx);

     /* check for errors and clean up */
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 코드를 알지 못하면 실제 문제를 추측하기 어렵습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 코드가 정상으로 보입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;19-1&quot;&gt;가능&lt;/strong&gt;한 답변 (댓글을 추가할 담당자 포인트가 없습니다, 죄송합니다): manpage for&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SSL_CTX_load_verify_locations(3)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;말한다,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;When building its own certificate chain, an OpenSSL client/server will try to fill in
missing certificates from CAfile/CApath, if the certificate chain was not explicitly
specified (see SSL_CTX_add_extra_chain_cert(3), SSL_CTX_use_certificate(3).
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(부모님을 나의 부모님이 아닌 그들의 부모님과 일치시키지 못하는 것.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p&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;SSL_CTX_load_verify_locations(3)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 사용할 수 있어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SSL_CTX_add_extra_chain_cert(3)&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;SSL_CTX_use_certificate(3)&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;X509 *&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;. 따라서에서 본 .  arg.&lt;/font&gt;&lt;/font&gt;&lt;font 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;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;SSL_CTX_load_verify_locations ()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능 : http://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SSL_CTX_load_verify_locations()는 검증 목적의 CA 인증서가 위치하는 ctx의 위치를 지정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;CA 파일 및 CA 경로를 통해 사용 가능한 인증서는 신뢰할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ca.pem 서버를 모두 포함하는 CA 인증서 파일을 생성할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;펨:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; #!/bin/sh
 rm CAfile.pem
 for i in ca.pem server.pem ; do
   openssl x509 -in $i -text &amp;gt;&amp;gt; CAfile.pem
 done
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그다음에 세트&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CAfile&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;CAfile.pem&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공식 소스 코드 참조: apps/verify.c&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-c prettyprint-override&quot;&gt;&lt;code&gt;static int check(X509_STORE *ctx, const char *file,
                 STACK_OF(X509) *uchain, STACK_OF(X509) *tchain,
                 STACK_OF(X509_CRL) *crls, int show_chain);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 'OK'를 출력하는 방법을 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-c prettyprint-override&quot;&gt;&lt;code&gt;    if (i &amp;gt; 0 &amp;amp;&amp;amp; X509_STORE_CTX_get_error(csc) == X509_V_OK) {
        printf(&quot;%s: OK\n&quot;, (file == NULL) ? &quot;stdin&quot; : file);
&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;기능 의존성은 apps/apps.c에서 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/16291809/programmatically-verify-certificate-chain-using-openssl-api&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/738</guid>
      <comments>https://closeapi.tistory.com/738#entry738comment</comments>
      <pubDate>Sat, 28 Oct 2023 07:56:28 +0900</pubDate>
    </item>
    <item>
      <title>IE10에서 스크롤 바 오버레이 콘텐츠를 방지하려면 어떻게 해야 합니까?</title>
      <link>https://closeapi.tistory.com/737</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IE10에서 스크롤 바 오버레이 콘텐츠를 방지하려면 어떻게 해야 합니까?&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;IE10에서 스크롤 바가 항상 있는 것은 아닙니다.&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;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IE10:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/IviR8.jpg&quot; alt=&quot;enter image description here&quot;&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;크롬:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/lL51s.jpg&quot; alt=&quot;enter image description here&quot;&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;IE10에서 스크롤 바를 항상 위치에 고정하는 방법을 아는 사람?&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;overflow-y: scroll가 작동하지 않는 것 같습니다! 그냥 내 웹사이트에 영구적으로 올려놓습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제를 일으키는 부트스트랩일 수도 있지만 어떤 부분인지 전혀 모르겠습니다! 여기 예를 참조하십시오. http://twitter.github.io/bootstrap/&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;xec가 그의 답변에서 언급했듯이, 이 동작은 @-ms-viewport 설정으로 인해 발생합니다.&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;좋은 소식은 스크롤 바를 되돌리기 위해 이 설정을 제거할 필요가 없다는 것입니다(이 경우 응답형 웹 설계를 위해 @-ms-viewport 설정을 사용합니다).&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;이 문서에서 언급한 대로 -ms-overflow-style을 사용하여 오버플로 동작을 정의할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ie/hh771902(v=vs.85).aspx&quot; papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://msdn.microsoft.com/en-us/library/ie/hh771902(v=vs.85).aspx&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크롤 막대를 되돌리려면 스크롤 막대로 스타일을 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;body {
    -ms-overflow-style: scrollbar;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&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;내용이 오버플로될 때 요소가 고전적인 스크롤바 유형 컨트롤을 표시함을 나타냅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;-ms-autohidding-scrollbar와 달리 스크롤바로 설정된 -ms-overflow-style 속성을 가진 요소의 스크롤바는 항상 화면에 나타나고 요소가 비활성 상태일 때 흐려지지 않습니다.&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;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구글을 조금 검색한 후 우연히 &quot;Blue Ink&quot;가 남긴 댓글에서 다음과 같은 내용이 언급된 토론을 발견했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지를 검사하면서 다음과 같은 방법으로 복제할 수 있었습니다.&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;@-ms-viewport { width: 디바이스-width; }&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크롤 막대가 투명해집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 콘텐츠가 화면 전체를 차지하기 때문에 말이 됩니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 시나리오에서는 다음을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;overflow-y: auto;&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;/blockquote&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/twbs/bootstrap/blob/master/less/responsive-utilities.less?source=cc#L21-L23&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;21-1&quot;&gt;bootstrap response-utilities.less file, line 21&lt;/a&gt;에서 다음과 같은 CSS 코드를 찾을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-less prettyprint-override&quot;&gt;&lt;code&gt;// IE10 in Windows (Phone) 8
//
// Support for responsive views via media queries is kind of borked in IE10, for
// Surface/desktop in split view and for Windows Phone 8. This particular fix
// must be accompanied by a snippet of JavaScript to sniff the user agent and
// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at
// our Getting Started page for more information on this bug.
//
// For more information, see the following:
//
// Issue: https://github.com/twbs/bootstrap/issues/10497
// Docs: http://getbootstrap.com/getting-started/#support-ie10-width
// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/
// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/

@-ms-viewport {
  width: device-width;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 토막글이 행동의 원인입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위 댓글 코드에 나열된 링크를 읽어보시기를 권합니다. (이 답변을 처음 올린 후 추가되었습니다.)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;23-0&quot;&gt;해결책:&lt;/strong&gt; IE10의 경우 탐지한 다음 CSS를 사용하는 두 단계입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (/msie\s10\.0/gi.test(navigator.appVersion)) {
    $('body').addClass('IE10');
} else if (/rv:11.0/gi.test(navigator.appVersion)) {
    $('body').addClass('IE11');
}

// --OR--

$('body').addClass(
  /msie\s10\.0/gi.test(navigator.appVersion) ? 'IE10' :
  /rv:11.0/gi.test(navigator.appVersion)     ? 'IE11' :
  ''  // Neither
);

// --OR (vanilla JS [best])--

document.body.className +=
  /msie\s10\.0/gi.test(navigator.appVersion) ? ' IE10' :
  /rv:11.0/gi.test(navigator.appVersion)     ? ' IE11' :
  '';  // Neither
&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;다음 CSS 추가:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;body.IE10, body.IE11 {
    overflow-y: scroll;
    -ms-overflow-style: scrollbar;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;26&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;ul&gt; 
 &lt;li&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;overflow-y:scroll&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;영구적으로 켜짐&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-ms-overflow-style:scrollbar&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;자동 hiding 동작을 해제하여 콘텐츠를 밀어내고 모두에게 익숙한 스크롤 바 레이아웃 동작을 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IE11에 대해 문의하는 사용자를 위해 업데이트됨 - 참조 https://learn.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/compatibility/ms537503(v=vs.85)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 먹어봐요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;body{-ms-overflow-style: scrollbar !important;}
&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;부트스트랩 4의 데이터 테이블에서도 이 문제가 발생하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mi 솔루션은 다음과 같습니다.&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;ie 브라우저가 열리고 있는지 확인했습니다.&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;테이블 응답 클래스를 테이블 응답 클래스로 대체했습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.table-responsive-ie {
display: block;
width: 100%;
overflow-x: auto;}
&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;JS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var ua = window.navigator.userAgent;
var msie = ua.indexOf(&quot;MSIE &quot;);
if (msie &amp;gt; 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) //If IE
        {
            $('#tableResponsibleID').removeClass('table-responsive');
            $('#tableResponsibleID').addClass('table-responsive-ie');
        }  
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;39-1&quot;&gt;@-ms-viewport&lt;/em&gt; 와 다른 제안들을 시도해 보았지만 윈도우 7의 IE11에서는 아무 것도 작동하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 스크롤 바가 없었고 여기 있는 다른 게시물들은 콘텐츠가 많음에도 불구하고 어디에도 스크롤하지 않는 스크롤 바를 기껏해야 주었을 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;. .로 축소된 이 기사 http://www.rlmseo.com/blog/overflow-auto-problem-bug-in-ie/ 를 찾았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;body { overflow-x: visible; }&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그리고 나를 위해 속임수를 썼습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/17045132/how-can-i-prevent-the-scrollbar-overlaying-content-in-ie10&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>CSS</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/737</guid>
      <comments>https://closeapi.tistory.com/737#entry737comment</comments>
      <pubDate>Sat, 28 Oct 2023 07:56:14 +0900</pubDate>
    </item>
    <item>
      <title>동일한 이름의 형상화된 뷰 및 테이블</title>
      <link>https://closeapi.tistory.com/736</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 이름의 형상화된 뷰 및 테이블&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 구체화된 견해를 이해하고 있고, 이전에도 그 견해들과 함께 일한 적이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;최근 특정 보고서에 최신 데이터가 표시되지 않는 이유에 대한 질문이 올라와서 그 문제를 조사했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;보아하니, 그들은 일찍이 크론탭이 적재된 임시 테이블을 가지고 있다가 나중에 Materialized 뷰로 전환한 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 쿼리(테이블의 이름이 변경됨)로 데이터베이스를 조사했을 때:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT * FROM all_objects WHERE object_name = 'TEMP_DATA';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 실제로 두 개의 객체를 같은 스키마에 표시했습니다: 하나의 테이블과 다른 구체화된 뷰.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;OWNER   OBJECT_NAME  OBJECT_TYPE        DATA_OBJECT_ID  LAST_DDL_TIME     TIMESTAMP
SCHEMA  TEMP_DATA    TABLE                      110623  08/06/2013 15:38  2013-08-06:14:53:01
SCHEMA  TEMP_DATA    MATERIALIZED VIEW                  10/30/2015 00:00  2013-08-06:14:56:33
&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;그리고 테이블 이름을 바꾸려고 하면 materialized view 이름을 바꿀 수 없다고 합니다.&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;SELECT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터가 어디서 오는지(테이블 또는 MView)?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 그냥 옛날에 먹고 남은 테이블인가요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 Oracle은 동일한 이름을 가진 다른 유형의 개체를 허용합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(모든 사물은 고유한 이름을 가져야 한다고 생각했기 때문에, 저는 이것에 매우 당황했습니다!)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 궁금할 뿐입니다. 만약 그것들이 아래 SQL에서 사용되는 2개의 객체라면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT * FROM TEMP_DATA;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것에 대한 어떤 통찰력이라도, 대단히 감사합니다.&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;@Alex와 @Husqvik의 응답을 기반으로 한 &lt;strong papago-id=&quot;10-0&quot;&gt;업데이트&lt;/strong&gt;:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mview 정의에서 아래와 같이 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;BUILD IMMEDIATE  
REFRESH COMPLETE  
START WITH TO_DATE('06-Nov-2015','dd-mon-yyyy')  
NEXT trunc(sysdate) + 1  
WITH PRIMARY KEY  
&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;내일 리프레시 후 07-11월로 &lt;strong papago-id=&quot;11-1&quot;&gt;시작&lt;/strong&gt;이 변경되나요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 자동으로 새로고침이 되나요? 그렇다면 언제 새로고침이 되나요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 이 MVIW를 사용하는 보고서에 최신 데이터가 보이지 않는다고 불평해서 처음부터 이걸 보게 된 것인데 새로워낙 새로워지는 것을 막을 수 있는 것이 있을까요?&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;다음은 MView에 대한 전체 DDL입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DROP MATERIALIZED VIEW SCHEMA.TEMP_DATA;
CREATE MATERIALIZED VIEW SCHEMA.TEMP_DATA 
TABLESPACE ITS_DATASPACE
PCTUSED    0
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOCACHE
LOGGING
NOCOMPRESS
NOPARALLEL
BUILD IMMEDIATE
REFRESH COMPLETE
START WITH TO_DATE('06-Nov-2015','dd-mon-yyyy')
NEXT trunc(sysdate) + 1
WITH PRIMARY KEY
AS 
/* Formatted on 2015/11/05 09:35 (Formatter Plus v4.8.8) */
SELECT *
  FROM SCHEMA.h_case_data
 WHERE status LIKE 'M%';

COMMENT ON MATERIALIZED VIEW SCHEMA.TEMP_DATA IS 'snapshot table for snapshot SCHEMA.TEMP_DATA';

CREATE INDEX SCHEMA.CASE_ID_IDX ON SCHEMA.TEMP_DATA
(CASE_ID)
LOGGING
TABLESPACE ITS_DATASPACE
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;

CREATE INDEX SCHEMA.STATUS_IDX ON SCHEMA.TEMP_DATA
(STATUS)
LOGGING
TABLESPACE ITS_DATASPACE
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6002.htm&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15-0&quot;&gt;설명서&lt;/a&gt;에서:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구체화된 보기를 작성하면 Oracle Database는 하나의 내부 테이블과 하나 이상의 인덱스를 작성하며 하나의 보기를 작성할 수 있으며, 이는 모두 구체화된 보기의 스키마에 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle Database는 이러한 개체를 사용하여 구체화된 보기 데이터를 유지 관리합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 같은 이름의 테이블과 구체화된 뷰를 갖는 것은 정상입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MV는 데이터를 어딘가에 저장해야 하므로 테이블을 보유하는 것이 타당합니다. MV 자체가 테이블 데이터가 유지되는 방법을 정의합니다.&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;http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6002.htm#sthref6834&quot; rel=&quot;noreferrer&quot; papago-id=&quot;18-1&quot;&gt;절&lt;/a&gt;을 사용하여 기존 테이블에 대한 보기를 만들 수 있습니다. &quot;이전에 임시 테이블이 있었는데 나중에 Materialized view로 전환했습니다.&quot;라고 가정합니다.&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://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_8019.htm#sthref8591&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19-1&quot;&gt;옵션&lt;/a&gt;을 사용하여 다른 방향으로 이동할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SELECT * FROM TEMP_DATA;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 테이블을 쿼리하고 있지만 동일한 결합 개체를 참조하기 때문에 구별은 그다지 중요하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나중에 질문에 추가할 정의에 따라 매일 자정에 새로 고쳐집니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스키마 개체가 두 개 있습니다.&lt;/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;ALL_OBJECT를 선택하면 MITALIZED VIEW 개체에 세그먼트가 없음을 알 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 사전은 기본 테이블을 일반 테이블로 취급할 수 없도록 보호합니다. 그렇지 않으면 연결된 개체 간의 일관성이 깨질 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;미리 작성된 테이블 위에 구체화된 뷰를 작성할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p 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;새로고침할 때마다 START WITH가 업데이트됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;보기가 생성되거나 새로 고쳐질 때 NEXT START가 평가됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스에서 일반적으로 발생할 수 있는 오류(예: 충분한 공간 부족, 잠금 시간 초과, 쿼리 기본 개체의 변경)에 대해 새로 고침이 실패할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/33552237/materialized-view-and-table-with-the-same-name&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/736</guid>
      <comments>https://closeapi.tistory.com/736#entry736comment</comments>
      <pubDate>Sat, 28 Oct 2023 07:56:06 +0900</pubDate>
    </item>
    <item>
      <title>jquery 요소를 html 요소로 변환</title>
      <link>https://closeapi.tistory.com/735</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jquery 요소를 html 요소로 변환&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery 요소가 있는데 HTML 요소만 가능한 기능으로 보내야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery 요소를 HTML 요소로 변환하려면 어떻게 해야 합니까?&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;myJQueryElement[0]&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;get()&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;get()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;$(&quot;#foo&quot;)[0]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML 요소를 얻을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;브래킷을 사용하는 것은 사용하는 것보다 약간 빠릅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.get()&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;a href=&quot;http://jsperf.com/jquery-brackets-vs-get&quot; papago-id=&quot;5-1&quot;&gt;번&lt;/a&gt;을 하지 않는 한 눈치채지 못할 겁니다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/7114780/convert-jquery-element-to-html-element&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/735</guid>
      <comments>https://closeapi.tistory.com/735#entry735comment</comments>
      <pubDate>Mon, 23 Oct 2023 21:50:56 +0900</pubDate>
    </item>
    <item>
      <title>엔티티 프레임워크에서 원시 오라클 SQL 쿼리 매개 변수화</title>
      <link>https://closeapi.tistory.com/734</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;엔티티 프레임워크에서 원시 오라클 SQL 쿼리 매개 변수화&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;EF 4의 Oracle 동의어(non-entity)에 대한 원시 SQL 쿼리를 매개 변수화하려고 하는데 몇 가지 문제가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 저는 아래의 코드와 같은 작업을 하고 있는데, 이는 제가 본 몇 가지 예를 바탕으로 한 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; string term=&quot;foo&quot;;
 OracleParameter p = new OracleParameter(&quot;@param1&quot;, term);
 object[] parameters = new object[] { p };
 var model = db.Database.SqlQuery&amp;lt;ProjectTask&amp;gt;(&quot;SELECT * FROM (SELECT * FROM web_project_task_vw WHERE project_num like '%@param1%') WHERE rownum&amp;lt;=100&quot;, parameters).ToList();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업을 실행해도 결과가 반환되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개 변수를 다음과 같은 것으로 교체하면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;SELECT * FROM web_project_task_vw WHERE project_num like '%&quot;+term+&quot;%'&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예상한 결과를 반환하지만 이는 분명 SQL 주입 위험입니다.&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;오라클 DB의 EF 4에서 매개 변수가 어떻게 작동하는지에 대해 올바른 방향을 알려줄 수 있는 사람이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫째, Mohammed가 작성한 것처럼 매개 변수 앞에 ':'를 붙여야 하지만 정의한 대로가 아니라 쿼리에서만 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘째, 현재 파라미터의 값이 아니라 문자열을 포함하는 문자열을 검색하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@param1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 따라서 매개 변수의 값을 %로 둘러싸면 결과를 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 이는 다음과 같이 보여야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string term=&quot;foo&quot;;
 OracleParameter p = new OracleParameter(&quot;param1&quot;, term);
 object[] parameters = new object[] { p };
 var model = db.Database.SqlQuery&amp;lt;ProjectTask&amp;gt;(&quot;SELECT * FROM (SELECT * FROM web_project_task_vw WHERE project_num like '%'||:param1||'%') WHERE rownum&amp;lt;=100&quot;, parameters).ToList();
&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;p&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;param1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,것은 아니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@param1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 쿼리도 올바르지 않습니다. 바꾸기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'%@param1%'&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;'%:param1%'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p 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/15509346/parameterizing-a-raw-oracle-sql-query-in-entity-framework&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/734</guid>
      <comments>https://closeapi.tistory.com/734#entry734comment</comments>
      <pubDate>Mon, 23 Oct 2023 21:50:50 +0900</pubDate>
    </item>
    <item>
      <title>입력 텍스트에서 깜박이는 커서를 숨기는 방법?</title>
      <link>https://closeapi.tistory.com/733</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 텍스트에서 깜박이는 커서를 숨기는 방법?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택 입력처럼 보이지만 실제로는 그렇지 않은 것을 만들고 싶습니다. 여기 단계가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;&amp;lt;input type=&quot;text&quot;&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;background-image&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 선택 상자라는 인상을 주는 &quot;선택 화살표&quot;를 보여줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 입력에 기본값을 추가했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;SlideDown()&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;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;disabled&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 깜박이는 커서는 나타나지 않지만,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.click()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.focus&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&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;/font&gt;&lt;code&gt;SlideDown()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;깜박이는 커서를 표시하지 않으면서 클릭할 수 있도록 하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드는 이렇습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div style=&quot;padding-top:17px; overflow:hidden;&quot;&amp;gt;
    &amp;lt;div style=&quot;float:left;&quot;&amp;gt;
        &amp;lt;label for=&quot;secretquestion&quot;&amp;gt;Secret Question&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;
        &amp;lt;input type=&quot;text&quot; class=&quot;inputselect&quot; id=&quot;secretquestion&quot; name=&quot;secretquestion&quot; value=&quot;Choose a Secret Question&quot; tabindex=10 /&amp;gt;&amp;lt;br&amp;gt;
        &amp;lt;div class=&quot;selectoptions&quot; id=&quot;secretquestionoptions&quot;&amp;gt;
            &amp;lt;b&amp;gt;test&amp;lt;/b&amp;gt;
        &amp;lt;/div&amp;gt; 
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.selectoptions
{
    display: none;
    background-color: white;  
    color: rgb(46,97,158); 
    width: 250px; 
    margin:auto; 
    border-style: solid; 
    border-width:1px; 
    border-color: rgb(46,97,158);  
    font-size: 14px; 
    text-align: center; 
}

.inputselect {
    color: white;  
    cursor: pointer;  
    background-image: url('inputselect.png');
    padding-top: 5px; 
    padding-bottom: 5px;   
    padding-left:10px; 
    padding-right:-10px;
    width:240px; 
    border-style: solid; 
    border-color: rgb(46,97,158); 
    border-width: 1px;
} 
.inputselect:hover {
    outline:none;      
    color:aqua; 
    cursor: pointer; 
    background-image: url('inputselecthover.png');
}
.inputselect:focus {
    outline:none;      
    color:aqua; 
    cursor: pointer; 
    background-image: url('inputselecthover.png');
}
&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;이 내용을 &quot;입력 선택&quot; 클래스에 추가하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;caret-color: transparent;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커서의 색은 텍스트의 색과 일치합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;text&quot; style=&quot;color: transparent&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력란에 실제로 텍스트를 표시하려면(필요한 사람이 있습니다) 텍스트 그림자를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    body, div, input {
       color: #afa;
       text-shadow: 0px 0px 1px #fff;
    }
&amp;lt;style&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(Firefox 및 Safari 테스트 완료).&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;$('input').mousedown(function(e){
  e.preventDefault();
  $(this).blur();
  return false;
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 완벽한 해결책이라고 생각합니다. 입력을 충분히 넓게 하고 화면 오른쪽으로 정렬하여 커서와 콘텐츠를 화면 밖에 두고 클릭할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/HPIKd.jpg&quot; alt=&quot;perfect solution&quot;&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나에게 효과가 있었던 이 코드를 시도해보세요 :-&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;input-parent&quot; style=&quot;margin-left: 30px;&quot;&amp;gt;
     &amp;lt;input type=&quot;text&quot; /&amp;gt;
&amp;lt;/div&amp;gt;


input-parent {
    width: 100px;
    height: 30px;
    overflow: hidden;
    }
.input-parent input {
    width: 120px;
    height: 30px;
    margin-left: -20px;
    text-align: left;
    caret-color: transparent;
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;드디어 묘책을 찾았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;wrapper&quot;&amp;gt;
    &amp;lt;input type=&quot;text&quot; /&amp;gt;
&amp;lt;/div&amp;gt;

.wrappr {
    width: 100px;
    height: 30px;
    overflow: hidden;
}
.wrapper input {
    width: 120px;
    height: 30px;
    margin-left: -20px;
    text-align: left;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 상황에선 효과가 있어요!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 먹어봐요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;input {
  color: transparent;
  text-shadow: 0 0 0 #2196f3;

  &amp;amp;:focus {
      outline: none;
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;완전한 응답은 아니지만 도움이 될 수 있습니다. 최근 프로젝트에서 입력을 비활성화하는 데 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.getElementById('Object').readOnly = true;
    document.getElementById('Object').style.backgroundColor = '#e6e6e6';
    document.getElementById('Object').onfocus = function(){
        document.getElementById('Object').blur();
    };
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자는 입력을 클릭하면 해당 입력에 초점을 맞추게 되고, 블러() 기능을 통해 초점이 제거됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;readOnly를 &quot;True&quot;로 설정하고 배경색을 회색(#e6e6e6)으로 설정하면 사용자가 혼동하지 않아야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/9333044/how-to-hide-blinking-cursor-in-input-text&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/733</guid>
      <comments>https://closeapi.tistory.com/733#entry733comment</comments>
      <pubDate>Mon, 23 Oct 2023 21:50:44 +0900</pubDate>
    </item>
    <item>
      <title>윈도우 10에서 도커 이미지 위치는?</title>
      <link>https://closeapi.tistory.com/732</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;윈도우 10에서 도커 이미지 위치는?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 윈도우 10 홈 운영체제를 사용하고 있습니다.&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;다음 명령을 사용하여 .net 코어 애플리케이션의 도커 이미지를 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$  docker build -t helloWorld:core .
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 이 이미지를 다른 기계로 보내려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 이미지 파일을 받지 못하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 제 이미지가 어디에 저장되는지 알려주실 수 있나요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 도커 빌드 명령에서 도커 이미지 경로를 지정할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 모든 답이 구식이거나 틀렸다는 것을 발견했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%localappdata%\Docker\wsl&lt;/code&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;가장 최신 방법은 윈도우 10 홈 2020년 5월 업데이트입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 버전의 Windows Subsystem for Linux(WSL2)를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 답변은 이 구성에 대한 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/windows/wsl/install-win10&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-1&quot;&gt;WSL2를 활성화&lt;/a&gt;한 후 &lt;a href=&quot;https://hub.docker.com/editions/community/docker-ce-desktop-windows&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-3&quot;&gt;도커 데스크톱&lt;/a&gt;을 설치합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 데스크톱은 WSL 내부의 호스트에 연결하는 클라이언트입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지 디렉토리가 다소 일치하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker info&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;호스트 머신이나 WSL 내부에서 경로를 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Docker Root Dir: /var/lib/docker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;존재하지 않는 것:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ ls /var/lib/docker
ls: cannot access '/var/lib/docker': No such file or directory
&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;/mnt/wsl/docker-desktop-data/
&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;또는 이 Windows 탐색기 경로에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;\\wsl$\docker-desktop-data\mnt\wsl\docker-desktop-data\data\docker\image
&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;Windows 10(윈도우 10) 비홈 버전을 사용하는 경우에는 다르게 작동할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 답들을 보세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이 OS에 접속할 수 없기 때문에 대답하려고 하지 않을 것입니다.&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;Windows 10(윈도우 10)에서 시스템 트레이(작업 표시줄의 오른쪽)에서 도커 아이콘을 마우스 오른쪽 단추로 클릭하고 Settings...(설정...)를 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Advanced(고급) 창에 다음과 같은 내용이 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lRPay.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lRPay.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;ol&gt; 
 &lt;li&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;docker info&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지휘.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과 - &lt;strong papago-id=&quot;17-1&quot;&gt;Docker Root Dir&lt;/strong&gt; 확인&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 폴더에는 이미지, 컨테이너, ...이 들어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oh00c.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oh00c.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WSL2(Windows Subsystem for Linux)에서 도커를 사용하는 경우 숨겨진 공유를 통해 이미지에 액세스할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;\\wsl$\docker-desktop-data\version-pack-data\community\docker\overlay2&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;볼륨도 다음 위치에 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 버전은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;20.10.7&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AERr2.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AERr2.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;docker-desktop-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;&lt;font class=&quot;papago-parent&quot;&gt;당신의 파일에 실제로 위치해 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AppData\Local&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;vhdx&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;C:\Users\YOUR_USER_NAME\AppData\Local\Docker\wsl\data\ext4.vhdx&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 프로세스를 종료하고 열 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ext4.vhdx&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;파일(예를 들어 7zip 포함), 거기서 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;version-pack-data\community\docker&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;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;윈도우 10에 있고 윈도우 컨테이너를 실행중인 경우&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KA66g.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KA66g.jpg&quot; alt=&quot;docker running windows containers&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위 이미지에서 도커는 윈도우 컨테이너를 실행하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;리눅스 컨테이너로의 전환을 보여줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선취점&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker info&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;command (구체적인 내용)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker info --format “{{json .DockerRootDir}}”&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;/p&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루트 디라를 봐야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 루트 디렉터리: C:\ProgramData\Docker&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;docker pull hello-world
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지를 끌어 올린 후 도커 루트 디어를 들여다 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p 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;폴더 중 하나에서 레이어의 Sha를 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lO5cX.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lO5cX.jpg&quot; alt=&quot;Docker location on windows&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 이미지가 다운로드되는 위치를 알고 싶다면 다음 폴더도 살펴봐야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위와 아래의 두 폴더는&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C:\ProgramData\Docker\image\window 필터&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C:\ProgramData\Docker\window 필터&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/04xkO.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/04xkO.png&quot; alt=&quot;Docker location&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 리눅스 이미지.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커에서 윈도우 컨테이너를 실행 중인 경우, nginx와 같은 리눅스 기반 컨테이너를 가져오려고 하면,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker pull nginx:latest
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 다음과 같은 메세지를 받게 될 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;latest: Pulling from library/nginx
no matching manifest for windows/amd64 10.0.18363 in the manifest list entries
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 리눅스 컨테이너로 전환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫번째 이미지를 봅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리눅스용 도커가 실행되면 명령을 다시 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker pull nginx:latest
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지가 다운로드되고 있는 것을 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하드 디스크에 이 이미지가 다운로드된 위치는 어디입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 docker info 명령어는 큰 도움이 되지 않을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 다시 시작해요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Settings(설정)을 클릭하고 &quot;Switch to Windows Containers(윈도우 컨테이너로 전환)..&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KFRE1.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KFRE1.jpg&quot; alt=&quot;Settings On Docker Desktop for linux containers&quot;&gt;&lt;/a&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;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wUDXg.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wUDXg.jpg&quot; alt=&quot;Settings Page on docker desktop showing the path&quot;&gt;&lt;/a&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;C:\ProgramData\DockerDesktop\vm-data&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WvQBA.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WvQBA.png&quot; alt=&quot;LinuxImages location&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수정한 날짜 열을 메모합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Linux 기반 이미지를 끄집어내거나 제거한 후 주의하고 관찰합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 리눅스 env용으로 예약된 디스크 공간이므로 이미지가 어디에 있는지 더 아래에서 찾아볼 수 없습니다.&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;필요하다면 리눅스 기반 VM을 실행하고 도커를 설치하고 /var/lib/docker/경로를 탐색합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;때때로 권한 문제가 발생할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 &lt;a href=&quot;https://superuser.com/a/221094/674525&quot; papago-id=&quot;55-1&quot;&gt;그렇다면&lt;/a&gt; 이것과 &lt;a href=&quot;https://superuser.com/a/221029/674525&quot; papago-id=&quot;55-3&quot;&gt;이것&lt;/a&gt;을 보세요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows Containers(&lt;strong papago-id=&quot;18-1&quot;&gt;윈도우 컨테이너&lt;/strong&gt;)를 활성화하면 이미지가 기본적으로 저장됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\ProgramData\Docker\&lt;/code&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;C:\ProgramData\Docker\config\daemon.json&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;&quot;graph&quot;&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;(모든 백슬래시가 다른 백슬래시와 함께 탈출되도록 notice)&lt;/font&gt;&lt;/font&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;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-json prettyprint-override&quot;&gt;&lt;code&gt;{
  &quot;registry-mirrors&quot;: [],
  &quot;insecure-registries&quot;: [],
  &quot;debug&quot;: true,
  &quot;experimental&quot;: false,
  &quot;graph&quot;: &quot;D:\\ProgramData\\Docker&quot;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 후 &lt;strong papago-id=&quot;22-1&quot;&gt;도커 서비스를 재시작&lt;/strong&gt;해야 하며 다음을 통해 변경 사항을 확인할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker info&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;Docker Root Dir&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;/p&gt;&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WSL 기반 도커 설치 위치를 찾지 못했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 도커 명령 자체로 이미지를 얻는 간단한 방법이 있습니다!&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker image save myimagename -o myimagename.tar
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 7zip 또는 이와 유사한 프로그램으로 탐색할 수 있는 아카이브 파일이 생성됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WSL을 사용하는 최근 도커 데스크톱에서 윈도우 10의 도커 이미지 위치가 변경되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;(last tested with Docker Desktop Community version 2.3.0.3)&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 실행 및 유형을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;\\wsl$&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 파일 탐색기가 열리고 폴더가 아래와 같이 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;docker-desktop&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;docker-desktop-data&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디렉터리를 찾아 필요한 파일을 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;26-0&quot;&gt;참고&lt;/strong&gt;: 사용하기 전에 도커 데스크톱이 실행 중인지 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;\\wsl$&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지휘권을&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EyZEw.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EyZEw.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 것은 &quot;C:&quot;에서 찾을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;\Users\Public\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Hyper-V\가상 하드 디스크&quot;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 명령을 사용하여 이미지를 내보낼 수 있으며 Linux / 다른 기계 도커 내보내기 [OPTIONS] 컨테이너에 복사할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker export --output=&quot;latest.tar&quot; red_panda
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 이미지를 다른 컴퓨터로 발송하려면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker ps -a  
#or docker container ls -a
docker commit &amp;lt;container-id&amp;gt; mynewimage
#start here if you never started your image 
#(ex: if just created using docker build -t helloWorld:core .)
docker image ls
docker save mynewimage &amp;gt; /tmp/mynewimage.tar
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 컴퓨터의 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker load &amp;lt; /tmp/mynewimage.tar
docker images
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에서 설명한 바와 같이 Linux 컨테이너가 있는 윈도우에서 작업할 때 컨테이너는 DockerDesktop/settings/advanced/DiskImageLocation에 위치한 DockerDisk 이미지 내에 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.jamescoyle.net/how-to/1512-export-and-import-a-docker-image-between-nodes&quot; rel=&quot;noreferrer&quot; papago-id=&quot;78-1&quot;&gt;여기&lt;/a&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;2022년 8월 29일 현재:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;%localappdata%\Docker\wsl
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 여기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;C:\ProgramData\DockerDesktop\vm-data
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 옛날에는 여기에 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;C:\Users\Public\Documents\Hyper-V\Virtual hard disks
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예. 프로그램 데이터, 앱 데이터, 문서 등 디스크의 어디에나 저장할 수 있습니다.&lt;/font&gt;&lt;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;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;윈도우 10용 도커 데스크톱이 여기로 이동되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;c:/사용자/&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;user&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;/AppData/Roaming/Docker/settings.json&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;%APPDATA%\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커\settings.json&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;88&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 윈도우 10 Professional 버전 20H2에서 도커 데스크톱 4.5.1(74721)을 실행할 때 이미지의 위치가 다음 사진과 같이 제 사용자 디렉토리 아래에 있는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kmAxm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kmAxm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 이미지에 도달하려고 하는지 모르겠지만, 도커 명령만 사용하면 이미지에서 백업 파일을 생성하고 원하는 곳에 로드할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ docker save -o ubuntu.tar ubuntu:lucid ubuntu:saucy
&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;Windows 홈 디렉토리에 tar 파일을 저장합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;로드하는 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ docker load --input ubuntu.tar
&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;저는 WSL2로 윈도우에서 도커 데스크톱을 사용할 때 컨테이너가 아래에 있었습니다.&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;여기 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;C:\ProgramData\Docker\tmp\
&lt;/code&gt;&lt;/pre&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;20.10.17(Windows 10)&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;\\\wsl.localhost\docker-desktop-data\data\docker\containers&lt;/code&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;자세한 내용은 아래에서 확인할 수 있습니다.&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&gt;&lt;/font&gt;&lt;code&gt;C:\Users\Public\Documents\Hyper-V\Virtual hard disks&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디렉토리(.vhdx 파일).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 설정 &amp;gt; 고급 &amp;gt; 디스크 이미지 위치에서 변경 가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 윈도우 10 홈 버전 2004에서 도커 19.03.8을 실행하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;WSL 백엔드가 새로 추가되었습니다. 이 구성에서 WSL 프롬프트를 실행하고(Win-r 후 wsl을 실행), 이미지 파일이 /mnt/host/wsl/docker-desktop-data/data/docker 아래에 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;99&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;%USERPROFILE%/.docker/config.json
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;100&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/42250222/where-is-docker-image-location-in-windows-10&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Docker</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/732</guid>
      <comments>https://closeapi.tistory.com/732#entry732comment</comments>
      <pubDate>Mon, 23 Oct 2023 21:50:35 +0900</pubDate>
    </item>
    <item>
      <title>Android Material과 Appcat Manifest 병합 실패</title>
      <link>https://closeapi.tistory.com/731</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android Material과 Appcat Manifest 병합 실패&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;dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.google.android.material:material:1.0.0-rc01'
}
&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;Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0-alpha3] AndroidManifest.xml:22:18-91
    is also present at [androidx.core:core:1.0.0-alpha3] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
    Suggestion: add 'tools:replace=&quot;android:appComponentFactory&quot;' to &amp;lt;application&amp;gt; element at AndroidManifest.xml:5:5-19:19 to override.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋아요! 가서 확인하고 해보세요&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    package=&quot;ru.chopcode.myapplication&quot;&amp;gt;

    &amp;lt;application
        tools:replace=&quot;android:appComponentFactory&quot;
        android:allowBackup=&quot;true&quot;
        android:icon=&quot;@mipmap/ic_launcher&quot;
        android:label=&quot;@string/app_name&quot;
        android:roundIcon=&quot;@mipmap/ic_launcher_round&quot;
        android:supportsRtl=&quot;true&quot;
        android:theme=&quot;@style/AppTheme&quot;&amp;gt;
    &amp;lt;/application&amp;gt;

&amp;lt;/manifest&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 Logcat에서 다음 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Manifest merger failed with multiple errors, see logs that I have Linked with it
&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;gradle.properties&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;android.useAndroidX=true
android.enableJetifier=true
&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;이 두 줄은 구글의 파일과 제3자 종속성 사이의 저의 종속성 갈등을 자동으로 해결해 주었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 https://developer.android.com/topic/libraries/support-library/androidx-overview#new-project 링크입니다.&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;프로젝트에 Kotlin-KTX 라이브러리를 추가하려고 할 때도 같은 오류가 발생했습니다.&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;AndroidX 마이그레이션을 시도해 보았는데 문제가 해결되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vdCa4.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vdCa4.jpg&quot; alt=&quot;Refactor/Migrate to AndroidX&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;h3 papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;불합격사유&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.android.com/jetpack/androidx/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-1&quot;&gt;AndroidX&lt;/a&gt;의 일부인 자료 라이브러리를 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;안드로이드X를 모르신다면 이 &lt;a href=&quot;https://stackoverflow.com/a/52517772/6891563&quot; papago-id=&quot;11-3&quot;&gt;답변&lt;/a&gt;을 참고해주시기 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 앱은 Android X 또는 오래된 Android Support 라이브러리를 사용해야 합니다.&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;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들면 -&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래들에서, 당신은 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;com.android.support:appcompat-v7&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;(오래된 --Android 지원 라이브러리의 일부--)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;com.google.android.material:material&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; X 의 (Android X부트)(Android X의:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;com.android.support:design&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;/li&gt; 
&lt;/ul&gt; 
&lt;h3 papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 해결책은 Android X 또는 오래된 지원 라이브러리를 사용하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;안드로이드는 버전 28.0.0 이후에는 지원 라이브러리를 업데이트하지 않기 때문에 안드로이드 X를 사용하는 것을 권장합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지원 라이브러리의 &lt;a href=&quot;https://developer.android.com/topic/libraries/support-library/revisions&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19-1&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;Android X로 이동만 하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;안드로이드X로 마이그레이션하기 위한 자세한 답변은 &lt;a href=&quot;https://stackoverflow.com/a/52517772/6891563&quot; papago-id=&quot;20-1&quot;&gt;다음&lt;/a&gt;과 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그 답변에서 필요한 조치들을 여기에 두고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;21&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;blockquote&gt; 
 &lt;h3 papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기존프로젝트&lt;/font&gt;&lt;/h3&gt; 
&lt;/blockquote&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android Studio &amp;gt; Refactor 메뉴 &amp;gt; Android X로 마이그레이션...&lt;/font&gt;&lt;/li&gt; 
 &lt;li 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;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DEV2M.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DEV2M.png&quot; alt=&quot;image&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&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;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 깃발들을 당신의 것에 넣습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gradle.properties&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;android.enableJetifier=true
android.useAndroidX=true
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/52517772/6891563&quot; papago-id=&quot;27-1&quot;&gt;동일한 AndroidX 패키지에 대해&lt;/a&gt; @&lt;a href=&quot;https://stackoverflow.com/a/52517772/6891563&quot; papago-id=&quot;27-1&quot;&gt;Library 매핑&lt;/a&gt;을 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/52517772/6891563&quot; papago-id=&quot;28-1&quot;&gt;Android X로 마이그레이션&lt;/a&gt;의 공식 &lt;a href=&quot;https://stackoverflow.com/a/52517772/6891563&quot; papago-id=&quot;28-1&quot;&gt;페이지&lt;/a&gt; @확인&lt;/font&gt;&lt;/p&gt; 
&lt;h3&gt;&lt;a href=&quot;https://stackoverflow.com/a/52518822/6891563&quot; papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제트화기란?&lt;/font&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우엔 완벽하게 작동하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;매니페스트 파일 안에 아래 두 줄 코드를 추가했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;tools:replace=&quot;android:appComponentFactory&quot;
android:appComponentFactory=&quot;whateverString&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;신용은 이 &lt;a href=&quot;https://stackoverflow.com/a/50965002/270197&quot; papago-id=&quot;31-1&quot;&gt;답변에 적용&lt;/a&gt;됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0ndVd.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0ndVd.png&quot; alt=&quot;Manifest file Example&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;h2 papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 솔루션 - AndroidX로 마이그레이션&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gradle.properties&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 아래에 두개의 스크립트를 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;android.useAndroidX=true
android.enableJetifier=true
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이유가 뭐였더라 ↓&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AndroidX의 모든 패키지는 Androidx 문자열로 시작하는 일관된 네임스페이스에 저장됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지원 라이브러리 패키지가 해당 Androidx에 매핑되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;* 꾸러미들&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 이전 클래스와 빌드 아티팩트를 새 클래스에 전체 매핑하려면 Package Refactoring 페이지를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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;a href=&quot;https://developer.android.com/jetpack/androidx/migrate&quot; rel=&quot;noreferrer&quot; papago-id=&quot;37-1&quot;&gt;패키지 리팩토링 페이지&lt;/a&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;그냥 종속성 안의 첫번째 줄과 마지막 줄의 &quot;rc01&quot;을 &quot;alpha1&quot;로 변경하면 됩니다. 이것은 저에게 효과가 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안드로이드만 제거하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;부양가족&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자료 지침서의 인용&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아직 새로운 Androidx 및 com.google.android.material 패키지로 전환하고 싶지 않다면 com.android를 통해 Material Components를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지원:디자인:28.0.0-alpha3 의존성.&lt;/font&gt;&lt;/p&gt; 
 &lt;h3 papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: comandroid는 사용하지 마십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지원 및 com.google.android.dependency를 앱에서 동시에 지원합니다.&lt;/font&gt;&lt;/h3&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;    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 완전한 종속성 예가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    dependencies {
       implementation fileTree(dir: 'libs', include: ['*.jar'])
       implementation 'com.google.android.material:material:1.0.0-beta01'
       implementation 'com.android.support.constraint:constraint-layout:1.1.2'
       testImplementation 'junit:junit:4.12'
       androidTestImplementation 'com.android.support.test:runner:1.0.2'
       androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
   }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android P 이후 지원 라이브러리가 &lt;strong papago-id=&quot;45-1&quot;&gt;Android&lt;/strong&gt; X로 이동했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.android.com/topic/libraries/support-library/refactor&quot; rel=&quot;noreferrer&quot; papago-id=&quot;46-1&quot;&gt;이 페이지에서 립스&lt;/a&gt; 리팩터를 해주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://developer.android.com/topic/libraries/support-library/refactor&quot; rel=&quot;noreferrer&quot; papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://developer.android.com/topic/libraries/support-library/refactor&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android Manifest.xml에서 이 이미지를 보고 이 줄을 추가&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;tools:replace=&quot;android:appComponentFactory&quot;
android:appComponentFactory=&quot;whateverString&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ELu1D.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ELu1D.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Refactor-&amp;gt;Migrate-&amp;gt;Android X로 마이그레이션으로 이동하십시오.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;gradle.properties&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;android.enableJetifier=true
android.useAndroidX=true
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Sync.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AndroidManifest.xml 파일 안에 줄을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;tools:replace=&quot;android:appComponentFactory&quot;

android:appComponentFactory=&quot;whateverString&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 두 줄의 코드를 매니페스트 파일에 추가하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;tools:replace=&quot;android:appComponentFactory&quot;
android:appComponentFactory=&quot;whateverString&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마이그레이션 대상&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;androidX&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 기존 프로젝트라면.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 프로젝트인 경우 이 두 개의 플래그를 다음에 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Gradle.propeties&lt;/code&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;android.enableJetifier=true  
android.useAndroidX=true
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 단계는 https://developer.android.com/jetpack/androidx 을 참조하거나 안드로이드 &lt;a href=&quot;https://stackoverflow.com/questions/51280090/what-is-androidx&quot; papago-id=&quot;57-3&quot;&gt;X란?&lt;/a&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;ul&gt; 
 &lt;li papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Refactor(리팩터)로 이동하고 AndroidX로 마이그레이션을 클릭합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업 재팩터를 누릅니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;strong papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Androidx를 사용하지 않으려는 경우에만 해당&lt;/font&gt;&lt;/strong&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;그래서 저의 경우 안드로이드x를 사용하던 라이브러리를 사용하고 있는데 안드로이드x를 사용하지 않아서 해당 라이브러리 버전을 다운그레이드 했을 때 문제가 해결되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;implementation 'com.github.turing-tech:MaterialScrollBar:13.+'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에 언급한 라이브러리가 문제를 만듭니다. 13.+는 안드로이드x를 사용하는 새로운 버전의 라이브러리를 자동으로 얻을 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 라이브러리 버전을 다음으로 다운그레이드했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;implementation 'com.github.turing-tech:MaterialScrollBar:13.2.5'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 문제는 해결됐습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제는 주로 &lt;strong papago-id=&quot;66-1&quot;&gt;오래된 의존&lt;/strong&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;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫번째:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&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;old dependencies&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;strong papago-id=&quot;13-1&quot;&gt;ClassPaths&lt;/strong&gt; from&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Project level gradle&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서류철&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;classpath 'com.android.tools.build:gradle:3.3.1'
classpath 'com.google.gms:google-services:4.2.0'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두번째:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&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;Migrate to AndroidX&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&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;메뉴 -&amp;gt;  -&amp;gt; Android Studio 메뉴 -&amp;gt; Refanctor -&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Migrate to AndroidX&lt;/code&gt;&lt;/strong&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;감사합니다, 혹시 이 답변에 도움이 되는 분이 있으면 알려주세요.&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;android/build.gradle&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;googlePlayServicesVersion = &quot;16.+&quot;

firebaseVersion = &quot;17.6.0&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 100% 정확하게 따라주시기 바랍니다.&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;2시간 동안 이 이상한 벌레를 마주하고 있었습니다.&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;81&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;  implementation 'com.google.android.gms:play-services-maps:17.0.0'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  implementation 'com.google.android.gms:play-services-maps:15.0.0'
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 한 일은 맨 위 메뉴의 &quot;Refactor&quot; 옵션으로 이동한 것뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 &quot;안드로이드 X로 마이그레이션&quot;을 선택합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;85&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트를 zip 파일로 저장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제가 발생하지 않도록 Gradle 뿐만 아니라 Android Studio도 업데이트해 주시기 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 프로젝트를 만들고 build.gradle 파일을 비교한 후 모두 교체합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;88&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 그와 같은 새로운 프로젝트에 있었던 것과 같은 다른 의존 관계들.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'

implementation 'androidx.constraintlayout:constraintlayout:1.1.2'

implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0-alpha1'

androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'

androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

implementation 'androidx.core:core-ktx:1.0.0-alpha3'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 코틀린 파일에 안드로이드x를 사용하도록 수입을 수정했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;90&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AndroidX로 마이그레이션하지 않으려는 경우 아래 단계를 따릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;91&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;in terminal type gradlew app:의존성&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;92&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의존 관계가 창에 표시되면 Ctrl+f를 누르고 AndroidX를 입력합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;93&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내부적으로 안드로이드 x lib을 사용하는 모든 종속성을 발견하게 될 것입니다. 더 이상 내부적으로 안드로이드 x lib을 사용하지 않도록 하려면 이를 다운그레이드하거나 대체 사용해야 할 수도 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;strong papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1. 앱/build.gradle 끝에 다음 코드를 추가합니다.&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;configurations.all {
   resolutionStrategy.force 'com.android.support:support-v4:28.0.0' 
   // the above lib may be old dependencies version       
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;95&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2. sdk 및 도구 버전을 28로 수정:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;96&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3.AndroidManifest.xml 파일에서 두 줄을 추가해야 합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;application
    android:name=&quot;.YourApplication&quot;
    android:appComponentFactory=&quot;AnyStrings&quot;
    tools:replace=&quot;android:appComponentFactory&quot;
    android:icon=&quot;@drawable/icon&quot;
    android:label=&quot;@string/app_name&quot;
    android:largeHeap=&quot;true&quot;
    android:theme=&quot;@style/Theme.AppCompat.Light.NoActionBar&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;97&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;ul&gt; 
 &lt;li papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Refactor로 이동(스튜디오 -&amp;gt; 메뉴 -&amp;gt; Refactor)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;99&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Migrate to AndroidX를 클릭합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그건 효과가 있다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;100&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그건 효과가 있다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 &lt;strong papago-id=&quot;101-1&quot;&gt;매니페스트 태그&lt;/strong&gt;에 이 줄을 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;xmlns:tools=&quot;https://schemas.android.com/tools&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 도구를 추가하면 Android 스튜디오에서 제안한 도구를 대체할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;ul&gt; 
 &lt;li papago-id=&quot;103&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리팩터로 이동(&lt;a href=&quot;https://i.stack.imgur.com/h4TQn.jpg&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;103-1&quot;&gt;이미지&lt;/a&gt;)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;104&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Migrate to AndroidX를 클릭합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그건 효과가 있다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;105&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그건 효과가 있다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;106&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 먹어봐요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;tools:replace=&quot;android:appComponentFactory&quot;
android:appComponentFactory=&quot;android.support.v4.app.CoreComponentFactory&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;107&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트를 재구성합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;108&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 3일 동안 똑같은 문제를 겪었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;109&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안드로이드는 우리가 코틀린이나 안드로이드 X를 사용하기를 원하는 것과 같습니다. 그들은 안드로이드를 없애려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;110&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;근데 이렇게 풀었어요.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;111&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 안드로이드 X로 프로젝트를 마이그레이션했습니다.&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;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;112&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NB: 안드로이드 스튜디오 3.4.1의 최신 안정 버전에서 최신 라이브러리(build.grudle 파일)를 사용해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;113&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;114&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리들 래퍼 속성 증가&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;115&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리들을 구축합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    classpath 'com.android.tools.build:gradle:3.4.2'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;116&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;버전 때문에 오류가 나타납니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;117&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;build.gradle(모듈: 앱)의 proguardFile을 다음으로 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;118&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;119&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 나한테 통했어요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;android/build.gradle&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 근본적인 프로젝트에서&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ext {
    googlePlayServicesVersion = &quot;16.1.0&quot; // default: &quot;+&quot;
    firebaseVersion = &quot;15.0.2&quot; // default: &quot;+&quot;

    // Other settings
    compileSdkVersion = &amp;lt;Your compile SDK version&amp;gt; // default: 23
    buildToolsVersion = &quot;&amp;lt;Your build tools version&amp;gt;&quot; // default: &quot;23.0.1&quot;
    targetSdkVersion = &amp;lt;Your target SDK version&amp;gt; // default: 23
    supportLibVersion = &quot;&amp;lt;Your support lib version&amp;gt;&quot; // default: 23.1.1
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;122&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조 https://github.com/zo0r/react-native-push-notification/issues/1109#issuecomment-506414941&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;123&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안드로이드 스튜디오의 경우 안드로이드 Gradle 플러그인 버전 3.3.2를 변경하고 Gradle 버전은 5.1.1입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;124&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/51793345/android-material-and-appcompat-manifest-merger-failed&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Android</category>
      <author>closeapi</author>
      <guid isPermaLink="true">https://closeapi.tistory.com/731</guid>
      <comments>https://closeapi.tistory.com/731#entry731comment</comments>
      <pubDate>Mon, 23 Oct 2023 21:50:22 +0900</pubDate>
    </item>
  </channel>
</rss>