<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>bestcode</title>
    <link>https://bestcode.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Wed, 15 Apr 2026 07:00:30 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>bestcode</managingEditor>
    <item>
      <title>실제 장치에서 반응 네이티브의 개발 메뉴를 열려면 어떻게 해야 합니까?</title>
      <link>https://bestcode.tistory.com/944</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 장치에서 반응 네이티브의 개발 메뉴를 열려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이미 많은 보더 케이스와 이상한 개발자 인터페이스를 보았다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특히 태블릿에서는 &lt;a href=&quot;https://egghead.io/lessons/react-react-native-debugging-on-an-ios-device&quot; papago-id=&quot;2-1&quot; rel=&quot;noreferrer&quot;&gt;매우&lt;/a&gt; 비현실적인 &quot;&lt;a href=&quot;https://egghead.io/lessons/react-react-native-debugging-on-an-ios-device&quot; papago-id=&quot;2-1&quot; rel=&quot;noreferrer&quot;&gt;기기&lt;/a&gt; 흔들기&lt;a href=&quot;https://egghead.io/lessons/react-react-native-debugging-on-an-ios-device&quot; papago-id=&quot;2-1&quot; rel=&quot;noreferrer&quot;&gt;&quot;&lt;/a&gt;에서&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/36615435/2633577&quot; papago-id=&quot;3-1&quot;&gt;Android&lt;/a&gt; Studio &lt;a href=&quot;https://stackoverflow.com/a/36615435/2633577&quot; papago-id=&quot;3-1&quot;&gt;주변에서 버튼&lt;/a&gt; 누름 시뮬레이션을 하기 &lt;a href=&quot;https://stackoverflow.com/a/36615435/2633577&quot; papago-id=&quot;3-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;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;하여 intern API와 같은  안 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;navigator.popUpDevMenu()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않은 경우 태블릿을 흔들어서 작동하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은, &lt;a href=&quot;https://stackoverflow.com/questions/37839227/how-do-i-use-hmr-when-developing-react-native-on-a-device&quot; papago-id=&quot;6-1&quot;&gt;실제의 디바이스&lt;/a&gt;에서의 HMR 의 &lt;a href=&quot;https://stackoverflow.com/questions/37839227/how-do-i-use-hmr-when-developing-react-native-on-a-device&quot; papago-id=&quot;6-1&quot;&gt;설정&lt;/a&gt; 방법을 &lt;a href=&quot;https://stackoverflow.com/questions/37839227/how-do-i-use-hmr-when-developing-react-native-on-a-device&quot; papago-id=&quot;6-1&quot;&gt;해결&lt;/a&gt;하는 것을 목적으로 하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;리액트 네이티브는 개발 경험을 향상시키지만, 그 때문에 조금 느려진다고 생각합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;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;a href=&quot;https://github.com/niftylettuce/frappe&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-1&quot;&gt;https://github.com/niftylettuce/frappe&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 명령어는 셸에서 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;adb shell input keyevent 82
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 달리지 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;react-native run-android&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; &quot; &quot; &quot; 를 한 후 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;react-native run-android&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. &lt;a href=&quot;https://facebook.github.io/react-native/docs/running-on-device.html#method-1-using-adb-reverse-recommended&quot; papago-id=&quot;11-1&quot; rel=&quot;noreferrer&quot;&gt;개발&lt;/a&gt; 서버 &lt;a href=&quot;https://facebook.github.io/react-native/docs/running-on-device.html#method-1-using-adb-reverse-recommended&quot; papago-id=&quot;11-1&quot; rel=&quot;noreferrer&quot;&gt;포트를 다시&lt;/a&gt; 활성화해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 명령을 실행하고 이전 명령으로 다시 시도할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;adb reverse tcp:8081 tcp:8081&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;12-0&quot;&gt;편집&lt;/strong&gt;: 이 솔루션은 Android 기기에서만 작동하며 위의 질문에서 제안된 해킹 중 하나입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 그것은 개선될 수 있다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단, 이것이 발생할 때까지 유효한 답변으로 선택됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 하는 일은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안드로이드:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;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;json:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;android-shake&quot;: &quot;adb shell input keyevent 82&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 하면 여러분은 할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;yarn android-shake&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android에서 메뉴 팝업을 표시합니다(단, 장치가 컴퓨터에 연결되어 있는 경우).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS&lt;/font&gt;&lt;/strong&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;설정 -&amp;gt; 접근성 -&amp;gt; 보조&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만지다&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;켜봐.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최상위 메뉴 사용자 지정을 누릅니다...&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 아이콘을 제외한 모든 아이콘을 제거하고 흔들리도록 설정합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/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;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2g6ZR.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2g6ZR.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;1&quot;&gt;&lt;/a&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;절대 위치에 있는 간단한 버튼과 이 onClick 핸들러를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;imoprt { NativeModules } from 'react-native';
...
onMenuButtonClick(){
 NativeModules.DevMenu.show();
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개발 모드에서 쉐이크 대신 &lt;strong papago-id=&quot;26-1&quot;&gt;3개의 손가락 터치를 사용&lt;/strong&gt;하여 개발 메뉴를 열 수 &lt;strong papago-id=&quot;26-1&quot;&gt;있는&lt;/strong&gt; lib를 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/pie6k/react-native-dev-menu-on-touch&quot; rel=&quot;noreferrer&quot; papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/pie6k/react-native-dev-menu-on-touch&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱을 안에 포장하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import DevMenuOnTouch from 'react-native-dev-menu-on-touch';
// or:  import { DevMenuOnTouch } from 'react-native-dev-menu-on-touch'

class YourRootApp extends Component {
  render() {
    return (
      &amp;lt;DevMenuOnTouch&amp;gt;
        &amp;lt;YourApp /&amp;gt;
      &amp;lt;/DevMenuOnTouch&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;이 기능은 실제 디바이스에서 디버깅을 해야 할 때 동료가 옆에 앉아 있을 때 매우 유용합니다.&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;Windows의 경우 메트로 번들러를 클릭하고 개발자 메뉴를 보려면 'D', 다시 로드하려면 'R'를 누르십시오.&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;Xiaomi 폰을 가지고 있는 경우, 주어진 답변은 작동하지 않습니다. 왜냐하면 팝업창이 열리지 않도록 하는 보안 옵션이 있기 때문에 앱에 허용해야 하기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[ Settings ]&amp;gt; [ Installed apps ]&amp;gt; [ Your App Name ]&amp;gt; [ Permission manager ]순서대로 선택하여 [Display]팝업창을 활성화합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 흔들어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;조금 흔들기만 하면 현상 메뉴가 예상대로 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출처 : https://matthewphiong.com/&lt;a href=&quot;https://matthewphiong.com/debugging-react-native-app-on-a-xiaomi-phone&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;34-1&quot;&gt;debugging-react-native-app-on-a-xiaomi-phone&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안드로이드 폰을 흔드는 건 짜증날 때가 있어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래를 변경하면 Volume down / Up 키를 눌러 Developer Menu가 열립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드를 에 삽입합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;android/../MainActivity.java&lt;/code&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  @Override
  public boolean onKeyUp(int keyCode, KeyEvent event) {
      if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN &amp;amp;&amp;amp; this.getReactInstanceManager() != null) {
          this.getReactInstanceManager().showDevOptionsDialog();
          return true;
      }
      return super.onKeyUp(keyCode, event);
  }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-1&quot;&gt;React Native&lt;/strong&gt; Navigation &lt;strong papago-id=&quot;8-1&quot;&gt;V3&lt;/strong&gt;에서는 다음 코드가 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MainActivity.java&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  @Override
  public boolean onKeyUp(int keyCode, KeyEvent event) {
      if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN &amp;amp;&amp;amp; this.getReactGateway().getReactNativeHost().getReactInstanceManager() != null) {
          this.getReactGateway().getReactNativeHost().getReactInstanceManager().showDevOptionsDialog();
          return true;
      }
      return super.onKeyUp(keyCode, event);
  }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 변경 후 앱을 다시 실행하여 위의 코드를 배포합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;react-native run-android&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;RN 0.59+로 테스트.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고 자료: https://facebook.github.io/react-native/docs/&lt;a href=&quot;https://facebook.github.io/react-native/docs/integration-with-existing-apps&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;42-1&quot;&gt;integration-with-existing-apps&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 포함&lt;/font&gt;&lt;/font&gt;&lt;code&gt;KeyEvent&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 내의 다른 Import와 함께 Import를 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;import android.view.KeyEvent;&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/37839666/&lt;a href=&quot;https://stackoverflow.com/questions/37839666/how-do-i-open-react-natives-dev-menu-on-real-device&quot; target=&quot;_blank&quot; papago-id=&quot;45-1&quot;&gt;how-do-i-open-react-natives-dev-menu-on-real-device&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ReactJS</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/944</guid>
      <comments>https://bestcode.tistory.com/944#entry944comment</comments>
      <pubDate>Sat, 18 Feb 2023 20:05:15 +0900</pubDate>
    </item>
    <item>
      <title>AngularJS: 요청된 리소스에 &amp;quot;Access-Control-Allow-Origin&amp;quot; 헤더가 없습니다.</title>
      <link>https://bestcode.tistory.com/943</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AngularJS: 요청된 리소스에 &quot;Access-Control-Allow-Origin&quot; 헤더가 없습니다.&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; papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 답변&lt;/b&gt;이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;     &lt;/font&gt;&lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/20035101/why-does-my-javascript-code-receive-a-no-access-control-allow-origin-header-i&quot; dir=&quot;ltr&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JavaScript 코드에 &quot;No 'Access-Control-Allow-Origin' 헤더는 요청된 리소스에 있습니다&quot; 오류가 표시되지만 Postman은 표시되지 않는 이유는 무엇입니까?&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(13개의 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;닫힘&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;4-1&quot; title=&quot;2015-04-10 22:25:07Z&quot; papago-attr-id=&quot;1&quot;&gt;7년&lt;/span&gt; 전.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹앱을 작성하고 있으며 AngularJS를 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 앱에서는 script.js라는 이름의 파일을 만들고 다음 코드를 보고합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var modulo = angular.module('progetto', ['ngRoute']);

    // configure our routes
    modulo.config(function ($routeProvider, $httpProvider) {
        $routeProvider

            // route for the home page
            .when('/', {
                templateUrl: 'listaFilm.html',
                controller: 'listaController'
            })

            // route for the description page
            .when('/:phoneName', {
                templateUrl: 'description.html',
                controller: 'descriptionController'
            });


            $httpProvider.defaults.headers.common['Access-Control-Allow-Origin'] = '*';

    });


    modulo.controller('listaController', function ($scope, $http) {
        $http.get('https://api.getevents.co/event?&amp;amp;lat=41.904196&amp;amp;lng=12.465974').success(function (data) {
            $scope.names = data;
            }).
            error(function (data, status) {
                $scope.names = &quot;Request failed&quot;;
            });
    });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드를 사용하여 RESTful 원칙에 따라 API를 호출합니다.&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;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XMLHttpRequest가 https&lt;a href=&quot;https://api.getevents.co&quot; papago-id=&quot;7-1&quot; rel=&quot;noreferrer&quot;&gt;://&lt;/a&gt;api.&lt;a href=&quot;https://api.getevents.co&quot; papago-id=&quot;7-1&quot; rel=&quot;noreferrer&quot;&gt;getevents&lt;/a&gt;.co을 로드할 수 없습니다. 요청된 리소스에 'Access-Control-Allow-Origin' 헤더가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 오리진 '&lt;a href=&quot;http://localhost:8383&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-3&quot;&gt;http://localhost:8383&lt;/a&gt;'은 액세스가 허용되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹에서 읽다 보니 CORS라는 문제가 있더라...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 몇 가지 해결책을 제안했지만 문제를 해결하지 못했습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&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;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수정하려면 어떤 코드를 추가해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 서버측의 문제입니다.&lt;/font&gt;&lt;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;Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Origin: *
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 두 가지 답변은 다음과 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/23823010/how-to-enable-cors-in-angularjs&quot; papago-id=&quot;12-1&quot;&gt;AngularJs에서 CORS를 활성화하는 방법&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CORS는 Cross Origin Resource Sharing입니다.도메인간에 액세스 하려고 하면, 이 에러가 발생합니다.&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;JSONP를 사용해 보세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 JSONP는 GET 방식만 사용하기 때문에 정상적으로 동작합니다.&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;var url = &quot;https://api.getevents.co/event?&amp;amp;lat=41.904196&amp;amp;lng=12.465974&quot;;
$http({
    method: 'JSONP',
    url: url
}).
success(function(status) {
    //your code when success
}).
error(function(status) {
    //your code when fails
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/29547003/&lt;a href=&quot;https://stackoverflow.com/questions/29547003/angularjs-no-access-control-allow-origin-header-is-present-on-the-requested-r&quot; target=&quot;_blank&quot; papago-id=&quot;16-1&quot;&gt;angularjs-no-access-control-allow-origin-header-is-present-on-the-requested-r&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/943</guid>
      <comments>https://bestcode.tistory.com/943#entry943comment</comments>
      <pubDate>Tue, 14 Feb 2023 20:24:31 +0900</pubDate>
    </item>
    <item>
      <title>Wordpress 6 script-loader.php issue</title>
      <link>https://bestcode.tistory.com/942</link>
      <description>&lt;h2 papago-id=&quot;0&quot;&gt;Wordpress 6 script-loader.php issue&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot;&gt;Dears, I did reset my WordPress website after updating to wp 6 and now I have this issue I can't access the website&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;2&quot;&gt;Fatal error: Uncaught ValueError: Missing format specifier at end of string in /home/bahr/bahrtales.com/wp-includes/script-loader.php:1271 Stack trace: #0 /home/bahr/bahrtales.com/wp-includes/script-loader.php(1271): sprintf('\xD8\xAA\xD9\x87\xD8\xA7\xD9\x86\xD9\x8A\xD9\x86\xD8\xA7!...', 'https://wordpre...', '&amp;lt;button type=&quot;b...') #1 /home/bahr/bahrtales.com/wp-includes/class-wp-hook.php(307): wp_default_scripts(Object(WP_Scripts)) #2 /home/bahr/bahrtales.com/wp-includes/class-wp-hook.php(331): WP_Hook-&amp;gt;apply_filters('', Array) #3 /home/bahr/bahrtales.com/wp-includes/plugin.php(524): WP_Hook-&amp;gt;do_action(Array) #4 /home/bahr/bahrtales.com/wp-includes/class.wp-scripts.php(167): do_action_ref_array('wp_default_scri...', Array) #5 /home/bahr/bahrtales.com/wp-includes/class.wp-scripts.php(142): WP_Scripts-&amp;gt;init() #6 /home/bahr/bahrtales.com/wp-includes/functions.wp-scripts.php(24): WP_Scripts-&amp;gt;__construct() #7 /home/bahr/bahrtales.com/wp-includes/functions.wp-scripts.php(147): wp_scripts() #8 /home/bahr/bahrtales.com/wp-includes/widgets/class-wp-widget-text.php(59): wp_add_inline_script('text-widgets', 'wp.textWidgets....') #9 /home/bahr/bahrtales.com/wp-includes/class-wp-widget.php(274): WP_Widget_Text-&amp;gt;_register_one() #10 /home/bahr/bahrtales.com/wp-includes/class-wp-widget-factory.php(102): WP_Widget-&amp;gt;_register() #11 /home/bahr/bahrtales.com/wp-includes/class-wp-hook.php(307): WP_Widget_Factory-&amp;gt;_register_widgets('') #12 /home/bahr/bahrtales.com/wp-includes/class-wp-hook.php(331): WP_Hook-&amp;gt;apply_filters('', Array) #13 /home/bahr/bahrtales.com/wp-includes/plugin.php(476): WP_Hook-&amp;gt;do_action(Array) #14 /home/bahr/bahrtales.com/wp-includes/widgets.php(1854): do_action('widgets_init') #15 /home/bahr/bahrtales.com/wp-includes/class-wp-hook.php(307): wp_widgets_init('') #16 /home/bahr/bahrtales.com/wp-includes/class-wp-hook.php(331): WP_Hook-&amp;gt;apply_filters(NULL, Array) #17 /home/bahr/bahrtales.com/wp-includes/plugin.php(476): WP_Hook-&amp;gt;do_action(Array) #18 /home/bahr/bahrtales.com/wp-settings.php(598): do_action('init') #19 /home/bahr/bahrtales.com/wp-config.php(112): require_once('/home/bahr/bahr...') #20 /home/bahr/bahrtales.com/wp-load.php(50): require_once('/home/bahr/bahr...') #21 /home/bahr/bahrtales.com/wp-blog-header.php(13): require_once('/home/bahr/bahr...') #22 /home/bahr/bahrtales.com/index.php(17): require('/home/bahr/bahr...') #23 {main} thrown in /home/bahr/bahrtales.com/wp-includes/script-loader.php on line 1271&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;난 어떻게 해야 하지?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 회사 사이트가 갑자기 다운되어 파일을 열고 1266행에서 secon %를 삭제했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;__( 'Hurray! Your theme supports Full Site Editing with blocks. &amp;lt;a href=&quot;%1$s&quot;&amp;gt;Tell me more&amp;lt;/a&amp;gt;. %2$s' ),
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;__( 'Hurray! Your theme supports Full Site Editing with blocks. &amp;lt;a href=&quot;%1$s&quot;&amp;gt;Tell me more&amp;lt;/a&amp;gt;. 2$s' ),
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/72412237/&lt;a href=&quot;https://stackoverflow.com/questions/72412237/wordpress-6-script-loader-php-issue&quot; target=&quot;_blank&quot; papago-id=&quot;7-1&quot;&gt;wordpress-6-script-loader-php-issue&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/942</guid>
      <comments>https://bestcode.tistory.com/942#entry942comment</comments>
      <pubDate>Tue, 14 Feb 2023 20:24:23 +0900</pubDate>
    </item>
    <item>
      <title>react.js의 소품을 갱신할 수 없는 이유는 무엇입니까?</title>
      <link>https://bestcode.tistory.com/941</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;react.js의 소품을 갱신할 수 없는 이유는 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 둘 다 ?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;state&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;props&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하고 싶다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;props&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단해 보이지만 컴포넌트가 자신의 소품이나 부모의 소품을 어떻게 업데이트해야 할지 모르겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도와주셔서 감사합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리액트 철학은 소품은 불변하고 하향식이어야 한다는 것이다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;부모가 원하는 소품을 자녀에게 보낼 수는 있지만 자녀는 자신의 소품을 수정할 수 없다는 뜻이다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;들어오는 소품에 반응하고 싶으면 들어오는 소품에 따라 아이의 상태를 수정하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자기 소품이나 부모님 소품 업데이트는 절대 안 해&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;항상 자신의 상태를 업데이트하고 부모가 준 가치관에 반응합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상태의 무엇인가를 변경하는 액션을 자녀에게 실행시키는 경우, 그 자녀에게 콜백을 전달하고, 그 콜백을 지정한 액션으로 실행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 콜백은 부모 상태를 수정할 수 있으며, 부모 상태는 다시 렌더 시 자녀에게 다른 소품을 전송할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;h2 papago-id=&quot;9&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;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리액트에서는 소품들이 &lt;em papago-id=&quot;10-1&quot;&gt;부모에서 자녀&lt;/em&gt;로 아래로 흐릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 콜을 할 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ReactDOM.render&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;React는 루트 노드를 렌더링하고 소품을 전달한 후 해당 노드를 잊어버릴 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 렌더링되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 컴포넌트에서 이 작업을 수행하고 렌더링한 후 깊이 우선으로 트리 아래로 이동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴포넌트가 소품을 변환할 수 있는 경우 부모 노드가 이미 렌더링한 후에도 부모 노드에 액세스할 수 있는 개체를 변경할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로 인해, 예를  「A」, 「A」, 「A」, 「A」 등, 모든 종류의 동작이 이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;user.name&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱의 한 부분에 하나의 값이 있고 다른 부분에 다른 값이 있을 수 있으며 다음에 렌더가 트리거될 때 자동으로 업데이트될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가상의 예를 들자면:&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;// App renders a user.name and a profile
const App = (props) =&amp;gt; 
  React.createElement('div', null, [
    props.user.name,
    React.createElement(Profile, props)
  ])

// Profile changes the user.name and renders it
// Now App has the wrong DOM.
const Profile = ({user}) =&amp;gt; {
  user.name = &quot;Voldemort&quot; // Uh oh!
  return React.createElement('div', null, user.name);
}

// Render the App and give it props
ReactDOM.render(
  React.createElement(App, {user: {name: &quot;Hermione&quot;}}), 
  document.getElementById('app'))
);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;【DOM】【Hermione】【헤르미오네】&lt;/font&gt;&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;프로파일을 렌더링하면 &quot;볼드모트&quot;가 출력됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱이 틀렸습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;' '볼드모트'라고 써있잖아요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;user.name&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; '를 출력하고 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;볼드모트'인데 이미 '헤르미온느'를 출력하고 있어서 변경하기엔 너무 늦었어요.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱의 각 부분에 따라 값이 달라집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;20&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;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소품 돌연변이는 쌍방향 결합의 한 형태일 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;트리 상위에 있는 다른 컴포넌트에 의존할 수 있는 값을 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular 1은 이 기능을 가지고 있어 언제 어디서나 데이터를 변경할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;작동하기 위해서는 주기적인 $digest가 필요했다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 모든 데이터의 전파가 완료될 때까지 DOM을 재렌더링하면서 루프를 반복하게 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 앵글1이 이렇게 느린 이유 중 하나였다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 「」입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;state&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;props&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;달리하다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;state&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하면 컴포넌트는할 수 , 「」는 「」를 참조해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;props&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이들에게 그 가치를 전파하는 메카니즘입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;React 디자이너가 이러한 방식으로 구축된 애플리케이션을 쉽게 유지 관리할 수 있다는 이유만으로 아이들은 소품을 통해 얻는 가치를 스스로 변경할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;요점은 하나의 컴포넌트만이 상태를 갱신할 수 있게 되면 누가 상태를 변경했는지, 그리고 버그의 근원을 찾는 것이 더 쉬워진다는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴포넌트 자체의 &lt;strong papago-id=&quot;29-1&quot;&gt;상태&lt;/strong&gt;가 변화하고 자신의 상태가 아닌 어린이 &lt;strong papago-id=&quot;29-3&quot;&gt;소품&lt;/strong&gt;도 변화합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Parent&amp;gt;
  &amp;lt;Child name={ this.state.childName } /&amp;gt;
&amp;lt;/Parent&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부모는 자신의 상태를 바꿀 수도 있고 자녀 이름을 바꿀 수도 있지만, 자녀들을 위한 소품도 바꿀 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;edit1: 자녀에서 부모로 이벤트를 호출하려면 다음과 같은 이벤트핸들러를 자녀에게 전달해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var Child = React.createClass({
  render: function() {
    return (&amp;lt;button onClick={ this.props.onClick }&amp;gt;Hey&amp;lt;/button&amp;gt;);
  }
});

var Parent = React.createClass({
  onChildClick: console.log.bind(console), // will print the event..
  render: function() {
    return (&amp;lt;Child onClick={ this.onChildClick } /&amp;gt;);
  }
});

React.renderComponent(&amp;lt;Parent /&amp;gt;, document.body);
&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;이 코드에서 Child's 버튼을 클릭하면 이벤트가 부모에게 전달됩니다.&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;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 해결책은 꽤 달랐지만, 어떤 사람들은 그것에 부딪힐지도 모른다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Chrome Dev 툴에서는 소품이 읽기 전용으로 되어 있어, 더 이상 전달하려고 하면 에러가 납니다.&lt;/font&gt;&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;render()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 제 컴포넌트를 이렇게 불렀습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const Navigation = () =&amp;gt;{

    return (
        &amp;lt;div className=&quot;left-navigation&quot;&amp;gt;
            &amp;lt;ul&amp;gt;
                &amp;lt;Link to='/dashboard'&amp;gt;&amp;lt;li&amp;gt;Home&amp;lt;/li&amp;gt;&amp;lt;/Link&amp;gt;
                &amp;lt;Link to='/create-seedz'&amp;gt;&amp;lt;li&amp;gt;Create Seedz&amp;lt;/li&amp;gt;&amp;lt;/Link&amp;gt;
                &amp;lt;Link to='/create-promotion'&amp;gt;&amp;lt;li&amp;gt;Create Promotion&amp;lt;/li&amp;gt;&amp;lt;/Link&amp;gt;
                &amp;lt;Link to='/setting'&amp;gt;&amp;lt;li&amp;gt;Setting&amp;lt;/li&amp;gt;&amp;lt;/Link&amp;gt;
                &amp;lt;SignOutButton  /&amp;gt;
            &amp;lt;/ul&amp;gt;
        &amp;lt;/div&amp;gt;
    );
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;렌더링 방식을 추가해서 소품을 물려줄 수 있다는 문제를 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class Navigation extends Component{
render(){
    return (
        &amp;lt;div className=&quot;left-navigation&quot;&amp;gt;
            &amp;lt;ul&amp;gt;
                &amp;lt;Link to='/dashboard'&amp;gt;&amp;lt;li&amp;gt;Home&amp;lt;/li&amp;gt;&amp;lt;/Link&amp;gt;
                &amp;lt;Link to='/create-seedz'&amp;gt;&amp;lt;li&amp;gt;Create Seedz&amp;lt;/li&amp;gt;&amp;lt;/Link&amp;gt;
                &amp;lt;Link to='/create-promotion'&amp;gt;&amp;lt;li&amp;gt;Create Promotion&amp;lt;/li&amp;gt;&amp;lt;/Link&amp;gt;
                &amp;lt;Link to='/setting'&amp;gt;&amp;lt;li&amp;gt;Setting&amp;lt;/li&amp;gt;&amp;lt;/Link&amp;gt;
                &amp;lt;SignOutButton user={this.props.user} signedOut={this.props.signedOut} authed={this.props.authed}/&amp;gt;
            &amp;lt;/ul&amp;gt;
        &amp;lt;/div&amp;gt;
    );
}
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 도움이 됐으면 좋겠는데&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 나와 있는 답변과는 달리, &quot;리액트 방식&quot;에 대한 현학적인 서클 애호가에게 반항하는 것을 꺼리지 않는다면, &lt;strong papago-id=&quot;37-1&quot;&gt;실제로&lt;/strong&gt; 소품을 직접 업데이트할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;React.js에서 다음 코드 행을 찾습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Object.freeze(element.props);
Object.freeze(element);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;댓글로 남겨주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;부일라, 변이 소품!&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;URL : https://stackoverflow.com/questions/26089532/&lt;a href=&quot;https://stackoverflow.com/questions/26089532/why-cant-i-update-props-in-react-js&quot; target=&quot;_blank&quot; papago-id=&quot;39-1&quot;&gt;why-cant-i-update-props-in-react-js&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ReactJS</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/941</guid>
      <comments>https://bestcode.tistory.com/941#entry941comment</comments>
      <pubDate>Tue, 14 Feb 2023 20:23:54 +0900</pubDate>
    </item>
    <item>
      <title>Angular에서의 &amp;quot;네임스페이스&amp;quot; 서비스JS</title>
      <link>https://bestcode.tistory.com/940</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular에서의 &quot;네임스페이스&quot; 서비스&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular의 구조&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS는 서비스 이름 간의 충돌을 처리합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 각각 'foo'라는 서비스를 포함하는 두 개의 모듈을 선언한 경우입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;재사용 가능한 모듈을 만들거나 다른 서드파티 모듈과의 충돌을 피하고 싶을 때 서비스를 &quot;네임스페이스&quot;하는 좋은 방법은 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;2-0&quot;&gt;현재 Angular&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;2-0&quot;&gt;JS&lt;/strong&gt;는 서비스에 &lt;strong papago-id=&quot;2-0&quot;&gt;대한 네임스페이스 충돌을 처리하지 않으므로&lt;/strong&gt; 이름이 같은 서비스를 사용하는 두 개의 모듈이 있고 앱에 두 모듈을 모두 포함하면 하나의 서비스만 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현시점에서는 서비스 이름에 커스텀프리픽스를 붙이는 것이 가장 좋습니다.다음은 예를 제시하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;angular.module('myprefix_mymodule',['dep1', 'dep2']).factory('myprefix_MyService', ...)&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Pkozlowski가 지적했듯이, 그들은 그렇지 않다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 서비스에 수동으로 프리픽스를 추가할 수 있습니다(약간 귀찮은 일이지만). 그렇지 않으면 이름 공간을 만들기 위해 해킹을 작성했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/callmehiphop/angular-namespacer&quot; papago-id=&quot;4-1&quot;&gt;https://github.com/callmehiphop/angular-namespacer&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/14909474/&lt;a href=&quot;https://stackoverflow.com/questions/14909474/namespacing-services-in-angularjs&quot; target=&quot;_blank&quot; papago-id=&quot;5-1&quot;&gt;namespacing-services-in-angularjs&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/940</guid>
      <comments>https://bestcode.tistory.com/940#entry940comment</comments>
      <pubDate>Tue, 14 Feb 2023 20:23:41 +0900</pubDate>
    </item>
    <item>
      <title>노드에서 워드프레스 암호 암호화JS</title>
      <link>https://bestcode.tistory.com/939</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;JS&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;노드의 워드프레스 데이터베이스에서 사용자 인증을 수행하는 방법&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스 데이터베이스를 사용하여 사용자 이름/비밀번호가 맞는지 확인해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Wordpress는 PHPass PHP 라이브러리를 사용하여 암호를 암호화하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단, NodeJs의 패스워드와 일치해야 합니다.&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-0&quot;&gt;편집:&lt;/strong&gt; 현재 Wordpress 휴대용 해시를 지원하는 구현이 있습니다: &lt;a href=&quot;https://github.com/AlexAlbala/wordpress-hash-node&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-2&quot;&gt;Wordpress-Hash-node&lt;/a&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;하아... 나는 이것에 흥미를 가지고 30분 동안 PHPass 소스 코드를 조사했다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 노드 &lt;a href=&quot;https://github.com/jhurliman/node-phpass&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-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;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;0-0&quot;&gt;편집:&lt;/strong&gt; 자세히 보면, 이것은 bcrypt 암호화만 실장하고 있는 것 같습니다만, PHPass 디폴트(Wordpress가 사용하고 있다고 생각합니다)는 「Portable Hashes」라고 불리는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;code&gt;node-phpass&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;던지다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'Portable hashes are not implemented'&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 class=&quot;papago-parent&quot;&gt;이 기능을 도입할 것을 권장합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;node-phpass&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;풀 요청을 보냅니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Wordpress 4.9.5의 경우 NodeJS에서 다음 시간 이후&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;npm i wordpress-press-node&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var hasher = require('wordpress-hash-node');
let wordpressHashPass = &quot;$P$BzPE3JGpq4CUpvpMHhtPh3lZmIoG.s1&quot;;
let wordpressPlainTextPass = '(&amp;amp;@fZsImcKq7K3Lmd&amp;amp;qBe!Jx';
var checked = hasher.CheckPassword(wordpressPlainTextPass, wordpressHashPass); //This will return true
console.log(checked); // returns true

var hasher = require('wordpress-hash-node');
let wordpressHashPass = &quot;$P$BzPE3JGpq4CUpvpMHhtPh3lZmIoG.s1&quot;;
let wordpressPlainTextPass = 'goodday';
var checked = hasher.CheckPassword(wordpressPlainTextPass, wordpressHashPass); //This will return false
console.log(checked); // returns false
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;wordpressHashPass는 사용자의 Wordpress의 wp_users 테이블에서 찾을 수 있는 MD5 해시 패스워드입니다.&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;word press Plain Text Pass는 사용자가 비밀번호 필드에 입력하는 일반 텍스트 비밀번호입니다.&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;CheckPassword 메서드는 플레인텍스트 비밀번호와 해시 비밀번호를 비교합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일치하면 true를 반환하고 일치하지 않으면 false를 반환합니다.&lt;/font&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;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/10346916/&lt;a href=&quot;https://stackoverflow.com/questions/10346916/wordpress-password-encryption-in-nodejs&quot; target=&quot;_blank&quot; papago-id=&quot;15-1&quot;&gt;wordpress-password-encryption-in-nodejs&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/939</guid>
      <comments>https://bestcode.tistory.com/939#entry939comment</comments>
      <pubDate>Tue, 14 Feb 2023 20:23:36 +0900</pubDate>
    </item>
    <item>
      <title>Woocommerce 페이지당 내 계정 주문 목록 게시 맞춤</title>
      <link>https://bestcode.tistory.com/938</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Woocommerce 페이지당 내 계정 주문 목록 게시 맞춤&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;Woocommerce 2.6.x에는 사용자 계정(내 계정) 영역에 사용자의 이전 주문을 표시하는 특수 페이지가 있습니다.&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;이 페이지는 페이지 번호 매겨져 있으며 기본 15개 항목/페이지로 표시됩니다.&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;다음은 woocommerce 스토어 프런트 테마 Orders 영역의 스크린샷입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 바꿀 방법을 찾을 수 없다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 번호가 아닌 7개 항목만 표시하려면 어떻게 해야 합니까?&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;blockquote&gt; 
 &lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;후크에서 사용자 지정 후크 함수를 사용하여 인수를 사용자 지정하는 주문 쿼리를 원하는 대로 7로 &lt;strong papago-id=&quot;7-5&quot;&gt;변경&lt;/strong&gt;할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_filter( 'woocommerce_my_account_my_orders_query', 'custom_my_account_orders', 10, 1 );
function custom_my_account_orders( $args ) {

    $args['posts_per_page'] = 7;
    return $args;
}
&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;woocommerce 3+용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;limit&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;pre&gt;&lt;code&gt;add_filter( 'woocommerce_my_account_my_orders_query', 'custom_my_account_orders', 10, 1 );
function custom_my_account_orders( $args ) {
    // Set the post per page
    $args['limit'] = 7;

    return $args;
}
&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;em papago-id=&quot;11-0&quot;&gt;코드가 기능합니다.&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;11-0&quot;&gt;php 파일에는 액티브한 아이 테마(또는 활성 테마).&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 및 동작.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주의&lt;strong papago-id=&quot;12-0&quot;&gt;:&lt;/strong&gt; 보통 제 어카운트 페이지에 주문 목록을 표시할 때 스토어 프런트 테마 및 기타 테마의 기본값은 10&lt;em papago-id=&quot;12-4&quot;&gt;(단,&lt;/em&gt; 15는 &lt;em papago-id=&quot;12-4&quot;&gt;아님)&lt;/em&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;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/41916732/&lt;a href=&quot;https://stackoverflow.com/questions/41916732/customizing-my-account-orders-list-post-per-page-in-woocommerce&quot; target=&quot;_blank&quot; papago-id=&quot;13-1&quot;&gt;customizing-my-account-orders-list-post-per-page-in-woocommerce&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/938</guid>
      <comments>https://bestcode.tistory.com/938#entry938comment</comments>
      <pubDate>Tue, 14 Feb 2023 20:23:31 +0900</pubDate>
    </item>
    <item>
      <title>spring-data-jpa와 spring-boot-starter-data-jpa의 차이점</title>
      <link>https://bestcode.tistory.com/937</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;spring-data-jpa와 spring-boot-starter-data-jpa의 차이점&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;이 질문을 하는 것이 최선이라고는 할 수 없습니다만, Spring Boot에는 2개의 Spring JPA가 있는 것을 알 수 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 다른가요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 하이버네이트와 함께 Spring Boot 1.5.3 프로젝트를 셋업하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전에 spring-boot-starter-data-jpa를 사용하여 JPA를 사용하여 Spring Boot을 셋업했던 것으로 기억합니다.&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;제가 본 대부분의 온라인 예와 starter.spring.io은 Spring JPA에 대해 다음과 같은 종속성을 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-xml prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;spring-boot-starter-data-jpa&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&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;그러나 기존 프로젝트 중 하나에서 spring-data-jpa를 발견했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-xml prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.springframework.data&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;spring-data-jpa&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.11.4.RELEASE&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구글을 조금만 해도 그들이 다른지 아닌지는 알 수 없었다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JPA를 추가한 이전 프로젝트에서는 JPA 2.1/Hibernate를 사용했기 때문에 새로운 Spring Boot 어플리케이션에서 어떤 것을 사용해야 할지 잘 모르겠습니다.&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;a href=&quot;https://github.com/spring-projects/spring-boot/tree/master/spring-boot-project/spring-boot-starters&quot; rel=&quot;noreferrer&quot; papago-id=&quot;0-1&quot;&gt;문서&lt;/a&gt;에 기재된 바와 같이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;starter&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나는 이 특정 라이브러리의 모든 필수 종속성에 대해 편리한 인라이너입니다. 즉, 다른 종속성을 수동으로 작성하는 대신 그 자체에 포함합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 조사합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;spring-boot-starter-data-jpa&lt;/code&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;pom&lt;a href=&quot;https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-starters/spring-boot-starter-data-jpa/pom.xml&quot; papago-id=&quot;3-0&quot; rel=&quot;noreferrer&quot;&gt;.xml&lt;/a&gt;, 여기에 다음 정보가 &lt;a href=&quot;https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-starters/spring-boot-starter-data-jpa/pom.xml&quot; papago-id=&quot;3-0&quot; rel=&quot;noreferrer&quot;&gt;포함&lt;/a&gt;되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;spring-data-jpa&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;blockquote&gt; 
 &lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring Boot Starters는 어플리케이션에 포함할 수 있는 편리한 의존관계 기술자 세트입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;샘플 코드를 검색하거나 의존관계 기술자의 페이스트 로드를 복사할 필요 없이 필요한 모든 스프링 및 관련 기술을 원스톱으로 이용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 Spring 및 JPA를 데이터베이스 액세스에 사용하기 시작할 경우 프로젝트에 spring-boot-starter-data-jpa 종속성을 포함하면 됩니다.&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;pom.xml에서 spring-boot-boot-data-jpa를 확인하십시오.https&lt;a href=&quot;https://github.com/spring-projects/spring-boot/blob/master/spring-boot-starters/spring-boot-starter-data-jpa/pom.xml&quot; papago-id=&quot;12-1&quot; rel=&quot;noreferrer&quot;&gt;://&lt;/a&gt;github.com/spring-projects/spring-boot/blob/master/spring-boot-starters/&lt;a href=&quot;https://github.com/spring-projects/spring-boot/blob/master/spring-boot-starters/spring-boot-starter-data-jpa/pom.xml&quot; papago-id=&quot;12-1&quot; rel=&quot;noreferrer&quot;&gt;spring-boot-starter-data-jpa&lt;/a&gt;/pom.xml&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설명 태그 &quot;Starter for using Spring Data JPA with Hibernate&quot; (스프링 데이터 JPA를 휴지 상태로 사용하기 위한 스타터)를 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 spring-boot-starter-data-jpa는 하이버네이트를 포함한 Spring Data JPA를 구현으로 사용합니다.&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;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 pom.xml에서 spring-data-jpa를 체크하면 구현에 구애받지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 어떤 프로젝트에서든 Spring Data JPA를 사용하려면 &lt;strong papago-id=&quot;15-1&quot;&gt;사용&lt;/strong&gt;할 구현을 제공해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게 하지 않으면 오류가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring Data JPA 문서에는 현재 Hibernate 5, (Apache) OpenJPA 2.4 및 EclipseLink 2.6.1이 지원되고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기: https://docs.spring.io/&lt;a href=&quot;https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#new-features.1-10-0&quot; papago-id=&quot;16-1&quot; rel=&quot;noreferrer&quot;&gt;spring-data&lt;/a&gt;/jpa/docs/current/reference/html/ &lt;a href=&quot;https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#new-features.1-10-0&quot; papago-id=&quot;16-1&quot; rel=&quot;noreferrer&quot;&gt;#new-1802.10-0&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/44768112/&lt;a href=&quot;https://stackoverflow.com/questions/44768112/difference-between-spring-data-jpa-and-spring-boot-starter-data-jpa&quot; target=&quot;_blank&quot; papago-id=&quot;17-1&quot;&gt;difference-between-spring-data-jpa-and-spring-boot-starter-data-jpa&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>spring-boot</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/937</guid>
      <comments>https://bestcode.tistory.com/937#entry937comment</comments>
      <pubDate>Tue, 14 Feb 2023 20:23:19 +0900</pubDate>
    </item>
    <item>
      <title>원어민 ES6 약속에서의 타이프스크립트 사용방법</title>
      <link>https://bestcode.tistory.com/936</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원어민 ES6 약속에서의 타이프스크립트 사용방법&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;저는 Typescript의 초보자인데, Typescript에서 ES6 약속을 사용할 수 있는지, 그리고 그 약속을 실행하기 위해서는 어떻게 해야 하는지 궁금합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;노드 0.11.14를 실행하고 있으며 컴파일 중에 &quot;Cannot find name 'Promise&quot; (이름 'Promise'를 찾을 수 없습니다)라는 오류가 나타납니다.&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;현재 lib.d.ts에는 정의된 약속이 없습니다.따라서 추가 정의 파일이 필요하기 때문에 컴파일 오류가 발생합니다.&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;예를 들어 (@elclanrs가 말한 것처럼) Definitionally의 정의 파일과 함께 es6-promise 패키지를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유형: &lt;a href=&quot;https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/es6-promise/index.d.ts&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-1&quot;&gt;es6-promise 정의&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 다음과 같이 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var p = new Promise&amp;lt;string&amp;gt;((resolve, reject) =&amp;gt; { 
    resolve('a string'); 
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집은 ES6(TypeScript 컴파일러 사용)를 대상으로 할 때 정의 없이 사용할 수 있습니다.Promise는 여전히 실행 시(구 브라우저에서는 작동하지 않습니다)에 필요합니다.&lt;strong papago-id=&quot;5-0&quot;&gt;다음&lt;/strong&gt; 항목을 추가/편집하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tsconfig.json&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;compilerOptions&quot;: {
    &quot;target&quot;: &quot;ES6&quot;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;7-0&quot;&gt;편집&lt;/strong&gt; 2 TypeScript 2.0이 출시되면 상황이 조금 바뀌지만(위의 내용은 그대로 작동하지만) 다음과 같이 정의 파일을 npm에서 직접 설치할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;npm install --save @types/es6-promise&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;a href=&quot;https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/&quot; papago-id=&quot;8-1&quot; rel=&quot;noreferrer&quot;&gt;소스&lt;/a&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;strong papago-id=&quot;9-0&quot;&gt;edit&lt;/strong&gt; 3 유형 사용에 대한 자세한 정보를 사용하여 답변을 업데이트합니다.&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;package.json&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;{ }&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내용물(패키지가 없는 경우)로 지정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 json은.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;불러&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm install --save @types/es6-promise&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tsc --init&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 첫 번째 npm install 명령어를 실행하면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;package.json&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의존관계로서 es6-module을 포함시킵니다.tsc --init 는, 다음의 명령어를 작성합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tsconfig.json&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일링 해주세요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;var x: Promise&amp;lt;any&amp;gt;;&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;tsc -p .&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 class=&quot;papago-parent&quot;&gt;오류가 없어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;h3 papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대안 #1&lt;/font&gt;&lt;/h3&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;target&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;lib&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;es5&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;es6-shim&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. (TypeScript로 테스트 완료)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;2.1.4&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;). lib 섹션에서 다음 중 하나를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;es2016&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;es2015.promise&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// tsconfig.json
{
    &quot;compilerOptions&quot;: {
        &quot;target&quot;: &quot;es5&quot;,
        &quot;lib&quot;: [
            &quot;es2015.promise&quot;,
            &quot;dom&quot;
        ]
    },
    &quot;include&quot;: [
        &quot;src/**/*.ts&quot;
    ],
    &quot;exclude&quot;: [
        &quot;node_modules&quot;
    ]
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대안 #2&lt;/font&gt;&lt;/h3&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;a href=&quot;https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/&quot; papago-id=&quot;30-0&quot; rel=&quot;noreferrer&quot;&gt;NPM을 사용하여 설치하다&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;es6-shim&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;a href=&quot;https://www.npmjs.com/~types&quot; papago-id=&quot;31-1&quot; rel=&quot;noreferrer&quot;&gt;형식 조직&lt;/a&gt;으로부터.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npm install @types/es6-shim --save-dev
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대안 #3&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TypeScript 2.0 이전 버전에서는 타이핑을 &lt;a href=&quot;https://www.npmjs.com/package/typings&quot; papago-id=&quot;33-1&quot; rel=&quot;noreferrer&quot;&gt;사용하여&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;es6-shim&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/DefinitelyTyped/DefinitelyTyped&quot; papago-id=&quot;34-1&quot; rel=&quot;noreferrer&quot;&gt;확실히&lt;/a&gt; 글로벌하게&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/DefinitelyTyped/DefinitelyTyped&quot; papago-id=&quot;34-1&quot; rel=&quot;noreferrer&quot;&gt;입력&lt;/a&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npm install typings --global --save-dev
typings install dt~es6-shim --global --save-dev
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;typings&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm&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;code&gt;typings&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;typings&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;심을 장착합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dt~&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;prefix는 Definally에서 심을 다운로드하는 것을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;타이핑.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--global&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션은 프로젝트 전체에서 심 유형을 사용할 수 있음을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「 」를 참조해 주세요.&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/Microsoft/TypeScript/issues/7788 - 이름 '약속'을 찾을 수 없고 이름 '약속'을 찾을 수 &lt;a href=&quot;https://github.com/Microsoft/TypeScript/issues/7788&quot; rel=&quot;noreferrer&quot; papago-id=&quot;43-0&quot;&gt;없습니다.&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2.에서는 TypeScript 2.0에 할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tsconfig.json&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;compilerOptions&quot;: {
    &quot;lib&quot;: [&quot;es5&quot;, &quot;es2015.promise&quot;]
}
&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;여기에는 타깃을 ES6로 설정하지 않고 TypeScript에 포함된 약속 선언이 포함됩니다.&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;node.js 0.12 이상 / typescript 1.4 이상을 사용하는 경우 다음과 같은 컴파일러 옵션을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;tsc a.ts --target es6 --module commonjs
&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;상세정보 : https://github.com/Microsoft/TypeScript/wiki/&lt;a href=&quot;https://github.com/Microsoft/TypeScript/wiki/Compiler-Options&quot; papago-id=&quot;47-1&quot;&gt;Compiler-Options&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「 」를 사용하고 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tsconfig.json&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이렇게요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{
    &quot;compilerOptions&quot;: {
        &quot;module&quot;: &quot;commonjs&quot;,
        &quot;target&quot;: &quot;es6&quot;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상세정보 : https://github.com/Microsoft/&lt;a href=&quot;https://github.com/Microsoft/TypeScript/wiki/tsconfig.json&quot; papago-id=&quot;50-1&quot;&gt;TypeScript&lt;/a&gt;/wiki/tsconfig.json&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 가장 최근의 방법입니다.위의 답변은 오래된 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;typings install --global es6-promise&lt;/code&gt;&lt;/p&gt;&lt;h2&gt;&lt;strong papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Visual Studio 2015 + Node.js 툴 1.2에서 네이티브 ES6 Promise를 Typescript와 함께 사용&lt;/font&gt;&lt;/strong&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ES6 Promise가 네이티브이므로 npm 설치가 필요하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;54-0&quot;&gt;Node.js&lt;/strong&gt; project -&amp;gt; Properties -&amp;gt; Typescript Build 탭 ECMAScript 버전 = ECMAScript6&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import http = require('http');
import fs = require('fs');

function findFolderAsync(directory : string): Promise&amp;lt;string&amp;gt; {

    let p = new Promise&amp;lt;string&amp;gt;(function (resolve, reject) {

        fs.stat(directory, function (err, stats) {

            //Check if error defined and the error code is &quot;not exists&quot;
            if (err &amp;amp;&amp;amp; err.code === &quot;ENOENT&quot;) {
                reject(&quot;Directory does not exist&quot;);
            }
            else {
                resolve(&quot;Directory exists&quot;);
            }
        });

    });
    return p;
}

findFolderAsync(&quot;myFolder&quot;).then(

    function (msg : string) {
        console.log(&quot;Promise resolved as &quot; + msg); 
    },
    function (msg : string) {
        console.log(&quot;Promise rejected as &quot; + msg); 
    }
);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; A를 사용하는 .&lt;/font&gt;&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;&quot;target&quot;: &quot;es5&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; TypeScript 이 2.인 경우:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;typings install es6-promise --save --global --source dt
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; B를 사용하는 .&lt;/font&gt;&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;&quot;target&quot;: &quot;es5&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; TypeScript 2.0  TypeScript 버전 2.0 이후:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;compilerOptions&quot;: {
    &quot;lib&quot;: [&quot;es5&quot;, &quot;es2015.promise&quot;]
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; C를 사용하는 .&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 사용하는 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;target&quot;: &quot;es6&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도 안 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 신용을 떨어뜨려야 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@types/core-js&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;target&quot;: &quot;es5&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;tsconfig.tsconfig로 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;&quot;@types/core-js&quot;: &quot;0.9.36&quot;,&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;tsconfig.json의 typeorm 문제를 입력합니다.속성을 추가합니다.strictProperty&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;초기화&quot;: false&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/27573365/&lt;a href=&quot;https://stackoverflow.com/questions/27573365/how-to-use-typescript-with-native-es6-promises&quot; target=&quot;_blank&quot; papago-id=&quot;65-1&quot;&gt;how-to-use-typescript-with-native-es6-promises&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>typescript</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/936</guid>
      <comments>https://bestcode.tistory.com/936#entry936comment</comments>
      <pubDate>Tue, 14 Feb 2023 20:22:50 +0900</pubDate>
    </item>
    <item>
      <title>각도 Ui-router 링크가 앱에서 벗어났지만 동일한 도메인에 있음</title>
      <link>https://bestcode.tistory.com/935</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각도 Ui-router 링크가 앱에서 벗어났지만 동일한 도메인에 있음&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;각진 앱에서 ui-router를 사용하려고 합니다.&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;기본 URL은 &quot;/segments&quot;이며 기본 태그를 사용하여 정의합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;base href=&quot;/segments&quot; /&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;var base = &quot;/segments&quot;

$stateProvider
  .state('list', {
    url: base,
    controller: 'FilterLestCtrl',
    templateUrl: '/segments/partial?partial=list'
  })

  .state('new', {
    url: base + '/new',
    data: {
      mode: 'new'
    },
    controller: 'SegmentFormCtrl',
    templateUrl: '/segments/partial?partial=edit'
  })

  .state('edit', {
    url: base + '/:id/edit',
    data: {
      mode: 'edit'
    },
    controller: 'SegmentFormCtrl',
    templateUrl: '/segments/partial?partial=edit'
  });

$locationProvider.html5Mode(true).hashPrefix('!');
&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a class=&quot;&quot; href=&quot;/widgets&quot;&amp;gt;Widgets&amp;lt;/a&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;URL이 변경되어도 아무 일도 일어나지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;6-0&quot;&gt;질문:&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ui-router를 사용하여 사이트의 다른 페이지에 대한 외부 링크를 어떻게 처리합니까?&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://stackoverflow.com/questions/11580004/angular-js-link-behaviour-disable-deep-linking-for-specific-urls&quot; papago-id=&quot;7-1&quot;&gt;있습니다.&lt;/a&gt;angular.&lt;a href=&quot;https://stackoverflow.com/questions/11580004/angular-js-link-behaviour-disable-deep-linking-for-specific-urls&quot; papago-id=&quot;7-1&quot;&gt;js 링크 &lt;/a&gt;동작 - &lt;a href=&quot;https://stackoverflow.com/questions/11580004/angular-js-link-behaviour-disable-deep-linking-for-specific-urls&quot; papago-id=&quot;7-1&quot;&gt;특정 URL에 대해&lt;/a&gt; 딥 &lt;a href=&quot;https://stackoverflow.com/questions/11580004/angular-js-link-behaviour-disable-deep-linking-for-specific-urls&quot; papago-id=&quot;7-1&quot;&gt;링크를 사용&lt;/a&gt;하지 않도록 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요약하면 라우팅 목적으로 링크를 무시하도록 Angular에게 지시할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;target=&quot;_self&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 브라우저가 Angular에 의해 방해받지 않고 링크를 처리할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt; &amp;lt;a href=&quot;/my-non-angular-link&quot; target=&quot;_self&quot;&amp;gt;My Non-Angular Link&amp;lt;/a&amp;gt; &lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 접근법은 Angular에서 처리해서는 안 된다는 것을 미리 알고 있는 링크에 대해 유효합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ui-Router가 Router를 트리거하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;otherwise()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL을 기존의 상태 목록과 대조하지 못했기 때문에 URL에 대한 응답입니다.&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;브라우저에 URL 업데이트가 표시되지만 Javascript 코드에서 오류가 처리되지 않았기 때문에 아무 일도 일어나지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 같이 일치하지 않는 상태의 핸들러를 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var stateHandler = function($urlRouterProvider)
{
    $urlRouterProvider.otherwise(function($injector, $location)
     {
         window.location = $location.absUrl();
     });
};

YourAngularApp.config(['$urlRouterProvider',stateHandler]);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ui-router가 상태와 일치하지 않으면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;otherwise()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콜백&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 브라우저를 수동으로 해당 URL로 이동할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 경고, URL이 잘못된 루트를 가진 Angular 경로일 경우 무한 리다이렉트루프가 발생합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단일 요소에서 다음 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a href=&quot;some/url&quot; ng-click=&quot;$event.stopPropagation()&quot;&amp;gt;A link outside of the app&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 포인트는 angular handle all default로 요소를 클릭한 후 라우팅 시스템을 통해 href 속성 값을 해결합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 &lt;a href=&quot;http://docs.angularjs.org/guide/dev_guide.services.$location#hashbang-and-html5-modes_html5-mode_html-link-rewriting&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;19-1&quot;&gt;여기 Angular&lt;/a&gt; docs(각도 문서)를 참조하십시오.&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;두 번째 포인트는 베이스 URL을 잘못 사용했다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;/&lt;strong papago-id=&quot;20-1&quot;&gt;segments를 &lt;/strong&gt;사용하는 대신 /&lt;strong papago-id=&quot;20-3&quot;&gt;segments/&lt;/strong&gt;를 사용해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열 끝의 슬래시는 매우 중요한 의미를 가집니다!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;베이스에 없는 각도 건너뛰기 링크(/segments/)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 &lt;a href=&quot;https://stackoverflow.com/a/16756617/1109471&quot; papago-id=&quot;21-1&quot;&gt;기재&lt;/a&gt;되어 있는 기타 솔루션.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 나는 그것을 사용하는 것을 추천한다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$rootElement.off('click');
&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;strong papago-id=&quot;22-1&quot;&gt;기능&lt;/strong&gt;이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 경우 angular binds 클릭 핸들 전에 실행 함수가 호출되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모두에게 행운을 빈다!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;:)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/20980201/&lt;a href=&quot;https://stackoverflow.com/questions/20980201/angular-ui-router-link-out-of-app-but-in-the-same-domain&quot; target=&quot;_blank&quot; papago-id=&quot;24-1&quot;&gt;angular-ui-router-link-out-of-app-but-in-the-same-domain&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/935</guid>
      <comments>https://bestcode.tistory.com/935#entry935comment</comments>
      <pubDate>Tue, 14 Feb 2023 20:22:43 +0900</pubDate>
    </item>
    <item>
      <title>&amp;quot;jsdom&amp;quot; 테스트 환경의 사용을 검토하다</title>
      <link>https://bestcode.tistory.com/934</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;jsdom&quot; 테스트 환경의 사용을 검토하다&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 테스트가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import React from 'react'
import { render } from '@testing-library/react'

import Button from '.'

describe('Button', () =&amp;gt; {
  it('renders button without crashing', () =&amp;gt; {
    const label = 'test'

    render(&amp;lt;Button label={label} /&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;그리고 저는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jest.config.json&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;pre&gt;&lt;code&gt;{
  &quot;setupFilesAfterEnv&quot;: [
    &quot;&amp;lt;rootDir&amp;gt;/lib/settings/setupTests.ts&quot;
  ]
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 나의 위에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setupTests.ts&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;있습니다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import '@testing-library/jest-dom'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 달릴 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm run test&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(그냥 실행)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jest&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)는, 다음의 에러가 발생했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/w6dW6.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/w6dW6.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 오류는 잘못된 테스트 환경을 사용했기 때문에 발생할 수 있습니다.https://jestjs.io/docs/configuration#&lt;a href=&quot;https://jestjs.io/docs/configuration#testenvironment-string&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;testenvironment-string&lt;/a&gt; 를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;jsdom&quot; 테스트 환경의 사용을 검토합니다.&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;내가 뭘 잘못하고 있지?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능은 업그레이드 전에 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고객님의 고객명&lt;/font&gt;&lt;/font&gt;&lt;code&gt;package.json&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;jest.config.js&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;/&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jest.config.ts&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;testEnvironment&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;jsdom&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;code&gt;package.json&lt;/code&gt;&lt;/h2&gt; 
&lt;pre class=&quot;lang-json prettyprint-override&quot;&gt;&lt;code&gt;&quot;jest&quot;:{
    &quot;testEnvironment&quot;: &quot;jsdom&quot;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;code&gt;jest.config.[js|ts]&lt;/code&gt;&lt;/h2&gt; 
&lt;pre class=&quot;lang-json prettyprint-override&quot;&gt;&lt;code&gt;module.exports = {
    &quot;testEnvironment&quot;: &quot;jsdom&quot;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;농담을 위한 중요 주의 &amp;gt; 28&lt;/font&gt;&lt;/h2&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;jeast 28을 사용하고 있는 경우는, 를 인스톨 할 필요가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jest-environment-jsdom&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 중 하나에 의해 개별적으로 처리됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;npm:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm i jest-environment-jsdom --save-dev&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;yarn add -D jest-environment-jsdom&lt;/code&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜요?&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디폴트로는 joke는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;node&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 환경&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이로 인해 브라우저 환경에 대한 테스트는 기본적으로 무효가 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;jsdom&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 이러한 유형의 UI 테스트를 지원하는 브라우저 환경의 구현입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Jest 버전 28 이상의 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jest-environment-jsdom&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;jest&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지 크기를 줄이기 위한 설치입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가 판독치&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://jestjs.io/docs/configuration#testenvironment-string&quot; rel=&quot;noreferrer&quot; papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jajest test환경 매뉴얼&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://jestjs.io/blog/2022/04/25/jest-28#breaking-changes&quot; rel=&quot;noreferrer&quot; papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Jeast 28 브레이크 체인지 여부&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제는 테스트 파일 단위로 해결하려면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@jest-environment&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 선두에 docblock을 입력합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;/** @jest-environment jsdom */
import React from 'react'
import { render } from '@testing-library/react'

import Button from '.'

describe('Button', () =&amp;gt; {
  it('renders button without crashing', () =&amp;gt; {
    const label = 'test'

    render(&amp;lt;Button label={label} /&amp;gt;)
  })
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트에 UI 파일과 비UI 파일이 혼재되어 있는 경우, 이 방법은 보통 설정에 따라 프로젝트 &lt;a href=&quot;https://stackoverflow.com/a/69228464/25507&quot; papago-id=&quot;25-1&quot;&gt;전체를 변경하는 것&lt;/a&gt;보다 선호됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;testEnvironment&quot;: &quot;jsdom&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지에 포함되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;json 또는 Jest 설정.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Jest는 UI가 아닌 테스트의 JSDom 환경 초기화를 건너뛰면 테스트를 더 빠르게 실행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 바로 &lt;a href=&quot;https://jestjs.io/blog/2021/05/25/jest-27#flipping-defaults&quot; papago-id=&quot;26-1&quot; rel=&quot;noreferrer&quot;&gt;Jest가 Jest 27에서 기본 테스트&lt;/a&gt; 환경을 &lt;a href=&quot;https://jestjs.io/blog/2021/05/25/jest-27#flipping-defaults&quot; papago-id=&quot;26-1&quot; rel=&quot;noreferrer&quot;&gt;변경&lt;/a&gt;한 이유입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 testEnvironment 값은 node.js 환경에서 모든 테스트 케이스를 실행하는 &lt;strong papago-id=&quot;37-1&quot;&gt;노드&lt;/strong&gt;이지만 js-dom은 환경과 같은 브라우저를 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;jsdom 값을 추가하는 대신 다음과 같은 파일 고유의 값을 추가할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/**
 * @jest-environment jsdom
 */
// the above comment helps
test('use jsdom in this test file', () =&amp;gt; {
  const element = document.createElement('div');
  expect(element).not.toBeNull();
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 파일 고유의 환경도 추가할 수 있습니다.이 링크를 참조해 주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://jestjs.io/docs/configuration#testenvironment-string&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://jestjs.io/docs/configuration#testenvironment-string&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 먹어봐.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;module.exports = {
testEnvironment: 'jsdom',
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/69227566/&lt;a href=&quot;https://stackoverflow.com/questions/69227566/consider-using-the-jsdom-test-environment&quot; target=&quot;_blank&quot; papago-id=&quot;42-1&quot;&gt;consider-using-the-jsdom-test-environment&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ReactJS</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/934</guid>
      <comments>https://bestcode.tistory.com/934#entry934comment</comments>
      <pubDate>Tue, 14 Feb 2023 20:22:37 +0900</pubDate>
    </item>
    <item>
      <title>언어 WPML 숨기기</title>
      <link>https://bestcode.tistory.com/933</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언어 WPML 숨기기&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;1-1&quot;&gt;저&lt;/strong&gt;는 WPML 언어를 사용하고 있으며, 다음 사항에 대한 해결책을 찾을 수 없습니다.&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;언어를 숨기고 싶은 언어 전환기에서 예를 들어 &quot;he&quot;라고 합시다.현재 언어가 &quot;ar&quot;라고 하면 아랍어 사이트에서 히브리어를 셀렉터에 표시할 수 없습니다.히브리어에서도 마찬가지입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;줄여서 말하자면, 내가 원하는 것은 - 만약 우리가 아랍 사이트에 있다면 - 히브리 국기는 숨겨질 것이다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 시도한 것:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function language_selector_flags(){
    $languages = icl_get_languages('skip_missing=0');
    if(!empty($languages)){
       if(ICL_LANGUAGE_CODE=='en') 
       {
$order = array('ar'); //Specify your sort order here
       }
elseif(ICL_LANGUAGE_CODE=='he')
{
$order = array('en', 'ar'); //Specify your sort order here
}

        foreach ($order as $l) {
            if (isset($languages[$l])) {
                $l = $languages[$l]; //grab this language from the unsorted array that is returned by icl_get_languages()

                //Display whatever way you want -- I'm just displaying flags in anchors  (CSS: a {float:left; display:block;width:18px;height:12px;margin:0 2px;overflow:hidden;line-height:100px;})
                if($l['active']) { $class = &quot;active&quot;; $url=&quot;&quot;; } else { $class = ''; $url = 'href=&quot;'.$l['url'].'&quot;'; }
                echo '&amp;lt;a '.$url.' style=&quot;background:url('.$l['country_flag_url'].') no-repeat;&quot; class=&quot;flag '.$class.'&quot;&amp;gt;';
                echo $l['language_code'].'';
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실렉터에는 전혀 영향을 주지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;6-1&quot;&gt;&lt;a href=&quot;http://wordpress.org/plugins/wpml-flag-in-menu/&quot; papago-id=&quot;6-1-0&quot;&gt;플러그인 WPML Flag In&lt;/a&gt;&lt;/em&gt; 메뉴를 확인하실 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;plugin_wpml_flag_in_menu()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플러그인에서 기능(&lt;a href=&quot;http://plugins.svn.wordpress.org/wpml-flag-in-menu/trunk/wpml_flag_in_menu.php&quot; papago-id=&quot;1-1&quot;&gt;여기 소스 코드 참조&lt;/a&gt;)하고 다음을 바꿉니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Exclude current viewing language             
if( $l['language_code'] != ICL_LANGUAGE_CODE )
{
    // ...
}
&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;// Include only the current language                
if( $l['language_code'] == ICL_LANGUAGE_CODE )
{
    // ...
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 언어/플래그만 표시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ps&lt;strong papago-id=&quot;11-0&quot;&gt;:&lt;/strong&gt; 추가 지원이 필요한 경우 이 디버깅 함수의 액티브한 언어 출력을 확인할 수 &lt;strong papago-id=&quot;11-0&quot;&gt;있습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function debug_icl_active_language()
{
    $languages = icl_get_languages( 'skip_missing=0' );
    foreach( (array) $languages as $l )
    {
        if( $l['active'] )
        { 
            printf( '&amp;lt;pre&amp;gt; Total languages: %d - Active: %s &amp;lt;/pre&amp;gt;', 
                    count( $languages ), 
                    print_r( $l, TRUE ) );
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되는 링크가 있습니다.먼저 확인해 주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://wpml.org/forums/topic/hide-language-vs-display-hidden-languages-in-your-profile-not-working/&quot; rel=&quot;nofollow&quot; papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://wpml.org/forums/topic/hide-language-vs-display-hidden-languages-in-your-profile-not-working/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://wpml.org/forums/topic/hide-one-language/&quot; rel=&quot;nofollow&quot; papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://wpml.org/forums/topic/hide-one-language/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://wpml.org/forums/topic/hiding-active-language-in-menu/&quot; rel=&quot;nofollow&quot; papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://wpml.org/forums/topic/hiding-active-language-in-menu/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://wpml.org/forums/topic/language-selector-how-to-hide-one-language/&quot; rel=&quot;nofollow&quot; papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://wpml.org/forums/topic/language-selector-how-to-hide-one-language/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;function language_selector_flags(){
    $languages = icl_get_languages('skip_missing=0');
    if(!empty($languages)){
        $filter = array();
        $filter['ar'] = array( 'he' );
        // set your other filters here

        $active_language = null;
        foreach ($languages as $l)
            if($l['active']) {
                $active_language = $l['language_code'];
                break;
            }

        $filter = $active_language &amp;amp;&amp;amp; isset( $filter[$active_language] ) ? $filter[$active_language] : array();
        foreach ($languages as $l) {

                //Display whatever way you want -- I'm just displaying flags in anchors  (CSS: a {float:left; display:block;width:18px;height:12px;margin:0 2px;overflow:hidden;line-height:100px;})
                if( in_array( $l['language_code'], $filter) )
                    continue;
                if($l['active']) { $class = &quot;active&quot;; $url=&quot;&quot;; } else { $class = ''; $url = 'href=&quot;'.$l['url'].'&quot;'; }
                echo '&amp;lt;a '.$url.' class=&quot;flag '.$class.'&quot;&amp;gt;&amp;lt;img src=&quot;', $l['country_flag_url'], '&quot; alt=&quot;', esc_attr( $l['language_code'] ), '&quot; /&amp;gt;&amp;lt;/a&amp;gt;';
            }
        }
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 제가 제대로 이해한 경우, 고객(이스라엘인 especiay)이 아랍어를 구사하는 고객에게도 서비스를 제공하는 것을 원치 않을 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 경우는, 다음의 파일을 해석할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Accept-Language&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;헤더를 지정하고 결과에 따라 언어 선택기를 필터링합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유사한 문제/문제가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 웹사이트 :&lt;a href=&quot;https://neu.member-diving.com/&quot; papago-id=&quot;21-1&quot; rel=&quot;nofollow noreferrer&quot;&gt; &lt;/a&gt;https://neu.&lt;a href=&quot;https://neu.member-diving.com/&quot; papago-id=&quot;21-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;member-diving&lt;/a&gt;.com/&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위처에는 필요 없는 언어가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 코드를 사용해 봤지만, 지금까지 아무것도 바뀌지 않았습니다.&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;그래서 저는 클라이언트가 &quot;독일&quot; 페이지에 있을 때 스위처 내의 다른 독일어는 필요하지 않고 영어와 실제 독일어만 있으면 됩니다.&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;function language_selector_flags(){
    $languages = icl_get_languages('skip_missing=0');
    if(!empty($languages)){
        $filter = array();
        $filter['ar'] = array( 'he' );
        // set your other filters here

        $active_language = null;
        foreach ($languages as $l)
            if($l['active']) {
                $active_language = $l['language_code'];
                break;
            }

        $filter = $active_language &amp;amp;&amp;amp; isset( $filter[$active_language] ) ? $filter[$active_language] : array();
        foreach ($languages as $l) {

                //Display whatever way you want -- I'm just displaying flags in anchors  (CSS: a {float:left; display:block;width:18px;height:12px;margin:0 2px;overflow:hidden;line-height:100px;})
                if( in_array( $l['language_code'], $filter) )
                    continue;
                if($l['active']) { $class = &quot;active&quot;; $url=&quot;&quot;; } else { $class = ''; $url = 'href=&quot;'.$l['url'].'&quot;'; }
                echo '&amp;lt;a '.$url.' class=&quot;flag '.$class.'&quot;&amp;gt;&amp;lt;img src=&quot;', $l['country_flag_url'], '&quot; alt=&quot;', esc_attr( $l['language_code'] ), '&quot; /&amp;gt;&amp;lt;/a&amp;gt;';
            }
        }
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/20346340/&lt;a href=&quot;https://stackoverflow.com/questions/20346340/hide-language-wpml&quot; target=&quot;_blank&quot; papago-id=&quot;25-1&quot;&gt;hide-language-wpml&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/933</guid>
      <comments>https://bestcode.tistory.com/933#entry933comment</comments>
      <pubDate>Tue, 14 Feb 2023 20:22:24 +0900</pubDate>
    </item>
    <item>
      <title>중력 형태 - 다중 사이트용 전역 형태</title>
      <link>https://bestcode.tistory.com/932</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중력 형태 - 다중 사이트용 전역 형태&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 20개 이상의 사이트를 가진 WordPress 다중 사이트 네트워크를 가지고 있으며 연락처/가입/구독 양식에 중력 양식을 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스 다중 사이트 설치를 위한 글로벌 양식을 만들고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;중력 폼이 폼 엔트리를 주 사이트/부모 사이트에만 저장할 수 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용해보았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;switch_to_blog()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 효과가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 도움이라도 주시면 감사하겠습니다:)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;양식을 모든 사이트로 복제하는 경우, '자녀' 사이트에 다음을 포함하여 모든 사용자가 주 사이트로 데이터를 보내도록 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$formId = 1;  //Put your form id here
add_filter('gform_confirmation_'.$formId, 'gform_confirmation', 10, 4);

function gform_confirmation($confirmation, $form, $entry, $is_ajax) {

    //Switch to Main site
    switch_to_blog(1); 

    //Insert the entry into the main site
    $new_entry_id = \GFAPI::add_entry($entry);

    //Switch back
    restore_current_blog();

    //Tidy up by deleting the entry from THIS site
    $result = GFAPI::delete_entry($entry['id']);
    return $confirmation;
}
&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;Gravity 폼은 블로그 데이터베이스 테이블 접두사를 기반으로 데이터를 저장합니다.&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;다중 사이트에서는 모든 사이트가 동일한 데이터베이스를 사용하지만 데이터는 테이블 접두사에 따라 분리된다. 접두사는 wp_1_, wp_2_, wp_3_.....와 같다.&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;테이블 프리픽스가 wp_1_인 my.blog1.com과 같은 사이트가 있는 경우 gravity form은 my.blog1.com의 모든 형식 엔트리를 wp_1_rg_lead_long, wp_wp_1_rg_lead_long, wp_1_rg_lead_long,&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;gform_pre_submission&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gform_after_submission&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.endocreative.com/save-gravity-forms-data-custom-database-table/&quot; rel=&quot;nofollow&quot; papago-id=&quot;9-1&quot;&gt;이&lt;/a&gt; 투고는&lt;a href=&quot;http://www.endocreative.com/save-gravity-forms-data-custom-database-table/&quot; papago-id=&quot;9-3&quot; rel=&quot;nofollow&quot;&gt; &lt;/a&gt;http://www.endocreative.com/&lt;a href=&quot;http://www.endocreative.com/save-gravity-forms-data-custom-database-table/&quot; papago-id=&quot;9-3&quot; rel=&quot;nofollow&quot;&gt;save-gravity-forms-data-custom-database-table&lt;/a&gt;/에 도움이 될 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/33826557/&lt;a href=&quot;https://stackoverflow.com/questions/33826557/gravity-forms-global-forms-for-multisite&quot; target=&quot;_blank&quot; papago-id=&quot;10-1&quot;&gt;gravity-forms-global-forms-for-multisite&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/932</guid>
      <comments>https://bestcode.tistory.com/932#entry932comment</comments>
      <pubDate>Tue, 14 Feb 2023 20:22:12 +0900</pubDate>
    </item>
    <item>
      <title>XMLHttpRequest 중에 Chrome의 로드 표시기가 계속 회전합니다.</title>
      <link>https://bestcode.tistory.com/931</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XMLHttpRequest 중에 Chrome의 로드 표시기가 계속 회전합니다.&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;웹 페이지를 최신 상태로 유지하기 위해 Comet/Long Polling을 사용하는 AJAX 웹 앱을 작성 중인데 Chrome에서는 페이지가 항상 로드되는 것처럼 처리됩니다(탭의 아이콘은 계속 회전합니다).&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;Google Chrome + Ajax의 경우 Google Wave에서도 정상이라고 생각했습니다.&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;오늘 Google Wave가 로딩 아이콘을 계속 돌리지 않는다는 것을 알게 되었습니다만, 이 문제를 어떻게 해결했는지 아는 사람이 있습니까?&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;var xmlHttpReq = false;
// Mozilla/Safari
if (window.XMLHttpRequest) {
   xmlHttpReq = new XMLHttpRequest();
}
// IE
else if (window.ActiveXObject) {
   xmlHttpReq = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
}
xmlHttpReq.open('GET', myURL, true);
xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlHttpReq.onreadystatechange = function() {
   if (xmlHttpReq.readyState == 4) {
      updatePage(xmlHttpReq.responseText);
   }
}
xmlHttpReq.send(null);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 뻔뻔스럽게도 올레그의 테스트 케이스를 훔쳐 롱폴링을 시뮬레이션하기 위해 약간 조정했다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;load.html&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;head&amp;gt;
  &amp;lt;title&amp;gt;Demonstration of the jQery.load problem&amp;lt;/title&amp;gt;
  &amp;lt;script src=&quot;http://code.jquery.com/jquery-latest.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script&amp;gt;
  jQuery(document).ready(function() {
    $('#main').load(&quot;test.php&quot;);
  });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;div id='main'&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;test.php&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
  sleep(5);
?&amp;gt;
&amp;lt;b&amp;gt;OK!&amp;lt;/b&amp;gt;
&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;결과는 흥미롭습니다. Firefox 및 Opera에서는 XMLHTTPRueest 중에 로딩 인디케이터가 표시되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;크롬이 돌게 하고...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Google Wave는 더 이상 긴 폴링을 사용하지 않는 것 같습니다(예를 들어 리소스를 절약하기 위해 X초마다 폴링합니다). 하지만 계정이 없기 때문에 테스트할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;EDIT&lt;strong papago-id=&quot;9-0&quot;&gt;:&lt;/strong&gt; 로딩에 약간의 지연이 더해진 후에 알게 &lt;strong papago-id=&quot;9-0&quot;&gt;되었습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;test.php&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로딩 인디케이터는, 가능한 한 작게 할 수 있습니다.로드 인디케이터는,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;load.html&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 로드되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery(document).ready(function() {
  setTimeout(function () {
    $('#main').load(&quot;test.php&quot;);
  }, 0);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 답변의 &lt;a href=&quot;https://stackoverflow.com/questions/1064782/stop-the-browser-throbber-of-doom-while-loading-comet-server-push-iframe/1066729#comment-894061&quot; papago-id=&quot;12-1&quot;&gt;코멘트에서 확인&lt;/a&gt;되었듯이, 브라우저가 페이지 렌더링을 완료하도록 제어하면 표시기의 회전이 멈춥니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 장점은 를 눌러 요청을 중단할 수 없다는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적인 답변으로 죄송합니다.브라우저에 의존하지 않는 프로그램을 사용하고 싶다면 낮은 수준의 XMLHttpRequest 및 ActiveXObject(&quot;Microsoft&quot;) 대신 jQuery 또는 기타 즐겨찾는 라이브러리를 사용하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;XMLHTTP')를 참조해 주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;14-0&quot;&gt;편집:&lt;/strong&gt; 매우 간단한 HTML 파일 test.htm과 load.htm을 작성하여 웹 사이트의 동일한 디렉토리에 저장합니다(이 URL을 사용해 보십시오.http://www.&lt;a href=&quot;http://www.ok-soft-gmbh.com/jQuery/load/load.htm&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;14-2&quot;&gt;ok-soft-gmbh&lt;/a&gt;.com/jQuery/load/load.htm)).&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;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;load.htm:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html PUBLIC
          &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;
          &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&amp;gt;
&amp;lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&amp;gt;
&amp;lt;head id=&quot;Head&quot;&amp;gt;
  &amp;lt;title&amp;gt;Demonstration of the jQery.load problem&amp;lt;/title&amp;gt;
  &amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&amp;gt;
  &amp;lt;script src=&quot;http://code.jquery.com/jquery-latest.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
  jQuery(document).ready(function() {
    $('#main').load(&quot;test.htm&quot;);
  });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;

&amp;lt;body&amp;gt;
  &amp;lt;div id='main'&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;test.htm:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;b&amp;gt;OK!&amp;lt;/b&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery나 Ajax는 잘 모르겠지만, 스니펫 매니저를 사용하여 Ace Editor에 스니펫을 삽입하는 것과 같은 문제가 있었습니다.&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;.setTimeout()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이치노&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지가 매우 빠르게 로드될 때는 작동하지만, 페이지가 더 느리게 로드될 때는 작동하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 아마 가 아무것도일 것이다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(document).ready()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서 본문 끝에 있는 코드를 호출했을 뿐입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 영원히 회전하는 탭 아이콘의 문제에 대해 찾은 no-jQuery 솔루션입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var tillPageLoaded = setInterval(function() {
    if( document.readyState === 'complete' ) {

        clearInterval(tillPageLoaded);
        // load whatever

    }    
}, 5);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;  경우에는 ★★★★★★★★★★★★★★★★★★★★★★★★★.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;// load whatever&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;ace.config.loadModule('ace/ext/language_tools', function () {
    myEditorInstance.insertSnippet( 'some string' );
});
&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;function getHTTPObject() {
 var xhr = false;
 if (window.XMLHttpRequest) {
  xhr = new XMLHttpRequest();
 } else if (window.ActiveXObject) {
  try {
   xhr = new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;);
  } catch(e) {
   try {
    xhr = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
   } catch(e) {
    xhr = false;
   };
  };
 };
 return xhr;
};
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2703861/&lt;a href=&quot;https://stackoverflow.com/questions/2703861/chromes-loading-indicator-keeps-spinning-during-xmlhttprequest&quot; target=&quot;_blank&quot; papago-id=&quot;24-1&quot;&gt;chromes-loading-indicator-keeps-spinning-during-xmlhttprequest&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ajax</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/931</guid>
      <comments>https://bestcode.tistory.com/931#entry931comment</comments>
      <pubDate>Tue, 14 Feb 2023 20:21:54 +0900</pubDate>
    </item>
    <item>
      <title>데이터를 요청 페이로드가 아닌 폼 데이터로 게시하려면 어떻게 해야 합니까?</title>
      <link>https://bestcode.tistory.com/930</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터를 요청 페이로드가 아닌 폼 데이터로 게시하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 Angular로  있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$http&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「URL」 「xsrf」 「Request Payload」(크롬)&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$.ajax&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;메서드는 동일한 호출을 수행하지만 xsrf를 &quot;폼 데이터&quot;로 전송합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular를 만드는 방법&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS는 xsrf를 요청 페이로드가 아닌 폼 데이터로 제출합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var url = 'http://somewhere.com/';
var xsrf = {fkey: 'xsrf key'};

$http({
    method: 'POST',
    url: url,
    data: xsrf
}).success(function () {});

$.ajax({
    type: 'POST',
    url: url,
    data: xsrf,
    dataType: 'json',
    success: function() {}
});
&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;전달되는 $http 개체에 다음 행을 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
&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;전달된 데이터는 URL 인코딩 문자열로 변환해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; $.param({fkey: &quot;key&quot;})
'fkey=key'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$http({
    method: 'POST',
    url: url,
    data: $.param({fkey: &quot;key&quot;}),
    headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
})
&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;송신원: https://&lt;a href=&quot;https://groups.google.com/forum/#!msg/angular/5nAedJ1LyO0/4Vj_72EZcDsJ&quot; papago-id=&quot;8-1&quot; rel=&quot;noreferrer&quot;&gt;groups&lt;/a&gt;.google.com/forum/ &lt;a href=&quot;https://groups.google.com/forum/#!msg/angular/5nAedJ1LyO0/4Vj_72EZcDsJ&quot; papago-id=&quot;8-1&quot; rel=&quot;noreferrer&quot;&gt;#!msg/angular/5nAedJ1LyO0/4Vj_72EZcDsJ&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;9&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;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular가 추가된 새 서비스를 사용하려면&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS V1.4, 참조&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/30970229/5535245&quot; papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular만을 사용한 URL 부호화 변수&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS 서비스&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;솔루션에서 jQuery를 사용하지 않으려면 이 방법을 시도해 보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;솔루션은 https&lt;a href=&quot;https://stackoverflow.com/a/1714899/1784301&quot; papago-id=&quot;12-1&quot;&gt;://stackoverflow&lt;/a&gt;.com/a/1714899/1784301에서 입수할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$http({
    method: 'POST',
    url: url,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    transformRequest: function(obj) {
        var str = [];
        for(var p in obj)
        str.push(encodeURIComponent(p) + &quot;=&quot; + encodeURIComponent(obj[p]));
        return str.join(&quot;&amp;amp;&quot;);
    },
    data: xsrf
}).success(function () {});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇개 깔끔한 ,  것을 요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.config()&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;angular.display 을 、 출출의의의 의의의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.config(['$httpProvider', function ($httpProvider) {
  // Intercept POST requests, convert to standard form encoding
  $httpProvider.defaults.headers.post[&quot;Content-Type&quot;] = &quot;application/x-www-form-urlencoded&quot;;
  $httpProvider.defaults.transformRequest.unshift(function (data, headersGetter) {
    var key, result = [];

    if (typeof data === &quot;string&quot;)
      return data;

    for (key in data) {
      if (data.hasOwnProperty(key))
        result.push(encodeURIComponent(key) + &quot;=&quot; + encodeURIComponent(data[key]));
    }
    return result.join(&quot;&amp;amp;&quot;);
  });
}]);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular'에서는 JS &lt;font class=&quot;papago-parent&quot;&gt;v1.4.0이 내장되어 있습니다&lt;/font&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$httpParamSerializer&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;a href=&quot;https://code.angularjs.org/1.4.0/docs/api/ng/service/$httpParamSerializer&quot; papago-id=&quot;16-1&quot; rel=&quot;noreferrer&quot;&gt;docs&lt;/a&gt; 페이지에 나열된 규칙에 따라 임의의 개체를 HTTP 요청의 일부로 변환하는 서비스입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$http.post('http://example.com', $httpParamSerializer(formDataObj)).
    success(function(data){/* response status 200-299 */}).
    error(function(data){/* response status 400-999 */});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;투고에 는, 「 」를 참조해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Content-Type&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;헤더를 변경해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 POST 요청에 대해 이를 글로벌하게 수행하려면 다음 코드(Albireo의 반응답에서 가져온 코드)를 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$http.defaults.headers.post[&quot;Content-Type&quot;] = &quot;application/x-www-form-urlencoded&quot;;
&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;headers&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;.request-object 성 property property property 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var req = {
 method: 'POST',
 url: 'http://example.com',
 headers: {
   'Content-Type': 'application/x-www-form-urlencoded'
 },
 data: $httpParamSerializer(formDataObj)
};

$http(req);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동작을 글로벌하게 정의할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$http.defaults.headers.post[&quot;Content-Type&quot;] = &quot;application/x-www-form-urlencoded&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 매번 다시 정의할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$http.post(&quot;/handle/post&quot;, {
    foo: &quot;FOO&quot;,
    bar: &quot;BAR&quot;
}).success(function (data, status, headers, config) {
    // TODO
}).error(function (data, status, headers, config) {
    // TODO
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;회피책으로서 POST를 수신하는 코드가 애플리케이션/json 데이터에 응답하도록 할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHP의 경우 아래 코드를 추가하여 폼 인코딩 또는 JSON으로 POST할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//handles JSON posted arguments and stuffs them into $_POST
//angular's $http makes JSON posts (not normal &quot;form encoded&quot;)
$content_type_args = explode(';', $_SERVER['CONTENT_TYPE']); //parse content_type string
if ($content_type_args[0] == 'application/json')
  $_POST = json_decode(file_get_contents('php://input'),true);

//now continue to reference $_POST vars as usual
&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;$http.post(loginUrl, &quot;userName=&quot; + encodeURIComponent(email) +
                     &quot;&amp;amp;password=&quot; + encodeURIComponent(password) +
                     &quot;&amp;amp;grant_type=password&quot;
).success(function (data) {
//...
&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;$http({
        method: 'POST',
        url: url-post,
        data: data-post-object-json,
        headers: {'Content-Type': 'application/x-www-form-urlencoded'},
        transformRequest: function(obj) {
            var str = [];
            for (var key in obj) {
                if (obj[key] instanceof Array) {
                    for(var idx in obj[key]){
                        var subObj = obj[key][idx];
                        for(var subKey in subObj){
                            str.push(encodeURIComponent(key) + &quot;[&quot; + idx + &quot;][&quot; + encodeURIComponent(subKey) + &quot;]=&quot; + encodeURIComponent(subObj[subKey]));
                        }
                    }
                }
                else {
                    str.push(encodeURIComponent(key) + &quot;=&quot; + encodeURIComponent(obj[key]));
                }
            }
            return str.join(&quot;&amp;amp;&quot;);
        }
    }).success(function(response) {
          /* Do something */
        });
&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;services.service('Http', function ($http) {

    var self = this

    this.post = function (url, data) {
        return $http({
            method: 'POST',
            url: url,
            data: $.param(data),
            headers: {'Content-Type': 'application/x-www-form-urlencoded'}
        })
    }

}) 
&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;ctrls.controller('PersonCtrl', function (Http /* our service */) {
    var self = this
    self.user = {name: &quot;Ozgur&quot;, eMail: null}

    self.register = function () {
        Http.post('/user/register', self.user).then(function (r) {
            //response
            console.log(r)
        })
    }

})
&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;a href=&quot;http://scotch.io/tutorials/javascript/submitting-ajax-forms-the-angularjs-way&quot; papago-id=&quot;29-1&quot;&gt;있습니다&lt;/a&gt;.- &lt;a href=&quot;http://scotch.io/tutorials/javascript/submitting-ajax-forms-the-angularjs-way&quot; papago-id=&quot;29-1&quot;&gt;AJAX &lt;/a&gt;Forms &lt;a href=&quot;http://scotch.io/tutorials/javascript/submitting-ajax-forms-the-angularjs-way&quot; papago-id=&quot;29-1&quot;&gt;제출&lt;/a&gt;:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://scotch.io/tutorials/javascript/submitting-ajax-forms-the-angularjs-way&quot; papago-id=&quot;29-1&quot;&gt; &lt;/a&gt;AngularJS &lt;a href=&quot;http://scotch.io/tutorials/javascript/submitting-ajax-forms-the-angularjs-way&quot; papago-id=&quot;29-1&quot;&gt;웨이&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 폼 데이터를 URL 인코딩된 문자열로 전송함을 나타내도록 POST 요청의 헤더를 설정하고 데이터를 동일한 형식으로 전송하도록 설정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$http({
  method  : 'POST',
  url     : 'url',
  data    : $.param(xsrf),  // pass in data as strings
  headers : { 'Content-Type': 'application/x-www-form-urlencoded' }  // set the headers so angular passing info as form data (not request payload)
});
&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;여기서 jQuery의 param() 도우미 함수는 데이터를 문자열로 직렬화하기 위해 사용되지만 jQuery를 사용하지 않는 경우에도 수동으로 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;var fd = new FormData();
    fd.append('file', file);
    $http.post(uploadUrl, fd, {
        transformRequest: angular.identity,
        headers: {'Content-Type': undefined}
    })
    .success(function(){
    })
    .error(function(){
    });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;꼭 체크 아웃해주세요!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://uncorkedstudios.com/blog/multipartformdata-file-upload-with-angularjs&quot; rel=&quot;noreferrer&quot; papago-id=&quot;32-1&quot;&gt;https://uncorkedstudios.com/blog/multipartformdata-file-upload-with-angularjs&lt;/a&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;Symfony2 사용자의 경우:&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;이를 위해 Javascript에서 아무것도 변경하지 않으려면 symfony 앱에서 다음과 같이 수정할 수 있습니다.&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;Symfony\Component\를 확장하는 클래스를 만듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;HttpFoundation\Request 클래스:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

namespace Acme\Test\MyRequest;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\ParameterBag;

class MyRequest extends Request{


/**
* Override and extend the createFromGlobals function.
* 
* 
*
* @return Request A new request
*
* @api
*/
public static function createFromGlobals()
{
  // Get what we would get from the parent
  $request = parent::createFromGlobals();

  // Add the handling for 'application/json' content type.
  if(0 === strpos($request-&amp;gt;headers-&amp;gt;get('CONTENT_TYPE'), 'application/json')){

    // The json is in the content
    $cont = $request-&amp;gt;getContent();

    $json = json_decode($cont);

    // ParameterBag must be an Array.
    if(is_object($json)) {
      $json = (array) $json;
  }
  $request-&amp;gt;request = new ParameterBag($json);

}

return $request;

}

}
&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;이제 app_dev.php(또는 사용하는 인덱스 파일)의 클래스를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// web/app_dev.php

$kernel = new AppKernel('dev', true);
// $kernel-&amp;gt;loadClassCache();
$request = ForumBundleRequest::createFromGlobals();

// use your class instead
// $request = Request::createFromGlobals();
$response = $kernel-&amp;gt;handle($request);
$response-&amp;gt;send();
$kernel-&amp;gt;terminate($request, $response);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Content-Type을 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 내내 전전 url이 url url 인인인 。&lt;/font&gt;&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;$http.post(url, jQuery.param(data))&lt;/code&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;현재 Angular에서 &lt;a href=&quot;https://groups.google.com/forum/#!topic/angular/Qrn0gyjRrkg/discussion&quot; rel=&quot;nofollow&quot; papago-id=&quot;38-1&quot;&gt;찾은&lt;/a&gt; 다음 솔루션을 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS 구글 그룹&lt;/font&gt;&lt;/p&gt; 
&lt;pre papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$140&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;.postflash/module/json/', 'json=' + 인코딩&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;요동성분(각선)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ToJson(데이터), {&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;헤더: {&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;'Content-Type': 'application/x-www-form-urlencoded; charset=&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;UTF-8'&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;$125.data = 데이터;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;});&lt;/font&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 2 컴포넌트의 와 같은 것을 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Request::createFromGlobals()&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;$_POST는 POST를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AngularJS는 http-request 헤더 내에서 다음 content-type을 수행하므로 올바르게 동작하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Content-Type: application/json
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저와 같은 php를 사용하시거나 Symfony2를 사용하시더라도, 여기 기술된 바와 같이 json 표준에 대한 서버 호환성을 간단히 확장할 수 있습니다.http://silex.sensiolabs.org/doc/cookbook/&lt;a href=&quot;http://silex.sensiolabs.org/doc/cookbook/json_request_body.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;43-1&quot;&gt;json_request_body&lt;/a&gt;.html&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Symfony2 방법(예: Default Controller 내부):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$request = $this-&amp;gt;getRequest();
if (0 === strpos($request-&amp;gt;headers-&amp;gt;get('Content-Type'), 'application/json')) {
    $data = json_decode($request-&amp;gt;getContent(), true);
    $request-&amp;gt;request-&amp;gt;replace(is_array($data) ? $data : array());
}
var_dump($request-&amp;gt;request-&amp;gt;all());
&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;장점은 jQuery param을 사용할 필요가 없고 Angular를 사용할 수 있다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS는 이러한 요청을 수행하는 네이티브 방식입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;완전한 답변(각 1.4 이후).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;de de de dependency $httpParamSerializer를 포함해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var res = $resource(serverUrl + 'Token', { }, {
                save: { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }
            });

            res.save({ }, $httpParamSerializer({ param1: 'sdsd', param2: 'sdsd' }), function (response) {

            }, function (error) { 

            });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱 구성에서 -&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$httpProvider.defaults.transformRequest = function (data) {
        if (data === undefined)
            return data;
        var clonedData = $.extend(true, {}, data);
        for (var property in clonedData)
            if (property.substr(0, 1) == '$')
                delete clonedData[property];

        return $.param(clonedData);
    };
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자원 요청 시 -&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
            }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 직접적인 답변이 아니라 약간 다른 디자인 방향입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터를 폼으로 게시하지 않고 서버 측 개체에 직접 매핑할 JSON 개체로 게시하거나 REST 스타일 경로 변수를 사용하십시오.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XSRF 키를 전달하려고 하기 때문에 두 옵션 모두 적합하지 않을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 경로 변수에 매핑하는 것은 끔찍한 설계입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;http://www.someexample.com/xsrf/{xsrfKey}
&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;왜냐하면 원래 xsrf 키를 다른 경로에도 전달하고 싶기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/login&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;/book-appointment&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예쁜 URL을 망치고 싶지 않은 경우 등입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;흥미롭게도 오브젝트 필드로 추가하는 것도 적절하지 않습니다.서버에 전달하는 각 json 오브젝트에서 필드를 추가해야 하기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{
  appointmentId : 23,
  name : 'Joe Citizen',
  xsrf : '...'
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도메인 개체와 직접적인 의미 관계가 없는 다른 필드를 서버측 클래스에 추가하고 싶지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각에 xsrf 키를 전달하는 가장 좋은 방법은 HTTP 헤더를 사용하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 xsrf 보호 서버 측 웹 프레임워크 라이브러리가 이를 지원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://docs.spring.io/spring-security/site/docs/3.2.5.RELEASE/reference/htmlsingle/#csrf-include-csrf-token&quot; papago-id=&quot;57-1&quot; rel=&quot;nofollow&quot;&gt;예&lt;/a&gt;를 들어 &lt;a href=&quot;http://docs.spring.io/spring-security/site/docs/3.2.5.RELEASE/reference/htmlsingle/#csrf-include-csrf-token&quot; papago-id=&quot;57-1&quot; rel=&quot;nofollow&quot;&gt;Java &lt;/a&gt;Spring에서는 헤더를 &lt;a href=&quot;http://docs.spring.io/spring-security/site/docs/3.2.5.RELEASE/reference/htmlsingle/#csrf-include-csrf-token&quot; papago-id=&quot;57-1&quot; rel=&quot;nofollow&quot;&gt;사용하여 전달&lt;/a&gt;할 수 &lt;a href=&quot;http://docs.spring.io/spring-security/site/docs/3.2.5.RELEASE/reference/htmlsingle/#csrf-include-csrf-token&quot; papago-id=&quot;57-1&quot; rel=&quot;nofollow&quot;&gt;있습니다&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;JS 오브젝트를 UI 오브젝트에 바인드하는 Angular의 뛰어난 기능은 폼을 일괄적으로 게시하는 관행을 없애고 대신 JSON을 게시할 수 있다는 것을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JSON은 서버측 오브젝트로 쉽게 디시리얼라이즈 할 수 있으며 맵, 어레이, 네스트된 오브젝트 등 복잡한 데이터 구조를 지원합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;폼 페이로드에 어레이를 게시하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마 이렇게 될 거야:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;shopLocation=downtown&amp;amp;daysOpen=Monday&amp;amp;daysOpen=Tuesday&amp;amp;daysOpen=Wednesday
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;shopLocation=downtwon&amp;amp;daysOpen=Monday,Tuesday,Wednesday
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 다 디자인이 좋지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로그인 데이터를 폼 데이터로 API에 전송해야 하고 Javascript Object(userData)가 URL 인코딩 데이터로 자동 변환됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        var deferred = $q.defer();
        $http({
            method: 'POST',
            url: apiserver + '/authenticate',
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
            transformRequest: function (obj) {
                var str = [];
                for (var p in obj)
                    str.push(encodeURIComponent(p) + &quot;=&quot; + encodeURIComponent(obj[p]));
                return str.join(&quot;&amp;amp;&quot;);
            },
            data: userData
        }).success(function (response) {
            //logics
            deferred.resolve(response);
        }).error(function (err, status) {
           deferred.reject(err);
        });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 사용자 데이터는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var userData = {
                grant_type: 'password',
                username: loginData.userName,
                password: loginData.password
            }
&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;$http 개체를 생성할 때 &quot;data&quot;가 아닌 &quot;params&quot; 속성을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$http({
   method: 'POST',
   url: serviceUrl + '/ClientUpdate',
   params: { LangUserId: userId, clientJSON: clients[i] },
})
&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;위의 예에서 clients[i]는 JSON 객체일 뿐입니다(어떤 방법으로도 시리얼화되지 않습니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;data가 아닌 params를 사용하면 angular는 $httpPParamSerializer를 사용하여 개체를 시리얼화합니다.https&lt;a href=&quot;https://docs.angularjs.org/api/ng/service/&quot; papago-id=&quot;65-1&quot; rel=&quot;nofollow&quot;&gt;://&lt;/a&gt;docs.angularjs.org/api/ng/service/$&lt;a href=&quot;https://docs.angularjs.org/api/ng/service/&quot; papago-id=&quot;65-1&quot; rel=&quot;nofollow&quot;&gt;httpParamSerializer&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각도 사용&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$http&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서비스 및 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;post&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;$http&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/11442632/&lt;a href=&quot;https://stackoverflow.com/questions/11442632/how-can-i-post-data-as-form-data-instead-of-a-request-payload&quot; target=&quot;_blank&quot; papago-id=&quot;70-1&quot;&gt;how-can-i-post-data-as-form-data-instead-of-a-request-payload&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ajax</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/930</guid>
      <comments>https://bestcode.tistory.com/930#entry930comment</comments>
      <pubDate>Tue, 14 Feb 2023 20:21:42 +0900</pubDate>
    </item>
    <item>
      <title>componentWillReceiveProps 라이프 사이클 메서드를 사용하는 경우</title>
      <link>https://bestcode.tistory.com/929</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;componentWillReceiveProps 라이프 사이클 메서드를 사용하는 경우&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;React/Redux는 처음이라 상태에 문제가 있습니다.&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;Trail Container.jsx&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class TrajectContainer extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            trajects: props.trajects,
            onClick: props.onClick
        };
    }

    componentWillReceiveProps(nextProps) {
        console.log('componentWillReceiveProps', nextProps);
        this.setState(nextProps);
    }

    render() {
        // When the componentWillReceiveProps is not present, the this.state will hold the old state
        console.log('rerender', this.state);
        return (&amp;lt;div className=&quot;col-md-6&quot;&amp;gt;
            &amp;lt;h2&amp;gt;Trajects&amp;lt;/h2&amp;gt;
            &amp;lt;button className=&quot;btn btn-primary&quot; onClick={this.state.onClick}&amp;gt;Add new Traject&amp;lt;/button&amp;gt;
            {this.state.trajects.map(traject =&amp;gt; &amp;lt;Traject traject={traject} key={traject.name}/&amp;gt;)}
        &amp;lt;/div&amp;gt;)
    }
}

const mapStateToProps = function (store) {
    console.log('mapToStateProps', store);
    return {
        trajects: store.trajects
    };
};

const mapDispatchToProps = function (dispatch, ownProps) {
    return {
        onClick: function () {
            dispatch(addTraject());
        }
    }
};

export default connect(mapStateToProps, mapDispatchToProps)(TrajectContainer);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;환원기가 새 상태를 반환하면 구성 요소가 새 데이터로 다시 렌더링됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단, componentWillReceiveProps 함수를 삭제하면 render() 함수는 오래된 상태가 됩니다.&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;mapStateToProps에서 받은 데이터를 확인해보니 New State입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 렌더 함수가 새로운 데이터를 수신하기 위해 componentWillReceiveProps 함수가 필요한 이유를 모르겠습니다.&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;code&gt;componentWillReceiveProps&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상태 값을 새 소품 값으로 업데이트하려는 경우 이 메서드는 소품 값이 변경될 때마다 호출됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 componentWillReceiveProps 메서드가 필요한 경우&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상태 변수에 소품 값을 저장하고 다음과 같이 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;this.state.KeyName&lt;/code&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&gt;&lt;code&gt;componentWillReceiveProps&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;strong papago-id=&quot;11-1&quot;&gt;자동으로 업데이트되지 않습니다&lt;/strong&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;상태를 갱신하지 않으면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this.state&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에는 항상 초기 데이터가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;componentWillReceiveProps&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;/p&gt; 
&lt;p&gt;&lt;code&gt;this.props.keyName&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 리액트는 항상 렌더 메서드 내에서 업데이트된 소품 값을 사용합니다. 소품에 변경이 생겼을 경우 새 소품으로 구성요소를 다시 렌더링합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;15-1&quot;&gt;&lt;a href=&quot;https://facebook.github.io/react/docs/react-component.html#componentwillreceiveprops&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15-1-0&quot;&gt;델&lt;/a&gt;&lt;/strong&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;componentWillReceiveProps()는 마운트된 컴포넌트가 새로운 소품을 받기 전에 호출됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로포트의 변경에 따라 상태를 갱신할 필요가 있는 경우(예를 들어 리셋), this.props와 nextProps를 비교하여 이를 사용하여 상태 전환을 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;setState()를 지정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;React는 마운트 중에 초기 소품으로 componentWillReceiveProps를 호출하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴포넌트 중 일부가 업데이트될 수 있는 경우에만 이 메서드를 호출합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제안:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this.props&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UI 포 ui ui ui ui ui 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;h1 papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;갱신하다&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;code&gt;componentDidUpdate()&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 componentWillReceiveProps가 아닌&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://overreacted.io/writing-resilient-components/&quot; papago-id=&quot;23-1&quot; rel=&quot;noreferrer&quot;&gt;gaearon&lt;/a&gt; re writing resistant components의 &lt;a href=&quot;https://overreacted.io/writing-resilient-components/&quot; papago-id=&quot;23-1&quot; rel=&quot;noreferrer&quot;&gt;기사도&lt;/a&gt; 참조한다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에는 두 가지 잠재적인 문제가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스토어에서 값을 끌어와 컴포넌트에 소품으로 반환하기 위해 redux를 사용하고 있는 것을 나타내는 데 소품을 재할당하지 마십시오.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상태를 회피한다는 것은 컨스트럭터나 라이프 사이클 방법이 더 이상 필요하지 않음을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 컴포넌트를 스테이트리스 기능 컴포넌트로 쓸 수 있습니다.이렇게 컴포넌트를 쓰면 퍼포먼스가 향상됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mapDispatcahToProps를 전달하고 있기 때문에 디스패치로 액션을 랩할 필요는 없습니다.&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;/ol&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래는 컴포넌트에서 상태를 삭제하고 redux 스토어에서 반환된 상태에 의존하는 코드 스니펫입니다.&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;import React from &quot;react&quot;;
import { connect } from &quot;react-redux&quot;;

const TrajectContainer = ({ trajects, addTraject }) =&amp;gt; (
	&amp;lt;div className=&quot;col-md-6&quot;&amp;gt;
		&amp;lt;h2&amp;gt;Trajects&amp;lt;/h2&amp;gt;
		&amp;lt;button className=&quot;btn btn-primary&quot; onClick={addTraject}&amp;gt;Add new Traject&amp;lt;/button&amp;gt;
		{trajects.map(traject =&amp;gt; &amp;lt;Traject traject={traject} key={traject.name} /&amp;gt;)}
	&amp;lt;/div&amp;gt;
);

const mapStateToProps = ({ trajects }) =&amp;gt; ({ trajects });

export default connect( mapStateToProps, { addTraject })(TrajectContainer);&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;componentWillReceiveProps&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 소품을 받을 때 상태를 업데이트해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;와 같이 시는 your your your your your를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;state&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;componentWillReceiveProps&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;★★★★★★★★★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;this.state = {
    trajects: props.trajects,
    onClick: props.onClick
};
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&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;componentWillReceiveProps&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이치노&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 변경 내용이 구성 요소 상태로 변경되도록 상태를 다시 설정해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 당신의 논리는 다음과 같아야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 번 호출된 경우 상태 업데이트를 반복하지 않도록 하는 조건입니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;componentWillReceiveProps(nextProps) {
 console.log('componentWillReceiveProps', nextProps);
 if (this.props !== nextProps) {
  this.setState(nextProps);
 }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소품 내용을 수정하는 경우에만 소품을 보관해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 당신의 경우 수정이 없다는 것을 알 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 바로 하실 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this.props.trajects&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;직접 저장할 필요 없이 직접 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 하면 이 문제를  수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;componentWillReceiveProps&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;pre&gt;&lt;code&gt;{this.props.trajects.map(traject =&amp;gt; //what ever is your code.... }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도 비슷한 요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;withRouter()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;음음음같 뭇매하다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;export default withRouter(connect(mapStateToProps, mapDispatchToProps)(TrajectContainer));
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구현의 문제는 Redux 스토어 상태(소품에서 변환)를 리액트 상태(this.state)로 복제하는 것입니다.&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;store.trajects&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;this.props.traject&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 경우에만 렌더가 트리거되고 갱신됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this.props.traject&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 렌더 메서드에서 사용됩니다(대/소문자가 아님).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;렌더링 메서드에서 프롭 대신 상태를 사용하기 때문에 다음을 사용하여 컴포넌트 상태를 수동으로 변경해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this.setState&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;렌더링을 트리거합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 좋은 패턴이 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;국가를 사용하지 말고 다음과 같은 소품을 직접 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class TrajectContainer extends React.Component {
    render() {
        return (&amp;lt;div className=&quot;col-md-6&quot;&amp;gt;
            &amp;lt;h2&amp;gt;Trajects&amp;lt;/h2&amp;gt;
            &amp;lt;button className=&quot;btn btn-primary&quot; onClick={this.props.onClick}&amp;gt;Add new Traject&amp;lt;/button&amp;gt;
        {this.props.trajects.map(traject =&amp;gt; &amp;lt;Traject traject={traject} key={traject.name}/&amp;gt;)}
    &amp;lt;/div&amp;gt;)
}
}
const mapStateToProps = function (store) {
  console.log('mapToStateProps', store);
  return {
    trajects: store.trajects
  };
};

const mapDispatchToProps = function (dispatch, ownProps) {
   return {
      onClick: function () {
        dispatch(addTraject());
      }
  }
};

export default connect(mapStateToProps, mapDispatchToProps)(TrajectContainer)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/46113044/&lt;a href=&quot;https://stackoverflow.com/questions/46113044/when-to-use-componentwillreceiveprops-lifecycle-method&quot; target=&quot;_blank&quot; papago-id=&quot;50-1&quot;&gt;when-to-use-componentwillreceiveprops-lifecycle-method&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ReactJS</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/929</guid>
      <comments>https://bestcode.tistory.com/929#entry929comment</comments>
      <pubDate>Tue, 14 Feb 2023 20:21:26 +0900</pubDate>
    </item>
    <item>
      <title>안심 - 응답 JSON을 목록으로 역직렬화</title>
      <link>https://bestcode.tistory.com/928</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안심 - 응답 JSON을 목록으로 역직렬화&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 POJO가 있다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Artwork&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;List&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTTP 응답 본문의 RESTful Web Service에서 JSON 형식의 오브젝트.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;반품된 목록을 분석하는 REST Assured 기반 테스트를 작성하려고 합니다.&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;Response response = get(&quot;/artwork&quot;);
List returnedArtworks = response.getBody().as(List.class)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 반환된 JSON을 다음과 같이 해석하기 위해 Rest Assured를 받을 수 없다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;List&amp;lt;Artwork&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 대신, 저는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;List&amp;lt;LinkedHashMap&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지도는 적절한 구조를 가지고 있다. 즉, 잭슨이 지도할 수 있다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Artwork&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오브젝트입니다만, 수동으로 매핑하는 것은 피하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단일 개체를 다음과 같이 매핑할 경우 모델의 JSON 매핑은 정상입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Artwork returnedArtwork = response.getBody().as(Artwork.class);
&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&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;returnedArtworks&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;~하듯이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;List&amp;lt;Artwork&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;List&amp;lt;Artwork&amp;gt; returnedArtworks = Arrays.asList(response.getBody().as(Artwork[].class));
&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;JSON을 오브젝트 배열로 역직렬화한 후(배열 또는 목록의 JSON 문자열 간에 차이가 없기 때문에) 배열을 목록으로 변환하는 것이 중요합니다.&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;이 솔루션은 버전 3.0.2(io.restured):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  JsonPath jsonPath = RestAssured.given()
     .when()
     .get(&quot;/order&quot;)
     .then()
     .assertThat()
     .statusCode(Response.Status.OK.getStatusCode())
     .assertThat()
     .extract().body().jsonPath();

  List&amp;lt;Order&amp;gt; orders = jsonPath.getList(&quot;&quot;, Order.class);
&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;public class Order {

private String id;

public String getId(){
return id; }

public void setId(String id){
this.id = id;
}


}
&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;지정된 json을 사용하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[ 
{ &quot;id&quot; : &quot;5&quot; }, 
{ &quot;id&quot; : &quot;6&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;구글의 Gson 라이브러리를 사용하면 쉽게 해석할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;List&amp;lt;Artwork&amp;gt;&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;Gson gson = new Gson();
List&amp;lt;Artwork&amp;gt; returnedArtworks = gson.fromJson(jsonStr, new TypeToken&amp;lt;List&amp;lt;Artwork&amp;gt;&amp;gt;(){}.getType());

//* where jsonStr is the response string(Json) receiving from your Restful webservice
&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;rest-assured는 다음 버전을 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Class&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문에 사용되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;java.lang.reflect.Type type; //TODO defines the type.
Response response = get(&quot;/artwork&quot;);
List&amp;lt;Artwork&amp;gt; returnedArtworks = response.getBody().as(type)
&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;type&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수는 사용되는 serialization lib에 따라 달라집니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/21728110/91497&quot; papago-id=&quot;24-1&quot;&gt;Purushotham의 답변&lt;/a&gt;에서 지적된 바와 같이 Gson을 사용한다면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TypeToken&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 class=&quot;papago-parent&quot;&gt;안심할 수 있는 곳에서 직접 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Type type = new TypeToken&amp;lt;List&amp;lt;Artwork&amp;gt;&amp;gt;(){}.getType();
Response response = get(&quot;/artwork&quot;);
List&amp;lt;Artwork&amp;gt; returnedArtworks = response.getBody().as(type)
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Jackson을 사용할 때 해결 방법은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TypeFactory&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;a href=&quot;https://fasterxml.github.io/jackson-databind/javadoc/2.9/com/fasterxml/jackson/databind/type/TypeFactory.html&quot; papago-id=&quot;27-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;adoc&lt;/a&gt;, &lt;a href=&quot;https://github.com/FasterXML/jackson-databind/blob/master/src/main/java/com/fasterxml/jackson/databind/type/TypeFactory.java&quot; papago-id=&quot;27-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;source&lt;/a&gt;) 어느 타입으로 디프로비케이션을 실시할지를 지시하려면 , 다음의 순서에 따릅니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Type type = TypeFactory.defaultInstance().constructCollectionLikeType(ArrayList.class, Artwork.class);
Response response = get(&quot;/artwork&quot;);
List&amp;lt;Artwork&amp;gt; returnedArtworks = response.getBody().as(type)
&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;REST 3.0.2를 통해 어레이에 콘텐츠가 존재하는지 여부를 간단하게 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;when().get(&quot;/artwork&quot;).then().body(&quot;artworks&quot;, hasItem(&quot;some art&quot;);
//or check multiple values in array
when().get(&quot;/artwork&quot;).then().body(&quot;artworks&quot;, hasItems(&quot;some art&quot;, &quot;other art&quot;);
&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;이렇게 하면 JSON을 변환하여 응답 내용을 &lt;a href=&quot;https://github.com/rest-assured/rest-assured/wiki/Usage&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;29-1&quot;&gt;확인&lt;/a&gt;하는 더 많은 예를 나열함으로써 코드가 복잡해지는 것을 피할 수 있습니다.링크&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/21725093/&lt;a href=&quot;https://stackoverflow.com/questions/21725093/rest-assured-deserialize-response-json-as-listpojo&quot; target=&quot;_blank&quot; papago-id=&quot;30-1&quot;&gt;rest-assured-deserialize-response-json-as-listpojo&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>json</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/928</guid>
      <comments>https://bestcode.tistory.com/928#entry928comment</comments>
      <pubDate>Fri, 10 Feb 2023 21:58:10 +0900</pubDate>
    </item>
    <item>
      <title>Azure: MySQL in-app(미리보기)를 사용하는 Wordpress 데이터베이스의 기본 사용자/패스 위치는 어디입니까?</title>
      <link>https://bestcode.tistory.com/927</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Azure: MySQL in-app(미리보기)를 사용하는 Wordpress 데이터베이스의 기본 사용자/패스 위치는 어디입니까?&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;방금 Azure 호스트 WordPress App Service를 시작하고 데이터베이스에 MySQL in-app(미리 보기) 옵션을 선택했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 동일한 환경에서 MySQL 서버를 웹 애플리케이션과 나란히 실행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 MySQL 쿼리를 만드는 방법에 문제가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 호출이 PDO 문의 형태로 되어 있는 다른 PHP 프로젝트의 코드를 다음과 같이 재사용하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;try {
    $db = new PDO('mysql:host=localhost;dbname=localdb;charset=utf8',
                    'user',
                    'pass');
    $db-&amp;gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
    $db-&amp;gt;setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
catch(PDOException $ex) {
    echo &quot;did not connect...&quot;;
}

$sth = $db-&amp;gt;prepare(&quot;SELECT *FROM MyTable;&quot;);
$sth-&amp;gt;execute();
&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;MySQL in-app(미리보기)의 PHPMyAdmin 사이드 패널은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ByBOg.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ByBOg.jpg&quot; alt=&quot;MySQL 인앱 미리보기용 PHPyAdmin 사이드 패널&quot; papago-attr-id=&quot;1&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;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KFWoJ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KFWoJ.jpg&quot; alt=&quot;PHPMyAdmin 사용자 계정&quot; papago-attr-id=&quot;2&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 사용자 및 패스를 사용해야 할지, 심지어 어떤 사용자 및 패스를 사용해야 할지 망설여집니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;localdb&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 워드프레스 테이블이 나열됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대체적으로 PDO 문을 사용하여 데이터베이스에서 정보를 가져오려고 할 뿐인데, 어떻게 해야 하는지 알아야 합니다.&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;D:\home\data\mysql\MYSQLCONNSTR_localdb.txt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 파일은 Kudu 디버깅콘솔에서 찾을 수 있습니다.이 콘솔은 다음 사이트를 통해 액세스 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;https://&amp;lt;yourwebsitename&amp;gt;.scm.azurewebsites.net/DebugConsole&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;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 내용은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Database=localdb;Data Source=127.0.0.1:54306;User Id=azure;Password=6#vWHD_$
&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;다음은 PDO를 사용하여 MySQL in-app에 연결하는 샘플 코드 조각입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$dsn = 'mysql:dbname=localdb;host=127.0.0.1:54306;charset=utf8';
$user = 'azure';
$password = '6#vWHD_$';

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

echo &quot;Success: A proper connection to MySQL was made!&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;h2 papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중요 업데이트:&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://social.msdn.microsoft.com/Forums/azure/en-US/4c582216-bc1b-48b0-b80b-87ae540c3d05/&lt;a href=&quot;https://social.msdn.microsoft.com/Forums/azure/en-US/4c582216-bc1b-48b0-b80b-87ae540c3d05/php-azure-mysql-inapp-changed-ports-randomly&quot; rel=&quot;noreferrer&quot; papago-id=&quot;16-1&quot;&gt;php-azure-mysql-inapp-changed-ports-randomly &lt;/a&gt;에서&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;VM은 여러 개의 WebApp을 호스트할 수 있으므로 여러 개의 MySQL 프로세스를 실행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySql 프로세스를 시작할 때 이전과 동일한 포트를 사용하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 다른 서비스 또는 다른 앱 내 MySQL에서 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 결과 포트가 변경될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 웹 앱을 VM 간에 이동할 수 있으며 사용 가능한 포트 집합이 다릅니다.&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;안정적인 클라이언트 앱을 작성하려면 env 변수에서 연결 정보를 읽어보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;상세한 것에 대하여는, 여기를 &lt;a href=&quot;https://github.com/projectkudu/kudu/wiki#where-can-i-find-mysql-credentials-connection-string&quot; rel=&quot;noreferrer&quot; papago-id=&quot;18-1&quot;&gt;참조&lt;/a&gt;해 주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 다음과 같이 PHP의 env 변수에서 연결 문자열을 가져옵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$connectstr_dbhost = '';
$connectstr_dbname = '';
$connectstr_dbusername = '';
$connectstr_dbpassword = '';

foreach ($_SERVER as $key =&amp;gt; $value) {
    if (strpos($key, &quot;MYSQLCONNSTR_localdb&quot;) !== 0) {
        continue;
    }
    
    $connectstr_dbhost = preg_replace(&quot;/^.*Data Source=(.+?);.*$/&quot;, &quot;\\1&quot;, $value);
    $connectstr_dbname = preg_replace(&quot;/^.*Database=(.+?);.*$/&quot;, &quot;\\1&quot;, $value);
    $connectstr_dbusername = preg_replace(&quot;/^.*User Id=(.+?);.*$/&quot;, &quot;\\1&quot;, $value);
    $connectstr_dbpassword = preg_replace(&quot;/^.*Password=(.+?)$/&quot;, &quot;\\1&quot;, $value);
}
&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;[ Configuration ](설정)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름 = defaultConnection Value = Database= your_database;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 소스=your_website.mysql.database.azure.com;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 ID=your_username;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;비밀번호=your_password&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;그리고 수레쉬42326은 효과가 있었다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 azurewebsites.net을 방문하면 문제가 해결되었습니다.그 후 scm.azurewebsites.net/phpmyadmin,을 검색하면 패스워드가 묻지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/projectkudu/kudu/issues/2238#issuecomment-427358981&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/projectkudu/kudu/issues/2238#issuecomment-427358981&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;/*Add at the begining of the file
if you want to connect to custom database then fill this variable  $connectstr_dbname = 'MY_CUSTOM_DB'; and comment or remove  $connectstr_dbname = preg_replace(&quot;/^.*Database=(.+?);.*$/&quot;, &quot;\\1&quot;, $value); from below code...
*/

$connectstr_dbhost = '';
$connectstr_dbname = '';
$connectstr_dbusername = '';
$connectstr_dbpassword = '';

foreach ($_SERVER as $key =&amp;gt; $value) {
    if (strpos($key, &quot;MYSQLCONNSTR_localdb&quot;) !== 0) {
        continue;
    }

    $connectstr_dbhost = preg_replace(&quot;/^.*Data Source=(.+?);.*$/&quot;, &quot;\\1&quot;, $value);
    $connectstr_dbname = preg_replace(&quot;/^.*Database=(.+?);.*$/&quot;, &quot;\\1&quot;, $value);
    $connectstr_dbusername = preg_replace(&quot;/^.*User Id=(.+?);.*$/&quot;, &quot;\\1&quot;, $value);
    $connectstr_dbpassword = preg_replace(&quot;/^.*Password=(.+?)$/&quot;, &quot;\\1&quot;, $value);
}

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', $connectstr_dbname);

/** MySQL database username */
define('DB_USER', $connectstr_dbusername);

/** MySQL database password */
define('DB_PASSWORD', $connectstr_dbpassword);

/** MySQL hostname : this contains the port number in this format host:port . Port is not 3306 when using this feature*/
define('DB_HOST', $connectstr_dbhost);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/41601885/&lt;a href=&quot;https://stackoverflow.com/questions/41601885/azure-where-is-default-user-pass-for-wordpress-database-using-mysql-in-appprev&quot; target=&quot;_blank&quot; papago-id=&quot;25-1&quot;&gt;azure-where-is-default-user-pass-for-wordpress-database-using-mysql-in-appprev&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/927</guid>
      <comments>https://bestcode.tistory.com/927#entry927comment</comments>
      <pubDate>Fri, 10 Feb 2023 21:58:01 +0900</pubDate>
    </item>
    <item>
      <title>onChange-&amp;gt;setState에서 한 단계 늦게 응답합니다.</title>
      <link>https://bestcode.tistory.com/926</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;onChange-&amp;gt;setState에서 한 단계 늦게 응답합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 앱을 빌드하는 중에 이 문제가 발생하여 이 &lt;a href=&quot;http://jsfiddle.net/terda12/270Lf0x9/&quot; papago-id=&quot;1-1&quot;&gt;jsfiddle&lt;/a&gt;에서 복제했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로, 저는 전화할 입력을 원합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this.setState({message: input_val})&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 시마다 부모 앱 클래스로 전달하고 메시지 클래스로 메시지를 다시 렌더링합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 출력은 항상 실제로 입력하는 것보다 한 발 늦는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;jsfiddle 데모는 스스로 설명해야 합니다.&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;html&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;http://facebook.github.io/react/js/jsfiddle-integration.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;div id='app'&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;js&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var App = React.createClass({
    getInitialState: function() {
        return {message: ''}
    },
    appHandleSubmit: function(state) {
        this.setState({message: state.message});
        console.log(this.state.message);
    },
    render: function() {
        return (
            &amp;lt;div className='myApp'&amp;gt;
            &amp;lt;MyForm onChange={this.appHandleSubmit}/&amp;gt;
            &amp;lt;Message message={this.state.message}/&amp;gt;
            &amp;lt;/div&amp;gt;
        );
    }
});

var MyForm = React.createClass({
    handleSubmit: function() {
        this.props.onChange(this.state);
    },
    handleChange: function(e) {
        console.log(e.target.value);
        this.setState({message: e.target.value});
        this.handleSubmit();
    },
    render: function() {
        return (
            &amp;lt;form className=&quot;reactForm&quot; onChange={this.handleChange}&amp;gt;
            &amp;lt;input type='text' /&amp;gt;
            &amp;lt;/form&amp;gt;
        );
    }
});

var Message = React.createClass({
    render: function() {
        return (
            &amp;lt;div className=&quot;message&quot;&amp;gt;
                &amp;lt;p&amp;gt;{this.props.message}&amp;lt;/p&amp;gt;
            &amp;lt;/div&amp;gt;
        )
    }
});

React.render(
    &amp;lt;App /&amp;gt;,
    document.getElementById('app')
);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에의 문의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setState&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동기화되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 &quot;보류 중 상태 전이&quot;가 생성됩니다(자세한 내용은 여기를 &lt;a href=&quot;http://facebook.github.io/react/docs/component-api.html#setstate&quot; papago-id=&quot;6-1&quot; rel=&quot;noreferrer&quot;&gt;참조&lt;/a&gt;하십시오).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 새로운 것을 명시적으로 통과시켜야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;input&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;handleSubmit&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 papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://jsfiddle.net/wiredprairie/hmcu56vh/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;이&lt;/a&gt; 예를 참조해 주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;handleSubmit: function(txt) {
    this.props.onChange(txt);
},
handleChange: function(e) {
    var value = e.target.value;
    this.setState({message: value});
    this.handleSubmit(value);
},
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;훨씬 더 간단한 방법이 있어요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setState(updater, callback)&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;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;12-1&quot;&gt;handleSubmit&lt;/strong&gt;을 &lt;strong papago-id=&quot;12-3&quot;&gt;setState&lt;/strong&gt; 메서드에 콜백으로 전달하기만 하면 setState가 완료된 후 &lt;strong papago-id=&quot;12-5&quot;&gt;handleSubmit&lt;/strong&gt;만 실행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들면.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;handleChange: function(e) {
    console.log(e.target.value);
    this.setState({message: e.target.value}, this.handleSubmit);
}
&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;위와 같이 handleChange() 메서드를 변경해 보면 동작합니다.&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;em papago-id=&quot;15-1&quot;&gt;setState&lt;/em&gt; 를 사용하는 구문에 대해서는, 이 &lt;a href=&quot;https://facebook.github.io/react/docs/react-component.html#setstate&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15-3&quot;&gt;링크&lt;/a&gt;를 참조해 주세요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;setState 훅 포함&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;useEffect(() =&amp;gt; {
    your code...
}, [yourState]);
&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;b papago-id=&quot;17-1&quot;&gt;마십시오&lt;/b&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 건네줘.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;신참 실수.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;b papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오른쪽:&lt;/font&gt;&lt;/b&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;handleChange: function(e) {
    console.log(e.target.value);
    this.setState({message: e.target.value}, this.handleSubmit);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;b papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;틀렸다:&lt;/font&gt;&lt;/b&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;handleChange: function(e) {
    console.log(e.target.value);
    this.setState({message: e.target.value}, this.handleSubmit());
}
&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;My Form이 여기서 state를 사용할 이유가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 관심 있는 입력 대신 onChange를 양식에 넣는 것도 이상합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제어된 구성 요소는 동작이 더 명확하고 앱의 메시지 상태가 변경될 때마다(예: 메시지를 나중에 변경하도록 허용하더라도) 어디에서나 정확하기 때문에 선호해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것에 의해, 코드의 단축과 대폭적인 심플화도 실현됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var App = React.createClass({
    getInitialState: function() {
        return {message: ''}
    },
    appHandleSubmit: function(message) {
        this.setState({message: message});
    },
    render: function() {
        return (
            &amp;lt;div className='myApp'&amp;gt;
                &amp;lt;MyForm onChange={this.appHandleSubmit} 
                        message={this.state.message} /&amp;gt;
                &amp;lt;Message message={this.state.message}/&amp;gt;
            &amp;lt;/div&amp;gt;
        );
    }
});

var MyForm = React.createClass({
    handleInputChange: function(e){
        this.props.onChange(e.target.value);
    },
    // now always in sync with the parent's state
    render: function() {
        return (
            &amp;lt;form className=&quot;reactForm&quot;&amp;gt;
                &amp;lt;input type='text' onChange={this.handleInputChange}
                       value={this.props.message} /&amp;gt;
            &amp;lt;/form&amp;gt;
        );
    }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsbin.com/jazebigipe/2/edit?js,output&quot; rel=&quot;nofollow&quot; papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jsbin&lt;/font&gt;&lt;/a&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;setState의 &lt;strong papago-id=&quot;24-1&quot;&gt;비동기 동작&lt;/strong&gt;이 없는 것이 문제라는 것을 알고 &lt;strong papago-id=&quot;24-3&quot;&gt;비동기&lt;/strong&gt; 대기에서 문제를 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;onChangeEmail=async x =&amp;gt;{
await this.setState({email:x})
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스 기반 컴포넌트를 다른 사용자가 언급한 기능 컴포넌트로 리팩터링할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단점은 리팩터링해야 하는 코드 라인의 수에 따라 시간이 많이 걸리고 오류가 발생하기 쉽다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;changeHandler&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능 컴포넌트에서 어떻게 실행할 수 있는지 보여줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const INITIAL_DATA = {
  message: &quot;&quot;
}
    
const [form, setForm] = useState({...INITIAL_DATA})

const changeHandler = (e) = setForm({
  ...form,
  [e.target.name]: e.target.value
})

&amp;lt;InputField name={message} value={form.message} onChange={changeHandler}&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;^ 는 ^ &quot;&quot;가 &quot;onChange&quot; 1 &quot;onChange&quot;보다 한 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setState&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 말한 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setState&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 '이렇게'를하세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;useEffect&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;훅: 상태 의존성을 도입할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★★.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setState&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;useEffect&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;발사될 것이다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 위의 코드에 다음 사항을 추가하면 BAM은 단계 지연 없이 상태 변화를 표시합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;useEffect(() =&amp;gt; {
  doSomeValidationHere()
  orSendOffTheForm()
}, [form])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;*  「 」 the 、 「 」 、 「 」 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;useEffect(() =&amp;gt; {})&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&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;37&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;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의존관계 어레이가 비어 있는 경우 컴포넌트 마운트 및 첫 번째 렌더에서만 실행됩니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열이 없는 경우 페이지가 렌더링될 때마다 실행됩니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어레이에 상태 이름이 있는 경우 해당 상태 설정이 완료될 때마다 실행됩니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;41&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;방금 원하는 값을 저장한 컴포넌트에 추가 속성을 정의했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 이렇게 생긴 코드를 갖게 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//...
},
text: '',
handleChange: function(event) {
  this.text = event.target.value;
  this.forceUpdate();
},
render: function() {
    return &amp;lt;div&amp;gt;
      &amp;lt;InputComponent onChange={this.handleChange}/&amp;gt;
      &amp;lt;DisplayComponent textToDisplay={this.text}/&amp;gt;
      &amp;lt;/div&amp;gt;
}
//...
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 경우처럼 다운이 아닌 onKeyUp을 사용하면...&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에 언급된 몇 가지 해결책과 몇 가지 문제가 있지만, &lt;strong papago-id=&quot;44-1&quot;&gt;ajsaule&lt;/strong&gt;이 올바른 응답자입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 TypeScript에 내 코드를 표시하는 예입니다. 예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    // solve the problem: setstate always one step behind
    useEffect(() =&amp;gt; { isFormValid(fields, setFieldsError) }, [fields])
    const handleChange = (field: string ) =&amp;gt; (evt: React.ChangeEvent&amp;lt;HTMLInputElement&amp;gt;) =&amp;gt; {
        setFields({ ...fields, [field]: evt.target.value })
    }


const isFormValid = (fields: FieldsState, setFieldsError: React.Dispatch&amp;lt;React.SetStateAction&amp;lt;TempObj&amp;gt;&amp;gt;) =&amp;gt; {
    const tempObj: TempObj = {}
    const { email, password } = fields

    if( !isEmail(email) ) tempObj.email = 'Invalid Email Address'
    if( password.length &amp;lt; 8 ) tempObj.password = 'password must by atleast 8 character long'

    Object.keys(fields).forEach(field =&amp;gt; {
        if(!fields[field as keyof FieldsState]) tempObj[field] = `'${field}' is emapty`
    })
    setFieldsError(tempObj)

    return Object.values(tempObj).every( item =&amp;gt; item == '' )
}
&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;URL : https://stackoverflow.com/questions/28773839/&lt;a href=&quot;https://stackoverflow.com/questions/28773839/react-form-onchange-setstate-one-step-behind&quot; target=&quot;_blank&quot; papago-id=&quot;45-1&quot;&gt;react-form-onchange-setstate-one-step-behind&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ReactJS</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/926</guid>
      <comments>https://bestcode.tistory.com/926#entry926comment</comments>
      <pubDate>Fri, 10 Feb 2023 21:57:52 +0900</pubDate>
    </item>
    <item>
      <title>송신하기 전에 연락처 폼7에 접속하는 방법</title>
      <link>https://bestcode.tistory.com/925</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;송신하기 전에 연락처 폼7에 접속하는 방법&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;연락 양식 7과 대화하고 싶은 플러그인이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;플러그인에서 다음 액션을 추가했습니다.add_action&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_action(&quot;wpcf7_before_send_mail&quot;, &quot;wpcf7_do_something_else&quot;);

function wpcf7_do_something_else(&amp;amp;$wpcf7_data) {

    // Here is the variable where the data are stored!
    var_dump($wpcf7_data);

    // If you want to skip mailing the data, you can do it...
    $wpcf7_data-&amp;gt;skip_mail = true;

}
&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;컨택 폼을 제출했지만 add_action은 아무것도 하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Contact Form 7에서 작업을 수행할 때 플러그인을 가로채거나 작업을 수행하는 방법을 잘 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니, 어떻게 하는지 도와줄까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이메일이 전송되지 않도록 해야 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 됐으면 좋겠다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/*
    Prevent the email sending step for specific form
*/
add_action(&quot;wpcf7_before_send_mail&quot;, &quot;wpcf7_do_something_else&quot;);  
function wpcf7_do_something_else($cf7) {
    // get the contact form object
    $wpcf = WPCF7_ContactForm::get_current();

    // if you wanna check the ID of the Form $wpcf-&amp;gt;id

    if (/*Perform check here*/) {
        // If you want to skip mailing the data, you can do it...  
        $wpcf-&amp;gt;skip_mail = true;    
    }

    return $wpcf;
}
&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;이 코드는 몇 달 전 코드를 리팩터링하기 위해 사용하던 최신 버전의 CF7을 실행하고 있는 것을 전제로 하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;4-1&quot;&gt;[2015년 4월 28일]&lt;/strong&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;WPCF7 5.2 이후로는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wpcf7_before_send_mail&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;훅이 많이 바뀌었어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고로 5.2+에서 이 훅을 사용하는 방법은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메일 건너뛰기&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;function my_skip_mail() {
    return true; // true skips sending the email
}
add_filter('wpcf7_skip_mail','my_skip_mail');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 추가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;skip_mail&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[ Additional Settings ]탭으로 이동합니다.&lt;/font&gt;&lt;/font&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;폼 ID 또는 투고 ID 취득&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;function wpcf7_before_send_mail_function( $contact_form, $abort, $submission ) {

    $post_id = $submission-&amp;gt;get_meta('container_post_id');
    $form_id = $contact_form-&amp;gt;id();

    // do something       

    return $contact_form;
    
}
add_filter( 'wpcf7_before_send_mail', 'wpcf7_before_send_mail_function', 10, 3 );
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 입력 데이터 가져오기&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;function wpcf7_before_send_mail_function( $contact_form, $abort, $submission ) {

    $your_name = $submission-&amp;gt;get_posted_data('your-field-name');

    // do something       

    return $contact_form;
    
}
add_filter( 'wpcf7_before_send_mail', 'wpcf7_before_send_mail_function', 10, 3 );
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동적 수신자에게 전자 메일 보내기&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;function wpcf7_before_send_mail_function( $contact_form, $abort, $submission ) {

    $dynamic_email = 'email@email.com'; // get your email address...

    $properties = $contact_form-&amp;gt;get_properties();
    $properties['mail']['recipient'] = $dynamic_email;
    $contact_form-&amp;gt;set_properties($properties);

    return $contact_form;
    
}
add_filter( 'wpcf7_before_send_mail', 'wpcf7_before_send_mail_function', 10, 3 );
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;덧붙이고 싶은 게 있는데, 그 이유는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wpcf7_skip_mail&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필터:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_filter( 'wpcf7_skip_mail', 'maybe_skip_mail', 10, 2 );

function maybe_skip_mail( $skip_mail, $contact_form ) {

    if( /* your condition */ )
        $skip_mail = true;

    return $skip_mail;

}
&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;CF7 Docs에서 아래를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설정했을 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;demo_mode: on&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[ Additional Settings ]필드에서 연락처 폼이 데모모드가 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 모드에서 연락처 양식은 메일 발송 프로세스를 건너뛰고 응답 메시지로 &quot;완료됨&quot;만 표시합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/29926252/&lt;a href=&quot;https://stackoverflow.com/questions/29926252/how-to-hook-into-contact-form-7-before-send&quot; target=&quot;_blank&quot; papago-id=&quot;18-1&quot;&gt;how-to-hook-into-contact-form-7-before-send&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/925</guid>
      <comments>https://bestcode.tistory.com/925#entry925comment</comments>
      <pubDate>Fri, 10 Feb 2023 21:57:42 +0900</pubDate>
    </item>
    <item>
      <title>MUI에서 체크박스의 색상을 커스터마이즈하려면 어떻게 해야 합니까?</title>
      <link>https://bestcode.tistory.com/924</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MUI에서 체크박스의 색상을 커스터마이즈하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트에서 MUI를 &lt;a href=&quot;http://www.mui.com/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;0-1&quot;&gt;사용&lt;/a&gt;하고 있으며,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Checkbox&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;div&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;검은 바탕에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;근데 안 좋아 보이는 건&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Checkbox&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;code&gt;Checkbox&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 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; &amp;lt;FormControlLabel  
                control={
                  &amp;lt;Checkbox
                    checked={cryon}
                    onChange={this.handleChange('cryon')}
                    style ={{
                      color: &quot;#00e676&quot;,
                    }}
                    value=&quot;cryon&quot;
                  /&amp;gt;
                }
                label={&amp;lt;Typography variant=&quot;h6&quot; style={{ color: '#2979ff' }}&amp;gt;Work&amp;lt;/Typography&amp;gt;}
              /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2biQt.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2biQt.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;1&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&gt;&lt;/font&gt;&lt;code&gt;iconStyle&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단, 체크박스아이콘은 SVG 이미지이기 때문에 색상을 설정할 필요가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fill&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신&lt;/font&gt;&lt;/font&gt;&lt;code&gt;color&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://jsfiddle.net/27Lmaz48/1/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://jsfiddle.net/27Lmaz48/1/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Checkbox label='My checkbox' 
  labelStyle={{color: 'white'}}
  iconStyle={{fill: 'white'}}
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오래된 질문이지만 재료 1.2를 사용하는 사용자를 위한 질문입니다.&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;iconStyle이 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 기존 테마를 덮어쓰고 '체크박스' 컴포넌트를 새 테마로 감싸서 이 작업을 수행했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import { withStyles } from '@material-ui/core/styles';
import Checkbox from '@material-ui/core/Checkbox';



const checkBoxStyles = theme =&amp;gt; ({
    root: {
      '&amp;amp;$checked': {
        color: '#3D70B2',
      },
    },
    checked: {},
   })

const CustomCheckbox = withStyles(checkBoxStyles)(Checkbox);
&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;이제 렌더링 기능에서 &quot;CustomCheckbox&quot; 구성요소를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 체크박스를 켜면 지정한 색상이 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CtV91.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CtV91.png&quot; alt=&quot;예&quot; papago-attr-id=&quot;2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://material-ui.com/customization/theming/&quot; papago-id=&quot;17-1&quot; rel=&quot;noreferrer&quot;&gt;재료 UI&lt;/a&gt; 테마를 &lt;a href=&quot;https://material-ui.com/customization/theming/&quot; papago-id=&quot;17-1&quot; rel=&quot;noreferrer&quot;&gt;사용&lt;/a&gt;할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const theme = createMuiTheme({
  overrides: {
    MuiCheckbox: {
      colorSecondary: {
        color: '#custom color',
        '&amp;amp;$checked': {
          color: '#custom color',
        },
      },
    },
  },
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/mui-org/material-ui/issues/13895#issuecomment-447648634&quot; rel=&quot;noreferrer&quot; papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서부터 맡다&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;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;const styles = () =&amp;gt; ({
  root: {
    &quot;&amp;amp;$checked&quot;: {
      color: &quot;rgba(0, 0, 0, 0.54)&quot;
    }
  },
  checked: {}
})
&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;Checkbox
          checked={checked}
          classes={{
            root: classes.root,
            checked: classes.checked
          }}
          onChange={handleCheckBox}
        /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 다른 사람들에게 도움이 되기를 바란다&lt;/font&gt;&lt;/p&gt;&lt;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;ol&gt; 
 &lt;li papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;로컬&quot;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&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;Check Box에는 소품이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;labelStyle&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;iconStyle&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 우선 조정부터 시작할 수 있을 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Checkbox
  label=&quot;Custom icon&quot;
  labelStyle={{color: 'white'}}
  iconStyle={{color: 'white'}}
/&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;충분한지 모르겠으니 Checkbox의 &lt;a href=&quot;http://www.material-ui.com/#/components/checkbox&quot; papago-id=&quot;27-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;다른&lt;/a&gt; &quot;&lt;a href=&quot;http://www.material-ui.com/#/components/checkbox&quot; papago-id=&quot;27-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Style&lt;/a&gt;&quot; &lt;a href=&quot;http://www.material-ui.com/#/components/checkbox&quot; papago-id=&quot;27-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;소품&lt;/a&gt;을 가지고 놀아야 할 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름에 &quot;스타일&quot;이 있는 모든 항목을 체크 아웃합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li papago-id=&quot;28&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;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;체크박스에만 영향을 주는 몇 가지 테마 설정을 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yp4Vx.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yp4Vx.png&quot; alt=&quot;확인란 테마 설정&quot; papago-attr-id=&quot;3&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;storybook-addon-material-ui&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데모 &lt;a href=&quot;https://sm-react.github.io/react-theming/?theme-ind=0&amp;amp;theme-sidebar=true&amp;amp;theme-full=true&amp;amp;selectedKind=Material-UI&amp;amp;selectedStory=Components&amp;amp;full=0&amp;amp;down=1&amp;amp;left=1&amp;amp;panelRight=0&amp;amp;downPanel=sm%2Fstorybook-addon-material-ui%2Fmaterial-panel&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;13-1&quot;&gt;페이지&lt;/a&gt;를 클릭하여 테마를 만들고 다운로드합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 테이블 헤더 체크박스를 변경하기만 하면 되는데, 이 체크박스는 저에게 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.thsvg svg{
  fill: white !important;
}


&amp;lt;TableHeader
   className=&quot;thsvg&quot;
    displaySelectAll={true}
    adjustForCheckbox={true}
    enableSelectAll={true}&amp;gt;
  &amp;lt;TableRow&amp;gt;     
    &amp;lt;TableHeaderColumn&amp;gt;Name&amp;lt;/TableHeaderColumn&amp;gt;
  &amp;lt;/TableRow&amp;gt;
&amp;lt;/TableHeader&amp;gt;
&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;strong papago-id=&quot;14-1&quot;&gt;MUI v5&lt;/strong&gt; 에서는, 다음의 2개의 바람직한 변경 방법이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Checkbox&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;색상:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://mui.com/system/the-sx-prop/#main-content&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;35-0&quot;&gt;&lt;code papago-id=&quot;35-0-0&quot;&gt;sx&lt;/code&gt;&lt;/a&gt; 받침대&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 단발적인 스타일로 빠르게 설정할 수 있지만 특정 스타일에만 적용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Checkbox&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import Checkbox, { checkboxClasses } from &quot;@mui/material/Checkbox&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Checkbox
  {...props}
  sx={{
    [`&amp;amp;, &amp;amp;.${checkboxClasses.checked}`]: {
      color: 'magenta',
    },
  }}
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;code&gt;color&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;받침대&lt;/font&gt;&lt;/font&gt;&lt;/h2&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;a href=&quot;https://stackoverflow.com/a/69264263/9449426&quot; papago-id=&quot;19-1&quot;&gt;참조&lt;/a&gt;하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;color&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 컴포넌트(예:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Button&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Checkbox&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Radio&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,...)는 오브젝트의 색상 중 하나여야 합니다.이 색상은 취향에 따라 확장할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import { pink, yellow } from &quot;@mui/material/colors&quot;;
import Checkbox, { checkboxClasses } from &quot;@mui/material/Checkbox&quot;;
import { createTheme, ThemeProvider } from &quot;@mui/material/styles&quot;;

const { palette } = createTheme();
const theme = createTheme({
  palette: {
    pinky: palette.augmentColor({ color: pink }),
    summer: palette.augmentColor({ color: yellow })
  }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ThemeProvider theme={theme}&amp;gt;
  {/* pre-defined color */}
  &amp;lt;Checkbox /&amp;gt;
  &amp;lt;Checkbox color=&quot;secondary&quot; /&amp;gt;
  &amp;lt;Checkbox color=&quot;success&quot; /&amp;gt;
  &amp;lt;Checkbox color=&quot;default&quot; /&amp;gt;
  {/* custom color */}
  &amp;lt;Checkbox color=&quot;pinky&quot; /&amp;gt;
  &amp;lt;Checkbox color=&quot;summer&quot; /&amp;gt;
  &amp;lt;Checkbox
&amp;lt;/ThemeProvider&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라이브 데모&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://codesandbox.io/s/41332701-how-can-i-customize-the-color-of-a-checkbox-in-material-ui-hhkd9?file=/demo.js&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://codesandbox.io/static/img/play-codesandbox.svg&quot; alt=&quot;Codesandbox 데모&quot; papago-attr-id=&quot;4&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;관련 답변&lt;/font&gt;&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/a/69264263/9449426&quot; papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커스텀 MUI 팔레트 색상을 추가하는 방법&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;checkBox에는 color라는 속성이 있으며 다음과 같은 &lt;strong papago-id=&quot;47-1&quot;&gt;기본값&lt;/strong&gt;, &lt;strong papago-id=&quot;47-3&quot;&gt;기본&lt;/strong&gt; 또는 &lt;strong papago-id=&quot;47-5&quot;&gt;보조&lt;/strong&gt; 값을 가질 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;Checkbox
   onChange={doSth}
   value=&quot;checkedIncomplete&quot;
   color=&quot;primary&quot;
  /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;primary의 경우 다음과 같은 클래스 CSS를 덮어쓰는 것으로, 간단하게 원색과 secondary 색상을 변경할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.MuiCheckbox-colorPrimary&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;secondary의 경우는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.MuiCheckbox-colorSecondary&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; CSS에서 할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.MuiCheckbox-colorPrimary { color : 'yourColor'}&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;재료의 4.1&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 정의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;color&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;syslog =syslog =syslog =syslog 의 with&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;primary&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Checkbox&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Checkbox color=&quot;primary&quot;...&amp;gt;
&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 class=&quot;papago-parent&quot;&gt;덮어씁니다.material-ui 스타일링을 .&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;합니다.javascript 코드에  합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Checkbox&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.MuiCheckbox-colorPrimary.Mui-checked {
color: #e82997 !important;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MUI 5 테마:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import { checkboxClasses } from '@mui/material/Checkbox';

export const muiTheme = createTheme({
    components: {
        MuiCheckbox: {
            styleOverrides: {
                root: {
                    color: 'blue',
                    [`&amp;amp;.${checkboxClasses.checked}`]: {
                        color: 'blue',
                    },
                },
            },
        },
    },
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;되지 않은 할 수 .를 들어, 체크박스의 아이콘은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;Checkbox checkedIcon={&amp;lt;CustomIcon style={{color:'red'}}/&amp;gt;} icon={&amp;lt;CustomIcon/&amp;gt;} inputProps={{ 'aria-label': 'decorative checkbox' }} {...props} /&amp;gt; &lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 이쪽입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;labelStyle&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;iconStyle&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나중에 색상을 변경할 수 있도록 하려면 다음 작업을 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const useStyles = makeStyles&amp;lt;Theme, {color: string}, &quot;root&quot;&amp;gt;({
    root: {
        color: (props: {color: string}) =&amp;gt; props.color,
    },
})

export default function ColoredCheckbox() {
     const styles = useStyles({color: &quot;#whatevercoloryouwant&quot;})
     return &amp;lt;Checkbox color=&quot;default&quot; className={styles.root} /&amp;gt;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/41332701/&lt;a href=&quot;https://stackoverflow.com/questions/41332701/how-can-i-customize-the-color-of-a-checkbox-in-mui&quot; target=&quot;_blank&quot; papago-id=&quot;63-1&quot;&gt;how-can-i-customize-the-color-of-a-checkbox-in-mui&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ReactJS</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/924</guid>
      <comments>https://bestcode.tistory.com/924#entry924comment</comments>
      <pubDate>Fri, 10 Feb 2023 21:57:35 +0900</pubDate>
    </item>
    <item>
      <title>재료 UI 툴팁을 조건부로 활성화하시겠습니까?</title>
      <link>https://bestcode.tistory.com/923</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;재료 UI 툴팁을 조건부로 활성화하시겠습니까?&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;재료 UI를 사용하여 다음과 같은 React 구성 요소가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const MyButton = ({ warningText }) =&amp;gt; (
    &amp;lt;Tooltip title={warningText}&amp;gt;
        &amp;lt;Button&amp;gt;Do action&amp;lt;/Button&amp;gt;
    &amp;lt;/Tooltip&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;현재 이 화면에는 다음과 같은 빈 툴팁이 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;warningText&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정의되어 있지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 툴팁은 일절 보여주고 싶지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 경우 조건부로 툴팁을 누르는 방법이 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 툴팁 컴포넌트를 렌더링하지 않기 위해 if 문을 사용할 수도 있지만, 제 의견으로는 다소 추악한 코드가 될 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래야 한다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;Tooltip title={warningText == null ? &quot;&quot; : warningText}&amp;gt;
        &amp;lt;Button&amp;gt;Do action&amp;lt;/Button&amp;gt;
 &amp;lt;/Tooltip&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열 길이가 0이면 표시되지 않는다고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://material-ui.com/api/tooltip/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://material-ui.com/api/tooltip/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;툴팁 제목&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제로 길이의 타이틀 문자열은 표시되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;strong papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커스터마이즈를 위해서 수동으로 조작하는 경우는, 다음의 솔루션을 사용해 주세요.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://mui.com/api/tooltip/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;2-1&quot;&gt;설명서&lt;/a&gt;에 따르면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;open&lt;/code&gt; &lt;code&gt;prop&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;events&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;state&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;element&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;text &amp;amp;&amp;amp;&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;text&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;text&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const [showTooltip, setShowTooltip] = useState(false);
&amp;lt;Tooltip
    open={text &amp;amp;&amp;amp; showTooltip}        
    onMouseEnter={() =&amp;gt; { setShowTooltip(true) }}
    onMouseLeave={() =&amp;gt; { setShowTooltip(false) }}
    placement=&quot;top&quot; title={text}
&amp;gt;
    &amp;lt;div&amp;gt;
        {text}
    &amp;lt;/div&amp;gt;
&amp;lt;/Tooltip&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mui-tooltip은 처음부터 완벽한 컴포넌트가 아니며 매우 간단한 것도 아닙니다.이 솔루션은 저에게 효과가 있지만, 고객님의 상황에서는 작동하지 않을 수 있습니다.제가 꺼낼 테니 고객님의 입장에서 작동하도록 노력해 보세요.&lt;/font&gt;&lt;/em&gt;&lt;/p&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 papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https&lt;a href=&quot;https://material-ui.com/api/tooltip/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;22-1&quot;&gt;://material-ui&lt;/a&gt;.com/api/tooltip/ 를 참조해 주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 옵션이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;disableFocusListener&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;disableHoverListener&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;disable Touch Listener&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상호적인&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;생각합니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;interactive={true}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;니즈에 가장 적합해야 한다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Tooltip title={warningText} interactive={!warningText}&amp;gt;...&amp;lt;/Tooltip&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/53591747/&lt;a href=&quot;https://stackoverflow.com/questions/53591747/conditionally-activate-material-ui-tooltip&quot; target=&quot;_blank&quot; papago-id=&quot;30-1&quot;&gt;conditionally-activate-material-ui-tooltip&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ReactJS</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/923</guid>
      <comments>https://bestcode.tistory.com/923#entry923comment</comments>
      <pubDate>Fri, 10 Feb 2023 21:57:22 +0900</pubDate>
    </item>
    <item>
      <title>데이터베이스 설계에 외부 키가 정말 필요합니까?</title>
      <link>https://bestcode.tistory.com/922</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;제가 알기로는 외부 키(FK)는 프로그래머가 데이터를 올바르게 조작하는 데 도움이 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그래머가 이미 올바른 방법으로 이 작업을 수행하고 있다고 가정하면, 외래 키의 개념이 정말 필요한 것일까요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 외부 키 용도가 있나요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 뭘 빠트렸나요?&lt;/font&gt;&lt;/p&gt;&lt;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;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;ON DELETE CASCADE&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;과 주문이 이 1개 경우 될 수 &lt;/font&gt;&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;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;em papago-id=&quot;7-1&quot;&gt;아니지만&lt;/em&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://en.wikipedia.org/wiki/FogBugz&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-1&quot;&gt;FogBugz&lt;/a&gt;는 데이터베이스에 외부 키 제약이 없는 것이 확실합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Fog_Creek_Software&quot; papago-id=&quot;8-3&quot; rel=&quot;noreferrer&quot;&gt;Fog Creek&lt;/a&gt; Software &lt;a href=&quot;http://en.wikipedia.org/wiki/Fog_Creek_Software&quot; papago-id=&quot;8-3&quot; rel=&quot;noreferrer&quot;&gt;팀&lt;/a&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;FK 제약이 없는 데이터베이스 스키마는 안전벨트 없이 운전하는 것과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언젠가는 후회할 거예요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;설계의 기초와 데이터의 정합성에 시간을 들이지 않는 것이, 장래의 골칫거리를 확실히 해소할 수 있는 그대로입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게 엉성한 코드를 당신의 신청서에 받아주시겠습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;멤버 오브젝트에 직접 액세스하여 데이터 구조를 직접 수정했습니다.&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;em papago-id=&quot;12-1&quot;&gt;만들어졌다고&lt;/em&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;ol&gt; 
 &lt;li papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들은 당신을 정직하게 유지시켜준다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;신규 개발자를 정직하게 유지하다&lt;/font&gt;&lt;/li&gt; 
 &lt;li&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;ON DELETE CASCADE&lt;/code&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;/ol&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그래머가 실제로 이미 올바른 방법으로 이 작업을 수행하고 있다고 가정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 추측을 하는 것은 나에게 매우 나쁜 생각인 것 같다; 일반적으로 소프트웨어는 매우 복잡하다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 바로 요점이야, 정말로.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;개발자는 문제를 해결할 수 없기 때문에 데이터베이스가 잘못된 데이터로 채워지지 않도록 하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이상적인 세계에서는 자연 조인은 열 이름과 일치하는 대신 관계(FK 제약 조건)를 사용한다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 FK를 훨씬 더 유용하게 만들 것이다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개인적으로, 나는 외래 키가 테이블 간의 관계를 공식화하기 때문에 외래 키에 찬성한다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 질문은 프로그래머가 참조 무결성을 위반할 수 있는 데이터를 도입하지 않는다는 것을 전제로 하고 있다는 것을 알고 있습니다만, 좋은 의도에도 불구하고 데이터 참조 무결성이 침해되는 사례는 너무 많습니다.&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;외부 키 이전의 제약 조건(DRI(Declarative Reference Integrity, 선언적 참조 무결성))은 트리거를 사용하여 이러한 관계를 구현하는 데 많은 시간이 소요되었습니다.&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;@John - 다른 데이터베이스는 외부 키에 대한 색인을 자동으로 만들 수 있지만 SQL Server는 만들지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL Server에서 외부 키 관계는 제약 조건일 뿐입니다.&lt;/font&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;편집: IMO를 추가하고 싶습니다만, ON DELETE 또는 ON UPDATE CASCADE를 지원하는 외부 키를 사용하는 것이 반드시 좋은 것은 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로 삭제 시 캐스케이드는 데이터의 관계에 따라 신중하게 검토해야 한다는 것을 알게 되었습니다.예를 들어, 이것이 정상일 가능성이 있는 자연스러운 부모-자녀가 있는지, 또는 관련 테이블이 룩업 값 세트인지 등입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;캐스케이드된 업데이트를 사용하면 1개의 테이블의 프라이머리 키를 변경할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 테이블의 기본 키가 바뀌어서는 안 된다는 점에서 일반적인 철학적인 의견 차이가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;키는 본질적으로 일정해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 키가 없는 경우 서로 다른 테이블의 두 레코드가 관련이 있는지 어떻게 알 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 말하는 것은 기존의 부모 레코드 등이 없으면 자녀 레코드가 생성될 수 없는 참조 무결성이라고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 종종 외부 키 제약사항으로 알려져 있지만 애초에 외부 키의 존재와 혼동해서는 안 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;28-1&quot;&gt;데이터베이스에 의해 강제된 외부&lt;/em&gt; 키 &lt;em papago-id=&quot;28-1&quot;&gt;제약&lt;/em&gt;에 대해 &lt;em papago-id=&quot;28-1&quot;&gt;말씀&lt;/em&gt;하시는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 외부 키를 사용하고 있을 가능성이 높지만 데이터베이스에 알리지 않았을 뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;29&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;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 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;/p&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/FogBugz&quot; rel=&quot;noreferrer&quot; papago-id=&quot;32-1&quot;&gt;FogBugz&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 class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;32-3&quot;&gt;외부&lt;/em&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;웹 응용 프로그램에서는 일반적으로 데이터베이스와 통신하는 프로그램이 1개뿐이므로 버그가 데이터를 손상시킬 수 있는 곳은 1개뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;엔터프라이즈애플리케이션에서는, 복수의 독립된 애플리케이션이 같은 데이타베이스에 통신하는 경우가 있습니다(데이터베이스 셸을 직접 사용하는 사람은 말할 것도 없습니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 애플리케이션이 항상, 그리고 영원히 버그 없이 동일한 가정을 따르고 있는지 확인할 수 있는 방법은 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제약조건이 데이터베이스에 인코딩되어 있는 경우 버그로 인해 발생할 수 있는 최악의 상황은 사용자에게 일부 &lt;a href=&quot;http://en.wikipedia.org/wiki/SQL&quot; rel=&quot;noreferrer&quot; papago-id=&quot;34-1&quot;&gt;SQL&lt;/a&gt; 제약조건이 충족되지 않는다는 추악한 오류 메시지가 표시되는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 &lt;em papago-id=&quot;34-3&quot;&gt;손상&lt;/em&gt;된 데이터를 기업 데이터베이스에 저장하여 모든 애플리케이션을 중단하거나 잘못된 출력으로 이어질 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 키 제약 조건도 기본적으로 인덱싱되므로 성능이 향상됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;외래 키 제약 조건을 사용하지 않을 &lt;em papago-id=&quot;35-1&quot;&gt;이유&lt;/em&gt;가 생각나지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;외국 열쇠가 없으면 장점이 있나요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;FK는 데이터베이스 상태가 좋지 않으면 셋업하기 어렵지 않습니다.&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;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;FK는 매우 중요하며 &lt;a href=&quot;http://www.infoq.com/interviews/dan-pritchett-ebay-architecture&quot; papago-id=&quot;37-1&quot; rel=&quot;noreferrer&quot;&gt;당신이 eBay&lt;/a&gt;가 아닌 한 &lt;a href=&quot;http://www.infoq.com/interviews/dan-pritchett-ebay-architecture&quot; papago-id=&quot;37-1&quot; rel=&quot;noreferrer&quot;&gt;당신&lt;/a&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;strong papago-id=&quot;38-1&quot;&gt;어떤&lt;/strong&gt; 것이 유효한 관계를 보장하는 데 책임이 있다고 &lt;strong papago-id=&quot;38-1&quot;&gt;생각&lt;/strong&gt;합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 &lt;a href=&quot;http://en.wikipedia.org/wiki/Ruby_on_Rails&quot; papago-id=&quot;39-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ruby on&lt;/a&gt; Rails는 &lt;a href=&quot;http://en.wikipedia.org/wiki/Ruby_on_Rails&quot; papago-id=&quot;39-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;외부&lt;/a&gt; 키를 사용하지 않지만 모든 관계를 검증합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ruby on Rails 어플리케이션에서만 데이터베이스에 액세스 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 데이터베이스에 쓰는 다른 클라이언트가 있는 경우 외부 키가 없으면 자체 검증을 구현해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 프로그래머라면 누구나 알 수 있는 가장 다른 두 개의 검증 코드 복사본이 생성됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 시점에서는 외부 키를 사용하여 책임을 한 포인트로 다시 이동할 수 있으므로 외부 키가 정말 필요합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 키를 사용하면 이전에 데이터베이스를 본 적이 없는 사용자가 테이블 간의 관계를 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금은 모든 것이 괜찮을지 모르지만, 당신의 프로그래머가 떠나고 다른 누군가가 그 자리를 넘겨받을 때 무슨 일이 일어날지 생각해 보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 키를 사용하면 수천 줄의 코드를 트래핑하지 않고도 데이터베이스 구조를 이해할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 알기로는 외부 키는 프로그래머가 데이터를 올바르게 조작할 수 있도록 도와주는 데 사용됩니다.&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;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;FK를 사용하면 DBA는 &lt;em papago-id=&quot;46-1&quot;&gt;프로그래머&lt;/em&gt;가 실패했을 때 사용자의 실수로부터 데이터 무결성을 보호할 수 있으며 때로는 프로그래머의 실수로부터 보호할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&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;/blockquote&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;FK는 &lt;em papago-id=&quot;48-1&quot;&gt;선언적&lt;/em&gt;이어서 망치기 어렵다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 외부 키 용도가 있나요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 뭘 빠트렸나요?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 그들이 만들어진 이유는 아니지만, FK는 다이어그램 작성 도구와 구축자에게 강력한 신뢰할 수 있는 힌트를 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 최종 사용자에게 전달되며, 최종 사용자는 강력하고 신뢰할 수 있는 힌트를 절실히 필요로 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안전벨트가 꼭 필요하지는 않은 것처럼 꼭 필요한 것은 아니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 데이터베이스를 엉망으로 만드는 바보 같은 짓으로부터 당신을 구할 수 있어요&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;애플리케이션을 망가뜨린 삭제를 재구성하는 것보다 FK 제약 에러를 디버깅하는 것이 훨씬 좋습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응용프로그램이 데이터베이스에서 데이터를 조작할 수 있는 유일한 방법은 아니기 때문에 이러한 기능이 중요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;응용 프로그램은 원하는 대로 참조 무결성을 처리할 수 있지만 데이터베이스 수준에서 적절한 권한을 가진 하나의 bozo를 사용하여 insert, delete 또는 update 명령을 실행하면 모든 응용 프로그램 참조 무결성의 적용이 무시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스 레벨에 FK 제약조건을 넣는다는 것은 명령어를 발행하기 전에 FK 제약조건을 무효로 하는 경우를 제외하고 FK 제약조건으로 인해 잘못된 삽입/갱신/삭제 문이 참조 무결성 위반으로 실패한다는 것을 의미합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비용/편익 측면에서 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/MySQL&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;54-1&quot;&gt;MySQL&lt;/a&gt;에서 제약조건을 추가하는 것은 &lt;a href=&quot;http://en.wikipedia.org/wiki/Data_definition_language&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;54-3&quot;&gt;DDL&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;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;/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;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 무언가를 조합할 때 이미 머릿속에 있는 것을 성문화하는 데 걸리는 약간의 시간이 당신이나 다른 누군가를 몇 달 혹은 몇 년 후에 슬픔의 시간을 구할 수 있을 것이다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&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;font class=&quot;papago-parent&quot;&gt;내가 뭘 빠트렸나요?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조금 장전되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 키 대신 주석, 들여쓰기 또는 변수 이름 삽입...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 이미 문제의 내용을 완벽하게 이해했다면, 그것은 당신에게 &quot;소용없다&quot;는 것이다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;엔트로피 감소&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스에서 혼돈 시나리오가 발생할 가능성을 줄입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 가능성을 고려 중이라 어려움을 겪고 있기 때문에 시스템 유지보수에 있어서 엔트로피 감소가 관건이라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 각 주문에는 고객이 있어, 그 전제 조건은 무엇인가에 &lt;em papago-id=&quot;61-1&quot;&gt;의해&lt;/em&gt; 실시되어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스에서 &quot;something&quot;은 외부 키입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이것이 개발 속도에서 트레이드오프할 가치가 있다고 생각한다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론, 전원을 끄면 더 빨리 코드를 입력할 수 있고, 그래서 사용하지 않는 사람도 있을 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;개인적으로 나는 &lt;a href=&quot;http://en.wikipedia.org/wiki/NHibernate&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;62-1&quot;&gt;NHibernate&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 class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 방법으로는 외부 키가 설정되지 않아 데이터가 일관되지 않는 시스템에 버그가 침투할 수 있습니다(그리고 충분한 시간이 지나면 버그가 침투할 수 있습니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 후, 이상한 버그 리포트를 수신해, 조사해 「OH」라고 합니다.&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;64&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;65&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;66&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;67&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;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 외부 키는 사용하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 대부분 우리는 그것을 후회하지 않는다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단, 몇 가지 이유로 가까운 장래에 훨씬 더 많이 사용할 수 있게 될 것입니다.두 가지 이유 모두 비슷합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도표 작성&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;올바르게 사용되는 외부 키 관계가 있으면 데이터베이스 다이어그램을 만드는 것이 훨씬 쉽습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도구 지원&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;적절한 외부 키 관계가 있는 경우 &lt;a href=&quot;http://en.wikipedia.org/wiki/Language_Integrated_Query#LINQ_to_SQL_.28formerly_called_DLINQ.29&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;71-3&quot;&gt;LINQ에서 SQL로 사용&lt;/a&gt;할 수 있는 &lt;a href=&quot;http://en.wikipedia.org/wiki/Microsoft_Visual_Studio#Visual_Studio_2008&quot; papago-id=&quot;71-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Visual Studio&lt;/a&gt; 2008을 &lt;a href=&quot;http://en.wikipedia.org/wiki/Microsoft_Visual_Studio#Visual_Studio_2008&quot; papago-id=&quot;71-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;사용&lt;/a&gt;하여 데이터 모델을 구축하는 것이 훨씬 쉽습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 수동 SQL 작업(쿼리 구성, 쿼리 실행, blahblah)이 많은 경우 외부 키가 반드시 필요한 것은 아니라는 것을 알게 되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 툴을 사용하기 시작하면 훨씬 더 유용하게 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 키 제약 조건(및 일반적으로 제약 조건)의 가장 좋은 점은 쿼리를 작성할 때 신뢰할 수 있다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;true&quot;를 유지하는 데이터 모델에 의존할 수 없는 경우 많은 쿼리가 훨씬 더 복잡해질 수 있습니다.&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;코드에서는 일반적으로 어딘가에 예외가 발생하지만 SQL에서는 &lt;a href=&quot;http://en.wikipedia.org/wiki/SQL&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;74-1&quot;&gt;일반적&lt;/a&gt;으로 &quot;잘못된&quot; 답변만 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이론적으로 &lt;a href=&quot;http://en.wikipedia.org/wiki/Microsoft_SQL_Server&quot; papago-id=&quot;75-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;SQL&lt;/a&gt; Server는 &lt;a href=&quot;http://en.wikipedia.org/wiki/Microsoft_SQL_Server&quot; papago-id=&quot;75-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;쿼리&lt;/a&gt; 계획의 일부로 제약조건을 사용할 수 있지만 파티션 분할에 대한 제약조건을 체크하는 것 외에는 실제로 이를 목격한 적이 없다고 말할 수 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 작업한 프로젝트(비즈니스 어플리케이션 및 소셜 네트워킹 웹사이트)에서 외부 키가 명시적(FORE KEY REFERENCES 테이블(칼럼))으로 선언된 적은 없었다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 항상 외래열쇠인 컬럼을 명명하는 일종의 규칙이 있었다.&lt;/font&gt;&lt;/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;http://en.wikipedia.org/wiki/Database_normalization&quot; rel=&quot;nofollow 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;외부 키(데이터 무결성, 외부 키 열 인덱스, 데이터베이스 스키마 인식 도구)의 장점은 알고 있지만 외부 키를 일반적인 규칙으로 사용하는 것은 두렵습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 다양한 데이터베이스 엔진에서 다른 방식으로 외부 키를 처리할 수 있으므로 마이그레이션 중에 미묘한 버그가 발생할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ON DELETE CASCADE를 사용하여 삭제된 클라이언트의 모든 주문과 청구서를 삭제하는 것은 보기 좋지만 잘못 설계된 데이터베이스 스키마의 완벽한 예입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네. ON DELETE [ RESTRICT | CASCADE ]는 개발자가 데이터를 고립시키는 것을 방지하여 데이터를 깨끗하게 유지합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 최근에 외부 키와 같은 데이터베이스 제약에 초점을 맞추지 않은 Rails 개발자 팀에 합류했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;운 좋게도, 저는 이것들을 발견했습니다.http://www.redhillonrails.org/&lt;a href=&quot;http://www.redhillonrails.org/foreign_key_associations.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;83-1&quot;&gt;foreign_key_associations&lt;/a&gt;.html -- Ruby on Rails 플러그인의 RedHill은 구성 스타일에 &lt;a href=&quot;http://en.wikipedia.org/wiki/Convention_over_configuration&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;83-3&quot;&gt;대한 규약&lt;/a&gt;을 사용하여 외부 키를 생성합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;83-5&quot;&gt;product_id&lt;/em&gt;를 사용하여 이행하면 제품 &lt;em papago-id=&quot;83-9&quot;&gt;테이블&lt;/em&gt;에 &lt;em papago-id=&quot;83-7&quot;&gt;ID&lt;/em&gt;에 대한 외부 키가 생성됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;트랜잭션 이행 등 RedHill의 기타 뛰어난 &lt;a href=&quot;http://www.redhillonrails.org/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;84-1&quot;&gt;플러그인&lt;/a&gt;을 확인하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;85&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 액세스 코드(Entity Framework 또는 기타 ORM)를 생성할 계획인 경우 외부 키가 없는 계층형 모델을 생성할 수 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/18717/&lt;a href=&quot;https://stackoverflow.com/questions/18717/are-foreign-keys-really-necessary-in-a-database-design&quot; target=&quot;_blank&quot; papago-id=&quot;86-1&quot;&gt;are-foreign-keys-really-necessary-in-a-database-design&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/922</guid>
      <comments>https://bestcode.tistory.com/922#entry922comment</comments>
      <pubDate>Fri, 10 Feb 2023 21:57:12 +0900</pubDate>
    </item>
    <item>
      <title>jQuery가 Ajax 콜이 종료될 때까지 대기하도록 하려면 어떻게 해야 합니까?</title>
      <link>https://bestcode.tistory.com/921</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery가 Ajax 콜이 종료될 때까지 대기하도록 하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로그인이 필요한 서버 측 기능이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 로그인한 경우 함수는 성공 시 1을 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 함수는 로그인 페이지를 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ajax와 jQuery를 사용하여 함수를 호출하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 하는 일은 일반 링크를 클릭 기능이 적용된 요청서를 제출하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 로그인하지 않았거나 함수가 실패했을 경우 Ajax-call이 true를 반환하고 href가 트리거되도록 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단, 다음 코드를 사용하면 Ajax 콜이 실행되기 전에 함수가 종료됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자를 로그인 페이지로 정상적으로 리다이렉트하려면 어떻게 해야 하나요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.my_link&quot;).click(
    function(){
    $.ajax({
        url: $(this).attr('href'),
        type: 'GET',
        cache: false,
        timeout: 30000,
        error: function(){
            return true;
        },
        success: function(msg){ 
            if (parseFloat(msg)){
                return false;
            } else {
                return true;
            }
        }
    });
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 없는 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$.ajax()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;async&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; &quot; &quot; &quot; option to &quot; &quot; option to &quot; )&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;false&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.my_link&quot;).click(
    function(){
    $.ajax({
        url: $(this).attr('href'),
        type: 'GET',
        async: false,
        cache: false,
        timeout: 30000,
        fail: function(){
            return true;
        },
        done: function(msg){ 
            if (parseFloat(msg)){
                return false;
            } else {
                return true;
            }
        }
    });
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AJAX, AJAX, AJAX, AJAX.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 the, 답, 음, 음의 URL에서 다루어야 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fail&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;done&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;서버로부터 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;됩니다&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 함수는 서버로부터 응답이 수신되었을 때만 호출됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;$.ajax&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;$.post&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;$.get&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;$.ajaxSetup({async: false});
$.get(&quot;...&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 XMLHttpRequest 개체(jQuery에서 요청을 만드는 데 사용)는 비동기 속성을 지원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;false로 &lt;strong papago-id=&quot;16-1&quot;&gt;설정&lt;/strong&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;맘에 들다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;async: false
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 잘못된 설계인 비동기 설정을 false로 설정하는 대신 작업 보류 중에 UI를 차단하는 것이 좋습니다.&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;이는 다음과 같은 jQuery 약속을 통해 달성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// same as $.ajax but settings can have a maskUI property
// if settings.maskUI==true, the UI will be blocked while ajax in progress
// if settings.maskUI is other than true, it's value will be used as the color value while bloking (i.e settings.maskUI='rgba(176,176,176,0.7)'
// in addition an hourglass is displayed while ajax in progress
function ajaxMaskUI(settings) {
    function maskPageOn(color) { // color can be ie. 'rgba(176,176,176,0.7)' or 'transparent'
        var div = $('#maskPageDiv');
        if (div.length === 0) {
            $(document.body).append('&amp;lt;div id=&quot;maskPageDiv&quot; style=&quot;position:fixed;width:100%;height:100%;left:0;top:0;display:none&quot;&amp;gt;&amp;lt;/div&amp;gt;'); // create it
            div = $('#maskPageDiv');
        }
        if (div.length !== 0) {
            div[0].style.zIndex = 2147483647;
            div[0].style.backgroundColor=color;
            div[0].style.display = 'inline';
        }
    }
    function maskPageOff() {
        var div = $('#maskPageDiv');
        if (div.length !== 0) {
            div[0].style.display = 'none';
            div[0].style.zIndex = 'auto';
        }
    }
    function hourglassOn() {
        if ($('style:contains(&quot;html.hourGlass&quot;)').length &amp;lt; 1) $('&amp;lt;style&amp;gt;').text('html.hourGlass, html.hourGlass * { cursor: wait !important; }').appendTo('head');
        $('html').addClass('hourGlass');
    }
    function hourglassOff() {
        $('html').removeClass('hourGlass');
    }

    if (settings.maskUI===true) settings.maskUI='transparent';

    if (!!settings.maskUI) {
        maskPageOn(settings.maskUI);
        hourglassOn();
    }

    var dfd = new $.Deferred();
    $.ajax(settings)
        .fail(function(jqXHR, textStatus, errorThrown) {
            if (!!settings.maskUI) {
                maskPageOff();
                hourglassOff();
            }
            dfd.reject(jqXHR, textStatus, errorThrown);
        }).done(function(data, textStatus, jqXHR) {
            if (!!settings.maskUI) {
                maskPageOff();
                hourglassOff();
            }
            dfd.resolve(data, textStatus, jqXHR);
        });

    return dfd.promise();
}
&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;ajaxMaskUI({
    url: url,
    maskUI: true // or try for example 'rgba(176,176,176,0.7)'
}).fail(function (jqXHR, textStatus, errorThrown) {
    console.log('error ' + textStatus);
}).done(function (data, textStatus, jqXHR) {
    console.log('success ' + JSON.stringify(data));
});
&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;UI는 ajax 명령어가 반환될 때까지 차단됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://jsfiddle.net/b69ubLa0/21/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;21-1&quot;&gt;jsfiddle&lt;/a&gt; 참조&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 이 더  것 같아요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;success&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지 않고 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;false&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;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;true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 사용하다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;window.location=&quot;appropriate page&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 해서 성공함수가 호출되면 페이지가 리다이렉트랜다이렉트 됩니다&lt;/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;async&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;/&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;await&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 들면 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  async function upload() {
    return new Promise((resolve, reject) =&amp;gt; {
        $.ajax({
            url: $(this).attr('href'),
            type: 'GET',
            timeout: 30000,
            success: (response) =&amp;gt; {
                resolve(response);
            },
            error: (response) =&amp;gt; {
                reject(response);
            }
        })
    })
}
&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;&lt;font class=&quot;papago-parent&quot;&gt; ''로.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;async&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&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let response = await upload();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에서는 언급되지 않았기 때문에 &lt;a href=&quot;https://api.jquery.com/jQuery.when/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;34-1&quot;&gt;jQuery&lt;/a&gt; when 스테이트먼트가 이 목적에 매우 도움이 될 수 있다는 점도 지적하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 예는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.when( $.ajax( &quot;test.aspx&quot; ) ).then(function( data, textStatus, jqXHR ) {
  alert( jqXHR.status ); // Alerts 200
});
&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;&quot;then&quot; 파트는 &quot;when&quot; 파트가 완료될 때까지 실행되지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비동기 AJAX는 권장되지 않으므로 Promise와 함께 중첩된 비동기 함수를 사용해 보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;구문 오류가 있을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;
async function fetch_my_data(_url, _dat) {

   async function promised_fetch(_url, _dat) {

      return new Promise((resolve, reject) =&amp;gt; {
         $.ajax({
            url:  _url,
            data: _dat,
            type: 'POST',
            success: (response) =&amp;gt; {
               resolve(JSON.parse(response));
            },
            error: (response) =&amp;gt; {
               reject(response);
            }
         });
      });
   }

   var _data = await promised_fetch(_url, _dat);
   
   return _data;
}

var _my_data = fetch_my_data('server.php', 'get_my_data=1');

&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;get 요청이 완료될 때까지 기다려야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 후 함수가 호출된 곳에서 요청 본문을 가져옵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function foo() {
    var jqXHR = $.ajax({
        url: url,
        type: 'GET',
        async: false,
    });
    return JSON.parse(jqXHR.responseText);  
}
&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;원래 질문은 12년 전 오늘의 질문으로, '어떻게 하면 jQuery가 Ajax의 콜이 돌아올 때까지 기다리도록 할 수 있는가?'였다.jQuery는 그 이후로 많은 발전을 이루었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에 언급된 몇 가지 솔루션이 있으며, 최신 버전의 jQuery를 사용할 수 없습니다.$.when().then.()은 더 이상 지원되지 않는 'async:false'를 사용하지 않는 한 동기화되지 않는 것 같습니다.따라서 새로운 버전의 jQuery에서는 작동하지 않습니다.&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;그러나 약속은 jQuery ajax 호출에 포함되어 있기 때문에 Ajax 호출을 동기화하는 것은 그리 어렵지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 namesched js 함수를 사용하고 있기 때문에 아래의 예는 그 형식입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 예는 사용자 입력이 기존 항목을 복제하려고 시도하지 않는지 확인하기 위해 서버를 호출하는 사용자 정의 양식 검증용입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드는 Babel을 사용하지 않는 한 IE 또는 레거시 엣지에서는 동작하지 않을 것입니다만, 이러한 브라우저는 Microsoft에서 지원되지 않기 때문에 차단하는 경향이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;///Namespace validate
check: async function(settings){
    let IsValid = false;
    let Message = ''
    let data = await validate.serverCheck('function', value);
    IsValid = data.OK;
    Message = data.Message;
}

serverCheck: async function (fn, value) {
    var request = {
        validateValue: $.sanitize(value)
    };

    let result;

    try {
            result = await $.ajax({
                dataType: &quot;json&quot;,
                type: &quot;post&quot;,
                url: &quot;/api/validate/&quot; + fn + &quot;/&quot;,
                data: request
        });

        return result;
    } catch (x) {}
}
&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;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/755885/&lt;a href=&quot;https://stackoverflow.com/questions/755885/how-do-i-make-jquery-wait-for-an-ajax-call-to-finish-before-it-returns&quot; target=&quot;_blank&quot; papago-id=&quot;45-1&quot;&gt;how-do-i-make-jquery-wait-for-an-ajax-call-to-finish-before-it-returns&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ajax</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/921</guid>
      <comments>https://bestcode.tistory.com/921#entry921comment</comments>
      <pubDate>Fri, 10 Feb 2023 21:56:58 +0900</pubDate>
    </item>
    <item>
      <title>AngularJS: 문자열에서 HTML 삽입</title>
      <link>https://bestcode.tistory.com/920</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AngularJS: 문자열에서 HTML 삽입&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이걸 많이 찾아봤는데 답을 못 찾거나 이해가 안 가네요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;구체적인 예가 투표에 당선됩니다=)&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML 문자열을 반환하는 함수를 가지고 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능을 변경할 수 없습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열로 표현된 html을 DOM에 삽입하고 싶습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨트롤러, 디렉티브, 서비스, 기타 기능하는 것(합리적으로 좋은 프랙티스)을 사용할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;면책사항:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 $ 컴파일을 잘 이해하지 못한다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 시도한 것은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// My magic HTML string function.
function htmlString (str) {
    return &quot;&amp;lt;h1&amp;gt;&quot; + str + &quot;&amp;lt;/h1&amp;gt;&quot;;
}

function Ctrl ($scope, $compile) {
  $scope.htmlString = htmlString;
}
Ctrl.$inject = [&quot;$scope&quot;, &quot;$compile&quot;];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 안 먹혔어.&lt;/font&gt;&lt;/p&gt; 
&lt;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;// My magic HTML string function.
function htmlString (str) {
    return &quot;&amp;lt;h1&amp;gt;&quot; + str + &quot;&amp;lt;/h1&amp;gt;&quot;;
}

angular.module(&quot;myApp.directives&quot;, [])
  .directive(&quot;htmlString&quot;, function () {
    return {
      restrict: &quot;E&quot;,
      scope: { content: &quot;@&quot; },
      template: &quot;{{ htmlStr(content) }}&quot;
    }
  });

  ... and in my HTML ...

  &amp;lt;html-string content=&quot;foo&quot;&amp;gt;&amp;lt;/html-string&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;헬프?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&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;a href=&quot;https://stackoverflow.com/questions/9381926/insert-html-into-view-using-angularjs&quot; papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AngularJS : 뷰에 HTML 삽입&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/13141080/angularjs-http-html-parser&quot; papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AngularJS $http HTML 파서&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/14737795/angularjs-inserting-compile-d-html&quot; papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;angularjs - $120-d html 삽입&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/13656533/angularjs-doesnt-execute-in-html-inserted-with-document-write&quot; papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서에 삽입된 HTML에서는 AngularJS가 실행되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기입()&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/14462612/escape-html-text-in-an-angularjs-directive/14514299#14514299&quot; papago-id=&quot;17&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;JS 지시어&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&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;http://docs.angularjs.org/api/ngSanitize.$sanitize&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://docs.angularjs.org/api/ngSanitize.$sanitize&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 angular에는 html을 페이지에 삽입하는 명령이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 다음과 같이 ng-bind-html 디렉티브를 사용하여 html을 삽입할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 모든 것을 이미 실행한 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// My magic HTML string function.
function htmlString (str) {
    return &quot;&amp;lt;h1&amp;gt;&quot; + str + &quot;&amp;lt;/h1&amp;gt;&quot;;
}

function Ctrl ($scope) {
  var str = &quot;HELLO!&quot;;
  $scope.htmlString = htmlString(str);
}
Ctrl.$inject = [&quot;$scope&quot;];
&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;그 컨트롤러 범위 내의 html에서는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ng-bind-html=&quot;htmlString&quot;&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$sce.trustAsHtml('&quot;&amp;lt;h1&amp;gt;&quot; + str + &quot;&amp;lt;/h1&amp;gt;&quot;')&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;①자세한 &lt;a href=&quot;https://docs.angularjs.org/api/ng/service/$sce&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;1-1&quot;&gt;내용&lt;/a&gt;은 $sce를 참조해 주십시오.&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/14761724/&lt;a href=&quot;https://stackoverflow.com/questions/14761724/angularjs-insert-html-from-a-string&quot; target=&quot;_blank&quot; papago-id=&quot;25-1&quot;&gt;angularjs-insert-html-from-a-string&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/920</guid>
      <comments>https://bestcode.tistory.com/920#entry920comment</comments>
      <pubDate>Fri, 10 Feb 2023 21:56:47 +0900</pubDate>
    </item>
    <item>
      <title>jQuery $.ajax(), $.post는 Firefox에서 &amp;quot;OPTIONS&amp;quot;를 REQUEST_METHOD로 전송합니다.</title>
      <link>https://bestcode.tistory.com/919</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery $.ajax(), $.post는 Firefox에서 &quot;OPTIONS&quot;를 REQUEST_METHOD로 전송합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비교적 단순한 jQuery 플러그인이라고 생각했던 것에 문제가 있었습니다.&lt;/font&gt;&lt;/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; acjax 을 php에 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.  일반적입니다 ajax 요청은 다음과 같습니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
  url: o.url,
  type: 'post',
  contentType: &quot;application/x-www-form-urlencoded&quot;,
  data: '{&quot;method&quot;:&quot;getStates&quot;, &quot;program&quot;:&quot;EXPLORE&quot;}',
  success: function (data, status) {
    console.log(&quot;Success!!&quot;);
    console.log(data);
    console.log(status);
  },
  error: function (xhr, desc, err) {
    console.log(xhr);
    console.log(&quot;Desc: &quot; + desc + &quot;\nErr:&quot; + err);
  }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 Safari에서는 정상적으로 동작하고 있는 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 3에서는 '''3.5&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;REQUEST_TYPE&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;OPTIONS'는 $_POST를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 'OPTIONS유형으로 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;::1 - - [08/Jul/2009:11:43:27 -0500] &quot;OPTIONS sitecodes.php HTTP/1.1&quot; 200 46
&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;이 ajax 콜이 Firefox가 아닌 Safari에서는 작동하는 이유와 Firefox에서는 어떻게 수정해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응답 헤더&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일시: 2009년 7월 8일 (수) 21:22:17 GMT&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버: Apache/2.0.59(Unix) PHP/5.2.6 DAV/2&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;X-Powered-By: PHP/5.2.6&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;콘텐츠 길이 46&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Keep-Alive 시간 초과=15, max=100&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;접속 킵얼라이브&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Content-Type 텍스트/html&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;호스트 주문 양식: 8888&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;User-Agent Mozilla/5.0 (Macintosh; U; 인텔 Mac OS X 10.5; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;5&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;text/module,application/xhtml+xml,application/xml;q=0.9,*/*;q=0을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;8&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Accept-Language en-us,en;q=0.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;5&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Accept-Encoding gzip,deflate&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Keep-Alive 300&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;접속 킵얼라이브&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오리진 http://ux.inetu.act.org&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Access-Control-Request-Method POST&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;액세스 제어 요구 헤더 x-requested-with&lt;/font&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 Firebug 출력 그림입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Tid8P.jpg&quot; alt=&quot;&quot;&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;자신의 도메인에 대한 XMLHTTPRequest만 실행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 &lt;a href=&quot;http://en.wikipedia.org/wiki/JSONP&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;JSONP&lt;/a&gt; 콜백을 사용할 수 있는지 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.getJSON( 'http://&amp;lt;url&amp;gt;/api.php?callback=?', function ( data ) { alert ( data ); } );
&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;OPTIONS 요청을 해석하고 필요한 Access-Control 헤더를 설정하기 위해 Django 측에서 다음 코드를 사용했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 후 Firefox로부터의 크로스 도메인 요구가 기능하기 시작했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;앞서 말한 바와 같이 브라우저는 OPTIONS 요청을 먼저 전송한 후 바로 POST/GET을 전송합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def send_data(request):
    if request.method == &quot;OPTIONS&quot;: 
        response = HttpResponse()
        response['Access-Control-Allow-Origin'] = '*'
        response['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
        response['Access-Control-Max-Age'] = 1000
        # note that '*' is not valid for Access-Control-Allow-Headers
        response['Access-Control-Allow-Headers'] = 'origin, x-csrftoken, content-type, accept'
        return response
    if request.method == &quot;POST&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;편집: 적어도 경우에 따라서는 실제 응답에 동일한 Access-Control 헤더를 추가해야 할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;요청은 성공한 것처럼 보이기 때문에 다소 혼란스러울 수 있지만 Firefox는 응답 내용을 Javascript에 전달하지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/En/HTTP_access_control&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12-1&quot;&gt;이 Mozilla Developer Center&lt;/a&gt; 문서에서는 다양한 교차 도메인 요청 시나리오를 설명합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문서는 콘텐츠 유형이 'application/x-www-form-urlencoded'인 POST 요청을 '단순 요청'으로 전송해야 함을 나타내는 것 같습니다('사전 이동' OPTIONS 요청 없음).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다만, 파이어폭스는 OPTIONS 요구를 송신하고 있었습니다만, POST는 그 컨텐츠 타입으로 송신되고 있었습니다.&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;서버에 옵션 요청 핸들러를 생성하여 'Access-Control-Allow-Origin' 응답 헤더를 '*'로 설정함으로써 이 작업을 수행할 수 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;http&lt;a href=&quot;http://someurl.com&quot; rel=&quot;noreferrer&quot; papago-id=&quot;13-1&quot;&gt;://someurl&lt;/a&gt;.com'과 같은 특정 항목으로 설정하면 더 제한적일 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또, 복수의 기원을 쉼표로 구분한 리스트로 지정할 수 있다고 하는 것도 읽어 보았습니다만, 동작시킬 수 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Firefox는 OPTIONS 요청에 대한 응답을 허용 가능한 'Access-Control-Allow-Origin' 값으로 수신하면 POST 요청을 전송합니다.&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;완전히 Apache 기반의 솔루션을 사용하여 이 문제를 해결했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;vhost/htaccess에 다음 블록을 넣습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# enable cross domain access control
Header always set Access-Control-Allow-Origin &quot;*&quot;
Header always set Access-Control-Allow-Methods &quot;POST, GET, OPTIONS&quot;

# force apache to return 200 without executing my scripts
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule .* / [R=200,L]
&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;Apache가 대상 스크립트를 실행할 때 발생하는 작업에 따라 후자가 필요하지 않을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;후자는 &lt;a href=&quot;https://serverfault.com/questions/231766/returning-200-ok-in-apache-on-http-options-requests&quot; papago-id=&quot;16-1&quot;&gt;친근한 ServerFault 사용자&lt;/a&gt;에게 돌아옵니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응답 스크립트 맨 위에 있는 이 PHP는 작동하는 것 같습니다.(Firefox 3.6.11에서는)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아직 많은 테스트를 하지 않았습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
header('Access-Control-Max-Age: 1000');
if(array_key_exists('HTTP_ACCESS_CONTROL_REQUEST_HEADERS', $_SERVER)) {
    header('Access-Control-Allow-Headers: '
           . $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']);
} else {
    header('Access-Control-Allow-Headers: *');
}

if(&quot;OPTIONS&quot; == $_SERVER['REQUEST_METHOD']) {
    exit(0);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;맵에  방법은 1.로 매우 의 경우 use use 、 jQuery 1.5 、 data Type 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dataType: &quot;jsonp&quot;&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;OPTIONS 메서드를 사용한 사전 요청입니다.&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;사용자 데이터에 부작용을 일으킬 수 있는HTTP 요구 방식(특히 GET 이외의 HTTP 방식 또는 특정 MIME 유형에서의 POST 사용)의 경우 사양에서는 브라우저가 요구를 '프리플라이트'하고 HTTP OPTIONS 요구 방식을 사용하여 서버에서 지원되는 메서드를 요청하고 서버로부터 '승인'을 하도록 요구하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 HTTP 요청 방식을 사용하여 실제 요청을 전송합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web 사양은, https://developer.mozilla.org/en-US/docs/Web/HTTP/&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS&quot; rel=&quot;noreferrer&quot; papago-id=&quot;21-1&quot;&gt;Access_control_CORS&lt;/a&gt; 를 참조해 주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Nginx conf에 다음 행을 추가하여 문제를 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    location / {
               if ($request_method = OPTIONS ) {
                   add_header Access-Control-Allow-Origin  &quot;*&quot;;
                   add_header Access-Control-Allow-Methods &quot;POST, GET, PUT, UPDATE, DELETE, OPTIONS&quot;;
                   add_header Access-Control-Allow-Headers &quot;Authorization&quot;;
                   add_header Access-Control-Allow-Credentials  &quot;true&quot;;
                   add_header Content-Length 0;
                   add_header Content-Type text/plain;
                   return 200;
               }
    location ~ ^/(xxxx)$ {
                if ($request_method = OPTIONS) {
                    rewrite ^(.*)$ / last;
                }
    }
&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;소스 1.3.2를 조사했는데, JSONP를 사용할 때는 브라우저의 Same-domain 정책을 통과하는 SCRIPT 요소를 동적으로 구축함으로써 요구가 이루어집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당연히 SCRIPT 요소를 사용하여 POST 요청을 할 수 없습니다.브라우저는 GET을 사용하여 결과를 가져옵니다.&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;JSONP 콜을 요구할 때 SCRIPT 요소는 생성되지 않습니다.이는 AJAX 콜의 타입이 GET으로 설정되어 있는 경우에만 생성되기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://dev.jquery.com/ticket/4690&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://dev.jquery.com/ticket/4690&lt;/font&gt;&lt;/a&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;ASP에서 이와 같은 문제가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Net. jQuery를 실행하려고 할 때 IIS가 내부 서버 오류를 반환했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$.post&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PageHandlerFactory가 응답만 하도록 제한되었기 때문에 html 콘텐츠를 가져옵니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GET,HEAD,POST,DEBUG&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동사입니다. 따라서 동사 &quot;OPTIONS&quot;를 목록에 추가하거나 &quot;All 동사&quot;를 선택할 수 있습니다.&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;이를 IIS 매니저에서 수정하고 웹 사이트를 선택한 후 핸들러 매핑을 선택하고 필요에 따라 *.apx 파일용 PageHandlerFactory를 더블 클릭할 수 있습니다(프레임 4.0과 통합 애플리케이션 풀을 사용합니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Request Restrictions(요구 제한)를 클릭한 다음 동사 탭으로 이동하여 수정을 적용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자, 이제&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$.post&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요청이 예상대로 작동하고 있습니다. : )&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&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;action&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL에는 다음이 포함됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;www&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;www&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&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;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 생각에 만약&lt;/font&gt;&lt;/font&gt;&lt;code&gt;o.url = 'index.php'&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 class=&quot;papago-parent&quot;&gt;url을 사용하면 다음 오류가 반환됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;http://www.google.com&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;a href=&quot;http://docs.jquery.com/Ajax/jQuery.post#urldatacallbacktype&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;40-1&quot;&gt;$.post&lt;/a&gt; 메서드를 직접 사용하지 않는 이유는 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.post(&quot;test.php&quot;, { func: &quot;getNameAndTime&quot; },
    function(data){
        alert(data.name); // John
        console.log(data.time); //  2pm
    }, &quot;json&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 훨씬 더 간단하다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;POST 하는 도메인의 서버 코드를 제어하는 경우의 해결 방법의 명확한 예를 게재했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 답변은 이 스레드에서 다루어졌지만 IMO에 대해 더 명확하게 설명합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/298745/how-do-i-send-a-cross-domain-post-request-via-javascript/7605119#7605119&quot; papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JavaScript를 통해 크로스 도메인 POST 요청을 전송하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제의 해결 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;data Type 사용:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;json&lt;/code&gt;&lt;/li&gt; 
 &lt;li&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;&amp;amp;callback=?&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 URL로&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 Facebook API를 호출하고 Firefox를 사용하여 작동했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Firebug 사용 중&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GET&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;OPTIONS&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(양자 모두) 상기의 조건을 만족시키는 것으로 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 회피할 수 있는 또 다른 방법은 프록시 스크립트를 사용하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;a href=&quot;http://developer.yahoo.com/javascript/howto-proxy.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;51-1&quot;&gt;방법&lt;/a&gt;은 예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 없이 해 볼 수 있어요?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;contentType:application/x-www-form-urlencoded&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션을 추가해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 유형: &quot;json&quot;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt; function test_success(page,name,id,divname,str)
{ 
 var dropdownIndex = document.getElementById(name).selectedIndex;
 var dropdownValue = document.getElementById(name)[dropdownIndex].value;
 var params='&amp;amp;'+id+'='+dropdownValue+'&amp;amp;'+str;
 //makerequest_sp(url, params, divid1);

 $.ajax({
    url: page,
    type: &quot;post&quot;,
    data: params,
    // callback handler that will be called on success
    success: function(response, textStatus, jqXHR){
        // log a message to the console
        document.getElementById(divname).innerHTML = response;

        var retname = 'n_district';
        var dropdownIndex = document.getElementById(retname).selectedIndex;
        var dropdownValue = document.getElementById(retname)[dropdownIndex].value;
        if(dropdownValue &amp;gt;0)
        {
            //alert(dropdownValue);
            document.getElementById('inputname').value = dropdownValue;
        }
        else
        {
            document.getElementById('inputname').value = &quot;00&quot;;
        }
        return;
        url2=page2; 
        var params2 = parrams2+'&amp;amp;';
        makerequest_sp(url2, params2, divid2);

     }
});         
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 페이스북 API를 사용하려다 비슷한 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유일한 콘텐츠&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사전 비행 요청을 전송하지 않은 유형은 텍스트/보통인 것 같습니다...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 &lt;a href=&quot;https://developer.mozilla.org/en/http_access_control&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;56-1&quot;&gt;Mozilla&lt;/a&gt;에서 언급된 나머지 매개 변수는 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 이 브라우저만 이 기능을 하는 거죠?&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Facebook은 왜 비행 전 요청을 알고 받아들이지 않나요?&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고로 상기 Moz 문서에 따르면 X-Lori 헤더는 Pre-flighted 요청을 트리거해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않아요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버측에서 작업을 해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버측에서 PHP를 사용하고 있는 것을 알 수 있습니다만, 솔루션에서는 솔루션을 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET 웹 응용 프로그램이 &lt;a href=&quot;https://stackoverflow.com/questions/9754767/cannot-set-content-type-to-application-json-in-jquery-ajax/18740041#18740041&quot; papago-id=&quot;60-1&quot;&gt;있습니다. jQuery.ajax에서 content-type을 'application/json'&lt;/a&gt;으로 설정할 수 &lt;a href=&quot;https://stackoverflow.com/questions/9754767/cannot-set-content-type-to-application-json-in-jquery-ajax/18740041#18740041&quot; papago-id=&quot;60-1&quot;&gt;없습니다&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHP 스크립트에서 동일한 작업을 수행하면 작동합니다.&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;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 추가해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dataType: &quot;json&quot;,
ContentType: &quot;application/json&quot;,
data: JSON.stringify({&quot;method&quot;:&quot;getStates&quot;, &quot;program&quot;:&quot;EXPLORE&quot;}),  
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 서버에서 호스팅되는 Apache Solr에 데이터를 게시하고 싶을 때 프록시 URL을 사용하여 유사한 문제를 해결했습니다. (완벽한 답변은 아닐 수 있지만 문제가 해결됩니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://httpd.apache.org/docs/2.2/rewrite/proxy.html&amp;quot;&quot; papago-id=&quot;64-1&quot; rel=&quot;nofollow&quot;&gt;다음&lt;/a&gt; URL을 따릅니다.&lt;a href=&quot;http://httpd.apache.org/docs/2.2/rewrite/proxy.html&amp;quot;&quot; papago-id=&quot;64-1&quot; rel=&quot;nofollow&quot;&gt;프록시에 Mode-Rewrite를 사용&lt;/a&gt;하여 다음 행을 httpd.conf에 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; RewriteRule ^solr/(.*)$ http://ip:8983/solr$1 [P]
&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;따라서 http&lt;a href=&quot;http://ip:8983/solr/&quot; papago-id=&quot;65-1&quot;&gt;://ip:8983/solr&lt;/a&gt;/*&lt;a href=&quot;http://ip:8983/solr/&quot; papago-id=&quot;65-1&quot;&gt;&lt;/a&gt;에 데이터를 게시하는 대신 /solr에 데이터를 게시할 수 있습니다.&lt;/font&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;저는 이미 이 코드를 사용하여 cors 상황을 php로 잘 처리하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;header( 'Access-Control-Allow-Origin: '.CMSConfig::ALLOW_DOMAIN );
header( 'Access-Control-Allow-Headers: '.CMSConfig::ALLOW_DOMAIN );
header( 'Access-Control-Allow-Credentials: true' );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬 및 리모트에서는 정상적으로 동작하고 있었지만, 리모트에서는 업로드 할 수 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;apache/php 또는 내 코드에 무슨 문제가 생겼다면 굳이 검색하지 않고 OPTIONS를 요청하면 cors rule로 내 헤더를 반환하지만 결과는 302입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 내 브라우저는 허용 가능한 상황으로 인식되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Mark McDonald의 답변에 근거해, 내가 한 것은, 내 헤더 뒤에 다음의 코드를 넣는 것뿐이다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if( $_SERVER['REQUEST_METHOD'] === 'OPTIONS' )
{
    header(&quot;HTTP/1.1 202 Accepted&quot;);
    exit;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,를 때, 청청 now now 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;OPTIONS&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;202번입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주의해 주십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JSONP는 GET 요구 방식만 지원합니다.&lt;/font&gt;&lt;/strong&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;* Firefox로 &lt;em papago-id=&quot;74-1&quot;&gt;요청&lt;/em&gt; 전송:*&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
   type: 'POST',//&amp;lt;&amp;lt;===
   contentType: 'application/json',
   url: url,
   dataType: &quot;json&quot;//&amp;lt;&amp;lt;=============
    ...
});
&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;위의 요청은 OPTIONS(&lt;strong papago-id=&quot;75-3&quot;&gt;&lt;em papago-id=&quot;75-3-0&quot;&gt;옵션&lt;/em&gt;&lt;/strong&gt;)를 &lt;strong papago-id=&quot;75-1&quot;&gt;통해&lt;/strong&gt; 전송됩니다(유형: '&lt;strong papago-id=&quot;75-3&quot;&gt;&lt;em papago-id=&quot;75-3-0&quot;&gt;POST&lt;/em&gt;&lt;/strong&gt;').!!!&lt;strong papago-id=&quot;75-3&quot;&gt;&lt;em papago-id=&quot;75-3-0&quot;&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
    type: 'POST',//&amp;lt;&amp;lt;===
    contentType: 'application/json',
    url: url,
    dataType: &quot;jsonp&quot;//&amp;lt;&amp;lt;==============
    ...
});
&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;strong papago-id=&quot;76-1&quot;&gt;GET&lt;/strong&gt;으로 발송됩니다(단, ==&amp;gt; &lt;strong papago-id=&quot;76-3&quot;&gt;&lt;em papago-id=&quot;76-3-0&quot;&gt;유형:&lt;/em&gt;&lt;/strong&gt; '&lt;strong papago-id=&quot;76-3&quot;&gt;&lt;em papago-id=&quot;76-3-0&quot;&gt;POST&lt;/em&gt;&lt;/strong&gt;').!!!&lt;strong papago-id=&quot;76-3&quot;&gt;&lt;em papago-id=&quot;76-3-0&quot;&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「크로스 도메인 통신」의 경우는, 주의해 주세요.&lt;/font&gt;&lt;/em&gt; &lt;/p&gt;&lt;p papago-id=&quot;78&quot; papago-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/1099787/&lt;a href=&quot;https://stackoverflow.com/questions/1099787/jquery-ajax-post-sending-options-as-request-method-in-firefox&quot; target=&quot;_blank&quot; papago-id=&quot;78-1&quot;&gt;jquery-ajax-post-sending-options-as-request-method-in-firefox&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ajax</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/919</guid>
      <comments>https://bestcode.tistory.com/919#entry919comment</comments>
      <pubDate>Fri, 10 Feb 2023 21:56:32 +0900</pubDate>
    </item>
    <item>
      <title>CSRF와 Django, React+Redux(Axios 사용)</title>
      <link>https://bestcode.tistory.com/918</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSRF와 Django, React+Redux(Axios 사용)&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 교육 프로젝트이지 생산을 위한 것이 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업의 일부로 사용자 로그인을 의도한 것은 아닙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 로그인하지 않아도 CSRF 토큰을 사용하여 Django에 POST 콜을 발신할 수 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery를 사용하지 않고 이 작업을 수행할 수 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;난 여기서 내 전문을 벗어나서 몇 가지 개념을 확실히 혼란스럽게 하고 있어.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JavaScript 쪽에서는 이 &lt;a href=&quot;https://www.npmjs.com/package/redux-csrf&quot; papago-id=&quot;3-1&quot; rel=&quot;noreferrer&quot;&gt;redux-csrf&lt;/a&gt; 패키지를 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 조합해야 할지 모르겠어요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;POST&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;Axios:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;export const addJob = (title, hourly, tax) =&amp;gt; {
  console.log(&quot;Trying to addJob: &quot;, title, hourly, tax)
  return (dispatch) =&amp;gt; {
    dispatch(requestData(&quot;addJob&quot;));
    return axios({
      method: 'post',
      url: &quot;/api/jobs&quot;,
      data: {
        &quot;title&quot;: title,
        &quot;hourly_rate&quot;: hourly,
        &quot;tax_rate&quot;: tax
      },
      responseType: 'json'
    })
      .then((response) =&amp;gt; {
        dispatch(receiveData(response.data, &quot;addJob&quot;));
      })
      .catch((response) =&amp;gt; {
        dispatch(receiveError(response.data, &quot;addJob&quot;));
      })
  }
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Django 측에서는 CSRF에 관한 문서와 &lt;a href=&quot;https://docs.djangoproject.com/en/1.10/topics/class-based-views/intro/#decorating-class-based-views&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-3&quot;&gt;클래스&lt;/a&gt; 베이스 뷰에 관한 일반적인 작업에 관한 &lt;a href=&quot;https://docs.djangoproject.com/en/1.10/ref/csrf/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;문서를 읽어&lt;/a&gt; 보았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금까지의 제 견해는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class JobsHandler(View):

    def get(self, request):
        with open('./data/jobs.json', 'r') as f:
            jobs = json.loads(f.read())

        return HttpResponse(json.dumps(jobs))

    def post(self, request):
        with open('./data/jobs.json', 'r') as f:
            jobs = json.loads(f.read())

        new_job = request.to_dict()
        id = new_job['title']
        jobs[id] = new_job

        with open('./data/jobs.json', 'w') as f:
            f.write(json.dumps(jobs, indent=4, separators=(',', ': ')))

        return HttpResponse(json.dumps(jobs[id]))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일단은 걱정하지 않기 위해 데코레이터를 사용하려고 했습니다만, 그렇게 되지 않는 것 같습니다.&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;{% csrf_token %}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿으로 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;getCookie&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;function getCookie(name) {
    var cookieValue = null;
    if (document.cookie &amp;amp;&amp;amp; document.cookie !== '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i &amp;lt; cookies.length; i++) {
            var cookie = cookies[i].trim();
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.snip2code.com/Snippet/573695/override-axios-default-csrf-header-and-c&quot; papago-id=&quot;12-0&quot; rel=&quot;noreferrer&quot;&gt;Axios&lt;/a&gt; CSRF 정보를 변경해야 한다고&lt;a href=&quot;https://www.snip2code.com/Snippet/573695/override-axios-default-csrf-header-and-c&quot; papago-id=&quot;12-0&quot; rel=&quot;noreferrer&quot;&gt; 읽었습니다&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var axios = require(&quot;axios&quot;);
var axiosDefaults = require(&quot;axios/lib/defaults&quot;);

axiosDefaults.xsrfCookieName = &quot;csrftoken&quot;
axiosDefaults.xsrfHeaderName = &quot;X-CSRFToken&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;토큰을 이 토큰을 호출하면  수 있는 입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콜을 통해 얻을 수 있는 값&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getCookie('csrftoken')&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 Q&amp;amp;A는 2016년인데, 놀랄 것도 없이 상황이 바뀌었다고 생각합니다.&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;h3 papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션 1&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 헤더 설정&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Axios를 가져올 파일에서 기본 헤더를 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;import axios from 'axios';
axios.defaults.xsrfHeaderName = &quot;X-CSRFTOKEN&quot;;
axios.defaults.xsrfCookieName = &quot;csrftoken&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;19&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;Axios 호출에 수동으로 추가&lt;/font&gt;&lt;/h3&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;csrfToken&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 악시오스&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// ...
method: 'post',
url: '/api/data',
data: {...},
headers: {&quot;X-CSRFToken&quot;: csrfToken},
// ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;【&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; &lt;font class=&quot;papago-parent&quot;&gt;설정&lt;/font&gt;】&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xsrfHeaderName&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; in :&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/h3&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;// ...
method: 'post',
url: '/api/data',
data: {...},
xsrfHeaderName: &quot;X-CSRFToken&quot;,
// ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그 your your your  then&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;settings.py&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;합니다: 예, 예, 예, 예, 예, 예, 예, 예, 예, 예, 예, 예, 예, 예, 예, 예, 예, 예.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CSRF_COOKIE_NAME = &quot;XSRF-TOKEN&quot;
&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;em papago-id=&quot;27-2&quot;&gt;편집&lt;/em&gt;(2017년 &lt;em papago-id=&quot;27-2&quot;&gt;6월 10일):&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 @yestema는 Safari와는 조금&lt;sup papago-id=&quot;27-4&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/44479078/6172657&quot; papago-id=&quot;27-4-0&quot;&gt;[2]&lt;/a&gt;&lt;/sup&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;em papago-id=&quot;28-2&quot;&gt;편집&lt;/em&gt;(2019년 &lt;em papago-id=&quot;28-2&quot;&gt;4월 17일):&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 @GregHolst는 위의 Safari 솔루션이 자신에게 적합하지 않다고 말합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 위의 솔루션 #3을 MacOS Mojave에서 Safari 12.1에 사용했습니다(&lt;em papago-id=&quot;28-4&quot;&gt;댓글 참조&lt;/em&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;em papago-id=&quot;29-2&quot;&gt;편집&lt;/em&gt;(2019년 &lt;em papago-id=&quot;29-2&quot;&gt;2월 17일):&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또, 다음과 같이&lt;sup papago-id=&quot;29-4&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/54734106/6172657&quot; papago-id=&quot;29-4-0&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt; 설정할 필요가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;axios.defaults.withCredentials = true
&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;a href=&quot;https://gist.github.com/paltman/490049a64fa4115a2cea&quot; rel=&quot;noreferrer&quot; papago-id=&quot;30-1&quot;&gt;내&lt;/a&gt;가 시도했지만 효과가 없었다: 1&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;알아본 바로는, i가 i i, 건건 i i 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;axios.defaults.xsrfCookieName = &quot;XCSRF-TOKEN&quot;;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CSRF_COOKIE_NAME = &quot;XCSRF-TOKEN&quot;&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mac OS의 Apple Safari에서 작동하지 않음&lt;/font&gt;&lt;/strong&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;MAC Safari 용 솔루션은 간단합니다.로&lt;strong papago-id=&quot;34-1&quot;&gt; 변경하기&lt;/strong&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;따라서 js-code는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    import axios from 'axios';
    axios.defaults.xsrfHeaderName = &quot;X-CSRFTOKEN&quot;;
    axios.defaults.xsrfCookieName = &quot;csrftoken&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설정 중.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;py:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    CSRF_COOKIE_NAME = &quot;csrftoken&quot;
&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;a href=&quot;https://gist.github.com/krescruz/b431744b6b0e3eb6ce3892d61e837d28&quot; papago-id=&quot;37-1&quot; rel=&quot;noreferrer&quot;&gt;문제없이&lt;/a&gt; 기능합니다.&lt;a href=&quot;https://gist.github.com/krescruz/b431744b6b0e3eb6ce3892d61e837d28&quot; papago-id=&quot;37-1&quot; rel=&quot;noreferrer&quot;&gt;구성&lt;/a&gt; 악리 &lt;a href=&quot;https://gist.github.com/krescruz/b431744b6b0e3eb6ce3892d61e837d28&quot; papago-id=&quot;37-1&quot; rel=&quot;noreferrer&quot;&gt;CSRF django&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;import axios from 'axios'

/**
 * Config global for axios/django
 */
axios.defaults.xsrfHeaderName = &quot;X-CSRFToken&quot;
axios.defaults.xsrfCookieName = 'csrftoken'

export default axios&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위 답변에 대한 조사와 구현에 너무 많은 시간을 소비한 후, 이 문제에 대한 오류를 발견했습니다!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 답변은 수용된 답변의 보충으로 추가하였습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 것을 말씀드린 대로 셋업했습니다만, 실제로 브라우저 &lt;strong papago-id=&quot;38-1&quot;&gt;자체&lt;/strong&gt;에 gotcha가 있었습니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬로 테스트하는 경우는, 에 액세스 하고 있는 것을 확인해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;127.0.0.1&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;localhost&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;!&lt;/font&gt;&lt;/font&gt;&lt;code&gt;localhost&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 요구 헤더를 다르게 처리하고 헤더 응답에 CSRF 토큰을 표시하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;127.0.0.1&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;localhost:3000&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;127.0.0.1:3000&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;!&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;46&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;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;쉬운 방법&quot;이 내게 거의 먹힐 뻔했다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 효과가 있는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import axios from 'axios';
axios.defaults.xsrfHeaderName = &quot;X-CSRFTOKEN&quot;;
axios.defaults.xsrfCookieName = &quot;XCSRF-TOKEN&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;settings.py 파일에는 다음과 같은 내용이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CSRF_COOKIE_NAME = &quot;XCSRF-TOKEN&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 투고 요청에 수동으로 Django에서 제공한 CSRF 토큰을 추가할 수 있지만 번거롭습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.djangoproject.com/en/1.10/ref/csrf/#ajax&quot; rel=&quot;nofollow&quot; papago-id=&quot;50-1&quot;&gt;Django 문서&lt;/a&gt;에서:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AJAX POST 요구에는 상기의 방법(&lt;em papago-id=&quot;51-1&quot;&gt;수동&lt;/em&gt; 설정 &lt;em papago-id=&quot;51-1&quot;&gt;CSRF&lt;/em&gt; 토큰)을 사용할 수 있습니다만, POST 요구 마다 CSRF 토큰을 POST 데이터로서 건네주는 것을 잊지 말아 주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 다른 방법이 있습니다.각 XMLHttpRequest에서 커스텀 X-CSRFToken 헤더를 CSRF 토큰 값으로 설정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 JavaScript 프레임워크가 모든 요청에 대해 헤더를 설정할 수 있는 후크를 제공하기 때문에 이 작업은 종종 더 쉽습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서에는 CSRF 토큰 쿠키에서 CSRF 토큰을 꺼내 AJAX 요청 헤더에 추가하기 위해 사용할 수 있는 코드가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정말 쉬운 방법이 있어요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;axios.defaults.xsrfHeaderName = &quot;X-CSRFToken&quot;;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어플리케이션 설정에 맞추어 설정하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CSRF_COOKIE_NAME = &quot;XSRF-TOKEN&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;settings.py 파일을 참조해 주세요.&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;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 장고가 제가 보내는 헤더를 듣고 있지 않았어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;API로 컬링할 수 있었지만 엑시스로는 접근할 수 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/ottoyiu/django-cors-headers/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;57-1&quot;&gt;코르스헤더 패키지&lt;/a&gt; 좀 봐&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 베스트 프렌드일지도 몰라&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;장고코어 헤더를 설치하여 고쳤습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;pip install django-cors-headers
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 추가&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;INSTALLED_APPS = (
    ...
    'corsheaders',
    ...
)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;MIDDLEWARE = [  # Or MIDDLEWARE_CLASSES on Django &amp;lt; 1.10
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설정을 변경해 주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;화이&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALLOWED_HOSTS = ['*']
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
CORS_EXPOSE_HEADERS = (
    'Access-Control-Allow-Origin: *',
)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;settings.py에 있는 것은 과잉일지도 모릅니다.&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;yestema가 말한 것(그리고 crescruz, cran_man, Dave Merwin 등) 외에 다음과 같은 것도 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;axios.defaults.withCredentials = true
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/39254562/&lt;a href=&quot;https://stackoverflow.com/questions/39254562/csrf-with-django-reactredux-using-axios&quot; target=&quot;_blank&quot; papago-id=&quot;65-1&quot;&gt;csrf-with-django-reactredux-using-axios&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ReactJS</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/918</guid>
      <comments>https://bestcode.tistory.com/918#entry918comment</comments>
      <pubDate>Fri, 10 Feb 2023 21:56:20 +0900</pubDate>
    </item>
    <item>
      <title>WordPress REST API 글로벌 검색(API V2)</title>
      <link>https://bestcode.tistory.com/917</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WordPress REST API 글로벌 검색(API V2)&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WP REST API를 사용하여 전체 또는 여러 포스트 유형에 걸쳐 글로벌 검색 쿼리를 실행할 수 있는 방법을 찾고 있습니다.&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;http://example.com/wp-json/wp/v2/posts?search=test
&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;http://example.com/wp-json/wp/v2/pages?search=test
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;투고와 페이지 모두에서 검색하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 WP REST API V1에서 여러 개를 지정함으로써 이것을 할 수 있었다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;type[]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수를 쿼리에 포함합니까?&lt;/font&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;조금 늦을 수 있지만 v2-api에 해당 끝점이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/wp-json/wp/v2/search&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;post_type&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경유하여 공급함으로써&lt;/font&gt;&lt;/font&gt;&lt;code&gt;subtype&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 디폴트인 채로 둡니다(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;any&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 post_type을 검색합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&amp;nbsp;&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;REST API 검색 엔드포인트를 사용하여 모든 콘텐츠 또는 특정 콘텐츠유형을 검색하는 예를 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 사이트 콘텐츠에서 용어 검색&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;/wp-json/wp/v2/search/?search=searchterm&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용어 검색 및 사용자 지정 게시 유형으로 결과 제한&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;/wp-json/wp/v2/search/?subtype=book&amp;amp;search=searchterm&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용어 검색 및 여러 사용자 지정 게시 유형으로 결과 제한&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;/wp-json/wp/v2/search/?subtype[]=book&amp;amp;subtype[]=movie&amp;amp;search=searchterm&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://developer.wordpress.org/rest-api/reference/search-results/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;REST API 검색 결과 문서&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/38084765/&lt;a href=&quot;https://stackoverflow.com/questions/38084765/wordpress-rest-api-global-search-api-v2&quot; target=&quot;_blank&quot; papago-id=&quot;18-1&quot;&gt;wordpress-rest-api-global-search-api-v2&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/917</guid>
      <comments>https://bestcode.tistory.com/917#entry917comment</comments>
      <pubDate>Fri, 10 Feb 2023 21:55:55 +0900</pubDate>
    </item>
    <item>
      <title>오류: [ngModel:datefmt] 2015-05-29가 예상됨T19:06:16.693209Z가 날짜로 지정됨 - 각도</title>
      <link>https://bestcode.tistory.com/916</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류: [ngModel:datefmt] 2015-05-29가 예상됨&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;T19:06:16.693209Z가 날짜로 지정됨 - 각도&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업중입니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;angular&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;Django&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;rest-framework&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;앱은 서버로부터 json으로 정보를 받습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;열쇠 중 하나는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;created_time&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;... 이 필드의 값은 다음과 같이 포맷됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;iso-8601&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,예를들면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;2015-05-29T19:06:16.693209Z&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;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;&amp;lt;input type=&quot;time&quot; ng-model=&quot;created_time&quot;&amp;gt;
&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;Error: [ngModel:datefmt] Expected `2015-05-29T19:06:16.693209Z` to be a date http://errors.angularjs.org/1.3.13/ngModel/datefmt?p0=2015-05-29T19%3A06%3A16.693209Z
at REGEX_STRING_REGEXP (angular.js:63)
at Array.&amp;lt;anonymous&amp;gt; (angular.js:19807)
at Object.ngModelWatch (angular.js:23289)
at Scope.$get.Scope.$digest (angular.js:14235)
at Scope.$get.Scope.$apply (angular.js:14506)
at done (angular.js:9659)
at completeRequest (angular.js:9849)
at XMLHttpRequest.requestLoaded (angular.js:9790)
&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;저는 이미 모든 것을 시도해 보았습니다: (형식은 angular의 문서에 기재되어 있는 설명대로입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 wards ng-model의 각도 1.3+에서 발생해야 합니다.date/time 입력의 경우 유효한 날짜 개체여야 합니다.날짜 문자열 표현은 더 이상 허용되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열을 날짜 개체로 변환해야 합니다().&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$scope.created_time = new Date(dateString)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ng-model에 바인드합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.angularjs.org/error/ngModel/datefmt?p0=2015-05-29T19:06:16.693209Z&quot; papago-id=&quot;13-1&quot; rel=&quot;noreferrer&quot;&gt;에러&lt;/a&gt; 링크를 따라가면, 에러와 그 해결 방법이 명확하게 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 같은 모든 날짜 관련 입력에는 모델이 날짜 개체여야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모델이 다른 것일 경우 이 오류가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 Angular는 검증 오류를 사용자에게 표시하기 때문에 위의 검증 오류를 설정하지 않지만 오류 상태는 사용자가 아닌 잘못된 응용 프로그램 로직으로 인해 발생합니다.&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;REST 서비스에서 데이터를 가져오면 필드를 날짜로 변환할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$http.get(url).success(function(data){
     $scope.data = data; // get row data
     $scope.data.mydatefield = new Date($scope.data.mydatefield); // convert filed to date
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모델 값을 변환하는 간단한 지시문을 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input date-input type=&quot;time&quot; ng-model=&quot;created_time&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지시:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.directive('dateInput', function(){
    return {
        restrict : 'A',
        scope : {
            ngModel : '='
        },
        link: function (scope) {
            if (scope.ngModel) scope.ngModel = new Date(scope.ngModel);
        }
    }
});
&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;PSL의 답변에 더해서.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 각도가 1.3 이상인 요건을 Date 객체로 덮어쓰는 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;&amp;lt;input type=&quot;date&quot; ng-model=&quot;book.date&quot; date-format/&amp;gt;&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.directive('dateFormat', function() {
  return {
    require: 'ngModel',
    link: function(scope, element, attr, ngModelCtrl) {
      //Angular 1.3 insert a formater that force to set model to date object, otherwise throw exception.
      //Reset default angular formatters/parsers
      ngModelCtrl.$formatters.length = 0;
      ngModelCtrl.$parsers.length = 0;
    }
  };
});
&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;AngularFire $firebaseObject와 함께 사용할 수 있으며 $bindTo 3방향 바인딩에서도 정상적으로 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;$firebaseObject 서비스를 확장할 필요가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ionic/cordova 응용 프로그램에서 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/andrey3diq/oypbmvtj/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;21&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;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;a href=&quot;https://stackoverflow.com/a/29830783/6437038&quot; title=&quot;Angular의 날짜 입력 필드가 표시되는 이유&quot; papago-id=&quot;22-1&quot; papago-attr-id=&quot;2&quot;&gt;답변을 바탕으로&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜가 하루 단축되면 이 코드를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;new Date(moment.utc(value).format('l LT'))
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/26782917/model-is-not-a-date-object-on-input-in-angularjs#answer-27666804&quot; papago-id=&quot;24-1&quot;&gt;cs1707&lt;/a&gt; answer와 같은 방법으로 디렉티브를 작성해야 했지만 부분 문자열에서 시간 변환으로 해야 했습니다.&lt;/font&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;em papago-id=&quot;25-1&quot;&gt;다음&lt;/em&gt; 지시문을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.directive(&quot;formatTime&quot;, function(){
   return {
    require: 'ngModel',
    link: function(scope, elem, attr, modelCtrl) {
      modelCtrl.$formatters.push(function(modelValue){
        var string=modelValue;
        var date=new Date();
        var time=string.split(':');
        date.setHours(+time[0]);
        date.setMinutes(time[1]);
        date.setSeconds(time[2]);
        return date;
      })
    }
   }
 })
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;format-time&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;em papago-id=&quot;27-2&quot;&gt;HTML&lt;/em&gt; 입력 태그:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;time&quot; data-ng-model=&quot;mytime&quot; format-time&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;28-0&quot;&gt;문제&lt;/strong&gt; 사실 이것은 날짜 형식의 문제이며, 이 코드를 사용하여 이 문제를 해결했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;28-2&quot;&gt;솔루션:&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드 조각으로 이 문제를 해결할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;            var options = {
                weekday: &quot;long&quot;, year: &quot;numeric&quot;, month: &quot;short&quot;,
                day: &quot;numeric&quot;, hour: &quot;2-digit&quot;, minute: &quot;2-digit&quot;
            };
            $scope.created_time = $scope.created_time.toLocaleTimeString(&quot;en-us&quot;, options);
&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;여기서 en-us 형식 = &quot;2013년 2월 1일 금요일 06:00 AM&quot;, 다른 사람이 문제를 해결하는 데 도움이 되기를 바랍니다.저는 이러한 오류에 직면하여 이를 해결했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;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 class=&quot;papago-parent&quot;&gt; Dateedit.=userData에 개체를 되었습니다.1&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:$userData.dob=new Date(userData.dob), 2:$scope.edit.userdob=userData.dob; 사용자 데이터.dob; 사용자 데이터.dob; 사용자 데이터: 사용자 데이터.dob; 사용자 데이터: 사용자 데이터: 사용자 데이터.dob; 사용자 데이터.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개체가 있는 배열의 모든 날짜를 업데이트해야 하는 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var data = [
  { id: &quot;1&quot; , birthday: &quot;2016-01-20T11:24:20.882Z&quot;},
  { id: &quot;2&quot; , birthday: &quot;2016-01-20T11:24:20.882Z&quot;},
  { id: &quot;3&quot; , birthday: &quot;2016-01-20T11:24:20.882Z&quot;},
];

  function convertDataStingToObject (data) {
    for(var i=0; i &amp;lt; data.length; i++ ){
      console.log('string: ' + data[i].birthday);
      data[i].birthday = new Date(data[i].birthday);
      console.log('updated: ' + data[i].birthday);
      console.log(typeof(data[i].birthday));
    }

    return data;
  }

convertDataStingToObject(data);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/30537886/&lt;a href=&quot;https://stackoverflow.com/questions/30537886/error-ngmodeldatefmt-expected-2015-05-29t190616-693209z-to-be-a-date-a&quot; target=&quot;_blank&quot; papago-id=&quot;33-1&quot;&gt;error-ngmodeldatefmt-expected-2015-05-29t190616-693209z-to-be-a-date-a&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/916</guid>
      <comments>https://bestcode.tistory.com/916#entry916comment</comments>
      <pubDate>Fri, 10 Feb 2023 21:55:38 +0900</pubDate>
    </item>
    <item>
      <title>ReactJS 애플리케이션의 MVVM 아키텍처 패턴</title>
      <link>https://bestcode.tistory.com/915</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ReactJS 애플리케이션의 MVVM 아키텍처 패턴&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;react&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;JavaScript&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 유니버설, 유니버설, 유니버설 등  개를 만들었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;react&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;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오늘 당사의 CTO에서 다음과 같이 &lt;em papago-id=&quot;5-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;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;Android&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;용 which which 하는 팀&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MVVM&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응용 프로그램에 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;욕심을 부리고 있지만 트렌드 방법론이나 예를 찾을 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 쓴 적이 있어요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Redux&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;Redux-Saga&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;React-Context&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기타 등등.&lt;/font&gt;&lt;/font&gt;&lt;/font&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;우리 CTO에게 어떻게 설명해야 할지 모르겠고 그의 답변은 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;14-1&quot;&gt;따라서&lt;/strong&gt;: &lt;strong papago-id=&quot;14-1&quot;&gt;앱에 정말로 소프트웨어&lt;/strong&gt; 아키텍처&lt;strong papago-id=&quot;14-1&quot;&gt; &lt;/strong&gt;패턴이 &lt;strong papago-id=&quot;14-1&quot;&gt;필요&lt;/strong&gt;한가?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;React 자체는 소프트웨어 아키텍처에 대해 특별히 고집하는 것은 아닙니다.&lt;/font&gt;&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;상태 및 데이터 공유(prop) 관리 지침과 함께 재사용 가능한 구성요소 패러다임을 촉진하는 라이브러리입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 느느음, 음음음음음음음음 음음음음음음음 at at at at this this라고 했다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;the V in MVC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;후 좀 더 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;A JavaScript library for building user interfaces&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 React 앱과 관련된 일반적인 툴링은 함께 사용할 경우 아키텍처와 같은 일부에 적합합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;생각할 수 있는 몇 가지 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Simple React 애플리케이션은 &quot;VVM&quot; 또는 &quot;VC&quot;일 수 있습니다.&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MVC는 아마도 개발업계에서 둘 중 더 잘 알려져 있을 것이다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨트롤러(C)와 뷰 모델(VM)의 주요 개념적 차이는 한마디로 요약할 수 있습니다.&lt;strong papago-id=&quot;21-1&quot;&gt;컨트롤러&lt;/strong&gt;는 이벤트를 수신하여 올바른 방향으로 라우팅하는 등 다양한 역할을 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;애플리케이션 전체의 기능을 용이하게 하는 접착제입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;반면 뷰 &lt;strong papago-id=&quot;21-3&quot;&gt;모델&lt;/strong&gt;은 단순히 데이터의 현재 상태를 모델에 부착하는 역할을 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 Facebook의 &quot;V in MVC&quot;의 원래 용도는 &quot;V in MVVM&quot;일 수도 있습니다.- 컨트롤러라는 용어는 백엔드 개발 세계에서 더 의미가 있습니다.&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;컴포넌트에 Redux &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fetch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 있다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;componentDidMount&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 데이터 경합이 제한된 GraphQL)을 활용하는 것은 단순한 &quot;VVM&quot; 모델이라고 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;26-0&quot;&gt;View-Model(VM):&lt;/strong&gt; 컴포넌트 관련 코드로 단순한 상태를 관리하고 데이터를 View에 직접 전달하며 잠재적으로 View에서 직접 데이터를 전달할 수 있습니다.&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;strong papago-id=&quot;27-0&quot;&gt;표시(V):&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;비주얼 (JSX, CSS)&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;복잡함을 더하면 &quot;MVVM&quot;/&quot;MVC&quot;라고 부를 수 있습니다.&lt;/font&gt;&lt;/h2&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;redux-saga&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 단순한 Respect 컴포넌트 상태로 엉뚱한 일을 시작할 수도 있습니다.모델 조작을 도입하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;strong papago-id=&quot;30-1&quot;&gt;모델(M)&lt;/strong&gt;은 다음 두 가지 이상을 나타낼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응용 프로그램의 실제 비즈니스 로직&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클라이언트의 복잡한 동작 저장 및 관리&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비즈니스 로직은 실제로는 바람직하지 않을 수 있습니다.예를 들어 서버를 제어할 수 있다면 모든 비즈니스 로직을 한 곳에 보관하고 사용자와 대화하기 위해 필요한 것을 UI에 제공하는 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 REST 엔드포인트가 한정되어 있어 (예를 들어 sagas 또는 컴포넌트 내에서) 논쟁을 벌여야 하는 경우에는 비즈니스 논리입니다.&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;클라이언트의 동작 관리는, 특히 세션에 근거해 유저에게 다른 것을 표시하는 등, 복잡한 애플리케이션(미등록 유저 대 유저 대 admin 등)에서 행해집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;클라이언트만 사용하도록 포함된 모든 Redux 저장소 상호 작용에서 이 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;35-0&quot;&gt;면책사항&lt;/strong&gt;: MVC, MVVM 등에 대해 논의하면 정확히 무엇을 의미하는지 &lt;em papago-id=&quot;35-2&quot;&gt;여러&lt;/em&gt; 가지 의견이 나올 수 있습니다[1].&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;앞에서 본 공통 패턴과 MVC/MVVM에 어떻게 적합한지 간에 유사점을 도출하려고 했지만, 접근 방법이나 보다 세부적인 방법이 많이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템이 알기 쉽다면, 사용 사례와 개발 규모에 맞는 수준으로 모듈러형, 드라이형, 추상형 등 라벨을 붙이는 데 너무 집착하지 않을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[1] 이 &lt;a href=&quot;https://stackoverflow.com/questions/667781/what-is-the-difference-between-mvc-and-mvvm&quot; papago-id=&quot;36-1&quot;&gt;질문에 대한 답변과 코멘트&lt;/a&gt;에서 좀 더 길게 논의됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Vue 3은 MVVM:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;      Proxy       Update
  Model → ViewModel → View
  Model ← ViewModel ← View
      Update      Event
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대응:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;     setState     Update
  Model → ViewModel → View
  Model ← ViewModel ← View
      Update      Event
&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;차이점은 프레임워크가 ViewModel로의 변경을 모델에 통지하는 방법뿐입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단순한 웹 앱에는 MVC, MVVM이 필요하지 않으며 리액트 IMO도 필요하지 않습니다. 심플 리액트의 진화 가능성&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS App은 PWA(Progressive Web App)가 되려고 할 경우 MVVM/MVC/의 필요성을 인식할 수 있습니다.&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;그런 다음 로컬 스토리지 또는 IndexedDB(웹용) 또는 Back-End/Rest/에서 정보를 가져올 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 모델, 스토리지/리포지토리/INFO/View Model/또는 컨트롤러/View를 분리하는 것이 자연스럽고 실제로 모든 것이 올바르게 작동하기 위해 필요합니다.&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/51506440/&lt;a href=&quot;https://stackoverflow.com/questions/51506440/mvvm-architectural-pattern-for-a-reactjs-application&quot; target=&quot;_blank&quot; papago-id=&quot;41-1&quot;&gt;mvvm-architectural-pattern-for-a-reactjs-application&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ReactJS</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/915</guid>
      <comments>https://bestcode.tistory.com/915#entry915comment</comments>
      <pubDate>Fri, 10 Feb 2023 21:55:28 +0900</pubDate>
    </item>
    <item>
      <title>TypeScript / Angular에서 인터페이스 및 모델을 사용하는 경우</title>
      <link>https://bestcode.tistory.com/914</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TypeScript / Angular에서 인터페이스 및 모델을 사용하는 경우&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;최근에 TypeScript를 사용하여 Angular 2에 대한 튜토리얼을 봤지만, 언제 인터페이스를 사용해야 하는지, 언제 모델을 데이터 구조에 사용해야 하는지 잘 모르겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인터페이스의 예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;export interface IProduct {
    ProductNumber: number;
    ProductName: string;
    ProductDescription: string;
}
&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;export class Product {
    constructor(
        public ProductNumber: number,
        public ProductName: string,
        public ProductDescription: string
    ){}
}
&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;URL에서 JSON 데이터를 로드하여 인터페이스/모델에 바인드하고 싶습니다.&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;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 수신된 예상 데이터가 특정 구조를 따르는지 확인할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위해 콘텐츠를 다음 인터페이스에 캐스팅할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;this.http.get('...')
    .map(res =&amp;gt; &amp;lt;Product[]&amp;gt;res.json());
&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;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/22875636/how-do-i-cast-a-json-object-to-a-typescript-class&quot; papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JSON 개체를 타이프스크립트 클래스에 캐스팅하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/35917808/how-to-get-date-object-from-json-response-in-typescript/35923990&quot; papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타이프스크립트의 json Response에서 날짜 개체를 가져오는 방법&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스와 유사한 작업을 수행할 수 있지만 클래스와 가장 큰 차이점은 실행 시(컨스트럭터 함수)에 존재하며 처리와 함께 메서드를 정의할 수 있다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이 경우 개체를 사용하려면 개체를 인스턴스화해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;this.http.get('...')
    .map(res =&amp;gt; {
      var data = res.json();
      return data.map(d =&amp;gt; {
        return new Product(d.productNumber,
          d.productName, d.productDescription);
      });
    });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;11-1&quot;&gt;인터페이스&lt;/strong&gt;는 &lt;em papago-id=&quot;11-3&quot;&gt;클래스&lt;/em&gt; 또는 &lt;em papago-id=&quot;11-5&quot;&gt;새로운&lt;/em&gt; 유형에 대한 계약을 설명합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;순수 Typescript 요소이므로 Javascript에는 영향을 주지 않습니다.&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;em papago-id=&quot;12-1&quot;&gt;클래스&lt;/em&gt;는 새로운 객체를 생성하기 위해 사용되는 실제 JS 함수입니다.&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;URL에서 JSON 데이터를 로드하여 인터페이스/모델에 바인드하고 싶습니다.&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;모델을 선택해 주세요.그렇지 않으면 Javascript에 JSON으로 표시됩니다.&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;저는 개인적으로 모델을 위해 인터페이스를 사용하고 있습니다.이 질문에 관한 학교는 3곳으로 되어 있습니다.가장 많은 경우, 어느 쪽을 선택하는 것은 고객의 요건에 따라 다음 중 하나를 선택합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;strong papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1- 인터페이스:&lt;/font&gt;&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;interface&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 TypeScript 컨텍스트 &lt;strong papago-id=&quot;17-1&quot;&gt;내&lt;/strong&gt;에서만 존재하는 &lt;strong papago-id=&quot;17-1&quot;&gt;가상&lt;/strong&gt; 구조입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;TypeScript 컴파일러는 인터페이스를 형식 확인 목적으로만 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드가 대상 언어로 변환되면 해당 인터페이스에서 제거됩니다. JavaScript는 입력되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-ts prettyprint-override&quot;&gt;&lt;code&gt;interface User {
 id: number;
 username: string;
}
// inheritance
interface UserDetails extends User {
 birthdate: Date;
 biography?: string;  // use the '?' annotation to mark this property as optionnal
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mapping server response to an 서버 응답을 에 매핑합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;interface&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; is straight forward if you are using 를 사용하고 있는 경우는, 스트레이트입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HttpClient&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;HttpClientModule&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 4.3.x와 위에 있는 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular 4.3.x 이상을 사용하는 경우.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-ts prettyprint-override&quot;&gt;&lt;code&gt;getUsers() :Observable&amp;lt;User[]&amp;gt; {
 return this.http.get&amp;lt;User[]&amp;gt;(url); // no need for '.map((res: Response) =&amp;gt; res.json())' 
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인터페이스를 사용하는 경우:&lt;/font&gt;&lt;/strong&gt;&lt;/p&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;최종 출력에 추가 오버헤드를 발생시키지 않고 서버 데이터에 대한 정의만 필요합니다.&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;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;ul&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Using simple object-literal notation간단한 객체 문자 표기법 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;let instance: FooInterface = { ... };&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 당신은 그 장소에 반란을 겪고 있는 위험을 무릅쓰고 있다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;온 사방에 반신반의할 위험이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
   &lt;li papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스(생성자 또는 초기화 로직, 검증, 개인 필드의 캡슐화...)에 의해 주어지는 제약조건은 적용되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기타)&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li papago-id=&quot;29&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;h2&gt;&lt;strong papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2- 클래스:&lt;/font&gt;&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splited&quot;&gt;A &lt;/font&gt;&lt;code&gt;class&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;청사진&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 오브젝트가 상속하는 논리, 메서드 및 속성을 나타냅니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-ts prettyprint-override&quot;&gt;&lt;code&gt;class User {
 id: number;
 username: string;
 constructor(id :number, username: string)  {
  this.id = id;
  this.username = username.replace(/^\s+|\s+$/g, ''); // trim whitespaces and new lines
 }
}
// inheritance
class UserDetails extends User {
 birthdate: Date;
 biography?: string;  
 constructor(id :number, username: string, birthdate:Date, biography? :string )  {
   super(id,username);
  this.birthdate = ...;
 }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;32&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;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스를 인스턴스화하고 시간이 지남에 따라 인스턴스 상태를 변경할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스의 인스턴스에는 상태를 쿼리하거나 변환하기 위한 메서드가 필요합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동작을 데이터와 보다 밀접하게 관련짓고 싶은 경우&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인스턴스 생성에 제약을 적용합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스 내에서 속성 할당만 많이 작성하는 경우 대신 유형을 사용하는 것을 고려할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;&lt;strong papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2 - 유형:&lt;/font&gt;&lt;/strong&gt;&lt;/h2&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;types&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응용 프로그램 내에서 논리나 상태를 표현하지 마십시오.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 형식의 정보를 기술할 때는 유형을 사용하는 것이 가장 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열, 배열 및 개체와 같은 단순한 구조에서 다양한 형태의 데이터를 설명할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인터페이스와 마찬가지로 타입은 자바스크립트로 변환되지 않는 가상 구조일 뿐이며 컴파일러가 우리의 삶을 쉽게 만드는 데 도움이 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-ts prettyprint-override&quot;&gt;&lt;code&gt;type FamilySituation = 'single' | 'married' | 'divorced' | 'widow' ;...
type User = {
 id: number;
 username: string;
}
// inheritance
type UserDetails = User &amp;amp; {
  birthDate: Date;
  familySituation: FamilySituation ;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;41&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;42&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;43&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;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;API에서 들어오고 나가는 작은 개체 또는 중간 개체를 문서화합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;45&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;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버로부터의 데이터 수신과 컴포넌트간의 모델 송신(인텔리센스 리스트의 보관과 디자인 타임 에러의 발생)에 대해서는, @ThierryTemplier가 말했듯이, 인터페이스를 사용하는 것은 좋지만, 서버(DTO)에 데이터를 송신하는 경우는 클래스를 사용해 모델의 자동 매핑 DTO를 활용하는 것이 좋다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응답에 항상 필요한 키가 있는지 확인하기 위해 데이터 유형만 확인하는 경우 인터페이스를 사용하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단순한 데이터 유형 확인 이상의 클래스/모델을 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;게다가 인터페이스가 javascript에 존재하지 않는 것은 좋은 일입니다.즉, typescript는 항상 javascript 네이티브인 컴파일 시 언릭클래스에 인터페이스를 처리합니다.&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;인터페이스를 만들고 클래스 컨스트럭터로 인터페이스 유형을 전달합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 의존성 주입을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이점:&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;50&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;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;51-0&quot;&gt;모든&lt;/strong&gt; 연구 끝에 발견한 인터페이스 &lt;strong papago-id=&quot;51-0&quot;&gt;대신 클래스를 사용&lt;/strong&gt;합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜요? 클래스만 class-plus-interface보다 코드 수가 적습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(어쨌든 데이터 모델의 클래스가 필요할 수 있습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜? 클래스가 인터페이스로 작동할 수 있습니다(확장 대신 구현 사용).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이유는 무엇입니까? 인터페이스 클래스는 각도 종속성 주입에서 공급자 검색 토큰이 될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://angular.io/guide/styleguide#style-03-03&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각도 스타일 가이드에서&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 클래스는 인터페이스의 모든 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;56-1&quot;&gt;따라서&lt;/strong&gt; 인터페이스를 &lt;strong papago-id=&quot;56-1&quot;&gt;사용할 필요가 없을&lt;/strong&gt; 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/37652801/&lt;a href=&quot;https://stackoverflow.com/questions/37652801/when-to-use-interface-and-model-in-typescript-angular&quot; target=&quot;_blank&quot; papago-id=&quot;57-1&quot;&gt;when-to-use-interface-and-model-in-typescript-angular&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>typescript</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/914</guid>
      <comments>https://bestcode.tistory.com/914#entry914comment</comments>
      <pubDate>Fri, 10 Feb 2023 21:55:16 +0900</pubDate>
    </item>
    <item>
      <title>Java 바이트 버퍼에서 문자열로</title>
      <link>https://bestcode.tistory.com/913</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;이 방법으로 ByteBuffer를 String으로 변환하는 것이 올바른 접근 방식입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String k = &quot;abcd&quot;;
ByteBuffer b = ByteBuffer.wrap(k.getBytes());
String v = new String(b.array());

if(k.equals(v))
    System.out.println(&quot;it worked&quot;);
else
    System.out.println(&quot;did not work&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;그 이유는 Java: &lt;a href=&quot;https://stackoverflow.com/questions/1252468/java-converting-string-to-and-from-bytebuffer-and-associated-problems&quot; papago-id=&quot;2-1&quot;&gt;ByteBuffer &lt;/a&gt;및&lt;a href=&quot;https://stackoverflow.com/questions/1252468/java-converting-string-to-and-from-bytebuffer-and-associated-problems&quot; papago-id=&quot;2-1&quot;&gt; 관련 문제와의 변환&lt;/a&gt;과 같은 &lt;a href=&quot;https://stackoverflow.com/questions/1252468/java-converting-string-to-and-from-bytebuffer-and-associated-problems&quot; papago-id=&quot;2-1&quot;&gt;다른&lt;/a&gt; 접근법이 더 복잡해 보이기 때문입니다&lt;a href=&quot;https://stackoverflow.com/questions/1252468/java-converting-string-to-and-from-bytebuffer-and-associated-problems&quot; papago-id=&quot;2-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;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;a there there there there 、 there 、 there 、 there 、 there 、 there 、 there 、 there 、 there 、 there there there there there there there there there there there 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ByteBuffer&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;String&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 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;String s = StandardCharsets.UTF_8.decode(byteBuffer).toString();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em 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;편집(2018):&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;@&lt;a href=&quot;https://stackoverflow.com/a/39845152/320399&quot; papago-id=&quot;6-2&quot;&gt;xinyongCheng에 &lt;/a&gt;의해 &lt;a href=&quot;https://stackoverflow.com/a/39845152/320399&quot; papago-id=&quot;6-2&quot;&gt;편집된 형제답변&lt;/a&gt;은 더 &lt;a href=&quot;https://stackoverflow.com/a/39845152/320399&quot; papago-id=&quot;6-2&quot;&gt;단순한 접근법&lt;/a&gt;이며, &lt;a href=&quot;https://stackoverflow.com/a/39845152/320399&quot; papago-id=&quot;6-2&quot;&gt;받아들여지는 답변이어야 합니다&lt;/a&gt;.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;k.getBytes()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플랫폼 기본 문자 집합의 바이트를 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/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;font class=&quot;papago-parent&quot;&gt;String API는 특정 인코딩에서 String 배열과 byte[] 배열 사이를 변환하는 메서드를 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 방법에서는 &quot;&lt;em papago-id=&quot;9-1&quot;&gt;디코딩 [인코딩]프로세스에 대한&lt;/em&gt; 추가 &lt;em papago-id=&quot;9-1&quot;&gt;제어가 필요한 경우&lt;/em&gt;&quot; Charset Encoder/Charset Decoder 사용을 권장합니다.&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;특정 인코딩의 문자열에서 바이트를 가져오려면 형제 getBytes() 메서드를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;byte[] bytes = k.getBytes( StandardCharsets.UTF_8 );
&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;특정 인코딩을 가진 바이트를 String에 넣으려면 다른 String 컨스트럭터를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String v = new String( bytes, StandardCharsets.UTF_8 );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ByteBuffer.array()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 옵션 조작입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열을 사용하여 ByteBuffer를 구성한 경우 해당 배열을 직접 사용할 수 있습니다.&lt;/font&gt;&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;ByteBuffer.get(byte[] dst, int offset, int length)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;버퍼에서 바이트 배열로 바이트를 가져옵니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p 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;new String(bytebuffer.array(), &quot;ASCII&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주의: 인코딩을 모르면 바이트 배열을 문자열로 올바르게 변환할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 도움이 됐으면 좋겠다&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ByteBuffer.array()가 항상 동작한다고 가정하는 것은 안전하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;byte[] bytes;
if(buffer.hasArray()) {
    bytes = buffer.array();
} else {
    bytes = new byte[buffer.remaining()];
    buffer.get(bytes);
}
String v = new String(bytes, charset);
&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;보통 buffer.hasArray()는 사용 사례에 따라 항상 true 또는 false입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로는 어떤 상황에서도 실제로 기능하는 것을 원하지 않는 한 불필요한 브랜치를 최적화하는 것이 안전합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 나머지 응답은 ByteBuffer.allocateDirect()를 통해 작성된 ByteBuffer에서는 작동하지 않을 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 콜링(Calling)을 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;array()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지 않습니다('버퍼 사용'을할 수 .&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;버퍼가 부분적으로 사용되고 있거나 어레이의 일부를 참조하고 있는 경우(이 경우,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ByteBuffer.wrap&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 class=&quot;papago-parent&quot;&gt;이것은, 모든 경우에 버퍼에 대해서 기능하는 일반적인 솔루션입니다(부호화에는 대응하지 않습니다).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (myByteBuffer.hasArray()) {
    return new String(myByteBuffer.array(),
        myByteBuffer.arrayOffset() + myByteBuffer.position(),
        myByteBuffer.remaining());
} else {
    final byte[] b = new byte[myByteBuffer.remaining()];
    myByteBuffer.duplicate().get(b);
    return new String(b);
}
&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;부호화와 관련된 문제는 Andy Thomas의 답변을 참조하십시오.&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;strong papago-id=&quot;24-1&quot;&gt;바이트를 문자열로 디코딩하는 방법&lt;/strong&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;이것은, JAVA NIO CharSet 를 사용해 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;public final CharBuffer decode(ByteBuffer bb) &lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;FileChannel channel = FileChannel.open(
  Paths.get(&quot;files/text-latin1.txt&quot;, StandardOpenOption.READ);
ByteBuffer buffer = ByteBuffer.allocate(1024);
channel.read(buffer);

CharSet latin1 = StandardCharsets.ISO_8859_1;
CharBuffer latin1Buffer = latin1.decode(buffer);

String result = new String(latin1Buffer.array());
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;26&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;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 Latin1 버퍼를 char 버퍼로 디코딩합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 예를 들어 String에 결과를 넣을 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;strong papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Java를 사용하여 문자열을 ByteBuffer로 변환한 후 ByteBuffer에서 String으로 되돌립니다.&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import java.nio.charset.Charset;
import java.nio.*;

String babel = &quot;obufscate thdé alphebat and yolo!!&quot;;
System.out.println(babel);
//Convert string to ByteBuffer:
ByteBuffer babb = Charset.forName(&quot;UTF-8&quot;).encode(babel);
try{
    //Convert ByteBuffer to String
    System.out.println(new String(babb.array(), &quot;UTF-8&quot;));
}
catch(Exception e){
    e.printStackTrace();
}
&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;그러면 먼저 인쇄된 베어 문자열이 출력되고 다음으로 바이트 버퍼가 array()에 캐스트됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;obufscate thdé alphebat and yolo!!
obufscate thdé alphebat and yolo!!
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 문자열을 원시 바이트로 줄이면 무슨 일이 일어나고 있는지 확인하는 데 도움이 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String text = &quot;こんにちは&quot;;
//convert utf8 text to a byte array
byte[] array = text.getBytes(&quot;UTF-8&quot;);
//convert the byte array back to a string as UTF-8
String s = new String(array, Charset.forName(&quot;UTF-8&quot;));
System.out.println(s);
//forcing strings encoded as UTF-8 as an incorrect encoding like
//say ISO-8859-1 causes strange and undefined behavior
String sISO = new String(array, Charset.forName(&quot;ISO-8859-1&quot;));
System.out.println(sISO);
&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;UTF-8로 해석된 문자열을 인쇄하고 ISO-8859-1로 다시 인쇄합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;こんにちは
ããã«ã¡ã¯
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(부호화 문제와는 별도로) 링크되어 있는 보다 복잡한 코드 중 일부는 단순히 백업 어레이 전체의 모든 바이트를 부호화하는 것이 아니라 (예를 들어 위치와 제한을 사용하여) 문제의 바이트 버퍼의 &quot;액티브&quot; 부분을 얻는 문제가 발생한다는 점에 유의하십시오.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;private String convertFrom(String lines, String from, String to) {
    ByteBuffer bb = ByteBuffer.wrap(lines.getBytes());
    CharBuffer cb = Charset.forName(to).decode(bb);
    return new String(Charset.forName(from).encode(cb).array());
};
public Doit(){
    String concatenatedLines = convertFrom(concatenatedLines, &quot;CP1252&quot;, &quot;UTF-8&quot;);
};
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바이트 버퍼를 문자열로 변환하는 간단한 함수를 다음에 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public String byteBufferToString(ByteBuffer bufferData) {
    byte[] buffer = new byte[bufferData.readableByteCount()];
    // read bufferData and insert into buffer 
    data.read(buffer);
    // CharsetUtil supports UTF_16, ASCII, and many more
    String text = new String(buffer, CharsetUtil.UTF_8);
    System.out.println(&quot;Text: &quot;+text);
    return text;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 방법만이 나에게 효과가 있었다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;java.nio.ByteBuffer&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;code&gt;String fileContent = new String(bb.array(), StandardCharsets.UTF_8);&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;관련 코드 스니펫은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.channels.FileChannel;
import java.nio.ByteBuffer;


Path path = Paths.get(&quot;/home/binita/testbb&quot;);
FileChannel fileChannel = FileChannel.open(path, 
                 EnumSet.of(StandardOpenOption.READ
                    )
                 );  
            
ByteBuffer bb = ByteBuffer.allocate(1024);
int bytesRead = fileChannel.read(bb);
if(bytesRead &amp;gt; 0) {
 String fileContent = new String(bb.array(), StandardCharsets.UTF_8);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레퍼런스&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/17354891/&lt;a href=&quot;https://stackoverflow.com/questions/17354891/java-bytebuffer-to-string&quot; target=&quot;_blank&quot; papago-id=&quot;38-1&quot;&gt;java-bytebuffer-to-string&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>java</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/913</guid>
      <comments>https://bestcode.tistory.com/913#entry913comment</comments>
      <pubDate>Mon, 6 Feb 2023 23:36:14 +0900</pubDate>
    </item>
    <item>
      <title>Python에서 두 목록을 연결하려면 어떻게 해야 하나요?</title>
      <link>https://bestcode.tistory.com/912</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python에서 두 목록을 연결하려면 어떻게 해야 하나요?&lt;/font&gt;&lt;/h2&gt;
&lt;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 mr8&quot;&gt; 
     &lt;svg aria-hidden=&quot;true&quot; class=&quot;svg-icon iconLock&quot; width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 18 18&quot;&gt;
      &lt;path d=&quot;M16 9a2 2 0 0 0-2-2V6A5 5 0 0 0 4 6v1a2 2 0 0 0-2 2v6c0 1.1.9 2 2 2h10a2 2 0 0 0 2-2V9Zm-7 5a2 2 0 1 1 0-4 2 2 0 0 1 0 4Zm3.1-7H5.9V6a3.1 3.1 0 0 1 6.2 0v1Z&quot;&gt;&lt;/path&gt;
     &lt;/svg&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot; papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문의 답변&lt;/b&gt;은 &lt;b papago-id=&quot;1-1&quot;&gt;&lt;a href=&quot;/help/privileges/edit-community-wiki&quot; papago-id=&quot;1-1-1&quot;&gt;지역사회&lt;/a&gt;&lt;/b&gt;의&lt;b papago-id=&quot;1-1&quot;&gt; 노력&lt;/b&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기존 답변을 편집하여 이 게시물을 개선하십시오.&lt;/font&gt;&lt;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;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python에서 두 목록을 연결하려면 어떻게 해야 하나요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;listone = [1, 2, 3]
listtwo = [4, 5, 6]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예상 결과:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; joinedlist
[1, 2, 3, 4, 5, 6]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 하다를 사용하세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;+&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이치노&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;listone = [1, 2, 3]
listtwo = [4, 5, 6]

joinedlist = listone + listtwo
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; joinedlist
[1, 2, 3, 4, 5, 6]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&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;Python 이 python &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;gt;= 3.5&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;[*l1, *l2]&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급할 가치가 있는 또 다른 대안이 수용을 통해 도입되었다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「Additional &lt;strong papago-id=&quot;11-1&quot;&gt;&lt;em papago-id=&quot;11-1-0&quot;&gt;Unpacking&lt;/em&gt;&lt;/strong&gt; Generalizations」라는 &lt;strong papago-id=&quot;11-1&quot;&gt;&lt;em papago-id=&quot;11-1-0&quot;&gt;제목&lt;/em&gt;&lt;/strong&gt;의 PEP에서는, 통상, 별표를 사용할 때의 통사상의 제약이 몇개인가 경감되고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python 。&lt;/font&gt;&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;&amp;gt;&amp;gt;&amp;gt; l1 = [1, 2, 3]
&amp;gt;&amp;gt;&amp;gt; l2 = [4, 5, 6]
&amp;gt;&amp;gt;&amp;gt; joined_list = [*l1, *l2]  # unpack both iterables in a list literal
&amp;gt;&amp;gt;&amp;gt; print(joined_list)
[1, 2, 3, 4, 5, 6]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;em papago-id=&quot;13-1&quot;&gt;기능&lt;/em&gt;은 Python용으로 &lt;em papago-id=&quot;13-1&quot;&gt;정의되어 있습니다&lt;/em&gt;.이 기능은 Python의 이전 버전에는 백포트되지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;3.x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;되지 않는 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;에서는, 「」가&lt;font class=&quot;papago-parent&quot;&gt; 됩니다&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SyntaxError&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;올라간다고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 접근법과 마찬가지로, 이 &lt;em papago-id=&quot;16-1&quot;&gt;접근법&lt;/em&gt;도 대응하는 리스트의 &lt;em papago-id=&quot;16-1&quot;&gt;요소&lt;/em&gt;의 얕은 &lt;em papago-id=&quot;16-1&quot;&gt;카피&lt;/em&gt;를 작성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;17-1&quot;&gt;이&lt;/strong&gt; 접근법의 장점은 이 작업을 수행하기 위해 목록이 정말로 필요하지 않다는 것입니다. 반복할 수 있는 모든 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PEP에 기재된 바와 같이:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&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; 방법은 반복 하는 더  쉬운 합니다.  것은은 this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this this 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;my_list + list(my_tuple) + list(my_range)&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;[*my_list, *my_tuple, *my_range]&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;/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 class=&quot;papago-parent&quot;&gt; 그를 붙이는 동안 가를 붙이는 거예요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;+&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TypeError&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「 」의 「 」의 「 」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;l = [1, 2, 3]
r = range(4, 7)
res = l + r
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 항목은 지원되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;res = [*l, *r]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그 '반복적인'을 이기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;list&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 내용에서.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용하여 두 목록의 항목을 반복하는 생성기를 만들 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 항목을 새 목록에 복사하지 않고 목록(또는 반복 가능)을 함께 연결하여 처리할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-python prettyprint-override&quot;&gt;&lt;code&gt;import itertools
for item in itertools.chain(listone, listtwo):
    # Do something with each list item
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 메서드를 사용하여 다음 명령어를 추가할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;list&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;listone = [1,2,3]
listtwo = [4,5,6]

listone.extend(listtwo)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 그대로하려면 새  수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;list&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; 및  &quot; &quot; &quot; &quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;extend&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 다 목록에 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mergedlist = []
mergedlist.extend(listone)
mergedlist.extend(listtwo)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;집합을 사용하여 고유한 값의 병합 목록을 가져올 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mergedlist = list(set(listone + listtwo))
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt; 
 &lt;h3&gt;&lt;strong papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python에서 두 목록을 연결하려면 어떻게 해야 하나요?&lt;/font&gt;&lt;/strong&gt;&lt;/h3&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3.9 현재 이것들은 파이썬에서 두 개 이상의 목록을 연결하는 가장 일반적인 stdlib 메서드입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cRqfa.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cRqfa.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;1&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각주&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 간결하기 때문에 매끄러운 해결책이다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sum&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;are&lt;/font&gt;는 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; &lt;font class=&quot;papago-parent&quot;&gt;use차 &lt;/font&gt;do 、&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;차 、 차 、 차 、 차 、&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;。&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서를 참조해 주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 필요가 있다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;import itertools&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫째, 연결은 메모리에서 선형이기 때문에 성능 및 버전 호환성이 가장 우수합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;chain.from_iterable&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;6에 되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 방법에서는 Additional &lt;a href=&quot;https://www.python.org/dev/peps/pep-0448/&quot; papago-id=&quot;42-1&quot; rel=&quot;noreferrer&quot;&gt;Unpacking&lt;/a&gt; Generalizations(PEP &lt;a href=&quot;https://www.python.org/dev/peps/pep-0448/&quot; papago-id=&quot;42-1&quot; rel=&quot;noreferrer&quot;&gt;448)&lt;/a&gt;를 &lt;a href=&quot;https://www.python.org/dev/peps/pep-0448/&quot; papago-id=&quot;42-1&quot; rel=&quot;noreferrer&quot;&gt;사용&lt;/a&gt;하지만 각 목록을 수동으로 풀지 않으면 N개의 목록으로 일반화할 수 없습니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;p&gt;&lt;code&gt;a += b&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a.extend(b)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 실질적인 목적에 대해 거의 동등합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;+=&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;으로 호출됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;list.__iadd__&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 목록을 두 번째 확장합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;/ol&gt; 
&lt;/blockquote&gt; 
&lt;hr&gt; 
&lt;h1 papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성능&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2-리스트 연결&lt;/font&gt;&lt;/strong&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mfQTe.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mfQTe.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;2&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 방법들 사이에 큰 차이는 없지만, 모두 같은 복잡도 순서(선형)를 가지고 있다는 것을 고려하면 이는 타당합니다.&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;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;N-리스트 연결&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XcX7A.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XcX7A.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;3&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/nschloe/perfplot&quot; rel=&quot;noreferrer&quot; papago-id=&quot;51-1&quot;&gt;성능&lt;/a&gt;도 모듈을 사용하여 그림이 생성되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://gist.github.com/Coldsp33d/0a0e0e0eee8377489aed01358fe33a47&quot; rel=&quot;noreferrer&quot; papago-id=&quot;51-3&quot;&gt;참고로 코드입니다.&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;sub&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.  1. »&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;iadd&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; )&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;+=&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 및 )의 개요&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;extend&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;/sub&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h1 papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기타 솔루션에 대한 코멘트&lt;/font&gt;&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; Method를 하지 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;list.__add__&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 식으로든, 형태나, 형태에 상관없이 직접.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메서드는  및 를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;operator&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설계한 것과 같은 기능을 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python은 단지 Dunder를 직접 호출하는 것보다 더 복잡한 의미론들을 가지고 있다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/53984203/4909087&quot; papago-id=&quot;59-1&quot;&gt;여기&lt;/a&gt; 예가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 요약하자면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a.__add__(b)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&amp;gt;  =&amp;gt; 불량;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a + b&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;=&amp;gt; 좋좋다다다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 가지 답변은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;reduce(operator.add, [a, b])&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; -- 은 pairwise concatination의 경우와 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sum([a, b], [])&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;말이 많아질 뿐이지&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「」를 사용하는 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;set&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중복이 삭제되어 순서가 없어집니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의하주&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;code&gt;for i in b: a.append(i)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a.extend(b)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 단일 함수 호출이며 보다 관용적입니다.&lt;/font&gt;&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;append&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;69&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 목록에 메모리를 할당하고 확장하는 의미론 때문에 속도가 느립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유사한 내용은 여기를 &lt;a href=&quot;https://stackoverflow.com/questions/537086/reserve-memory-for-list-in-python&quot; papago-id=&quot;69-1&quot;&gt;참조&lt;/a&gt;하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;code&gt;heapq.merge&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 동작하지만, 그 사용 사례는 정렬된 목록을 선형 시간 내에 병합하기 위한 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 상황에서 사용하는 것은 안티 패턴입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;code&gt;yield&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방식이지만, &quot;는 &quot; &quot;입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;chain&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는, 이것을 고속화해, 보다 뛰어난 성능을 실현합니다(C에는 코드 패스가 있기 때문에, 고속입니다).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;code&gt;operator.add(a, b)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 허용 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a + b&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;a + b&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 짧고 읽기 쉽다고 &lt;em papago-id=&quot;53-1&quot;&gt;생각&lt;/em&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;YMMV&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 매우 간단한 것으로, &lt;a href=&quot;http://docs.python.org/tutorial/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;76-1&quot;&gt;튜토리얼에 기재&lt;/a&gt;되어 있는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; listone = [1,2,3]
&amp;gt;&amp;gt;&amp;gt; listtwo = [4,5,6]
&amp;gt;&amp;gt;&amp;gt;
&amp;gt;&amp;gt;&amp;gt; listone + listtwo
[1, 2, 3, 4, 5, 6]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문에서는 두 가지 목록에 참여하는 방법을 직접 묻습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 많은 목록에 가입하는 방법을 찾고 있는 경우에도 검색량이 상당히 높습니다(제로 목록에 가입하는 경우 포함).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 좋은 방법은 목록 통합을 사용하는 것이라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; a = [[1,2,3], [4,5,6], [7,8,9]]
&amp;gt;&amp;gt;&amp;gt; [x for xs in a for x in xs]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;생성기를 만들 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; map(str, (x for xs in a for x in xs))
['1', '2', '3', '4', '5', '6', '7', '8', '9']
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;80&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;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;a = [[1,2,3], [4,5,6], [7,8,9]]
reduce(lambda c, x: c + x, a, [])
&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;[1, 2, 3, 4, 5, 6, 7, 8, 9]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 또, 이 때, 이 때, 이렇게 하면 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[[1,2,3]]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게  더 으로 할 수요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;itertools&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a = [[1,2,3], [4,5,6], [7,8,9]]
list(itertools.chain(*a))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 필요 없는 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;list&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, '은 하고 '반복'은 생략합니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;list()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;92&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;93&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Patrick Collins가 코멘트에서 제안한 대안도 도움이 될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sum(a, [])
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;+&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;64&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;+=&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;65&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;츠키다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a = [1, 2, 3]
b = [4, 5, 6]

c = a + b
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;97&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 다음 중 하나를 선택합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;c = []
a = [1, 2, 3]
b = [4, 5, 6]

c += (a + b)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 Marge된 목록의 값을 원하는 경우 다음을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;c = list(set(a + b))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이 문장이라는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;itertools.chain&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수는 변수 개수의 인수를 받아들입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; l1 = ['a']; l2 = ['b', 'c']; l3 = ['d', 'e', 'f']
&amp;gt;&amp;gt;&amp;gt; [i for i in itertools.chain(l1, l2)]
['a', 'b', 'c']
&amp;gt;&amp;gt;&amp;gt; [i for i in itertools.chain(l1, l2, l3)]
['a', 'b', 'c', 'd', 'e', 'f']
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;68&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 가능, 이 입력은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;from_iterable&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;69&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스 메서드를 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; il = [['a'], ['b', 'c'], ['d', 'e', 'f']]
&amp;gt;&amp;gt;&amp;gt; [i for i in itertools.chain.from_iterable(il)]
['a', 'b', 'c', 'd', 'e', 'f']
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;103&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록 수가 적은 경우 목록을 함께 추가하거나 일괄 언팩(Python-3.5+에서 사용 가능)을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [1]: listone = [1, 2, 3] 
   ...: listtwo = [4, 5, 6]                                                                                                                                                                                 

In [2]: listone + listtwo                                                                                                                                                                                   
Out[2]: [1, 2, 3, 4, 5, 6]
                                                                                                                                                                                     
In [3]: [*listone, *listtwo]                                                                                                                                                                                
Out[3]: [1, 2, 3, 4, 5, 6]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;70&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 많은 으로 「하다」를 사용할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;chain.from_iterable()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;sup papago-id=&quot;71-0&quot;&gt;1&lt;/sup&gt; 에서 기능하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;itertools&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;72&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모듈.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/953097/2867928&quot; papago-id=&quot;72-1&quot;&gt;또한&lt;/a&gt; 이 답변에 &lt;a href=&quot;https://stackoverflow.com/a/953097/2867928&quot; papago-id=&quot;72-1&quot;&gt;&lt;em papago-id=&quot;72-1-0&quot;&gt;따르면&lt;/em&gt;&lt;/a&gt; 이 함수가 가장 좋거나 적어도 중첩 목록을 평준화하는 데 매우 좋은 방법입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; l=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
&amp;gt;&amp;gt;&amp;gt; import itertools
&amp;gt;&amp;gt;&amp;gt; list(itertools.chain.from_iterable(l))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;sub papago-id=&quot;107&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1. 체인(chain)에 주의해 주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;from_itable()'은 Python 2.6 이후에 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 버전에서는 chain(*l)을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/sub&gt;&lt;p papago-id=&quot;108&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python 3.3+를 사용하면 다음 항목에서 &lt;a href=&quot;https://docs.python.org/3/whatsnew/3.3.html#pep-380&quot; rel=&quot;noreferrer&quot; papago-id=&quot;108-1&quot;&gt;yield&lt;/a&gt;를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;listone = [1,2,3]
listtwo = [4,5,6]

def merge(l1, l2):
    yield from l1
    yield from l2

&amp;gt;&amp;gt;&amp;gt; list(merge(listone, listtwo))
[1, 2, 3, 4, 5, 6]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;109&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 임의의 수의 반복기를 지원하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def merge(*iters):
    for it in iters:
        yield from it

&amp;gt;&amp;gt;&amp;gt; list(merge(listone, listtwo, 'abcd', [20, 21, 22]))
[1, 2, 3, 4, 5, 6, 'a', 'b', 'c', 'd', 20, 21, 22]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 정렬된 경우는, 「」를 할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;merge&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;74&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;heapq&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;75&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;from heapq import merge

a = [1, 2, 4]
b = [2, 4, 6, 7]

print list(merge(a, b))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;76&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 연산자 「」 「」  「」)를 할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;+&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;77&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;operator&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;78&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Import:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import operator

listone = [1,2,3]
listtwo = [4,5,6]

result = operator.add(listone, listtwo)
print(result)

&amp;gt;&amp;gt;&amp;gt; [1, 2, 3, 4, 5, 6]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;79&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;외에 '먹다'를 할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__add__&lt;/code&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;80&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://wiki.python.org/moin/DunderAlias&quot; rel=&quot;noreferrer&quot; papago-id=&quot;80-0&quot;&gt;던더&lt;/a&gt; 함수:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;listone = [1,2,3]
listtwo = [4,5,6]

result = list.__add__(listone, listtwo)
print(result)

&amp;gt;&amp;gt;&amp;gt; [1, 2, 3, 4, 5, 6]
&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;복잡한 정렬 규칙을 가진 2개의 순서 목록을 병합해야 할 경우 다음 코드와 같이 직접 롤링해야 할 수 있습니다(가독성을 위해 단순 정렬 규칙을 사용).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;list1 = [1,2,5]
list2 = [2,3,4]
newlist = []

while list1 and list2:
    if list1[0] == list2[0]:
        newlist.append(list1.pop(0))
        list2.pop(0)
    elif list1[0] &amp;lt; list2[0]:
        newlist.append(list1.pop(0))
    else:
        newlist.append(list2.pop(0))

if list1:
    newlist.extend(list1)
if list2:
    newlist.extend(list2)

assert(newlist == [1, 2, 3, 4, 5])
&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;NumPy를 사용하는 경우 다음 명령을 사용하여 호환되는 치수의 두 배열을 연결할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;numpy.concatenate([a,b])
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;120&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 목록 이해를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;joined_list = [item for list_ in [list_one, list_two] for item in list_]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;121&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 &lt;a href=&quot;https://www.python.org/dev/peps/pep-0448/&quot; papago-id=&quot;121-1&quot; rel=&quot;noreferrer&quot;&gt;Additional Unpacking&lt;/a&gt; Generalizations를 &lt;a href=&quot;https://www.python.org/dev/peps/pep-0448/&quot; papago-id=&quot;121-1&quot; rel=&quot;noreferrer&quot;&gt;사용&lt;/a&gt;하는 최신 접근법의 모든 장점을 가지고 있습니다.즉, 임의의 수의 다른 반복 가능(예를 들어 목록, 튜플, 범위, 생성기)을 그러한 방식으로 연결할 수 있습니다.또한 Python 3.5 이후에만 국한되지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;122&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 방법:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; listone = [1, 2, 3]
&amp;gt;&amp;gt;&amp;gt; listtwo = [4, 5, 6]
&amp;gt;&amp;gt;&amp;gt; joinedlist = [*listone, *listtwo]
&amp;gt;&amp;gt;&amp;gt; joinedlist
[1, 2, 3, 4, 5, 6]
&amp;gt;&amp;gt;&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;list(set(listone) | set(listtwo))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;123&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;81&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 많은 분들이 지적하셨듯이&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;itertools.chain()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;82&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;양쪽 리스트에 완전히 &lt;em papago-id=&quot;82-1&quot;&gt;동일&lt;/em&gt;한 치료를 &lt;em papago-id=&quot;82-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&gt;&lt;code&gt;itertools.chain()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;83&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 합니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for it in iterables:
    for element in it:
        yield element
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;127&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.python.org/2/library/itertools.html&quot; papago-id=&quot;127-1&quot; rel=&quot;noreferrer&quot;&gt;(&lt;/a&gt;https://docs.python.org/2/library/&lt;a href=&quot;https://docs.python.org/2/library/itertools.html&quot; papago-id=&quot;127-1&quot; rel=&quot;noreferrer&quot;&gt;itertools&lt;/a&gt;.html),을 참조해 주세요.그래서 저는 여기서 영감을 얻어 다음과 같이 글을 썼습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for iterable, header, flag in ( (newList, 'New', ''), (modList, 'Modified', '-f')):
    print header + ':'
    for path in iterable:
        [...]
        command = 'cp -r' if os.path.isdir(srcPath) else 'cp'
        print &amp;gt;&amp;gt; SCRIPT , command, flag, srcPath, mergedDirPath
        [...]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;84&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해야 할 수 있는 한 경우일 이라는 점, 그리고 리스트는 다른 것과 같은 이다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;for ... in&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;85&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;python의 loops는 태플 변수와 함께 작동할 수 있으므로 여러 변수를 동시에 루프하는 것이 간단합니다.&lt;/font&gt;&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;86&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 해서 '아까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까요?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;append()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;87&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;list&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;88&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;: &quot; &quot; &quot; :&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mergedlist =[]
for elem in listone:
    mergedlist.append(elem)
for elem in listtwo:
    mergedlist.append(elem)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;133&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록을 연결하려면 세 가지 방법을 권장합니다만, 첫 번째 방법이 가장 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# easiest and least complexity method &amp;lt;= recommended

listone = [1, 2, 3]
listtwo = [4, 5, 6]

newlist = listone + listtwo
print(newlist)

# 2nd easiest method
newlist = listone.copy()
newlist.extend(listtwo)
print(newlist)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;89&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서는 '어울리다', '어울리다', '어울리다'를 배정을 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;newlist&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;90&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; of of &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;listone&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;91&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 않기 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;listone&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;92&quot;&gt;&lt;font 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;# 3rd method
newlist = listone.copy()
for j in listtwo:
    newlist.append(j)

print(newlist)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;138&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록을 연결하기 위해 루프를 사용하기 때문에 목록을 연결하는 방법은 좋지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 다른 두 가지 방법보다 시간이 훨씬 더 복잡합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;139&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록 연결에 사용되는 가장 일반적인 방법은 &lt;strong papago-id=&quot;139-1&quot;&gt;더하기&lt;/strong&gt; 연산자와 삽입 &lt;strong papago-id=&quot;139-3&quot;&gt;메서드&lt;/strong&gt; 추가입니다. 예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;list = [1,2]

list = list + [3]
# list = [1,2,3]

list.append(3) 
# list = [1,2,3]

list.append([3,4]) 
# list = [1,2,[3,4]]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;140&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 경우 이 기능은 작동하지만 목록이 추가되어도 &lt;strong papago-id=&quot;140-1&quot;&gt;추가&lt;/strong&gt; 기능은 확장되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 예상되지 않기 때문에 확장이라는 &lt;strong papago-id=&quot;140-3&quot;&gt;다른&lt;/strong&gt; 방법을 사용할 수 있습니다. 구조물에 대해 작동해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;list = [1,2]
list.extend([3,4]) 
# list = [1,2,3,4]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;141&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록 목록을 조합하는 정말 간결한 방법은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;list_of_lists = [[1,2,3], [4,5,6], [7,8,9]]
reduce(list.__add__, list_of_lists)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;142&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 결과&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[1, 2, 3, 4, 5, 6, 7, 8, 9]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;143&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 두 가지 쉬운 방법이 있다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;144&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Using : 제공된 목록에서 새 목록을 &lt;strong papago-id=&quot;144-0&quot;&gt;만듭니다&lt;/strong&gt;.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;145&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [1]: a = [1, 2, 3]

In [2]: b = [4, 5, 6]

In [3]: a + b
Out[3]: [1, 2, 3, 4, 5, 6]

In [4]: %timeit a + b
10000000 loops, best of 3: 126 ns per loop
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li papago-id=&quot;146&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;146-0&quot;&gt;확장&lt;/strong&gt; 사용:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기존 목록에 새 목록이 추가됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 별도의 목록이 생성되지 않습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;147&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [1]: a = [1, 2, 3]

In [2]: b = [4, 5, 6]

In [3]: %timeit a.extend(b)
10000000 loops, best of 3: 91.1 ns per loop
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;93&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 가장 인 두 방법 중 &quot;&quot; &quot; &quot; &quot; &quot; &quot; &quot; 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;extend&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;94&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;95&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; '하다'로 써도 요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sum&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;96&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; a = [1, 2, 3]
&amp;gt;&amp;gt;&amp;gt; b = [4, 5, 6]
&amp;gt;&amp;gt;&amp;gt; sum([a, b], [])
[1, 2, 3, 4, 5, 6]
&amp;gt;&amp;gt;&amp;gt; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;152&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은, 임의의 길이와 임의의 요소 타입의 리스트에 대해서 기능합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; a = ['a', 'b', 'c', 'd']
&amp;gt;&amp;gt;&amp;gt; b = [1, 2, 3, 4]
&amp;gt;&amp;gt;&amp;gt; c = [1, 2]
&amp;gt;&amp;gt;&amp;gt; sum([a, b, c], [])
['a', 'b', 'c', 'd', 1, 2, 3, 4, 1, 2]
&amp;gt;&amp;gt;&amp;gt; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;97&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;붙이는유 하는 이유&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;98&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는, 「 」가, 「 」에 근거하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;start&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;99&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 「인수」로 되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;100&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해, 「이러다」, 「이러다」에 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;start&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;101&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0 + [1, 2, 3]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;102&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에, 「」을 「이러면」으로 했을 경우, 「이러면」이 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;start&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;103&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로로 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;104&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; , 에요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;105&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[] + [1, 2, 3]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;106&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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; a=[1,2,3]
 b=[4,5,6]

 c=a+b
 print(c)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;163&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;gt;&amp;gt;&amp;gt; [1, 2, 3, 4, 5, 6]
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;164&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 코드에서는 &quot;+&quot; 연산자를 사용하여 두 목록을 하나의 목록으로 연결합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;165&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; a=[1,2,3]
 b=[4,5,6]
 c=[] #Empty list in which we are going to append the values of list (a) and (b)

 for i in a:
     c.append(i)
 for j in b:
     c.append(j)

 print(c)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;166&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; [1, 2, 3, 4, 5, 6]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;167&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;168&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;169&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스트링처럼 연결하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def concat_list(l1,l2):
    l3 = l1+l2
    return l3
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;170&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;def concat_list(l1,l2):
   l3 = []
   for i in [l1,l2]:
     for j in i:   
       if j not in l3:   
         #Check if element exists in final list, if no then add element to list
         l3.append(j)
   return l3
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;171&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제공되는 솔루션은 단일 목록에 대한 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;리스트 내에 리스트가 있어 대응하는 리스트의 Marge가 필요한 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;+&quot; 연산은 for loop을 통과합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a=[[1,2,3],[4,5,6]]

b=[[0,1,2],[7,8,9]]

for i in range(len(a)):
    cc.append(a[i]+b[i])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;172&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력: [[1, 2, 3, 0, 1, 2], [4, 5, 6, 7, 8, 9]&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;import itertools

A = list(zip([1,3,5,7,9],[2,4,6,8,10]))
B = [1,3,5,7,9]+[2,4,6,8,10]
C = list(set([1,3,5,7,9] + [2,4,6,8,10]))

D = [1,3,5,7,9]
D.append([2,4,6,8,10])

E = [1,3,5,7,9]
E.extend([2,4,6,8,10])

F = []
for a in itertools.chain([1,3,5,7,9], [2,4,6,8,10]):
    F.append(a)


print (&quot;A: &quot; + str(A))
print (&quot;B: &quot; + str(B))
print (&quot;C: &quot; + str(C))
print (&quot;D: &quot; + str(D))
print (&quot;E: &quot; + str(E))
print (&quot;F: &quot; + str(F))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;173&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;A: [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
B: [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
C: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
D: [1, 3, 5, 7, 9, [2, 4, 6, 8, 10]]
E: [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
F: [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;174&quot; papago-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/1720421/&lt;a href=&quot;https://stackoverflow.com/questions/1720421/how-do-i-concatenate-two-lists-in-python&quot; target=&quot;_blank&quot; papago-id=&quot;174-1&quot;&gt;how-do-i-concatenate-two-lists-in-python&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PYTHON</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/912</guid>
      <comments>https://bestcode.tistory.com/912#entry912comment</comments>
      <pubDate>Mon, 6 Feb 2023 23:35:43 +0900</pubDate>
    </item>
    <item>
      <title>MySQL RESTRICT와 No ACTION</title>
      <link>https://bestcode.tistory.com/911</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL RESTRICT와 No ACTION&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;MySQL FK의 차이점은 무엇입니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RESTRICT&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;NO ACTION&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의사선생님께선 똑같아 보이시는데요&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 사실인가요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 왜 둘 다 가지고 있는 거죠?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 문서: https&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html&quot; papago-id=&quot;4-1&quot; rel=&quot;noreferrer&quot;&gt;://&lt;/a&gt;dev.mysql.com/doc/refman/8.0/en/&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html&quot; papago-id=&quot;4-1&quot; rel=&quot;noreferrer&quot;&gt;create-table-foreign-keys&lt;/a&gt;.html 에서 입수 가능&lt;/font&gt;&lt;/p&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&gt;&lt;/font&gt;&lt;code&gt;NO ACTION&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지연수표입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL에서는 외부 키 제약이 즉시 확인되므로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NO ACTION&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 같다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RESTRICT&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;/blockquote&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 표준 SQL 구문을 준수하기 위한 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;설명서&lt;/a&gt;에 나와 있는 것처럼: (내 것을 강조함)&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;액션 없음: &lt;strong papago-id=&quot;10-1&quot;&gt;표준 SQL의 키워드&lt;/strong&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL에서는 RESTRICT에 해당합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL Server는 참조된 테이블에 관련된 외부 키 값이 있는 경우 부모 테이블의 삭제 또는 업데이트 작업을 거부합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;10-3&quot;&gt;일부 데이터베이스 시스템에는 검사가 지연되어 있으며 NO ACTION은 지연된 검사입니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;10-3&quot;&gt; MySQL에서는 외부 키 제약이 즉시 확인되므로 NO ACTION은 RESTRICT와 동일합니다.&lt;/strong&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;MySQL에서도 동일합니다.&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;SQL 2003 표준에는 5가지 참조 액션이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CASCADE
RESTRICT
NO ACTION
SET NULL
SET DEFAULT
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 차이점&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NO ACTION&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;RESTRICT&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;NO ACTION&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;RESTRICT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉시 행동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/5809954/&lt;a href=&quot;https://stackoverflow.com/questions/5809954/mysql-restrict-and-no-action&quot; target=&quot;_blank&quot; papago-id=&quot;18-1&quot;&gt;mysql-restrict-and-no-action&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/911</guid>
      <comments>https://bestcode.tistory.com/911#entry911comment</comments>
      <pubDate>Mon, 6 Feb 2023 23:35:24 +0900</pubDate>
    </item>
    <item>
      <title>timedelta를 총 초수로 변환</title>
      <link>https://bestcode.tistory.com/910</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;timedelta를 총 초수로 변환&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 class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;import time
import datetime

time1 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
...
time2 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
diff = time2 - time1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 경과한 총 초수를 어떻게 찾을 수 있을까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;code&gt;diff.seconds&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일수는 중요하지 않아&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 할 수 있다:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;diff.seconds + diff.days * 24 * 3600
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 내장된 방법이 있나요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import datetime
&amp;gt;&amp;gt;&amp;gt; datetime.timedelta(seconds=24*60*60).total_seconds()
86400.0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 식으로든 문제가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))&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;(1) 2개의 인스턴스(instance)의 초단위의 차이만 필요한 경우, 매우 간단한 것은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;time.time()&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 papago-id=&quot;10&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;code&gt;gmtime()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UTC &lt;strong papago-id=&quot;11-1&quot;&gt;단위&lt;/strong&gt;의 시간 태플을 반환하지만&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mktime()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;12-1&quot;&gt;는 현지시간&lt;/strong&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;저는 표준 TZ가 UTC+10인 호주 멜버른에 있습니다만, 서머타임이 내일 아침까지 유효하기 때문에 UTC+11입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래를 실행했을 때는 현지시간으로 2011-04-02T20:31 이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;UTC는 2011-04-02T09:31이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import time, datetime
&amp;gt;&amp;gt;&amp;gt; t1 = time.gmtime()
&amp;gt;&amp;gt;&amp;gt; t2 = time.mktime(t1)
&amp;gt;&amp;gt;&amp;gt; t3 = datetime.datetime.fromtimestamp(t2)
&amp;gt;&amp;gt;&amp;gt; print t0
1301735358.78
&amp;gt;&amp;gt;&amp;gt; print t1
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=9, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=0) ### this is UTC
&amp;gt;&amp;gt;&amp;gt; print t2
1301700663.0
&amp;gt;&amp;gt;&amp;gt; print t3
2011-04-02 10:31:03 ### this is UTC+1
&amp;gt;&amp;gt;&amp;gt; tt = time.time(); print tt
1301736663.88
&amp;gt;&amp;gt;&amp;gt; print datetime.datetime.now()
2011-04-02 20:31:03.882000 ### UTC+11, my local time
&amp;gt;&amp;gt;&amp;gt; print datetime.datetime(1970,1,1) + datetime.timedelta(seconds=tt)
2011-04-02 09:31:03.880000 ### UTC
&amp;gt;&amp;gt;&amp;gt; print time.localtime()
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=20, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=1) ### UTC+11, my local time
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;t3, 식 결과는 UTC+1로 UTC+(로컬 DST의 차이)로 표시됩니다.&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;datetime.datetime.utcnow()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 DST가 켜지거나 꺼질 때 1시간도 빠르게 진행되지 않으며 보다 정밀도가 향상될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;time.time()&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2개의 datetime 객체의 차이를 취득하고 그 차이를 초수로 변환하는 보다 콤팩트한 방법을 다음에 나타냅니다(Python 3x).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from datetime import datetime
        
time1 = datetime.strftime('18 01 2021', '%d %m %Y')
    
time2 = datetime.strftime('19 01 2021', '%d %m %Y')

difference = time2 - time1

difference_in_seconds = difference.total_seconds()
&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;mx를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Date Time 모듈&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import mx.DateTime as mt

t1 = mt.now() 
t2 = mt.now()
print int((t2-t1).seconds)
&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;URL : https://stackoverflow.com/questions/5522031/&lt;a href=&quot;https://stackoverflow.com/questions/5522031/convert-timedelta-to-total-seconds&quot; target=&quot;_blank&quot; papago-id=&quot;18-1&quot;&gt;convert-timedelta-to-total-seconds&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PYTHON</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/910</guid>
      <comments>https://bestcode.tistory.com/910#entry910comment</comments>
      <pubDate>Mon, 6 Feb 2023 23:35:19 +0900</pubDate>
    </item>
    <item>
      <title>팬더 DataFrame에서 열의 값이 최대인 행을 찾습니다.</title>
      <link>https://bestcode.tistory.com/909</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;팬더 DataFrame에서 열의 값이 최대인 행을 찾습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 열의 값이 &lt;strong papago-id=&quot;1-1&quot;&gt;최대&lt;/strong&gt;인 행을 찾으려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;df.max()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;판다 기능을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import pandas
&amp;gt;&amp;gt;&amp;gt; import numpy as np
&amp;gt;&amp;gt;&amp;gt; df = pandas.DataFrame(np.random.randn(5,3),columns=['A','B','C'])
&amp;gt;&amp;gt;&amp;gt; df
          A         B         C
0  1.232853 -1.979459 -0.573626
1  0.140767  0.394940  1.068890
2  0.742023  1.343977 -0.579745
3  2.125299 -0.649328 -0.211692
4 -0.187253  1.908618 -1.862934
&amp;gt;&amp;gt;&amp;gt; df['A'].idxmax()
3
&amp;gt;&amp;gt;&amp;gt; df['B'].idxmax()
4
&amp;gt;&amp;gt;&amp;gt; df['C'].idxmax()
1
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 '하다'를 사용할 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;numpy.argmax&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 「」, 「」등입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;numpy.argmax(df['A'])&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;idxmax&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;략적대&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;idxmax()&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;/strong&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예': 행 'a'에서 'e'까지와 같이 인덱스 레이블로 문자열 값이 있는 경우 최대값이 행 'd'가 아닌 행 4에서 발생함을 알 수 있습니다.&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;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;Index&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수동으로 취득할 필요가 있습니다(행 라벨의 중복이 허가되고 있기 때문에, 이것은 복잡해질 가능성이 있습니다).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr&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;ul&gt; 
 &lt;li&gt;&lt;code&gt;idxmax()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://pandas.pydata.org/pandas-docs/version/0.11.0/whatsnew.html&quot; papago-id=&quot;13-1&quot; rel=&quot;noreferrer&quot;&gt;이전&lt;/a&gt;에는 0.11 &lt;a href=&quot;https://pandas.pydata.org/pandas-docs/version/0.11.0/whatsnew.html&quot; papago-id=&quot;13-1&quot; rel=&quot;noreferrer&quot;&gt;이전부터 호출&lt;/a&gt;되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://pandas.pydata.org/pandas-docs/version/1.0.0/whatsnew/v1.0.0.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;argmax&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;1.01..0.0.0으로 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 0으로 되돌아가면, 0.16으로 되돌아가다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;argmax&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에는 같은 존재하여 되었습니다(단, 가 느리다고 생각됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;idxmax&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 참조해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;argmax&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;em papago-id=&quot;18-1&quot;&gt;정수&lt;/em&gt; 위치를 반환했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;19-0&quot;&gt;판다들은 정수 지수 대신 행 라벨을 사용하는 것으로 이동했다.&lt;/strong&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;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;DataFrame&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;된 행이 있는 경우: &quot; &quot; &quot; &quot; &quot; &quot; &quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [19]: dfrm
Out[19]: 
          A         B         C
a  0.143693  0.653810  0.586007
b  0.623582  0.312903  0.919076
c  0.165438  0.889809  0.000967
d  0.308245  0.787776  0.571195
e  0.870068  0.935626  0.606911
f  0.037602  0.855193  0.728495
g  0.605366  0.338105  0.696460
h  0.000000  0.090814  0.963927
i  0.688343  0.188468  0.352213
i  0.879000  0.105039  0.900260

In [20]: dfrm['A'].idxmax()
Out[20]: 'i'

In [21]: dfrm.iloc[dfrm['A'].idxmax()]  # .ix instead of .iloc in older versions of pandas
Out[21]: 
          A         B         C
i  0.688343  0.188468  0.352213
i  0.879000  0.105039  0.900260
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 의 사용법이 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;idxmax&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;충분하지 않습니다만, 구형은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;argmax&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;em papago-id=&quot;24-1&quot;&gt;위치&lt;/em&gt;(이 경우는 위치 9)를 올바르게 제공합니다.&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;시스템 코드를 작성하고 있는데 가입하기 전에 제대로 정리되지 않은 일부 데이터 세트에 시스템이 갑자기 사용되면 행 레이블이 중복되기 쉽습니다. 특히 금융 자산의 CUSIP 또는 SEDOL 식별자와 같은 문자열 레이블이 사용됩니다.&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;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「&lt;/font&gt; 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」의&lt;font class=&quot;papago-parent&quot;&gt; 순서로 지정&lt;/font&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결국 그 이유는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;idxmax&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;max 행의 &lt;em papago-id=&quot;27-3&quot;&gt;라벨&lt;/em&gt;만 &lt;em papago-id=&quot;27-1&quot;&gt;보고&lt;/em&gt;할 수 있으며, 표준 함수가 자동으로 max 행의 &lt;em papago-id=&quot;27-5&quot;&gt;위치&lt;/em&gt;를 얻지 못해 실망하여 버그 실장을 직접 작성하고 코드를 편집하여 다시 문제가 발생하지 않기를 바랍니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 한 번 시험해 보세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;idxmax&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [5]: df = pandas.DataFrame(np.random.randn(10,3),columns=['A','B','C'])

In [6]: df
Out[6]: 
          A         B         C
0  2.001289  0.482561  1.579985
1 -0.991646 -0.387835  1.320236
2  0.143826 -1.096889  1.486508
3 -0.193056 -0.499020  1.536540
4 -2.083647 -3.074591  0.175772
5 -0.186138 -1.949731  0.287432
6 -0.480790 -1.771560 -0.930234
7  0.227383 -0.278253  2.102004
8 -0.002592  1.434192 -1.624915
9  0.404911 -2.167599 -0.452900

In [7]: df.idxmax()
Out[7]: 
A    0
B    8
C    7
&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;In [8]: df.loc[df['A'].idxmax()]
Out[8]: 
A    2.001289
B    0.482561
C    1.579985
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 두 응답 모두 최대값을 사용하는 행이 여러 개 있는 경우에만 하나의 인덱스를 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 행을 원하는 경우 기능이 없는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 그것은 어렵지 않다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 Series의 예입니다. Data Frame에서도 동일한 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [1]: from pandas import Series, DataFrame

In [2]: s=Series([2,4,4,3],index=['a','b','c','d'])

In [3]: s.idxmax()
Out[3]: 'b'

In [4]: s[s==s.max()]
Out[4]: 
b    4
c    4
dtype: int64
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;df.iloc[df['columnX'].argmax()]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;argmax()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 컬럼X의 최대값에 대응하는 인덱스를 제공합니다.&lt;/font&gt;&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;iloc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DataFrame df 의 데이터 프레임 df 의 데이터 프레임의 데이터 프레임의 데이터 프레임의 데이터 프레임의 데이터 프레임의 데이터 프레임의 데이터 프레임의 데이터 프레임의 설정.&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;query&lt;a href=&quot;https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.query.html&quot; papago-id=&quot;34-1&quot; rel=&quot;noreferrer&quot;&gt;()&lt;/a&gt;를 &lt;a href=&quot;https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.query.html&quot; papago-id=&quot;34-1&quot; rel=&quot;noreferrer&quot;&gt;사용&lt;/a&gt;한 보다 콤팩트하고 읽기 쉬운 솔루션은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;import pandas as pd

df = pandas.DataFrame(np.random.randn(5,3),columns=['A','B','C'])
print(df)

# find row with maximum A
df.query('A == A.max()')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 Series 대신 DataFrame을 반환하므로 일부 사용 사례에 유용합니다.&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;매우 간단합니다. 다음과 같은 df가 있으며, 최대값을 C로 한 행을 인쇄하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;A  B  C
x  1  4
y  2  10
z  5  9
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df.loc[df['C'] == df['C'].max()]   # condition check
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;A B C
y 2 10
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot; &quot;가  행 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;id&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; , 을 사용하면 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df.nlargest&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 '상단' 행의 수를 입력할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font 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;df.nlargest(2,['A'])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 2의 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;A&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df.nsmallest&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최소값으로 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;직접 &quot;.argmax()&quot; 솔루션은 작동하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 &lt;a href=&quot;https://stackoverflow.com/users/567620/ely&quot; papago-id=&quot;47-1&quot;&gt;예&lt;/a&gt;는 @ely에 의해 제시되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import pandas
&amp;gt;&amp;gt;&amp;gt; import numpy as np
&amp;gt;&amp;gt;&amp;gt; df = pandas.DataFrame(np.random.randn(5,3),columns=['A','B','C'])
&amp;gt;&amp;gt;&amp;gt; df
      A         B         C
0  1.232853 -1.979459 -0.573626
1  0.140767  0.394940  1.068890
2  0.742023  1.343977 -0.579745
3  2.125299 -0.649328 -0.211692
4 -0.187253  1.908618 -1.862934
&amp;gt;&amp;gt;&amp;gt; df['A'].argmax()
3
&amp;gt;&amp;gt;&amp;gt; df['B'].argmax()
4
&amp;gt;&amp;gt;&amp;gt; df['C'].argmax()
1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 다음 메시지를 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;FutureWarning: 'argmax' is deprecated, use 'idxmax' instead. The behavior of 'argmax' 
will be corrected to return the positional maximum in the future.
Use 'series.values.argmax' to get the position of the maximum now.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 때문에, 제 솔루션은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df['A'].values.argmax()
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;mx.iloc[0].idxmax()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한서 설명하겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mx&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;과 '''입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;iloc[0]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 인덱스0을 .&lt;/font&gt;&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;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;idmax&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 은 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;argmax&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pandas&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(현재는 경고가 반환됩니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;38-1&quot;&gt;위치&lt;/strong&gt; 인덱스를 사용하려면 다음을 수행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;max_row = df['A'].values.argmax()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import numpy as np
max_row = np.argmax(df['A'].values)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「」를 사용하는 는, 의 점에 해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;np.argmax(df['A'])&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 똑같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df['A'].argmax()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 데이터 프레임을 고려했을 때&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[In]: df = pd.DataFrame(np.random.randn(4,3),columns=['A','B','C'])
[Out]:
          A         B         C
0 -0.253233  0.226313  1.223688
1  0.472606  1.017674  1.520032
2  1.454875  1.066637  0.381890
3 -0.054181  0.234305 -0.557915
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열 &quot;C&quot;가 최대인 행을 알고 싶다고 가정하면 다음과 같이 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[In]: df[df['C']==df['C'].max()])
[Out]:
          A         B         C
1  0.472606  1.017674  1.520032
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;data.iloc[data['A'].idxmax()]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;data['A'].idxmax()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; value  -syslog max  location 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.iloc(&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; - 이 반환됩니다.) - 행이 반환됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는, 「」입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;idxmax&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 최대값 인덱스만 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;   A  B  C
0  1  0  1
1  0  0  1
2  0  0  0
3  0  1  1
4  1  0  0
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;idxmax&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;A    0
B    3
C    0
dtype: int64
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서 모든 인덱스를 할 수 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;max&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;+&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;eq&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; DataFrame을하려면 DataFrame에서 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df.index&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;out = df.eq(df.max()).apply(lambda x: df.index[x].tolist())
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;A       [0, 4]
B          [3]
C    [0, 1, 3]
dtype: object
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/10202570/&lt;a href=&quot;https://stackoverflow.com/questions/10202570/find-row-where-values-for-column-is-maximal-in-a-pandas-dataframe&quot; target=&quot;_blank&quot; papago-id=&quot;74-1&quot;&gt;find-row-where-values-for-column-is-maximal-in-a-pandas-dataframe&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PYTHON</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/909</guid>
      <comments>https://bestcode.tistory.com/909#entry909comment</comments>
      <pubDate>Mon, 6 Feb 2023 23:35:12 +0900</pubDate>
    </item>
    <item>
      <title>정해진 길이에 도달하기 위해 문자열을 패딩할 수 있는 JavaScript 함수가 있나요?</title>
      <link>https://bestcode.tistory.com/908</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정해진 길이에 도달하기 위해 문자열을 패딩할 수 있는 JavaScript 함수가 있나요?&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;값을 취득하여 지정된 길이로 패딩할 수 있는 JavaScript 함수가 필요합니다(스페이스가 필요하지만 무엇이든 상관없습니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이걸 찾았는데, 이게 대체 뭘 하는 건지 전혀 모르겠고, 나한테는 잘 안 되는 것 같아.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;String.prototype.pad = function(l, s, t) {
  return s || (s = &quot; &quot;),
    (l -= this.length) &amp;gt; 0 ?
    (s = new Array(Math.ceil(l / s.length) + 1).join(s))
    .substr(0, t = !t ? l : t == 1 ?
      0 :
      Math.ceil(l / 2)) + this + s.substr(0, l - t) :
    this;
};



var s = &quot;Jonas&quot;;
document.write(
  '&amp;lt;h2&amp;gt;S = '.bold(), s, &quot;&amp;lt;/h2&amp;gt;&quot;,
  'S.pad(20, &quot;[]&quot;, 0) = '.bold(), s.pad(20, &quot;[]&quot;, 0), &quot;&amp;lt;br /&amp;gt;&quot;,
  'S.pad(20, &quot;[====]&quot;, 1) = '.bold(), s.pad(20, &quot;[====]&quot;, 1), &quot;&amp;lt;br /&amp;gt;&quot;,
  'S.pad(20, &quot;~&quot;, 2) = '.bold(), s.pad(20, &quot;~&quot;, 2)
);&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;EcmaScript 2017은 이러한 목적으로 (와 함께) 추가되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;Jonas&quot;.padStart(10); // Default pad string is a space
&quot;42&quot;.padStart(6, &quot;0&quot;); // Pad with &quot;0&quot;
&quot;*&quot;.padStart(8, &quot;-/|\\&quot;); // produces '-/|\\-/|*'
&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;하지 않는 , JS는 「」를 해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String.padStart&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;폴리필로 추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ES-2017 이전&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 이 &lt;a href=&quot;http://dev.enekoalonso.com/2010/07/20/little-tricks-string-padding-in-javascript/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-1&quot;&gt;솔루션&lt;/a&gt;을 발견했는데, 이 솔루션은 훨씬 더 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var n = 123

String(&quot;00000&quot; + n).slice(-5); // returns 00123
(&quot;00000&quot; + n).slice(-5); // returns 00123
(&quot;     &quot; + n).slice(-5); // returns &quot;  123&quot; (with two spaces)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 문자열 오브젝트를 확장했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String.prototype.paddingLeft = function (paddingValue) {
   return String(paddingValue + this).slice(-paddingValue.length);
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function getFormattedTime(date) {
  var hours = date.getHours();
  var minutes = date.getMinutes();
  
  hours = hours.toString().paddingLeft(&quot;00&quot;);
  minutes = minutes.toString().paddingLeft(&quot;00&quot;);
  
  return &quot;{0}:{1}&quot;.format(hours, minutes);
};

String.prototype.format = function () {
    var args = arguments;
    return this.replace(/{(\d+)}/g, function (match, number) {
        return typeof args[number] != 'undefined' ? args[number] : match;
    });
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 &quot;15:30&quot; 형식의 시간이 반환됩니다.&lt;/font&gt;&lt;/p&gt;&lt;h1 papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보다 빠른 방법&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 어레이의 값을 패딩하는 등 반복적인 경우, 퍼포먼스가 중요한 다음 접근방식을 사용하면 현재 인터웹에서 논의되고 있는 다른 솔루션보다 속도(&lt;a href=&quot;http://jsperf.com/string-padding-performance&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;11-3&quot;&gt;jsPerf&lt;/a&gt;)가 100배 &lt;strong papago-id=&quot;11-1&quot;&gt;가까이&lt;/strong&gt; 향상될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 개념은 패드 기능에 버퍼로 사용할 빈 문자열을 완전히 패딩하여 제공하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;패드 기능은 이 사전 패딩된 문자열에 추가할 문자열(콘센트 문자열 1개)에 추가한 후 원하는 길이로 결과를 슬라이스 또는 트리밍합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function pad(pad, str, padLeft) {
  if (typeof str === 'undefined') 
    return pad;
  if (padLeft) {
    return (pad + str).slice(-pad.length);
  } else {
    return (str + pad).substring(0, pad.length);
  }
}
&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;예를 들어 숫자를 10자리 길이로 제로 패드로 하려면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;pad('0000000000',123,true);
&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;문자열을 공백으로 채우려면 문자열 전체가 255자여야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var padding = Array(256).join(' '), // make a string of 255 spaces
pad(padding,123,true);
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;14&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;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;15-1&quot;&gt;여기&lt;/em&gt;서 jsPerf &lt;a href=&quot;http://jsperf.com/string-padding-performance&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;15-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;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이것은 ES6보다 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string.repeat&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;a href=&quot;http://jsperf.com/string-padding-performance/7&quot; papago-id=&quot;17-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;JsPerf&lt;/a&gt;에서 알 수 있듯이, 2배까지 감소합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2&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;jsPerf&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;/h2&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리가 원래 다양한 방법을 벤치마킹하기 위해 사용했던 jsPerf 사이트는 더 이상 온라인 상태가 아닙니다.&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;code&gt;String.prototype.padStart()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String.prototype.padEnd()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;님은 현재 TC39 후보 제안서입니다.github.com/tc39/&lt;a href=&quot;https://github.com/tc39/proposal-string-pad-start-end&quot; papago-id=&quot;22-1&quot; rel=&quot;noreferrer&quot;&gt;proposal-string-pad-start-end &lt;/a&gt;(2016년 4월 현재 Firefox에서만 이용 가능하며 &lt;a href=&quot;https://github.com/tc39/proposal-string-pad-start-end/blob/master/polyfill.js&quot; papago-id=&quot;22-3&quot; rel=&quot;noreferrer&quot;&gt;폴리필&lt;/a&gt;도 이용 가능).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.webtoolkit.info/javascript_pad.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.webtoolkit.info/javascript_pad.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/**
*
*  Javascript string pad
*  http://www.webtoolkit.info/
*
**/

var STR_PAD_LEFT = 1;
var STR_PAD_RIGHT = 2;
var STR_PAD_BOTH = 3;

function pad(str, len, pad, dir) {

    if (typeof(len) == &quot;undefined&quot;) { var len = 0; }
    if (typeof(pad) == &quot;undefined&quot;) { var pad = ' '; }
    if (typeof(dir) == &quot;undefined&quot;) { var dir = STR_PAD_RIGHT; }

    if (len + 1 &amp;gt;= str.length) {

        switch (dir){

            case STR_PAD_LEFT:
                str = Array(len + 1 - str.length).join(pad) + str;
            break;

            case STR_PAD_BOTH:
                var padlen = len - str.length;
                var right = Math.ceil( padlen / 2 );
                var left = padlen - right;
                str = Array(left+1).join(pad) + str + Array(right+1).join(pad);
            break;

            default:
                str = str + Array(len + 1 - str.length).join(pad);
            break;

        } // switch

    }

    return str;

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;훨씬 더 읽기 쉬워요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 재귀적 접근법이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function pad(width, string, padding) { 
  return (width &amp;lt;= string.length) ? string : pad(width, padding + string, padding)
}
&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;pad(5, 'hi', '0')
=&amp;gt; &quot;000hi&quot;
&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;ECMAScript 2017은 string 프로토타입에 padStart 메서드를 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 메서드는 문자열을 공백으로 지정된 길이로 패딩합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 메서드는 패딩에 공백 대신 사용되는 선택적 문자열도 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;'abc'.padStart(10);         // &quot;       abc&quot;
'abc'.padStart(10, &quot;foo&quot;);  // &quot;foofoofabc&quot;
'abc'.padStart(6,&quot;123465&quot;); // &quot;123abc&quot;
'abc'.padStart(8, &quot;0&quot;);     // &quot;00000abc&quot;
'abc'.padStart(1);          // &quot;abc&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 방법으로 동작하는 padEnd 메서드도 추가되었습니다.&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;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart&quot; rel=&quot;noreferrer&quot; papago-id=&quot;29-1&quot;&gt;링크를 참조&lt;/a&gt;하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ECMAScript 6 &lt;a href=&quot;http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype.repeat&quot; papago-id=&quot;30-1&quot;&gt;메서드 &lt;/a&gt;String #&lt;a href=&quot;http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype.repeat&quot; papago-id=&quot;30-1&quot;&gt;repeat&lt;/a&gt;을 사용하면 패드 기능은 다음과 같이 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String.prototype.padLeft = function(char, length) { 
    return char.repeat(Math.max(0, length - this.length)) + this;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;String#repeat&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;「 &lt;font class=&quot;papago-parent&quot;&gt;Firefox&lt;/font&gt; 」 에 「 &lt;font class=&quot;papago-parent&quot;&gt;Chrome&lt;/font&gt; 」 &lt;font class=&quot;papago-parent&quot;&gt;implement implement&lt;/font&gt; implement implement&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; 。&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;과 같은 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;폴리필을 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;할 수 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;.&lt;/font&gt;&lt;font 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;String.prototype.repeat = String.prototype.repeat || function(n){ 
    return n&amp;lt;=1 ? this : (this + this.repeat(n-1)); 
}
&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;ECMAScript 6 &lt;a href=&quot;https://tc39.github.io/ecma262/#sec-string.prototype.repeat&quot; papago-id=&quot;32-1&quot; rel=&quot;noreferrer&quot;&gt;메서드 &lt;/a&gt;String #&lt;a href=&quot;https://tc39.github.io/ecma262/#sec-string.prototype.repeat&quot; papago-id=&quot;32-1&quot; rel=&quot;noreferrer&quot;&gt;repeat&lt;/a&gt; 및&lt;a href=&quot;https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Functions/Arrow_functions&quot; rel=&quot;noreferrer&quot; papago-id=&quot;32-3&quot;&gt; Arrow&lt;/a&gt; 함수를 사용하면 패드 기능은 다음과 같이 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var leftPad = (s, c, n) =&amp;gt; c.repeat(n - s.length) + s;
leftPad(&quot;foo&quot;, &quot;0&quot;, 5); //returns &quot;00foo&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/1fad0wp4&quot; rel=&quot;noreferrer&quot; papago-id=&quot;33&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;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;34-0&quot;&gt;edit:&lt;/strong&gt; 코멘트로부터의 제안:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const leftPad = (s, c, n) =&amp;gt; n - s.length &amp;gt; 0 ? c.repeat(n - s.length) + s : s;
&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;s.length&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;n&lt;/code&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;strong papago-id=&quot;37-0&quot;&gt;edit2:&lt;/strong&gt; 코멘트로부터의 제안:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const leftPad = (s, c, n) =&amp;gt;{ s = s.toString(); c = c.toString(); return s.length &amp;gt; n ? s : c.repeat(n - s.length) + s; }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 해서 현악기, 비현악기, 비현악기, 같은 기능을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;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;두 모두 은 이 an an an an an an an an an an an an an an an an an an an 를 만드는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;array&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;의(instance)를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;join()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; . 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;join()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(서양속담, 돈속담)&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;array&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;셀이 비어 있으면 빈  빈 셀로 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strings&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;array&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 결과로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;딩만남남 남남남다다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정말 좋은 기술이에요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ES8에서는 패딩에 2가지 옵션이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매뉴얼에서 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본값 패드&lt;/font&gt;&lt;/strong&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;시간 변환/숫자 패딩을 위해 pad Left가 가장 필요하다는 것을 알았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 나는 이 함수를 썼다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function padL(a,b,c){//string/number,length=2,char=0
 return (new Array(b||2).join(c||0)+a).slice(-b)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 간단한 함수는 숫자 또는 &lt;strong papago-id=&quot;56-3&quot;&gt;문자열&lt;/strong&gt;을 입력으로 &lt;strong papago-id=&quot;56-1&quot;&gt;지원&lt;/strong&gt;합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 패드는 &lt;strong papago-id=&quot;57-1&quot;&gt;2글자&lt;/strong&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;기본 char는 &lt;strong papago-id=&quot;58-1&quot;&gt;0&lt;/strong&gt;입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 나는 간단하게 쓸 수 있다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;padL(1);
// 01
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째 인수(패드 폭)를 추가하면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;padL(1,3);
// 001
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;세 번째 파라미터(패드 문자)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;padL('zzz',10,'x');
// xxxxxxxzzz
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;62-0&quot;&gt;정의&lt;/strong&gt;되지 않은 값 또는 0 길이의 문자열을 전달하면 EDIT @BananaAcid&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 래래:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제안대로&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function padL(a,b,c){//string/number,length=2,char=0
 return (new Array((b||1)+1).join(c||0)+(a||'')).slice(-(b||2))
}
&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;pre&gt;&lt;code&gt;function padL(a,b,c){//string/number,length=2,char=0
 return (new Array(b||2).join(c||0)+(a||c||0)).slice(-b)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 제품과도 연동됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;padL(0)
padL(NaN)
padL('')
padL(undefined)
padL(false)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 두 가지 방법으로 패드를 사용할 수 있는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function pad(a,b,c,d){//string/number,length=2,char=0,0/false=Left-1/true=Right
return a=(a||c||0),c=new Array(b||2).join(c||0),d?(a+c).slice(0,b):(c+a).slice(-b)
}
&lt;/code&gt;&lt;/pre&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;pre&gt;&lt;code&gt;function pad(a,b,c,d){
 return a=(a||c||0)+'',b=new Array((++b||3)-a.length).join(c||0),d?a+b:b+a
}
/*

Usage:

pad(
 input // (int or string) or undefined,NaN,false,empty string
       // default:0 or PadCharacter
 // optional
 ,PadLength // (int) default:2
 ,PadCharacter // (string or int) default:'0'
 ,PadDirection // (bolean) default:0 (padLeft) - (true or 1) is padRight 
)

*/
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 2로 '긴 단어'를 패딩하려고 한다면... 그건 내 문제가 아니야.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 팁을 준다고 했어.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 경우 패딩을 하면 동일한 값 N번으로 수행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루프 내에서 어떤 종류의 기능을 사용해도 루프가 느려집니다!!!&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;73&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;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;var arrayOfNumbers=[1,2,3,4,5,6,7],
    paddedArray=[],
    len=arrayOfNumbers.length;
while(len--){
 paddedArray[len]=('0000'+arrayOfNumbers[len]).slice(-4);
}
&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;var arrayOfNumbers=[1,2,3,4,5,6,7,49095],
    paddedArray=[],
    len=arrayOfNumbers.length;

// search the highest number
var arrayMax=Function.prototype.apply.bind(Math.max,null),
// get that string length
padSize=(arrayMax(arrayOfNumbers)+'').length,
// create a Padding string
padStr=new Array(padSize).join(0);
// and after you have all this static values cached start the loop.
while(len--){
 paddedArray[len]=(padStr+arrayOfNumbers[len]).slice(-padSize);//substr(-padSize)
}
console.log(paddedArray);

/*
0: &quot;00001&quot;
1: &quot;00002&quot;
2: &quot;00003&quot;
3: &quot;00004&quot;
4: &quot;00005&quot;
5: &quot;00006&quot;
6: &quot;00007&quot;
7: &quot;49095&quot;
*/
&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;font class=&quot;papago-parent&quot;&gt;이전 SQL 스크립트를 기억하십시오.이 스크립트를 사용해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a=1234;
'0000'.slice(a.toString().length)+a;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 상상할 수 있는 모든 경우에 효과가 있다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a=     1 result  0001
a=    12 result  0012
a=   123 result  0123
a=  1234 result  1234
a= 12345 result 12345
a=  '12' result  0012
&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;패딩 문자열이 새로운 Javascript 버전에 추가되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;str.padStart(targetLength [, padString])&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/padStart&quot; rel=&quot;noreferrer&quot; papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/padStart&lt;/font&gt;&lt;/a&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;const myString = 'Welcome to my house';
String.prototype.padLeft = function(times = 0, str = ' ') {
    return (Array(times).join(str) + this);
}
console.log(myString.padLeft(12, ':'));
//:::::::::::Welcome to my house
&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;str1.padStart(2, '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;var pad=function(num,field){
    var n = '' + num;
    var w = n.length;
    var l = field.length;
    var pad = w &amp;lt; l ? l-w : 0;
    return field.substr(0,pad) + n;
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;pad    (20,'     ');    //   20
pad   (321,'     ');    //  321
pad (12345,'     ');    //12345
pad (   15,'00000');    //00015
pad (  999,'*****');    //**999
pad ('cat','_____');    //__cat  
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지름길:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(x=&amp;gt;(new Array(int-x.length+1)).join(char)+x)(String)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;85&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(x=&amp;gt;(new Array(6-x.length+1)).join(&quot;0&quot;)+x)(&quot;1234&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반품: &quot;001234&quot;&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;&lt;a href=&quot;https://kangax.github.io/compat-table/es7/&quot; rel=&quot;nofollow&quot; papago-id=&quot;87-0&quot;&gt;es7&lt;/a&gt;은 현재 초안이나 제안서일 뿐이지만 사양과의 호환성을 추적하려면 패드 기능이 다음과 같이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;88&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;89&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;90&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;91&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 폴리필 라이브러리에서 시제품 확장에 대한 자체 실사를 적용하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Tests
'hello'.lpad(4) === 'hello'
'hello'.rpad(4) === 'hello'
'hello'.lpad(10) === '     hello'
'hello'.rpad(10) === 'hello     '
'hello'.lpad(10, '1234') === '41234hello'
'hello'.rpad(10, '1234') === 'hello12341'

String.prototype.lpad || (String.prototype.lpad = function( length, pad )
{
    if( length &amp;lt; this.length ) return this;

    pad = pad || ' ';
    let str = this;

    while( str.length &amp;lt; length )
    {
        str = pad + str;
    }

    return str.substr( -length );
});

String.prototype.rpad || (String.prototype.rpad = function( length, pad )
{
    if( length &amp;lt; this.length ) return this;

    pad = pad || ' ';
    let str = this;

    while( str.length &amp;lt; length )
    {
        str += pad;
    }

    return str.substr( 0, length );
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;92&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 기본적으로 한 줄의 코드로 이루어진 간단한 대답입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var value = 35 // the numerical value
var x = 5 // the minimum length of the string

var padded = (&quot;00000&quot; + value).substr(-x);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;93&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패딩의 문자 수(여기에는 0)가 적어도 의도한 최소 길이와 일치하는지 확인하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 이 경우 &quot;00035&quot;의 결과를 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var padded = (&quot;00000&quot; + 35).substr(-5);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단순한 문자열 콘카트에 비해 어레이 조작이 매우 느립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론, 사용 사례에 대한 벤치마크입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function(string, length, pad_char, append) {
    string = string.toString();
    length = parseInt(length) || 1;
    pad_char = pad_char || ' ';

    while (string.length &amp;lt; length) {
        string = append ? string+pad_char : pad_char+string;
    }
    return string;
};
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;95&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@&lt;a href=&quot;https://stackoverflow.com/a/17903742/638546&quot; papago-id=&quot;95-1&quot;&gt;Daniel&lt;/a&gt; LaFavers의&lt;a href=&quot;https://stackoverflow.com/a/17903742/638546&quot; papago-id=&quot;95-1&quot;&gt; &lt;/a&gt;답변의 변형입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var mask = function (background, foreground) {
  bg = (new String(background));
  fg = (new String(foreground));
  bgl = bg.length;
  fgl = fg.length;
  bgs = bg.substring(0, Math.max(0, bgl - fgl));
  fgs = fg.substring(Math.max(0, fgl - bgl));
  return bgs + fgs;
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;96&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mask('00000', 11  );   // '00011'
mask('00011','00' );   // '00000'
mask( 2     , 3   );   // '3'
mask('0'    ,'111');   // '1'
mask('fork' ,'***');   // 'f***'
mask('_____','dog');   // '__dog'
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;97&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2014년, 자바스크립트 스트링 패딩 기능을 추천합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&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;베어본: 우측 패드 (스페이스 포함)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function pad ( str, length ) {
    var padding = ( new Array( Math.max( length - str.length + 1, 0 ) ) ).join( &quot; &quot; );
    return str + padding;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;99&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고급: 옵션 포함 패드&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/**
 * @param {*}       str                         input string, or any other type (will be converted to string)
 * @param {number}  length                      desired length to pad the string to
 * @param {Object}  [opts]
 * @param {string}  [opts.padWith=&quot; &quot;]          char to use for padding
 * @param {boolean} [opts.padLeft=false]        whether to pad on the left
 * @param {boolean} [opts.collapseEmpty=false]  whether to return an empty string if the input was empty
 * @returns {string}
 */
function pad ( str, length, opts ) {
    var padding = ( new Array( Math.max( length - ( str + &quot;&quot; ).length + 1, 0 ) ) ).join( opts &amp;amp;&amp;amp; opts.padWith || &quot; &quot; ),
        collapse = opts &amp;amp;&amp;amp; opts.collapseEmpty &amp;amp;&amp;amp; !( str + &quot;&quot; ).length;
    return collapse ? &quot;&quot; : opts &amp;amp;&amp;amp; opts.padLeft ? padding + str : str + padding;
}
&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;pad( &quot;123&quot;, 5 );
// returns &quot;123  &quot;

pad( 123, 5 );
// returns &quot;123  &quot; - non-string input

pad( &quot;123&quot;, 5, { padWith: &quot;0&quot;, padLeft: true } );
// returns &quot;00123&quot;

pad( &quot;&quot;, 5 );
// returns &quot;     &quot;

pad( &quot;&quot;, 5, { collapseEmpty: true } );
// returns &quot;&quot;

pad( &quot;1234567&quot;, 5 );
// returns &quot;1234567&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유틸리티 라이브러리를 포함해도 괜찮다면 Lodash 라이브러리에는 _&lt;a href=&quot;https://lodash.com/docs#pad&quot; papago-id=&quot;101-1&quot; rel=&quot;nofollow&quot;&gt;.pad&lt;/a&gt;, &lt;a href=&quot;https://lodash.com/docs#pad&quot; papago-id=&quot;101-1&quot; rel=&quot;nofollow&quot;&gt;_.padLeft &lt;/a&gt;및 _&lt;a href=&quot;https://lodash.com/docs#pad&quot; papago-id=&quot;101-1&quot; rel=&quot;nofollow&quot;&gt;.padRight&lt;/a&gt; 기능이 &lt;a href=&quot;https://lodash.com/docs#pad&quot; papago-id=&quot;101-1&quot; rel=&quot;nofollow&quot;&gt;있습니다&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비용이 많이 들기 때문에 재귀는 피하는 것이 좋다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;false&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;function padLeft(str,size,padwith) {
	if(size &amp;lt;= str.length) {
        // not padding is required.
		return str;
	} else {
        // 1- take array of size equal to number of padding char + 1. suppose if string is 55 and we want 00055 it means we have 3 padding char so array size should be 3 + 1 (+1 will explain below)
        // 2- now join this array with provided padding char (padwith) or default one ('0'). so it will produce '000'
        // 3- now append '000' with orginal string (str = 55), will produce 00055

        // why +1 in size of array? 
        // it is a trick, that we are joining an array of empty element with '0' (in our case)
        // if we want to join items with '0' then we should have at least 2 items in the array to get joined (array with single item doesn't need to get joined).
        // &amp;lt;item&amp;gt;0&amp;lt;item&amp;gt;0&amp;lt;item&amp;gt;0&amp;lt;item&amp;gt; to get 3 zero we need 4 (3+1) items in array   
		return Array(size-str.length+1).join(padwith||'0')+str
	}
}

alert(padLeft(&quot;59&quot;,5) + &quot;\n&quot; +
     padLeft(&quot;659&quot;,5) + &quot;\n&quot; +
     padLeft(&quot;5919&quot;,5) + &quot;\n&quot; +
     padLeft(&quot;59879&quot;,5) + &quot;\n&quot; +
     padLeft(&quot;5437899&quot;,5));&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;는&lt;font class=&quot;papago-parent&quot;&gt; 세&lt;/font&gt;&lt;font class=&quot;papago-parent&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;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre papago-id=&quot;104&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;padMe --&amp;gt; 왼쪽 패드의 문자열 또는 숫자&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;패드 --&amp;gt; 패드 수&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;padSymble --&amp;gt; 커스텀 심볼, 기본값은 &quot;0&quot; 입니다.&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    function leftPad(padMe, pads, padSymble) {
         if( typeof padMe === &quot;undefined&quot;) {
             padMe = &quot;&quot;;
         }
         if (typeof pads === &quot;undefined&quot;) {
             pads = 0;
         }
         if (typeof padSymble === &quot;undefined&quot;) {
             padSymble = &quot;0&quot;;
         }

         var symble = &quot;&quot;;
         var result = [];
         for(var i=0; i &amp;lt; pads ; i++) {
            symble += padSymble;
         }
        var length = symble.length - padMe.toString().length;
        result = symble.substring(0, length);
        return result.concat(padMe.toString());
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre papago-id=&quot;105&quot; papago-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;&amp;gt; 왼쪽 패드 (1)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;1&quot;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&amp;gt; 왼쪽 패드 (1, 4)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;0001&quot;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&amp;gt; 왼쪽 패드 (1, 4, &quot;0&quot;)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;0001&quot;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&amp;gt; 왼쪽 패드 (1, 4, &quot;@&quot;)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;@@@1&quot;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;*/&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;/**************************************************************************************************
Pad a string to pad_length fillig it with pad_char.
By default the function performs a left pad, unless pad_right is set to true.

If the value of pad_length is negative, less than, or equal to the length of the input string, no padding takes place.
**************************************************************************************************/
if(!String.prototype.pad)
String.prototype.pad = function(pad_char, pad_length, pad_right) 
{
   var result = this;
   if( (typeof pad_char === 'string') &amp;amp;&amp;amp; (pad_char.length === 1) &amp;amp;&amp;amp; (pad_length &amp;gt; this.length) )
   {
      var padding = new Array(pad_length - this.length + 1).join(pad_char); //thanks to http://stackoverflow.com/questions/202605/repeat-string-javascript/2433358#2433358
      result = (pad_right ? result + padding : padding + result);
   }
   return result;
}
&lt;/code&gt;&lt;/pre&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;alert( &quot;3&quot;.pad(&quot;0&quot;, 3) ); //shows &quot;003&quot;
alert( &quot;hi&quot;.pad(&quot; &quot;, 3) ); //shows &quot; hi&quot;
alert( &quot;hi&quot;.pad(&quot; &quot;, 3, true) ); //shows &quot;hi &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;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;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예: 스트링 스토어 채우기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;e&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공백은 25자까지입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var e = &quot;hello&quot;; e = e + &quot;                         &quot;.substring(e.length)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;hello &quot;&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력된 번호로 동일한 작업을 수행하려면 전화만 하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.toString()&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;/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;pre&gt;&lt;code&gt;/**
 * pad string on left
 * @param {number} number of digits to pad, default is 2
 * @param {string} string to use for padding, default is '0' *
 * @returns {string} padded string
 */
String.prototype.paddingLeft = function (b,c) {
    if (this.length &amp;gt; (b||2))
        return this+'';
  return (this||c||0)+'',b=new Array((++b||3)-this.length).join(c||0),b+this
};

/**
 * pad string on right
 * @param {number} number of digits to pad, default is 2
 * @param {string} string to use for padding, default is '0' *
 * @returns {string} padded string
 */
String.prototype.paddingRight = function (b,c) {
  if (this.length &amp;gt; (b||2))
        return this+'';
  return (this||c||0)+'',b=new Array((++b||3)-this.length).join(c||0),this+b
};    
&lt;/code&gt;&lt;/pre&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;font class=&quot;papago-parent&quot;&gt;우리 중 몇몇은 골프 코드화를 위해 채팅으로 약간의 노력을 기울였다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function l(p,t,v){
    v+=&quot;&quot;;return v.length&amp;gt;=t?v:l(p,t,p+v); 
}
&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;font class=&quot;papago-parent&quot;&gt;보다 논리적인 이름 지정과 구조를 사용한 예를 다음에 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function padLeft(pad, totalLength, value){
    value = value.toString();

    if( value.length &amp;gt;= totalLength ){
        return value;
    }else{
        return padLeft(pad, totalLength, pad + value);
    }
}
&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&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왼쪽으로 이동하여 최대 6의 길이를 만듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&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;&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 l(p,t,v){v+=&quot;&quot;;return v.length&amp;gt;=t?v:l(p,t,p+v);}

var vals = [6451,123,466750];

var pad = l(0,6,vals[0]);// pad with 0's, max length 6

var pads = vals.map(function(i){ return l(0,6,i) });

document.write(pads.join(&quot;&amp;lt;br /&amp;gt;&quot;));&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;118&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조금 늦었지만 어쨌든 나눠먹어야겠다고 생각했어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오브젝트에 프로토타입 확장자를 추가하는 것이 도움이 되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래야 왼쪽이든 오른쪽이든 숫자와 문자열을 넣을 수 있어&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트에 포함된 것과 유사한 유틸리티를 사용하는 모듈이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// include the module in your script, there is no need to export
var jsAddOns = require('&amp;lt;path to module&amp;gt;/jsAddOns');
&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;~~~~~~~~~ jsAddOns.js~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/* 
 * method prototype for any Object to pad it's toString()
 * representation with additional characters to the specified length
 *
 * @param padToLength required int
 *     entire length of padded string (original + padding)
 * @param padChar optional char
 *     character to use for padding, default is white space
 * @param padLeft optional boolean
 *     if true padding added to left
 *     if omitted or false, padding added to right
 *
 * @return padded string or
 *     original string if length is &amp;gt;= padToLength
 */
Object.prototype.pad = function(padToLength, padChar, padLeft) {    

    // get the string value
    s = this.toString()

    // default padToLength to 0
    // if omitted, original string is returned
    padToLength = padToLength || 0;

    // default padChar to empty space
    padChar = padChar || ' ';


    // ignore padding if string too long
    if (s.length &amp;gt;= padToLength) {
        return s;
    }

    // create the pad of appropriate length
    var pad = Array(padToLength - s.length).join(padChar);

    // add pad to right or left side
    if (padLeft) {
        return pad  + s;        
    } else {
        return s + pad;
    }
};
&lt;/code&gt;&lt;/pre&gt;&lt;ol&gt; 
 &lt;li&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;str = pad + str;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터가 매번 재할당되기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;항상 마지막에 추가!&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;122&quot; papago-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;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매번 패딩 문자열을 할당하지 않음(예:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str += pad;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패딩 문자열을 그 자체에 부가하여 첫 번째 x-chars를 추출하는 것이 훨씬 빠릅니다(파서는 첫 번째 문자에서 추출하면 효율적으로 이 작업을 수행할 수 있습니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 기하급수적인 증가입니다.즉, 일시적으로 메모리가 낭비됩니다(매우 큰 텍스트에서는 이 작업을 수행하지 마십시오).&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&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;if (!String.prototype.lpad) {
    String.prototype.lpad = function(pad, len) {
        while (pad.length &amp;lt; len) {
            pad += pad;
        }
        return pad.substr(0, len-this.length) + this;
    }
}

if (!String.prototype.rpad) {
    String.prototype.rpad = function(pad, len) {
        while (pad.length &amp;lt; len) {
            pad += pad;
        }
        return this + pad.substr(0, len-this.length);
    }
}&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;125&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2686855/&lt;a href=&quot;https://stackoverflow.com/questions/2686855/is-there-a-javascript-function-that-can-pad-a-string-to-get-to-a-determined-leng&quot; target=&quot;_blank&quot; papago-id=&quot;125-1&quot;&gt;is-there-a-javascript-function-that-can-pad-a-string-to-get-to-a-determined-leng&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>javascript</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/908</guid>
      <comments>https://bestcode.tistory.com/908#entry908comment</comments>
      <pubDate>Mon, 6 Feb 2023 23:35:04 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 발생 횟수가 2를 초과합니다.</title>
      <link>https://bestcode.tistory.com/907</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 발생 횟수가 2를 초과합니다.&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;+  id  +  word  +
+------+--------+
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블은 특정 텍스트의 소문자로 채워지기 때문에 텍스트는&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안녕 안녕 안녕&lt;/font&gt;&lt;/p&gt; 
&lt;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;+  id  +  word  +
+------+--------+
+   1  + hello  +
+------+--------+
+   2  + bye    +
+------+--------+
+   3  + hello  +
+------+--------+
&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;테이블에서 두 번 이상 반복되는 단어 수를 반환하는 SELECT 쿼리를 만들고 싶다(hello 등).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT COUNT(id) FROM words WHERE (SELECT COUNT(words.word))&amp;gt;1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블이 크면 당연히 잘못되고 과부하죠.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 하면 그런 목적을 달성할 수 있을까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 예에서는 1을 상정하고 있습니다.&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;두 번 이상 나타나는 단어 목록과 단어 발생 빈도를 가져오려면 GROUP BY와 HAVING을 함께 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT word, COUNT(*) AS cnt
FROM words
GROUP BY word
HAVING cnt &amp;gt; 1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 결과 집합에서 단어 수를 찾으려면 하위 쿼리로 사용하고 외부 쿼리의 행을 세십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT COUNT(*)
FROM
(
    SELECT NULL
    FROM words
    GROUP BY word
    HAVING COUNT(*) &amp;gt; 1
) T1
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;SELECT count(word) as count 
FROM words 
GROUP BY word
HAVING count &amp;gt;= 2;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;SELECT word, COUNT(*) FROM words GROUP by word HAVING COUNT(*) &amp;gt; 1&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HAVING 옵션은 이 목적으로 사용할 수 있으며 쿼리는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT word, COUNT(*) FROM words 
GROUP BY word
HAVING COUNT(*) &amp;gt; 1;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3937283/&lt;a href=&quot;https://stackoverflow.com/questions/3937283/mysql-count-occurrences-greater-than-2&quot; target=&quot;_blank&quot; papago-id=&quot;10-1&quot;&gt;mysql-count-occurrences-greater-than-2&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/907</guid>
      <comments>https://bestcode.tistory.com/907#entry907comment</comments>
      <pubDate>Mon, 6 Feb 2023 23:34:49 +0900</pubDate>
    </item>
    <item>
      <title>PDO:: 10진수 타입의 PARAM?</title>
      <link>https://bestcode.tistory.com/906</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PDO:: 10진수 타입의 PARAM?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2개의 데이터베이스 필드가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;`decval` decimal(5,2)
`intval` int(3)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트를 위한 2개의 pdo 쿼리가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;int를 갱신하는 것은 정상적으로 동작합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$update_intval-&amp;gt;bindParam(':intval', $intval, PDO::PARAM_INT);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소수점 필드를 업데이트할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 세 가지 방법을 시도해 봤지만 소용이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$update_decval-&amp;gt;bindParam(':decval', $decval, PDO::PARAM_STR);
$update_decval-&amp;gt;bindParam(':decval', $decval, PDO::PARAM_INT);
$update_decval-&amp;gt;bindParam(':decval', $decval);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스 유형에 문제가 있는 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;decimal&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?가 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PDO::PARAM&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타이프 분야에서는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;decimal&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;? 그렇지 않은 경우 회피책으로 무엇을 사용해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;없어요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PDO::PARAM&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소수점/부두에 대해서는, 당신은 사용해야 할 것이다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PDO::PARAM_STR&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;UP는 PDO를 사용해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PARAM_STR도 마찬가지입니다.데이터베이스의 컬럼이 NUMERIC(M, D) 또는 DIMAL(M, D) 타입의 경우, M은 문자수이며, 정밀도는 입력할 수 있는 문자의 합계이며, D는 소수 자릿수입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;숫자(10,2) 예제에서는 정확도가 높은 위치에 8개의 집과 소수점 두 자리가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 총 10글자가 있고 소수점 이하에 2글자가 예약되어 있습니다.&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;해결책을 찾았습니다. PDO와 같은 10진수 파라미터를 전송합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 서버 스토어 프로시저에서 PARAM_STR은 10진수(int,dec)와 같이 수신합니다.&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;PHP&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$stmt_e-&amp;gt;bindParam(':valor_escala_desde', $valor_escala_desde, PDO::PARAM_STR);
&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;SQL Server, 저장 절차:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@valor_escala_desde decimal(18,2),
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;완료했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PDO 사용:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유형 int 또는 Bool이 아닌 모든 열 유형에 대한 PARAM_STR&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2718628/&lt;a href=&quot;https://stackoverflow.com/questions/2718628/pdoparam-for-type-decimal&quot; target=&quot;_blank&quot; papago-id=&quot;17-1&quot;&gt;pdoparam-for-type-decimal&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/906</guid>
      <comments>https://bestcode.tistory.com/906#entry906comment</comments>
      <pubDate>Mon, 6 Feb 2023 23:34:41 +0900</pubDate>
    </item>
    <item>
      <title>**kwargs 인수를 **kwargs를 사용하여 다른 함수에 전달합니다.</title>
      <link>https://bestcode.tistory.com/905</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;**kwargs 인수를 **kwargs를 사용하여 다른 함수에 전달합니다.&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;# python likes
def save(filename, data, **kwargs):
    fo = openX(filename, &quot;w&quot;, **kwargs) # &amp;lt;- #1
    fo.write(data)
    fo.close()
# python doesnt like
def save2(filename, data, **kwargs):
    fo = openX(filename, &quot;w&quot;, kwargs) # &amp;lt;- #2
    fo.write(data)
    fo.close()

def openX(filename, mode, **kwargs):
    #doing something fancy and returning a file object
&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;왜 1번이 올바른 솔루션이고 2번이 잘못된 솔루션일까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;code&gt;**kwargs&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 dict이기 때문에 인수를 openX로 넘기고 싶다면 올바른 방법은 이 명령어를 사용하지 않는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;**&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령만 내리면 돼&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 Python은 분명히 두 번째 것을 좋아하지 않고 두 개의 주장이 아닌 세 개의 주장을 했다고 내게 말한다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 이 배경은 무엇일까요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째 예에서는 파일 이름, 모드 및 사전의 3가지 인수를 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;kwargs&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python은 2개의 정식 인수와 키워드 인수를 예상합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사전 앞에 '**'를 붙이면 사전의 압축을 풉니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;kwargs&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;키워드 인수로 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;dict&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)는 키와 값의 쌍을 포함하는 단일 변수입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;Keyword arguments&quot;는 키 값입니다.&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;**&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;@gecco의 답변을 확장하면 다음 예에서 차이를 알 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;def foo(**kwargs):
    for entry in kwargs.items():
        print(&quot;Key: {}, value: {}&quot;.format(entry[0], entry[1]))

# call using normal keys:
foo(a=1, b=2, c=3)
# call using an unpacked dictionary:
foo(**{&quot;a&quot;: 1, &quot;b&quot;:2, &quot;c&quot;:3})

# call using a dictionary fails because the function will think you are
# giving it a positional argument
foo({&quot;a&quot;: 1, &quot;b&quot;: 2, &quot;c&quot;: 3})
# this yields the same error as any other positional argument
foo(3)
foo(&quot;string&quot;)

&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 사전의 압축을 푸는 방법과 실제 사전 전송이 실패한 이유를 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;**&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구문은 Python에게 키워드 인수를 사전에 수집하도록 지시합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;save2&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 class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;openX&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;**args&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 세 번째 비키워드 인수(사전)를 얻습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결하려면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;openX&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def openX(filename, mode, kwargs):
    pass
&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;#2의 경우 args는 dict 값을 가진 형식 파라미터일 뿐 키워드 타입 파라미터는 아닙니다.&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;키워드 type 파라미터를 키워드 인수에 전달하려면 사전 앞에 **를 지정해야 합니다.즉, **args를 의미합니다.&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;**kw 사용에 대한 자세한 내용은 여기를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.saltycrane.com/blog/2008/01/how-to-use-args-and-kwargs-in-python/&quot; rel=&quot;nofollow&quot; papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.saltycrane.com/blog/2008/01/how-to-use-args-and-kwargs-in-python/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사전은 하나의 값이기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;키워드 인수 그룹으로 전달할 경우 키워드 확장을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;kwargs&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 기능으로 전송합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def myprint( kwargs ):
    # default values
    a = kwargs.get('a', None)
    b = kwargs.get('b', None)

    # print both
    print('a={}, b={}'.format(a,b))

def mytest( **kwargs ):
    myprint( kwargs )

mytest()
mytest(b=2)
&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;a=None, b=None
a=None, b=2
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/9867562/&lt;a href=&quot;https://stackoverflow.com/questions/9867562/pass-kwargs-argument-to-another-function-with-kwargs&quot; target=&quot;_blank&quot; papago-id=&quot;31-1&quot;&gt;pass-kwargs-argument-to-another-function-with-kwargs&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PYTHON</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/905</guid>
      <comments>https://bestcode.tistory.com/905#entry905comment</comments>
      <pubDate>Mon, 6 Feb 2023 23:34:36 +0900</pubDate>
    </item>
    <item>
      <title>PHPnit을 사용하여 PHP 헤더 테스트</title>
      <link>https://bestcode.tistory.com/904</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHPnit을 사용하여 PHP 헤더 테스트&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커스텀 헤더를 출력하는 클래스를 테스트하기 위해 PHPunit을 사용하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 내 기계에서 다음과 같은 것이 있다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

class HeadersTest extends PHPUnit_Framework_TestCase {

    public function testHeaders()
    {
        ob_start();

        header('Location: foo');
        $headers_list = headers_list();
        header_remove();

        ob_clean();

        $this-&amp;gt;assertContains('Location: foo', $headers_list);
    }
}
&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;?php

class HeadersTest extends PHPUnit_Framework_TestCase {

    public function testHeaders()
    {
        ob_start();

        header('Location: foo');
        header_remove();

        ob_clean();
    }
}
&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;name@host [~/test]# phpunit --verbose HeadersTest.php 
PHPUnit 3.6.10 by Sebastian Bergmann.

E

Time: 0 seconds, Memory: 2.25Mb

There was 1 error:

1) HeadersTest::testHeaders
Cannot modify header information - headers already sent by (output started at /usr/local/lib/php/PHPUnit/Util/Printer.php:173)

/test/HeadersTest.php:9

FAILURES!
Tests: 1, Assertions: 0, Errors: 1.
&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;이것은 다른 파일이 포함되어 있지 않고 PHP 태그의 선두에 다른 문자가 없는 경우에도 테스트 실행 전에 터미널에 출력되는 다른 무언가가 있는 것처럼 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHPunit 내부의 무언가가 원인이었을 수 있습니까?&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;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 PHPUnit이 화면에 헤더를 인쇄하고 그 시점에서 헤더를 추가할 수 없다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;회피책은 격리된 프로세스에서 테스트를 실행하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 예가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

class FooTest extends PHPUnit_Framework_TestCase
{
    /**
     * @runInSeparateProcess
     */
    public function testBar()
    {
        header('Location : http://foo.com');
    }
}
&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;$ phpunit FooTest.php
PHPUnit 3.6.10 by Sebastian Bergmann.

.

Time: 1 second, Memory: 9.00Mb

OK (1 test, 0 assertions)
&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;키는 @runInSeparateProcess 주석입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHPUnit ~ 4.1 또는 그 이상을 사용하는 경우 다음 오류가 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;PHP Fatal error:  Uncaught Error: Class 'PHPUnit_Util_Configuration' not found in -:378
Stack trace:
#0 {main}
  thrown in - on line 378

Fatal error: Uncaught Error: Class 'PHPUnit_Util_Configuration' not found in - on line 378

Error: Class 'PHPUnit_Util_Configuration' not found in - on line 378

Call Stack:
    0.0013     582512   1. {main}() -:0
&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;&amp;lt;?php
if (!defined('PHPUNIT_COMPOSER_INSTALL')) {
    define('PHPUNIT_COMPOSER_INSTALL', __DIR__ . '/path/to/composer/vendors/dir/autoload.php');
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 프로세스로 테스트를 실행하면 문제가 해결되지만 대규모 테스트 스위트를 실행하면 상당한 오버헤드가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 수정사항은 다음과 같이 phpunit의 출력을 stderr로 보내는 것이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;phpunit --stderr &amp;lt;options&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 문제가 해결됩니다.또한 래퍼 기능을 생성하여 코드 내의 모든 항목을 교체할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여백으로서:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나를 위해.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;headers_list()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;0개의 요소가 계속 반환되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문에 대한 @&lt;a href=&quot;https://stackoverflow.com/questions/9745080/test-php-headers-with-phpunit#comment12418887_9745080&quot; papago-id=&quot;17-1&quot;&gt;titel&lt;/a&gt;의 코멘트를 보고 특별히 언급할 가치가 있다고 생각했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 관심 있는 분들이 있다면 취재하고 싶어서요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;code&gt;headers_list()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(PHP CLI를 사용하는) PHPunit 실행 중에는 동작하지 않지만&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xdebug_get_headers()&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;/blockquote&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTH&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 코멘트에서 언급했듯이 프로세스를 정의하는 것이 더 낫다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 XML 구성 파일에서의 분리&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;     &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
     &amp;lt;phpunit
        processIsolation            = &quot;true&quot;
        // ... 
     &amp;gt;
     &amp;lt;/phpunit&amp;gt;
&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;이런 식으로 --stderr 옵션을 통과하지 않아도 되고, 이것은 당신의 동료들을 짜증나게 할 수 있습니다.&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;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좀 더 급진적인 해결책이 있었는데&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$_SESSION&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;strong papago-id=&quot;25-1&quot;&gt;내 테스트 &lt;/strong&gt;완료/삭제 완료 파일에 저장.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서&lt;strong papago-id=&quot;25-5&quot;&gt; &lt;/strong&gt;&lt;strong papago-id=&quot;25-3&quot;&gt;PHPUnit&lt;/strong&gt; 파일 중 하나를 편집했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;25-5&quot;&gt;/PHPUnit/Utils/프린터&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;php를 &lt;strong papago-id=&quot;25-5&quot;&gt;가지려면&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;session_start();&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;26-1&quot;&gt;명령어 &lt;/strong&gt;print &lt;strong papago-id=&quot;26-1&quot;&gt;$190보다 &lt;/strong&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;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나한테는 마법처럼 먹혔어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 저는 &quot;준티&quot; 사용자의 솔루션이 지금까지의 솔루션 중 최고라고 생각합니다.&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;Laravel을 사용하고 루트 파일에 헤더를 추가하는 경우&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;테스트 중에 무시할 headers_sent로 둘러싸야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 예를 제시하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (!headers_sent()) {
    header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
    header('Access-Control-Allow-Headers: Origin, Access-Control-Allow-Origin,  Content-Type, X-Authorization, Authorization, Accept,charset,boundary,Content-Length');
    header('Access-Control-Allow-Origin: *');
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유닛 테스트를 다시 시도하면 합격입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@runInSeparateProcess의 대체 솔루션은 PHPUnit 실행 시 --process-isolation 옵션을 지정하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;name@host [~/test]# phpunit --process-isolation HeadersTest.php
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 프로세스를 설정하는 것과 유사합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;phpunit.xml의 Isolation=&quot;true&quot; 옵션입니다.&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;이 솔루션은 --stderr 옵션을 지정하는 것과 유사한 장점과 단점을 가지고 있지만, 제 경우에는 작동하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 테스트를 별도의 PHP 프로세스로 실행함으로써 성능 저하가 발생하더라도 기본적으로 코드를 변경할 필요는 없습니다.&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;--stderr 매개 변수를 사용하여 테스트 후 PHPunit에서 헤더를 가져옵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;phpunit --stderr
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/9745080/&lt;a href=&quot;https://stackoverflow.com/questions/9745080/test-php-headers-with-phpunit&quot; target=&quot;_blank&quot; papago-id=&quot;36-1&quot;&gt;test-php-headers-with-phpunit&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>php</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/904</guid>
      <comments>https://bestcode.tistory.com/904#entry904comment</comments>
      <pubDate>Mon, 6 Feb 2023 23:34:31 +0900</pubDate>
    </item>
    <item>
      <title>Java에서 숫자를 단어로 변환하는 방법</title>
      <link>https://bestcode.tistory.com/903</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;하지만 우리는 엄청난 숫자에 대한 문제에 직면해 있다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;10183 = Ten thousand one hundred eighty three
90 = Ninety
5888 = Five thousand eight hundred eighty eight
&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;a href=&quot;http://www.rgagnon.com/javadetails/java-0426.html&quot; papago-id=&quot;3-0&quot;&gt;여기&lt;/a&gt; 코드가 있습니다. SE에는 방법이 없는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 숫자를 문자열로 변환하고 문자열을 구문 분석하여 가중치와 관련짓습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를들면&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;1000
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 천위, 천위, 천위, 천위, 천위, 천위, 천위, 천위, 천위, 천위, 천위, 천위, 천위 으로 취급됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&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;&quot;one&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 천 이나 된다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;영어&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import java.text.DecimalFormat;

public class EnglishNumberToWords {

  private static final String[] tensNames = {
    &quot;&quot;,
    &quot; ten&quot;,
    &quot; twenty&quot;,
    &quot; thirty&quot;,
    &quot; forty&quot;,
    &quot; fifty&quot;,
    &quot; sixty&quot;,
    &quot; seventy&quot;,
    &quot; eighty&quot;,
    &quot; ninety&quot;
  };

  private static final String[] numNames = {
    &quot;&quot;,
    &quot; one&quot;,
    &quot; two&quot;,
    &quot; three&quot;,
    &quot; four&quot;,
    &quot; five&quot;,
    &quot; six&quot;,
    &quot; seven&quot;,
    &quot; eight&quot;,
    &quot; nine&quot;,
    &quot; ten&quot;,
    &quot; eleven&quot;,
    &quot; twelve&quot;,
    &quot; thirteen&quot;,
    &quot; fourteen&quot;,
    &quot; fifteen&quot;,
    &quot; sixteen&quot;,
    &quot; seventeen&quot;,
    &quot; eighteen&quot;,
    &quot; nineteen&quot;
  };

  private EnglishNumberToWords() {}

  private static String convertLessThanOneThousand(int number) {
    String soFar;

    if (number % 100 &amp;lt; 20){
      soFar = numNames[number % 100];
      number /= 100;
    }
    else {
      soFar = numNames[number % 10];
      number /= 10;

      soFar = tensNames[number % 10] + soFar;
      number /= 10;
    }
    if (number == 0) return soFar;
    return numNames[number] + &quot; hundred&quot; + soFar;
  }


  public static String convert(long number) {
    // 0 to 999 999 999 999
    if (number == 0) { return &quot;zero&quot;; }

    String snumber = Long.toString(number);

    // pad with &quot;0&quot;
    String mask = &quot;000000000000&quot;;
    DecimalFormat df = new DecimalFormat(mask);
    snumber = df.format(number);

    // XXXnnnnnnnnn
    int billions = Integer.parseInt(snumber.substring(0,3));
    // nnnXXXnnnnnn
    int millions  = Integer.parseInt(snumber.substring(3,6));
    // nnnnnnXXXnnn
    int hundredThousands = Integer.parseInt(snumber.substring(6,9));
    // nnnnnnnnnXXX
    int thousands = Integer.parseInt(snumber.substring(9,12));

    String tradBillions;
    switch (billions) {
    case 0:
      tradBillions = &quot;&quot;;
      break;
    case 1 :
      tradBillions = convertLessThanOneThousand(billions)
      + &quot; billion &quot;;
      break;
    default :
      tradBillions = convertLessThanOneThousand(billions)
      + &quot; billion &quot;;
    }
    String result =  tradBillions;

    String tradMillions;
    switch (millions) {
    case 0:
      tradMillions = &quot;&quot;;
      break;
    case 1 :
      tradMillions = convertLessThanOneThousand(millions)
         + &quot; million &quot;;
      break;
    default :
      tradMillions = convertLessThanOneThousand(millions)
         + &quot; million &quot;;
    }
    result =  result + tradMillions;

    String tradHundredThousands;
    switch (hundredThousands) {
    case 0:
      tradHundredThousands = &quot;&quot;;
      break;
    case 1 :
      tradHundredThousands = &quot;one thousand &quot;;
      break;
    default :
      tradHundredThousands = convertLessThanOneThousand(hundredThousands)
         + &quot; thousand &quot;;
    }
    result =  result + tradHundredThousands;

    String tradThousand;
    tradThousand = convertLessThanOneThousand(thousands);
    result =  result + tradThousand;

    // remove extra spaces!
    return result.replaceAll(&quot;^\\s+&quot;, &quot;&quot;).replaceAll(&quot;\\b\\s{2,}\\b&quot;, &quot; &quot;);
  }

  /**
   * testing
   * @param args
   */
  public static void main(String[] args) {
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(0));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(1));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(16));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(100));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(118));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(200));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(219));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(800));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(801));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(1316));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(1000000));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(2000000));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(3000200));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(700000));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(9000000));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(9001000));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(123456789));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(2147483647));
    System.out.println(&quot;*** &quot; + EnglishNumberToWords.convert(3000000010L));

    /*
     *** zero
     *** one
     *** sixteen
     *** one hundred
     *** one hundred eighteen
     *** two hundred
     *** two hundred nineteen
     *** eight hundred
     *** eight hundred one
     *** one thousand three hundred sixteen
     *** one million
     *** two millions
     *** three millions two hundred
     *** seven hundred thousand
     *** nine millions
     *** nine millions one thousand
     *** one hundred twenty three millions four hundred
     **      fifty six thousand seven hundred eighty nine
     *** two billion one hundred forty seven millions
     **      four hundred eighty three thousand six hundred forty seven
     *** three billion ten
     **/
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;11-0&quot;&gt;프랑세&lt;/strong&gt; 영어 버전과는 꽤 다르지만 프랑스어는 훨씬 더 어려워!&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;package com.rgagnon.howto;

import java.text.*;

class FrenchNumberToWords {
  private static final String[] dizaineNames = {
    &quot;&quot;,
    &quot;&quot;,
    &quot;vingt&quot;,
    &quot;trente&quot;,
    &quot;quarante&quot;,
    &quot;cinquante&quot;,
    &quot;soixante&quot;,
    &quot;soixante&quot;,
    &quot;quatre-vingt&quot;,
    &quot;quatre-vingt&quot;
  };

  private static final String[] uniteNames1 = {
    &quot;&quot;,
    &quot;un&quot;,
    &quot;deux&quot;,
    &quot;trois&quot;,
    &quot;quatre&quot;,
    &quot;cinq&quot;,
    &quot;six&quot;,
    &quot;sept&quot;,
    &quot;huit&quot;,
    &quot;neuf&quot;,
    &quot;dix&quot;,
    &quot;onze&quot;,
    &quot;douze&quot;,
    &quot;treize&quot;,
    &quot;quatorze&quot;,
    &quot;quinze&quot;,
    &quot;seize&quot;,
    &quot;dix-sept&quot;,
    &quot;dix-huit&quot;,
    &quot;dix-neuf&quot;
  };

  private static final String[] uniteNames2 = {
    &quot;&quot;,
    &quot;&quot;,
    &quot;deux&quot;,
    &quot;trois&quot;,
    &quot;quatre&quot;,
    &quot;cinq&quot;,
    &quot;six&quot;,
    &quot;sept&quot;,
    &quot;huit&quot;,
    &quot;neuf&quot;,
    &quot;dix&quot;
  };

  private FrenchNumberToWords() {}

  private static String convertZeroToHundred(int number) {

    int laDizaine = number / 10;
    int lUnite = number % 10;
    String resultat = &quot;&quot;;

    switch (laDizaine) {
    case 1 :
    case 7 :
    case 9 :
      lUnite = lUnite + 10;
      break;
    default:
    }

    // séparateur &quot;-&quot; &quot;et&quot;  &quot;&quot;
    String laLiaison = &quot;&quot;;
    if (laDizaine &amp;gt; 1) {
      laLiaison = &quot;-&quot;;
    }
    // cas particuliers
    switch (lUnite) {
    case 0:
      laLiaison = &quot;&quot;;
      break;
    case 1 :
      if (laDizaine == 8) {
        laLiaison = &quot;-&quot;;
      }
      else {
        laLiaison = &quot; et &quot;;
      }
      break;
    case 11 :
      if (laDizaine==7) {
        laLiaison = &quot; et &quot;;
      }
      break;
    default:
    }

    // dizaines en lettres
    switch (laDizaine) {
    case 0:
      resultat = uniteNames1[lUnite];
      break;
    case 8 :
      if (lUnite == 0) {
        resultat = dizaineNames[laDizaine];
      }
      else {
        resultat = dizaineNames[laDizaine]
                                + laLiaison + uniteNames1[lUnite];
      }
      break;
    default :
      resultat = dizaineNames[laDizaine]
                              + laLiaison + uniteNames1[lUnite];
    }
    return resultat;
  }

  private static String convertLessThanOneThousand(int number) {

    int lesCentaines = number / 100;
    int leReste = number % 100;
    String sReste = convertZeroToHundred(leReste);

    String resultat;
    switch (lesCentaines) {
    case 0:
      resultat = sReste;
      break;
    case 1 :
      if (leReste &amp;gt; 0) {
        resultat = &quot;cent &quot; + sReste;
      }
      else {
        resultat = &quot;cent&quot;;
      }
      break;
    default :
      if (leReste &amp;gt; 0) {
        resultat = uniteNames2[lesCentaines] + &quot; cent &quot; + sReste;
      }
      else {
        resultat = uniteNames2[lesCentaines] + &quot; cents&quot;;
      }
    }
    return resultat;
  }

  public static String convert(long number) {
    // 0 à 999 999 999 999
    if (number == 0) { return &quot;zéro&quot;; }

    String snumber = Long.toString(number);

    // pad des &quot;0&quot;
    String mask = &quot;000000000000&quot;;
    DecimalFormat df = new DecimalFormat(mask);
    snumber = df.format(number);

    // XXXnnnnnnnnn
    int lesMilliards = Integer.parseInt(snumber.substring(0,3));
    // nnnXXXnnnnnn
    int lesMillions  = Integer.parseInt(snumber.substring(3,6));
    // nnnnnnXXXnnn
    int lesCentMille = Integer.parseInt(snumber.substring(6,9));
    // nnnnnnnnnXXX
    int lesMille = Integer.parseInt(snumber.substring(9,12));

    String tradMilliards;
    switch (lesMilliards) {
    case 0:
      tradMilliards = &quot;&quot;;
      break;
    case 1 :
      tradMilliards = convertLessThanOneThousand(lesMilliards)
         + &quot; milliard &quot;;
      break;
    default :
      tradMilliards = convertLessThanOneThousand(lesMilliards)
         + &quot; milliards &quot;;
    }
    String resultat =  tradMilliards;

    String tradMillions;
    switch (lesMillions) {
    case 0:
      tradMillions = &quot;&quot;;
      break;
    case 1 :
      tradMillions = convertLessThanOneThousand(lesMillions)
         + &quot; million &quot;;
      break;
    default :
      tradMillions = convertLessThanOneThousand(lesMillions)
         + &quot; millions &quot;;
    }
    resultat =  resultat + tradMillions;

    String tradCentMille;
    switch (lesCentMille) {
    case 0:
      tradCentMille = &quot;&quot;;
      break;
    case 1 :
      tradCentMille = &quot;mille &quot;;
      break;
    default :
      tradCentMille = convertLessThanOneThousand(lesCentMille)
         + &quot; mille &quot;;
    }
    resultat =  resultat + tradCentMille;

    String tradMille;
    tradMille = convertLessThanOneThousand(lesMille);
    resultat =  resultat + tradMille;

    return resultat;
  }

  public static void main(String[] args) {
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(0));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(9));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(19));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(21));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(28));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(71));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(72));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(80));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(81));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(89));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(90));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(91));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(97));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(100));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(101));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(110));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(120));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(200));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(201));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(232));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(999));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(1000));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(1001));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(10000));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(10001));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(100000));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(2000000));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(3000000000L));
    System.out.println(&quot;*** &quot; + FrenchNumberToWords.convert(2147483647));
    /*
     *** OUTPUT
     *** zéro
     *** neuf
     *** dix-neuf
     *** vingt et un
     *** vingt-huit
     *** soixante et onze
     *** soixante-douze
     *** quatre-vingt
     *** quatre-vingt-un
     *** quatre-vingt-neuf
     *** quatre-vingt-dix
     *** quatre-vingt-onze
     *** quatre-vingt-dix-sept
     *** cent
     *** cent un
     *** cent dix
     *** cent vingt
     *** deux cents
     *** deux cent un
     *** deux cent trente-deux
     *** neuf cent quatre-vingt-dix-neuf
     *** mille
     *** mille un
     *** dix mille
     *** dix mille un
     *** cent mille
     *** deux millions
     *** trois milliards
     *** deux milliards cent quarante-sept millions
     **          quatre cent quatre-vingt-trois mille six cent quarante-sept
     */
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변환 메서드를 두 번 호출하면 &quot;달러와 센트&quot; 변환을 처리할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String phrase = &quot;12345.67&quot; ;
Float num = new Float( phrase ) ;
int dollars = (int)Math.floor( num ) ;
int cent = (int)Math.floor( ( num - dollars ) * 100.0f ) ;

String s = &quot;$ &quot; + EnglishNumberToWords.convert( dollars ) + &quot; and &quot;
           + EnglishNumberToWords.convert( cent ) + &quot; cents&quot; ;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DBMS의 내장 기능을 사용하는 다른 방법(사용 가능한 경우).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle의 &lt;strong papago-id=&quot;13-1&quot;&gt;경우&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; select to_char(to_date(873,'J'), 'JSP') as converted_form from dual;

CONVERTED_FORM
---------------------------
EIGHT HUNDRED SEVENTY-THREE

SQL&amp;gt;
'JSP' means :
J : the Julian format.
SP : spells the word for the number passed to to_date
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://site.icu-project.org/home&quot; papago-id=&quot;14-0&quot;&gt;ICU4J&lt;/a&gt;에는 훌륭한 번호 입력 지원이 포함되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;「규칙」이 있는 파일은 간단하게 편집할 수 있어 다른 언어를 추가하는 것도 문제 없습니다(폴란드어, 러시아어 등).&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;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;strong papago-id=&quot;16-1&quot;&gt;편집&lt;/strong&gt; **&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 재미삼아 이 수업을 들을 때까지 놀았어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;del papago-id=&quot;17-1&quot;&gt;비트 제한 때문에 표시할 수 없습니다...&lt;/del&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;del papago-id=&quot;17-1&quot;&gt; 단&lt;/del&gt;, &lt;del papago-id=&quot;17-1&quot;&gt;10진수 이상의 수치로 변경&lt;/del&gt;할 수 &lt;del papago-id=&quot;17-1&quot;&gt;있다고&lt;/del&gt; 생각합니다.숫자 문자열 표현을 사용하여 66자리, 26진수까지의 숫자를 표시할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가 가능&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ScaleUnit&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;/**
 * This class will convert numeric values into an english representation
 * 
 * For units, see : http://www.jimloy.com/math/billion.htm
 * 
 * @author yanick.rochon@gmail.com
 */
public class NumberToWords {

    static public class ScaleUnit {
        private int exponent;
        private String[] names;
        private ScaleUnit(int exponent, String...names) {
            this.exponent = exponent;
            this.names = names;
        }
        public int getExponent() {
            return exponent;
        }
        public String getName(int index) {
            return names[index];
        }
    }

    /**
     * See http://www.wordiq.com/definition/Names_of_large_numbers
     */
    static private ScaleUnit[] SCALE_UNITS = new ScaleUnit[] {
        new ScaleUnit(63, &quot;vigintillion&quot;, &quot;decilliard&quot;),
        new ScaleUnit(60, &quot;novemdecillion&quot;, &quot;decillion&quot;),
        new ScaleUnit(57, &quot;octodecillion&quot;, &quot;nonilliard&quot;),
        new ScaleUnit(54, &quot;septendecillion&quot;, &quot;nonillion&quot;),
        new ScaleUnit(51, &quot;sexdecillion&quot;, &quot;octilliard&quot;),
        new ScaleUnit(48, &quot;quindecillion&quot;, &quot;octillion&quot;),
        new ScaleUnit(45, &quot;quattuordecillion&quot;, &quot;septilliard&quot;),
        new ScaleUnit(42, &quot;tredecillion&quot;, &quot;septillion&quot;),
        new ScaleUnit(39, &quot;duodecillion&quot;, &quot;sextilliard&quot;),
        new ScaleUnit(36, &quot;undecillion&quot;, &quot;sextillion&quot;),
        new ScaleUnit(33, &quot;decillion&quot;, &quot;quintilliard&quot;),
        new ScaleUnit(30, &quot;nonillion&quot;, &quot;quintillion&quot;),
        new ScaleUnit(27, &quot;octillion&quot;, &quot;quadrilliard&quot;),
        new ScaleUnit(24, &quot;septillion&quot;, &quot;quadrillion&quot;),
        new ScaleUnit(21, &quot;sextillion&quot;, &quot;trilliard&quot;),
        new ScaleUnit(18, &quot;quintillion&quot;, &quot;trillion&quot;),
        new ScaleUnit(15, &quot;quadrillion&quot;, &quot;billiard&quot;),
        new ScaleUnit(12, &quot;trillion&quot;, &quot;billion&quot;),
        new ScaleUnit(9, &quot;billion&quot;, &quot;milliard&quot;),
        new ScaleUnit(6, &quot;million&quot;, &quot;million&quot;),
        new ScaleUnit(3, &quot;thousand&quot;, &quot;thousand&quot;),
        new ScaleUnit(2, &quot;hundred&quot;, &quot;hundred&quot;),
        //new ScaleUnit(1, &quot;ten&quot;, &quot;ten&quot;),
        //new ScaleUnit(0, &quot;one&quot;, &quot;one&quot;),
        new ScaleUnit(-1, &quot;tenth&quot;, &quot;tenth&quot;),
        new ScaleUnit(-2, &quot;hundredth&quot;, &quot;hundredth&quot;),
        new ScaleUnit(-3, &quot;thousandth&quot;, &quot;thousandth&quot;),
        new ScaleUnit(-4, &quot;ten-thousandth&quot;, &quot;ten-thousandth&quot;),
        new ScaleUnit(-5, &quot;hundred-thousandth&quot;, &quot;hundred-thousandth&quot;),
        new ScaleUnit(-6, &quot;millionth&quot;, &quot;millionth&quot;),
        new ScaleUnit(-7, &quot;ten-millionth&quot;, &quot;ten-millionth&quot;),
        new ScaleUnit(-8, &quot;hundred-millionth&quot;, &quot;hundred-millionth&quot;),
        new ScaleUnit(-9, &quot;billionth&quot;, &quot;milliardth&quot;),
        new ScaleUnit(-10, &quot;ten-billionth&quot;, &quot;ten-milliardth&quot;),
        new ScaleUnit(-11, &quot;hundred-billionth&quot;, &quot;hundred-milliardth&quot;),
        new ScaleUnit(-12, &quot;trillionth&quot;, &quot;billionth&quot;),
        new ScaleUnit(-13, &quot;ten-trillionth&quot;, &quot;ten-billionth&quot;),
        new ScaleUnit(-14, &quot;hundred-trillionth&quot;, &quot;hundred-billionth&quot;),
        new ScaleUnit(-15, &quot;quadrillionth&quot;, &quot;billiardth&quot;),
        new ScaleUnit(-16, &quot;ten-quadrillionth&quot;, &quot;ten-billiardth&quot;),
        new ScaleUnit(-17, &quot;hundred-quadrillionth&quot;, &quot;hundred-billiardth&quot;),
        new ScaleUnit(-18, &quot;quintillionth&quot;, &quot;trillionth&quot;),
        new ScaleUnit(-19, &quot;ten-quintillionth&quot;, &quot;ten-trillionth&quot;),
        new ScaleUnit(-20, &quot;hundred-quintillionth&quot;, &quot;hundred-trillionth&quot;),
        new ScaleUnit(-21, &quot;sextillionth&quot;, &quot;trilliardth&quot;),
        new ScaleUnit(-22, &quot;ten-sextillionth&quot;, &quot;ten-trilliardth&quot;),
        new ScaleUnit(-23, &quot;hundred-sextillionth&quot;, &quot;hundred-trilliardth&quot;),
        new ScaleUnit(-24, &quot;septillionth&quot;,&quot;quadrillionth&quot;),
        new ScaleUnit(-25, &quot;ten-septillionth&quot;,&quot;ten-quadrillionth&quot;),
        new ScaleUnit(-26, &quot;hundred-septillionth&quot;,&quot;hundred-quadrillionth&quot;),
    };

    static public enum Scale {
        SHORT,
        LONG;

        public String getName(int exponent) {
            for (ScaleUnit unit : SCALE_UNITS) {
                if (unit.getExponent() == exponent) {
                    return unit.getName(this.ordinal());
                }
            }
            return &quot;&quot;; 
        }
    }

    /**
     * Change this scale to support American and modern British value (short scale)
     * or Traditional British value (long scale)
     */
    static public Scale SCALE = Scale.SHORT; 


    static abstract public class AbstractProcessor {

        static protected final String SEPARATOR = &quot; &quot;;
        static protected final int NO_VALUE = -1;

        protected List&amp;lt;Integer&amp;gt; getDigits(long value) {
            ArrayList&amp;lt;Integer&amp;gt; digits = new ArrayList&amp;lt;Integer&amp;gt;();
            if (value == 0) {
                digits.add(0);
            } else {
                while (value &amp;gt; 0) {
                    digits.add(0, (int) value % 10);
                    value /= 10;
                }
            }
            return digits;
        }

        public String getName(long value) {
            return getName(Long.toString(value));
        }

        public String getName(double value) {
            return getName(Double.toString(value));
        }

        abstract public String getName(String value);
    }

    static public class UnitProcessor extends AbstractProcessor {

        static private final String[] TOKENS = new String[] {
            &quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;four&quot;, &quot;five&quot;, &quot;six&quot;, &quot;seven&quot;, &quot;eight&quot;, &quot;nine&quot;,
            &quot;ten&quot;, &quot;eleven&quot;, &quot;twelve&quot;, &quot;thirteen&quot;, &quot;fourteen&quot;, &quot;fifteen&quot;, &quot;sixteen&quot;, &quot;seventeen&quot;, &quot;eighteen&quot;, &quot;nineteen&quot;
        };

        @Override
        public String getName(String value) {
            StringBuilder buffer = new StringBuilder();

            int offset = NO_VALUE;
            int number;
            if (value.length() &amp;gt; 3) {
                number = Integer.valueOf(value.substring(value.length() - 3), 10);
            } else {
                number = Integer.valueOf(value, 10);
            }
            number %= 100;
            if (number &amp;lt; 10) {
                offset = (number % 10) - 1;
                //number /= 10;
            } else if (number &amp;lt; 20) {
                offset = (number % 20) - 1;
                //number /= 100;
            }

            if (offset != NO_VALUE &amp;amp;&amp;amp; offset &amp;lt; TOKENS.length) {
                buffer.append(TOKENS[offset]);
            }

            return buffer.toString();
        }

    }

    static public class TensProcessor extends AbstractProcessor {

        static private final String[] TOKENS = new String[] {
            &quot;twenty&quot;, &quot;thirty&quot;, &quot;forty&quot;, &quot;fifty&quot;, &quot;sixty&quot;, &quot;seventy&quot;, &quot;eighty&quot;, &quot;ninety&quot;
        };

        static private final String UNION_SEPARATOR = &quot;-&quot;;

        private UnitProcessor unitProcessor = new UnitProcessor();

        @Override
        public String getName(String value) {
            StringBuilder buffer = new StringBuilder();
            boolean tensFound = false;

            int number;
            if (value.length() &amp;gt; 3) {
                number = Integer.valueOf(value.substring(value.length() - 3), 10);
            } else {
                number = Integer.valueOf(value, 10);
            }
            number %= 100;   // keep only two digits
            if (number &amp;gt;= 20) {
                buffer.append(TOKENS[(number / 10) - 2]);
                number %= 10;
                tensFound = true;
            } else {
                number %= 20;
            }

            if (number != 0) {
                if (tensFound) {
                    buffer.append(UNION_SEPARATOR);
                }
                buffer.append(unitProcessor.getName(number));
            }

            return buffer.toString();
        }
    }

    static public class HundredProcessor extends AbstractProcessor {

        private int EXPONENT = 2;

        private UnitProcessor unitProcessor = new UnitProcessor();
        private TensProcessor tensProcessor = new TensProcessor();

        @Override
        public String getName(String value) {
            StringBuilder buffer = new StringBuilder();

            int number;
            if (value.isEmpty()) {
                number = 0;
            } else if (value.length() &amp;gt; 4) {
                number = Integer.valueOf(value.substring(value.length() - 4), 10);
            } else {
                number = Integer.valueOf(value, 10);
            }
            number %= 1000;  // keep at least three digits

            if (number &amp;gt;= 100) {
                buffer.append(unitProcessor.getName(number / 100));
                buffer.append(SEPARATOR);
                buffer.append(SCALE.getName(EXPONENT));
            }

            String tensName = tensProcessor.getName(number % 100);

            if (!tensName.isEmpty() &amp;amp;&amp;amp; (number &amp;gt;= 100)) {
                buffer.append(SEPARATOR);
            }
            buffer.append(tensName);

            return buffer.toString();
        }
    }

    static public class CompositeBigProcessor extends AbstractProcessor {

        private HundredProcessor hundredProcessor = new HundredProcessor();
        private AbstractProcessor lowProcessor;
        private int exponent;

        public CompositeBigProcessor(int exponent) {
            if (exponent &amp;lt;= 3) {
                lowProcessor = hundredProcessor;
            } else {
                lowProcessor = new CompositeBigProcessor(exponent - 3);
            }
            this.exponent = exponent;
        }

        public String getToken() {
            return SCALE.getName(getPartDivider());
        }

        protected AbstractProcessor getHighProcessor() {
            return hundredProcessor;
        }

        protected AbstractProcessor getLowProcessor() {
            return lowProcessor;
        }

        public int getPartDivider() {
            return exponent;
        }

        @Override
        public String getName(String value) {
            StringBuilder buffer = new StringBuilder();

            String high, low;
            if (value.length() &amp;lt; getPartDivider()) {
                high = &quot;&quot;;
                low = value;
            } else {
                int index = value.length() - getPartDivider();
                high = value.substring(0, index);
                low = value.substring(index);
            }

            String highName = getHighProcessor().getName(high);
            String lowName = getLowProcessor().getName(low);

            if (!highName.isEmpty()) {
                buffer.append(highName);
                buffer.append(SEPARATOR);
                buffer.append(getToken());

                if (!lowName.isEmpty()) {
                    buffer.append(SEPARATOR);
                }
            }

            if (!lowName.isEmpty()) {
                buffer.append(lowName);
            }

            return buffer.toString();
        }
    }

    static public class DefaultProcessor extends AbstractProcessor {

        static private String MINUS = &quot;minus&quot;;
        static private String UNION_AND = &quot;and&quot;;

        static private String ZERO_TOKEN = &quot;zero&quot;;

        private AbstractProcessor processor = new CompositeBigProcessor(63);

        @Override
        public String getName(String value) {
            boolean negative = false;
            if (value.startsWith(&quot;-&quot;)) {
                negative = true;
                value = value.substring(1);
            }

            int decimals = value.indexOf(&quot;.&quot;);
            String decimalValue = null;
            if (0 &amp;lt;= decimals) {
                decimalValue = value.substring(decimals + 1);
                value = value.substring(0, decimals);
            }

            String name = processor.getName(value);

            if (name.isEmpty()) {
                name = ZERO_TOKEN;
            } else if (negative) {
                name = MINUS.concat(SEPARATOR).concat(name); 
            }

            if (!(null == decimalValue || decimalValue.isEmpty())) {
                name = name.concat(SEPARATOR).concat(UNION_AND).concat(SEPARATOR)
                    .concat(processor.getName(decimalValue))
                    .concat(SEPARATOR).concat(SCALE.getName(-decimalValue.length()));
            }

            return name;
        }

    }

    static public AbstractProcessor processor;


    public static void main(String...args) {

        processor = new DefaultProcessor();

        long[] values = new long[] {
            0,
            4,
            10,
            12,
            100,
            108,
            299,
            1000,
            1003,
            2040,
            45213,
            100000,
            100005,
            100010,
            202020,
            202022,
            999999,
            1000000,
            1000001,
            10000000,
            10000007,
            99999999,
            Long.MAX_VALUE,
            Long.MIN_VALUE
        };

        String[] strValues = new String[] {
            &quot;0001.2&quot;,
            &quot;3.141592&quot;
        };

        for (long val : values) {
            System.out.println(val + &quot; = &quot; + processor.getName(val) );
        }

        for (String strVal : strValues) {
            System.out.println(strVal + &quot; = &quot; + processor.getName(strVal) );
        }

        // generate a very big number...
        StringBuilder bigNumber = new StringBuilder();
        for (int d=0; d&amp;lt;66; d++) {
            bigNumber.append( (char) ((Math.random() * 10) + '0'));
        }
        bigNumber.append(&quot;.&quot;);
        for (int d=0; d&amp;lt;26; d++) {
            bigNumber.append( (char) ((Math.random() * 10) + '0'));
        }

        System.out.println(bigNumber.toString() + &quot; = &quot; + processor.getName(bigNumber.toString()));

    }

}
&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;0 = zero
4 = four
10 = ten
12 = twelve
100 = one hundred
108 = one hundred eight
299 = two hundred ninety-nine
1000 = one thousand
1003 = one thousand three
2040 = two thousand fourty
45213 = fourty-five thousand two hundred thirteen
100000 = one hundred thousand
100005 = one hundred thousand five
100010 = one hundred thousand ten
202020 = two hundred two thousand twenty
202022 = two hundred two thousand twenty-two
999999 = nine hundred ninety-nine thousand nine hundred ninety-nine
1000000 = one million
1000001 = one million one
10000000 = ten million
10000007 = ten million seven
99999999 = ninety-nine million nine hundred ninety-nine thousand nine hundred ninety-nine
9223372036854775807 = nine quintillion two hundred twenty-three quadrillion three hundred seventy-two trillion thirty-six billion eight hundred fifty-four million seven hundred seventy-five thousand eight hundred seven
-9223372036854775808 = minus nine quintillion two hundred twenty-three quadrillion three hundred seventy-two trillion thirty-six billion eight hundred fifty-four million seven hundred seventy-five thousand eight hundred eight
0001.2 = one and two tenth
3.141592 = three and one hundred fourty-one thousand five hundred ninety-two millionth
694780458103427072928672912656674465845126458162617425283733729646.85695031739734695391404376 = six hundred ninety-four vigintillion seven hundred eighty novemdecillion four hundred fifty-eight octodecillion one hundred three septendecillion four hundred twenty-seven sexdecillion seventy-two quindecillion nine hundred twenty-eight quattuordecillion six hundred seventy-two tredecillion nine hundred twelve duodecillion six hundred fifty-six undecillion six hundred seventy-four decillion four hundred sixty-five nonillion eight hundred fourty-five octillion one hundred twenty-six septillion four hundred fifty-eight sextillion one hundred sixty-two quintillion six hundred seventeen quadrillion four hundred twenty-five trillion two hundred eighty-three billion seven hundred thirty-three million seven hundred twenty-nine thousand six hundred fourty-six and eighty-five septillion six hundred ninety-five sextillion thirty-one quintillion seven hundred thirty-nine quadrillion seven hundred thirty-four trillion six hundred ninety-five billion three hundred ninety-one million four hundred four thousand three hundred seventy-six hundred-septillionth
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 이이 for for 에 대해서만 효과가 있기 때문에 최선은 아니라고 생각합니다.&lt;/font&gt;&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;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class NumberWordConverter {
    public static final String[] units = {
            &quot;&quot;, &quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;four&quot;, &quot;five&quot;, &quot;six&quot;, &quot;seven&quot;,
            &quot;eight&quot;, &quot;nine&quot;, &quot;ten&quot;, &quot;eleven&quot;, &quot;twelve&quot;, &quot;thirteen&quot;, &quot;fourteen&quot;,
            &quot;fifteen&quot;, &quot;sixteen&quot;, &quot;seventeen&quot;, &quot;eighteen&quot;, &quot;nineteen&quot;
    };

    public static final String[] tens = {
            &quot;&quot;,        // 0
            &quot;&quot;,        // 1
            &quot;twenty&quot;,  // 2
            &quot;thirty&quot;,  // 3
            &quot;forty&quot;,   // 4
            &quot;fifty&quot;,   // 5
            &quot;sixty&quot;,   // 6
            &quot;seventy&quot;, // 7
            &quot;eighty&quot;,  // 8
            &quot;ninety&quot;   // 9
    };

    public static String convert(final int n) {
        if (n &amp;lt; 0) {
            return &quot;minus &quot; + convert(-n);
        }

        if (n &amp;lt; 20) {
            return units[n];
        }

        if (n &amp;lt; 100) {
            return tens[n / 10] + ((n % 10 != 0) ? &quot; &quot; : &quot;&quot;) + units[n % 10];
        }

        if (n &amp;lt; 1000) {
            return units[n / 100] + &quot; hundred&quot; + ((n % 100 != 0) ? &quot; &quot; : &quot;&quot;) + convert(n % 100);
        }

        if (n &amp;lt; 1000000) {
            return convert(n / 1000) + &quot; thousand&quot; + ((n % 1000 != 0) ? &quot; &quot; : &quot;&quot;) + convert(n % 1000);
        }

        if (n &amp;lt; 1000000000) {
            return convert(n / 1000000) + &quot; million&quot; + ((n % 1000000 != 0) ? &quot; &quot; : &quot;&quot;) + convert(n % 1000000);
        }

        return convert(n / 1000000000) + &quot; billion&quot;  + ((n % 1000000000 != 0) ? &quot; &quot; : &quot;&quot;) + convert(n % 1000000000);
    }

    public static void main(final String[] args) {
        final Random generator = new Random();

        int n;
        for (int i = 0; i &amp;lt; 20; i++) {
            n = generator.nextInt(Integer.MAX_VALUE);

            System.out.printf(&quot;%10d = '%s'%n&quot;, n, convert(n));
        }

        n = 1000;
        System.out.printf(&quot;%10d = '%s'%n&quot;, n, convert(n));

        n = 2000;
        System.out.printf(&quot;%10d = '%s'%n&quot;, n, convert(n));

        n = 10000;
        System.out.printf(&quot;%10d = '%s'%n&quot;, n, convert(n));

        n = 11000;
        System.out.printf(&quot;%10d = '%s'%n&quot;, n, convert(n));

        n = 999999999;
        System.out.printf(&quot;%10d = '%s'%n&quot;, n, convert(n));

        n = Integer.MAX_VALUE;
        System.out.printf(&quot;%10d = '%s'%n&quot;, n, convert(n));
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Integer.MAX_VALUE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제가 있는 것으로 알려진 일부보다 0, 10 등이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;★★★★&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   5599908 = 'five million five hundred ninety nine thousand nine hundred eight'
 192603486 = 'one hundred ninety two million six hundred three thousand four hundred eighty six'
1392431868 = 'one billion three hundred ninety two million four hundred thirty one thousand eight hundred sixty eight'
1023787010 = 'one billion twenty three million seven hundred eighty seven thousand ten'
1364396236 = 'one billion three hundred sixty four million three hundred ninety six thousand two hundred thirty six'
1511255671 = 'one billion five hundred eleven million two hundred fifty five thousand six hundred seventy one'
 225955221 = 'two hundred twenty five million nine hundred fifty five thousand two hundred twenty one'
1890141052 = 'one billion eight hundred ninety million one hundred forty one thousand fifty two'
 261839422 = 'two hundred sixty one million eight hundred thirty nine thousand four hundred twenty two'
 728428650 = 'seven hundred twenty eight million four hundred twenty eight thousand six hundred fifty'
 860607319 = 'eight hundred sixty million six hundred seven thousand three hundred nineteen'
 719753587 = 'seven hundred nineteen million seven hundred fifty three thousand five hundred eighty seven'
2063829124 = 'two billion sixty three million eight hundred twenty nine thousand one hundred twenty four'
1081010996 = 'one billion eighty one million ten thousand nine hundred ninety six'
 999215799 = 'nine hundred ninety nine million two hundred fifteen thousand seven hundred ninety nine'
2105226236 = 'two billion one hundred five million two hundred twenty six thousand two hundred thirty six'
1431882940 = 'one billion four hundred thirty one million eight hundred eighty two thousand nine hundred forty'
1991707241 = 'one billion nine hundred ninety one million seven hundred seven thousand two hundred forty one'
1088301563 = 'one billion eighty eight million three hundred one thousand five hundred sixty three'
 964601609 = 'nine hundred sixty four million six hundred one thousand six hundred nine'
      1000 = 'one thousand'
      2000 = 'two thousand'
     10000 = 'ten thousand'
     11000 = 'eleven thousand'
 999999999 = 'nine hundred ninety nine million nine hundred ninety nine thousand nine hundred ninety nine'
2147483647 = 'two billion one hundred forty seven million four hundred eighty three thousand six hundred forty seven'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되었으면 좋겠다:)&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;package it.tommasoresti.facebook;

class NumbersToWords {

    private static final String ZERO = &quot;zero&quot;;
    private static String[] oneToNine = {
            &quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;four&quot;, &quot;five&quot;, &quot;six&quot;, &quot;seven&quot;, &quot;eight&quot;, &quot;nine&quot;
    };

    private static String[] tenToNinteen = {
            &quot;ten&quot;, &quot;eleven&quot;, &quot;twelve&quot;, &quot;thirteen&quot;, &quot;fourteen&quot;, &quot;fifteen&quot;, &quot;sixteen&quot;, &quot;seventeen&quot;, &quot;eighteen&quot;, &quot;nineteen&quot;
    };

    private static String[] dozens = {
            &quot;ten&quot;, &quot;twenty&quot;, &quot;thirty&quot;, &quot;forty&quot;, &quot;fifty&quot;, &quot;sixty&quot;, &quot;seventy&quot;, &quot;eighty&quot;, &quot;ninety&quot;
    };

    public static String solution(int number) {
        if(number == 0)
            return ZERO;

        return generate(number).trim();
    }

    public static String generate(int number) {
        if(number &amp;gt;= 1000000000) {
            return generate(number / 1000000000) + &quot; billion &quot; + generate(number % 1000000000);
        }
        else if(number &amp;gt;= 1000000) {
            return generate(number / 1000000) + &quot; million &quot; + generate(number % 1000000);
        }
        else if(number &amp;gt;= 1000) {
            return generate(number / 1000) + &quot; thousand &quot; + generate(number % 1000);
        }
        else if(number &amp;gt;= 100) {
            return generate(number / 100) + &quot; hundred &quot; + generate(number % 100);
        }

        return generate1To99(number);
    }

    private static String generate1To99(int number) {
        if (number == 0)
            return &quot;&quot;;

        if (number &amp;lt;= 9)
            return oneToNine[number - 1];
        else if (number &amp;lt;= 19)
            return tenToNinteen[number % 10];
        else {
            return dozens[number / 10 - 1] + &quot; &quot; + generate1To99(number % 10);
        }
    }
}
&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;@Test
public void given_a_complex_number() throws Exception {
    assertThat(solution(1234567890),
        is(&quot;one billion two hundred thirty four million five hundred sixty seven thousand eight hundred ninety&quot;));
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;/**

This Program will display the given number in words from 0 to 999999999

@author Manoj Kumar Dunna

Mail Id : manojdunna@gmail.com

**/  


import java.util.Scanner;

class NumberToString
{

    public enum hundreds {OneHundred, TwoHundred, ThreeHundred, FourHundred, FiveHundred, SixHundred, SevenHundred, EightHundred, NineHundred}
    public enum tens {Twenty, Thirty, Forty, Fifty, Sixty, Seventy, Eighty, Ninety}
    public enum ones {One, Two, Three, Four, Five, Six, Seven, Eight, Nine}
    public enum denom {Thousand, Lakhs, Crores}
    public enum splNums { Ten, Eleven, Twelve, Thirteen, Fourteen, Fifteen, Sixteen, Seventeen, Eighteen, Nineteen}
    public static String text = &quot;&quot;;

    public static void main(String[] args) 
    {
        System.out.println(&quot;Enter Number to convert into words&quot;);
        Scanner sc = new Scanner(System.in);
        long num = sc.nextInt();
        int rem = 0;
        int i = 0;
        while(num &amp;gt; 0)
        {
            if(i == 0){
                rem = (int) (num % 1000);
                printText(rem);
                num = num / 1000;
                i++;
            }
            else if(num &amp;gt; 0)
            {
                rem = (int) (num % 100);
                if(rem &amp;gt; 0)
                    text = denom.values()[i - 1]+ &quot; &quot; + text;
                printText(rem);
                num = num / 100;
                i++;
            }
        }
        if(i &amp;gt; 0)
            System.out.println(text);
        else
            System.out.println(&quot;Zero&quot;);
    }

    public static void printText(int num)
    {
        if(!(num &amp;gt; 9 &amp;amp;&amp;amp; num &amp;lt; 19))
        {
            if(num % 10 &amp;gt; 0)
                getOnes(num % 10);

            num = num / 10;
            if(num % 10 &amp;gt; 0)
                getTens(num % 10);

            num = num / 10;
            if(num &amp;gt; 0)
                getHundreds(num);
        }
        else
        {
            getSplNums(num % 10);
        }
    }

    public static void getSplNums(int num)
    {
        text = splNums.values()[num]+ &quot; &quot; + text;
    }

    public static void getHundreds(int num)
    {
        text = hundreds.values()[num - 1]+ &quot; &quot; + text;
    }

    public static void getTens(int num)
    {
        text = tens.values()[num - 2]+ &quot; &quot; + text;
    }

    public static void getOnes(int num)
    {
        text = ones.values()[num - 1]+ &quot; &quot; + text;
    }
}
&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;a href=&quot;https://github.com/allegro/tradukisto&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;26-1&quot;&gt;Tradukisto&lt;/a&gt;를 보세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 작성한 자바 라이브러리로 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 투고에서는 &lt;strong papago-id=&quot;27-1&quot;&gt;&lt;em papago-id=&quot;27-1-0&quot;&gt;Yanick&lt;/em&gt;&lt;/strong&gt; Rochon의&lt;strong papago-id=&quot;27-1&quot;&gt;&lt;em papago-id=&quot;27-1-0&quot;&gt; 코드&lt;/em&gt;&lt;/strong&gt;를 &lt;strong papago-id=&quot;27-1&quot;&gt;&lt;em papago-id=&quot;27-1-0&quot;&gt;업데이트&lt;/em&gt;&lt;/strong&gt;했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;낮은 버전의 Java 1.6에서 사용할 수 있도록 했고 1&lt;strong papago-id=&quot;27-3&quot;&gt;.00 &lt;/strong&gt;=&lt;strong papago-id=&quot;27-3&quot;&gt; &lt;/strong&gt;1&lt;strong papago-id=&quot;27-3&quot;&gt;/100에 대한&lt;/strong&gt; 출력을 받았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 코드를 업데이트했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로 만들기 1.&lt;strong papago-id=&quot;27-5&quot;&gt;&lt;em papago-id=&quot;27-5-0&quot;&gt;00 &lt;/em&gt;&lt;/strong&gt;=&lt;strong papago-id=&quot;27-5&quot;&gt;&lt;em papago-id=&quot;27-5-0&quot;&gt; 100분&lt;/em&gt;&lt;/strong&gt;의 &lt;strong papago-id=&quot;27-5&quot;&gt;&lt;em papago-id=&quot;27-5-0&quot;&gt;1&lt;/em&gt;&lt;/strong&gt;에 대한 출력을 &lt;strong papago-id=&quot;27-5&quot;&gt;&lt;em papago-id=&quot;27-5-0&quot;&gt;얻습니다&lt;/em&gt;&lt;/strong&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;새 답변을 추가하거나 게시물을 편집합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;답변이 상위권이기 때문에 코드를 업데이트하여 새로운 게시물을 작성했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에 언급한 이 두 가지를 방금 변경했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/**
 * This class will convert numeric values into an english representation
 * 
 * For units, see : http://www.jimloy.com/math/billion.htm
 * 
 * @author yanick.rochon@gmail.com
 */
public class NumberToWords {

    static public class ScaleUnit {
        private int exponent;
        private String[] names;

        private ScaleUnit(int exponent, String... names) {
            this.exponent = exponent;
            this.names = names;
        }

        public int getExponent() {
            return exponent;
        }

        public String getName(int index) {
            return names[index];
        }
    }

    /**
     * See http://www.wordiq.com/definition/Names_of_large_numbers
     */
    static private ScaleUnit[] SCALE_UNITS = new ScaleUnit[] {
            new ScaleUnit(63, &quot;vigintillion&quot;, &quot;decilliard&quot;),
            new ScaleUnit(60, &quot;novemdecillion&quot;, &quot;decillion&quot;),
            new ScaleUnit(57, &quot;octodecillion&quot;, &quot;nonilliard&quot;),
            new ScaleUnit(54, &quot;septendecillion&quot;, &quot;nonillion&quot;),
            new ScaleUnit(51, &quot;sexdecillion&quot;, &quot;octilliard&quot;),
            new ScaleUnit(48, &quot;quindecillion&quot;, &quot;octillion&quot;),
            new ScaleUnit(45, &quot;quattuordecillion&quot;, &quot;septilliard&quot;),
            new ScaleUnit(42, &quot;tredecillion&quot;, &quot;septillion&quot;),
            new ScaleUnit(39, &quot;duodecillion&quot;, &quot;sextilliard&quot;),
            new ScaleUnit(36, &quot;undecillion&quot;, &quot;sextillion&quot;),
            new ScaleUnit(33, &quot;decillion&quot;, &quot;quintilliard&quot;),
            new ScaleUnit(30, &quot;nonillion&quot;, &quot;quintillion&quot;),
            new ScaleUnit(27, &quot;octillion&quot;, &quot;quadrilliard&quot;),
            new ScaleUnit(24, &quot;septillion&quot;, &quot;quadrillion&quot;),
            new ScaleUnit(21, &quot;sextillion&quot;, &quot;trilliard&quot;),
            new ScaleUnit(18, &quot;quintillion&quot;, &quot;trillion&quot;),
            new ScaleUnit(15, &quot;quadrillion&quot;, &quot;billiard&quot;),
            new ScaleUnit(12, &quot;trillion&quot;, &quot;billion&quot;),
            new ScaleUnit(9, &quot;billion&quot;, &quot;milliard&quot;),
            new ScaleUnit(6, &quot;million&quot;, &quot;million&quot;),
            new ScaleUnit(3, &quot;thousand&quot;, &quot;thousand&quot;),
            new ScaleUnit(2, &quot;hundred&quot;, &quot;hundred&quot;),
            // new ScaleUnit(1, &quot;ten&quot;, &quot;ten&quot;),
            // new ScaleUnit(0, &quot;one&quot;, &quot;one&quot;),
            new ScaleUnit(-1, &quot;tenth&quot;, &quot;tenth&quot;), new ScaleUnit(-2, &quot;hundredth&quot;, &quot;hundredth&quot;),
            new ScaleUnit(-3, &quot;thousandth&quot;, &quot;thousandth&quot;),
            new ScaleUnit(-4, &quot;ten-thousandth&quot;, &quot;ten-thousandth&quot;),
            new ScaleUnit(-5, &quot;hundred-thousandth&quot;, &quot;hundred-thousandth&quot;),
            new ScaleUnit(-6, &quot;millionth&quot;, &quot;millionth&quot;),
            new ScaleUnit(-7, &quot;ten-millionth&quot;, &quot;ten-millionth&quot;),
            new ScaleUnit(-8, &quot;hundred-millionth&quot;, &quot;hundred-millionth&quot;),
            new ScaleUnit(-9, &quot;billionth&quot;, &quot;milliardth&quot;),
            new ScaleUnit(-10, &quot;ten-billionth&quot;, &quot;ten-milliardth&quot;),
            new ScaleUnit(-11, &quot;hundred-billionth&quot;, &quot;hundred-milliardth&quot;),
            new ScaleUnit(-12, &quot;trillionth&quot;, &quot;billionth&quot;),
            new ScaleUnit(-13, &quot;ten-trillionth&quot;, &quot;ten-billionth&quot;),
            new ScaleUnit(-14, &quot;hundred-trillionth&quot;, &quot;hundred-billionth&quot;),
            new ScaleUnit(-15, &quot;quadrillionth&quot;, &quot;billiardth&quot;),
            new ScaleUnit(-16, &quot;ten-quadrillionth&quot;, &quot;ten-billiardth&quot;),
            new ScaleUnit(-17, &quot;hundred-quadrillionth&quot;, &quot;hundred-billiardth&quot;),
            new ScaleUnit(-18, &quot;quintillionth&quot;, &quot;trillionth&quot;),
            new ScaleUnit(-19, &quot;ten-quintillionth&quot;, &quot;ten-trillionth&quot;),
            new ScaleUnit(-20, &quot;hundred-quintillionth&quot;, &quot;hundred-trillionth&quot;),
            new ScaleUnit(-21, &quot;sextillionth&quot;, &quot;trilliardth&quot;),
            new ScaleUnit(-22, &quot;ten-sextillionth&quot;, &quot;ten-trilliardth&quot;),
            new ScaleUnit(-23, &quot;hundred-sextillionth&quot;, &quot;hundred-trilliardth&quot;),
            new ScaleUnit(-24, &quot;septillionth&quot;, &quot;quadrillionth&quot;),
            new ScaleUnit(-25, &quot;ten-septillionth&quot;, &quot;ten-quadrillionth&quot;),
            new ScaleUnit(-26, &quot;hundred-septillionth&quot;, &quot;hundred-quadrillionth&quot;), };

    static public enum Scale {
        SHORT, LONG;

        public String getName(int exponent) {
            for (ScaleUnit unit : SCALE_UNITS) {
                if (unit.getExponent() == exponent) {
                    return unit.getName(this.ordinal());
                }
            }
            return &quot;&quot;;
        }
    }

    /**
     * Change this scale to support American and modern British value (short scale) or Traditional
     * British value (long scale)
     */
    static public Scale SCALE = Scale.SHORT;

    static abstract public class AbstractProcessor {

        static protected final String SEPARATOR = &quot; &quot;;
        static protected final int NO_VALUE = -1;

        protected List&amp;lt;Integer&amp;gt; getDigits(long value) {
            ArrayList&amp;lt;Integer&amp;gt; digits = new ArrayList&amp;lt;Integer&amp;gt;();
            if (value == 0) {
                digits.add(0);
            } else {
                while (value &amp;gt; 0) {
                    digits.add(0, (int) value % 10);
                    value /= 10;
                }
            }
            return digits;
        }

        public String getName(long value) {
            return getName(Long.toString(value));
        }

        public String getName(double value) {
            return getName(Double.toString(value));
        }

        abstract public String getName(String value);
    }

    static public class UnitProcessor extends AbstractProcessor {

        static private final String[] TOKENS = new String[] { &quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;four&quot;,
                &quot;five&quot;, &quot;six&quot;, &quot;seven&quot;, &quot;eight&quot;, &quot;nine&quot;, &quot;ten&quot;, &quot;eleven&quot;, &quot;twelve&quot;, &quot;thirteen&quot;,
                &quot;fourteen&quot;, &quot;fifteen&quot;, &quot;sixteen&quot;, &quot;seventeen&quot;, &quot;eighteen&quot;, &quot;nineteen&quot; };

        @Override
        public String getName(String value) {
            StringBuilder buffer = new StringBuilder();

            int offset = NO_VALUE;
            int number;
            if (value.length() &amp;gt; 3) {
                number = Integer.valueOf(value.substring(value.length() - 3), 10);
            } else {
                number = Integer.valueOf(value, 10);
            }
            number %= 100;
            if (number &amp;lt; 10) {
                offset = (number % 10) - 1;
                // number /= 10;
            } else if (number &amp;lt; 20) {
                offset = (number % 20) - 1;
                // number /= 100;
            }

            if (offset != NO_VALUE &amp;amp;&amp;amp; offset &amp;lt; TOKENS.length) {
                buffer.append(TOKENS[offset]);
            }

            return buffer.toString();
        }

    }

    static public class TensProcessor extends AbstractProcessor {

        static private final String[] TOKENS = new String[] { &quot;twenty&quot;, &quot;thirty&quot;, &quot;fourty&quot;,
                &quot;fifty&quot;, &quot;sixty&quot;, &quot;seventy&quot;, &quot;eighty&quot;, &quot;ninety&quot; };

        static private final String UNION_SEPARATOR = &quot;-&quot;;

        private UnitProcessor unitProcessor = new UnitProcessor();

        @Override
        public String getName(String value) {
            StringBuilder buffer = new StringBuilder();
            boolean tensFound = false;

            int number;
            if (value.length() &amp;gt; 3) {
                number = Integer.valueOf(value.substring(value.length() - 3), 10);
            } else {
                number = Integer.valueOf(value, 10);
            }
            number %= 100; // keep only two digits
            if (number &amp;gt;= 20) {
                buffer.append(TOKENS[(number / 10) - 2]);
                number %= 10;
                tensFound = true;
            } else {
                number %= 20;
            }

            if (number != 0) {
                if (tensFound) {
                    buffer.append(UNION_SEPARATOR);
                }
                buffer.append(unitProcessor.getName(number));
            }

            return buffer.toString();
        }
    }

    static public class HundredProcessor extends AbstractProcessor {

        private int EXPONENT = 2;

        private UnitProcessor unitProcessor = new UnitProcessor();
        private TensProcessor tensProcessor = new TensProcessor();

        @Override
        public String getName(String value) {
            StringBuilder buffer = new StringBuilder();

            int number;
            if (&quot;&quot;.equals(value)) {
                number = 0;
            } else if (value.length() &amp;gt; 4) {
                number = Integer.valueOf(value.substring(value.length() - 4), 10);
            } else {
                number = Integer.valueOf(value, 10);
            }
            number %= 1000; // keep at least three digits

            if (number &amp;gt;= 100) {
                buffer.append(unitProcessor.getName(number / 100));
                buffer.append(SEPARATOR);
                buffer.append(SCALE.getName(EXPONENT));
            }

            String tensName = tensProcessor.getName(number % 100);

            if (!&quot;&quot;.equals(tensName) &amp;amp;&amp;amp; (number &amp;gt;= 100)) {
                buffer.append(SEPARATOR);
            }
            buffer.append(tensName);

            return buffer.toString();
        }
    }

    static public class CompositeBigProcessor extends AbstractProcessor {

        private HundredProcessor hundredProcessor = new HundredProcessor();
        private AbstractProcessor lowProcessor;
        private int exponent;

        public CompositeBigProcessor(int exponent) {
            if (exponent &amp;lt;= 3) {
                lowProcessor = hundredProcessor;
            } else {
                lowProcessor = new CompositeBigProcessor(exponent - 3);
            }
            this.exponent = exponent;
        }

        public String getToken() {
            return SCALE.getName(getPartDivider());
        }

        protected AbstractProcessor getHighProcessor() {
            return hundredProcessor;
        }

        protected AbstractProcessor getLowProcessor() {
            return lowProcessor;
        }

        public int getPartDivider() {
            return exponent;
        }

        @Override
        public String getName(String value) {
            StringBuilder buffer = new StringBuilder();

            String high, low;
            if (value.length() &amp;lt; getPartDivider()) {
                high = &quot;&quot;;
                low = value;
            } else {
                int index = value.length() - getPartDivider();
                high = value.substring(0, index);
                low = value.substring(index);
            }

            String highName = getHighProcessor().getName(high);
            String lowName = getLowProcessor().getName(low);

            if (!&quot;&quot;.equals(highName)) {
                buffer.append(highName);
                buffer.append(SEPARATOR);
                buffer.append(getToken());

                if (!&quot;&quot;.equals(lowName)) {
                    buffer.append(SEPARATOR);
                }
            }

            if (!&quot;&quot;.equals(lowName)) {
                buffer.append(lowName);
            }

            return buffer.toString();
        }
    }

    static public class DefaultProcessor extends AbstractProcessor {

        static private String MINUS = &quot;minus&quot;;
        static private String UNION_AND = &quot;and&quot;;

        static private String ZERO_TOKEN = &quot;zero&quot;;

        private AbstractProcessor processor = new CompositeBigProcessor(63);

        @Override
        public String getName(String value) {
            boolean negative = false;
            if (value.startsWith(&quot;-&quot;)) {
                negative = true;
                value = value.substring(1);
            }

            int decimals = value.indexOf(&quot;.&quot;);
            String decimalValue = null;
            if (0 &amp;lt;= decimals) {
                decimalValue = value.substring(decimals + 1);
                value = value.substring(0, decimals);
            }

            String name = processor.getName(value);

            if (&quot;&quot;.equals(name)) {
                name = ZERO_TOKEN;
            } else if (negative) {
                name = MINUS.concat(SEPARATOR).concat(name);
            }

            if (!(null == decimalValue || &quot;&quot;.equals(decimalValue))) {

                String zeroDecimalValue = &quot;&quot;;
                for (int i = 0; i &amp;lt; decimalValue.length(); i++) {
                    zeroDecimalValue = zeroDecimalValue + &quot;0&quot;;
                }
                if (decimalValue.equals(zeroDecimalValue)) {
                    name = name.concat(SEPARATOR).concat(UNION_AND).concat(SEPARATOR).concat(
                            &quot;zero&quot;).concat(SEPARATOR).concat(
                            SCALE.getName(-decimalValue.length()));
                } else {
                    name = name.concat(SEPARATOR).concat(UNION_AND).concat(SEPARATOR).concat(
                            processor.getName(decimalValue)).concat(SEPARATOR).concat(
                            SCALE.getName(-decimalValue.length()));
                }

            }

            return name;
        }

    }

    static public AbstractProcessor processor;

    public static void main(String... args) {

        processor = new DefaultProcessor();

        long[] values = new long[] { 0, 4, 10, 12, 100, 108, 299, 1000, 1003, 2040, 45213, 100000,
                100005, 100010, 202020, 202022, 999999, 1000000, 1000001, 10000000, 10000007,
                99999999, Long.MAX_VALUE, Long.MIN_VALUE };

        String[] strValues = new String[] { &quot;0&quot;, &quot;1.30&quot;, &quot;0001.00&quot;, &quot;3.141592&quot; };

        for (long val : values) {
            System.out.println(val + &quot; = &quot; + processor.getName(val));
        }

        for (String strVal : strValues) {
            System.out.println(strVal + &quot; = &quot; + processor.getName(strVal));
        }

        // generate a very big number...
        StringBuilder bigNumber = new StringBuilder();
        for (int d = 0; d &amp;lt; 66; d++) {
            bigNumber.append((char) ((Math.random() * 10) + '0'));
        }
        bigNumber.append(&quot;.&quot;);
        for (int d = 0; d &amp;lt; 26; d++) {
            bigNumber.append((char) ((Math.random() * 10) + '0'));
        }
        System.out.println(bigNumber.toString() + &quot; = &quot; + processor.getName(bigNumber.toString()));
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;0 = zero
4 = four
10 = ten
12 = twelve
100 = one hundred
108 = one hundred eight
299 = two hundred ninety-nine
1000 = one thousand
1003 = one thousand three
2040 = two thousand fourty
45213 = fourty-five thousand two hundred thirteen
100000 = one hundred thousand
100005 = one hundred thousand five
100010 = one hundred thousand ten
202020 = two hundred two thousand twenty
202022 = two hundred two thousand twenty-two
999999 = nine hundred ninety-nine thousand nine hundred ninety-nine
1000000 = one million
1000001 = one million one
10000000 = ten million
10000007 = ten million seven
99999999 = ninety-nine million nine hundred ninety-nine thousand nine hundred ninety-nine
9223372036854775807 = nine quintillion two hundred twenty-three quadrillion three hundred seventy-two trillion thirty-six billion eight hundred fifty-four million seven hundred seventy-five thousand eight hundred seven
-9223372036854775808 = minus nine quintillion two hundred twenty-three quadrillion three hundred seventy-two trillion thirty-six billion eight hundred fifty-four million seven hundred seventy-five thousand eight hundred eight
0.0 = zero and zero tenth
1.30 = one and thirty hundredth
0001.00 = one and zero hundredth
3.141592 = three and one hundred fourty-one thousand five hundred ninety-two millionth
354064188376576616844741830273568537829518115677552666352927559274.76892492652888527014418647 = three hundred fifty-four vigintillion sixty-four novemdecillion one hundred eighty-eight octodecillion three hundred seventy-six septendecillion five hundred seventy-six sexdecillion six hundred sixteen quindecillion eight hundred fourty-four quattuordecillion seven hundred fourty-one tredecillion eight hundred thirty duodecillion two hundred seventy-three undecillion five hundred sixty-eight decillion five hundred thirty-seven nonillion eight hundred twenty-nine octillion five hundred eighteen septillion one hundred fifteen sextillion six hundred seventy-seven quintillion five hundred fifty-two quadrillion six hundred sixty-six trillion three hundred fifty-two billion nine hundred twenty-seven million five hundred fifty-nine thousand two hundred seventy-four and seventy-six septillion eight hundred ninety-two sextillion four hundred ninety-two quintillion six hundred fifty-two quadrillion eight hundred eighty-eight trillion five hundred twenty-seven billion fourteen million four hundred eighteen thousand six hundred fourty-seven hundred-septillionth
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;/* this program will display number in words
for eg. if you enter 101,it will show &quot;ONE HUNDRED AND ONE&quot;*/

import java.util.*;

public class NumToWords {
  String string;
  String st1[] = { &quot;&quot;, &quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;four&quot;, &quot;five&quot;, &quot;six&quot;, &quot;seven&quot;,
                   &quot;eight&quot;, &quot;nine&quot;, };
  String st2[] = { &quot;hundred&quot;, &quot;thousand&quot;, &quot;lakh&quot;, &quot;crore&quot; };
  String st3[] = { &quot;ten&quot;, &quot;eleven&quot;, &quot;twelve&quot;, &quot;thirteen&quot;, &quot;fourteen&quot;,
                   &quot;fifteen&quot;, &quot;sixteen&quot;, &quot;seventeen&quot;, &quot;eighteen&quot;, &quot;ninteen&quot;, };
  String st4[] = { &quot;twenty&quot;, &quot;thirty&quot;, &quot;fourty&quot;, &quot;fifty&quot;, &quot;sixty&quot;, &quot;seventy&quot;,
                   &quot;eighty&quot;, &quot;ninety&quot; };

  public String convert(int number) {
    int n = 1;
    int word;
    string = &quot;&quot;;
    while (number != 0) {
      switch (n) {
        case 1:
          word = number % 100;
          pass(word);
          if (number &amp;gt; 100 &amp;amp;&amp;amp; number % 100 != 0) {
            show(&quot;and &quot;);
            //System.out.print(&quot;ankit&quot;);
          }
          number /= 100;
          break;
        case 2:
          word = number % 10;
          if (word != 0) {
            show(&quot; &quot;);
            show(st2[0]);
            show(&quot; &quot;);
            pass(word);
          }
          number /= 10;
          break;
        case 3:
          word = number % 100;
          if (word != 0) {
            show(&quot; &quot;);
            show(st2[1]);
            show(&quot; &quot;);
            pass(word);
          }
          number /= 100;
          break;
        case 4:
          word = number % 100;
          if (word != 0) {
            show(&quot; &quot;);
            show(st2[2]);
            show(&quot; &quot;);
            pass(word);
          }
          number /= 100;
          break;
        case 5:
          word = number % 100;
          if (word != 0) {
            show(&quot; &quot;);
            show(st2[3]);
            show(&quot; &quot;);
            pass(word);
          }
          number /= 100;
          break;
        }
        n++;
      }
      return string;
    }

  public void pass(int number) {
    int word, q;
    if (number &amp;lt; 10) {
      show(st1[number]);
    }
    if (number &amp;gt; 9 &amp;amp;&amp;amp; number &amp;lt; 20) {
      show(st3[number - 10]);
    }
    if (number &amp;gt; 19) {
      word = number % 10;
      if (word == 0) {
        q = number / 10;
        show(st4[q - 2]);
      } else {
        q = number / 10;
        show(st1[word]);
        show(&quot; &quot;);
        show(st4[q - 2]);
      }
    }
  }

  public void show(String s) {
    String st;
    st = string;
    string = s;
    string += st;
  }

  public static void main(String[] args) {
    NumToWords w = new NumToWords();
    Scanner input = new Scanner(System.in);
    System.out.print(&quot;Enter Number: &quot;);
    int num = input.nextInt();
    String inwords = w.convert(num);
    System.out.println(inwords);
  }
}
&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;a href=&quot;http://site.icu-project.org&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;30-1&quot;&gt;ICU4J&lt;/a&gt;를 사용할 수 있습니다.POM 엔트리를 추가하면 됩니다.코드는 모든 번호, 국가, 언어에 대해 아래에 기재되어 있습니다.&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;POM 엔트리&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;     &amp;lt;dependency&amp;gt;
        &amp;lt;groupId&amp;gt;com.ibm.icu&amp;lt;/groupId&amp;gt;
        &amp;lt;artifactId&amp;gt;icu4j&amp;lt;/artifactId&amp;gt;
        &amp;lt;version&amp;gt;64.2&amp;lt;/version&amp;gt;
    &amp;lt;/dependency&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;코드는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class TranslateNumberToWord {

/**
 * Translate
 * 
 * @param ctryCd
 * @param lang
 * @param reqStr
 * @param fractionUnitName
 * @return
 */
public static String translate(String ctryCd, String lang, String reqStr, String fractionUnitName) {
    StringBuffer result = new StringBuffer();

    Locale locale = new Locale(lang, ctryCd);
    Currency crncy = Currency.getInstance(locale);

    String inputArr[] = StringUtils.split(new BigDecimal(reqStr).abs().toPlainString(), &quot;.&quot;);
    RuleBasedNumberFormat rule = new RuleBasedNumberFormat(locale, RuleBasedNumberFormat.SPELLOUT);

    int i = 0;
    for (String input : inputArr) {
        CurrencyAmount crncyAmt = new CurrencyAmount(new BigDecimal(input), crncy);
        if (i++ == 0) {
            result.append(rule.format(crncyAmt)).append(&quot; &quot; + crncy.getDisplayName() + &quot; and &quot;);
        } else {
            result.append(rule.format(crncyAmt)).append(&quot; &quot; + fractionUnitName + &quot; &quot;);
        }
    }
    return result.toString();
}

public static void main(String[] args) {
    String ctryCd = &quot;US&quot;;
    String lang = &quot;en&quot;;
    String input = &quot;95.17&quot;;

    String result = translate(ctryCd, lang, input, &quot;Cents&quot;);
    System.out.println(&quot;Input: &quot; + input + &quot; result: &quot; + result);
}}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;꽤 많은 수로 테스트되었으며 출력은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Input: 95.17 result: ninety-five US Dollar and seventeen Cents
Input: 999999999999999999.99 result: nine hundred ninety-nine quadrillion nine hundred ninety-nine trillion nine hundred ninety-nine billion nine hundred ninety-nine million nine hundred ninety-nine thousand nine hundred ninety-nine US Dollar and ninety-nine Cents 
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 도움이 될 것 같은데...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그램은 매우 간단하고 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import java.util.*;

public class NumberToWord

{
    public void pw(int n, String ch)
    {
        String one[] = {

        &quot; &quot;, &quot; one&quot;, &quot; two&quot;, &quot; three&quot;, &quot; four&quot;, &quot; five&quot;, &quot; six&quot;, &quot; seven&quot;,
                &quot; eight&quot;, &quot; Nine&quot;, &quot; ten&quot;, &quot; eleven&quot;, &quot; twelve&quot;, &quot; thirteen&quot;,
                &quot; fourteen&quot;, &quot;fifteen&quot;, &quot; sixteen&quot;, &quot; seventeen&quot;, &quot; eighteen&quot;,
                &quot; nineteen&quot; };
        String ten[] = { &quot; &quot;, &quot; &quot;, &quot; twenty&quot;, &quot; thirty&quot;, &quot; forty&quot;, &quot; fifty&quot;,
                &quot; sixty&quot;, &quot;seventy&quot;, &quot; eighty&quot;, &quot; ninety&quot; };
        if (n &amp;gt; 19) {
            System.out.print(ten[n / 10] + &quot; &quot; + one[n % 10]);
        } else {
            System.out.print(one[n]);
        }
        if (n &amp;gt; 0)
            System.out.print(ch);

    }
    public static void main(String[] args)

    {
        int n = 0;
        Scanner s = new Scanner(System.in);
        System.out.print(&quot;Enter an integer number: &quot;);
        n = s.nextInt();
        if (n &amp;lt;= 0)
            System.out.print(&quot;Enter numbers greater than 0&quot;);
        else
        {
            NumberToWord a = new NumberToWord();
            System.out.print(&quot;After conversion number in words is :&quot;);
            a.pw((n / 1000000000), &quot; Hundred&quot;);
            a.pw((n / 10000000) % 100, &quot; crore&quot;);
            a.pw(((n / 100000) % 100), &quot; lakh&quot;);
            a.pw(((n / 1000) % 100), &quot; thousand&quot;);
            a.pw(((n / 100) % 10), &quot; hundred&quot;);
            a.pw((n % 100), &quot; &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;RuleBasedNumberRuleBasedNumber를 사용할 수 .&lt;/font&gt;&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;Ninety&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ULocale locale = new ULocale(Locale.US);  //us english
Double d = Double.parseDouble(90);
NumberFormat formatter = new RuleBasedNumberFormat(locale, RuleBasedNumberFormat.SPELLOUT);
String result = formatter.format(d);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다양한 언어를 지원합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 아주 간단한 &lt;a href=&quot;https://github.com/busaeed/Integer-To-Words-Java/blob/master/NumberInWords.java&quot; papago-id=&quot;37-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;클래스&lt;/a&gt; 번호가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/busaeed/Integer-To-Words-Java/blob/master/NumberInWords.java&quot; papago-id=&quot;37-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;작업&lt;/a&gt;을 매우 쉽게 수행할 수 &lt;a href=&quot;https://github.com/busaeed/Integer-To-Words-Java/blob/master/NumberInWords.java&quot; papago-id=&quot;37-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;있는&lt;/a&gt; InWords.java:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String numberInWords = NumberInWords.convertNumberToWords(27546); //twenty seven thousand and five hundred forty six
&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;이 클래스는 int 데이터형만 변환할 수 &lt;strong papago-id=&quot;38-1&quot;&gt;있습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;import java.util.*;

public class NumberToWord {
    public void numberToword(int n, String ch) {
        String one[] = {&quot; &quot;, &quot; one&quot;, &quot; two&quot;, &quot; three&quot;, &quot; four&quot;, &quot; five&quot;, &quot; six&quot;, &quot; seven&quot;, &quot; eight&quot;, &quot; Nine&quot;, &quot; ten&quot;, &quot; eleven&quot;, &quot; twelve&quot;, &quot; thirteen&quot;, &quot; fourteen&quot;, &quot;fifteen&quot;, &quot; sixteen&quot;, &quot; seventeen&quot;, &quot; eighteen&quot;, &quot; nineteen&quot;
        };
        String ten[] = {&quot; &quot;, &quot; &quot;, &quot; twenty&quot;, &quot; thirty&quot;, &quot; forty&quot;, &quot; fifty&quot;, &quot; sixty&quot;, &quot;seventy&quot;, &quot; eighty&quot;, &quot; ninety&quot;};
        if (n &amp;gt; 19) {
            System.out.print(ten[n / 10] + &quot; &quot; + one[n % 10]);
        } else {
            System.out.print(one[n]);
        }
        if (n &amp;gt; 0) {
            System.out.print(ch);
        }
    }
    public static void main(String[] args) {
        int n = 0;
        Scanner s = new Scanner(System.in);
        System.out.print(&quot;Enter an integer number: &quot;);
        n = s.nextInt();
        if (n &amp;lt;= 0) {
            System.out.print(&quot;Enter numbers greater than 0&quot;);
        } else {
            NumberToWord a = new NumberToWord();
            System.out.print(&quot;After conversion number in words is :&quot;);
            a.numberToword((n / 1000000000), &quot; Hundred&quot;);
            a.numberToword((n / 10000000) % 100, &quot; crore&quot;);
            a.numberToword(((n / 100000) % 100), &quot; lakh&quot;);
            a.numberToword(((n / 1000) % 100), &quot; thousand&quot;);
            a.numberToword(((n / 100) % 10), &quot; hundred&quot;);
            a.numberToword((n % 100), &quot; &quot;);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 도움이 될 것이다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public String numberToWords(long number) {
    if (number == 0) {
        return &quot;zero&quot;;
    }
    if (number &amp;lt; 0) {
        return &quot;minus &quot; + numberToWords(Math.abs(number));
    }
    String words = &quot;&quot;;
    if ((number / 10000000) &amp;gt; 0) {
        words += numberToWords(number / 10000000) + &quot; Crore &quot;;
        number %= 10000000;
    }
    if ((number / 100000) &amp;gt; 0) {
        words += numberToWords(number / 100000) + &quot; Lakh &quot;;
        number %= 100000;
    }
    if ((number / 1000) &amp;gt; 0) {
        words += numberToWords(number / 1000) + &quot; Thousand &quot;;
        number %= 1000;
    }
    if ((number / 100) &amp;gt; 0) {
        words += numberToWords(number / 100) + &quot; Hundred &quot;;
        number %= 100;
    }
    if (number &amp;gt; 0) {
        if (!words.equals(&quot;&quot;)) {
            words += &quot;and &quot;;
        }
        if (number &amp;lt; 20) {
            words += number;
        } else {
            words += (number);
            if ((number % 10) &amp;gt; 0) {
                words += &quot;-&quot; + (number % 10);
            }
        }
    }
    return words;
}
&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;font class=&quot;papago-parent&quot;&gt;야닉 로천도 비슷한 일을 저질렀다고 한다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;최대 999 Novemdecillion(999*10^60)의 숫자를 변환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;11월 10일 이후에 무슨 일이 일어날지 안다면 더 많은 것을 할 수 있을 텐데, 그럴 필요 없을 거라고 장담합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;숫자만 센트로 입력해 주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력도 문법적으로 정확합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://bitbucket.org/smleimberg/moneytowords&quot; rel=&quot;nofollow&quot; papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 Bitbucket Repo 링크입니다.&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 대답(지가르 조시)이지만, 현재는 스페인어로 되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실수를 발견하면 언제든지 변경해 주세요.&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;43&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;import java.text.*;

class SpanishNumberToWords {
  private static final String[] tensNames = {
    &quot;&quot;,
    &quot;&quot;,
    &quot;veinte&quot;,
    &quot;treinta&quot;,
    &quot;cuarenta&quot;,
    &quot;cincuenta&quot;,
    &quot;sesenta&quot;,
    &quot;setenta&quot;,
    &quot;ochenta&quot;,
    &quot;noventa&quot;
  };

  private static final String[] unitNames1 = {
    &quot;&quot;,
    &quot;un&quot;,
    &quot;dos&quot;,
    &quot;tres&quot;,
    &quot;cuatro&quot;,
    &quot;cinco&quot;,
    &quot;seis&quot;,
    &quot;siete&quot;,
    &quot;ocho&quot;,
    &quot;nueve&quot;,
    &quot;diez&quot;,
    &quot;once&quot;,
    &quot;doce&quot;,
    &quot;trece&quot;,
    &quot;catorce&quot;,
    &quot;quince&quot;,
    &quot;dieciseis&quot;,
    &quot;diecisiete&quot;,
    &quot;dieciocho&quot;,
    &quot;diecinueve&quot;,
    &quot;veinte&quot;,
    &quot;veintiun&quot;,
    &quot;veintidos&quot;,
    &quot;veintitres&quot;,
    &quot;veinticuatro&quot;,
    &quot;veinticinco&quot;,
    &quot;veintiseis&quot;,
    &quot;veintisiete&quot;,
    &quot;veintiocho&quot;,
    &quot;veintinueve&quot;,
  };

  private static final String[] unitNames2 = {
    &quot;&quot;,
    &quot;&quot;,
    &quot;dosc&quot;,
    &quot;tresc&quot;,
    &quot;cuatroc&quot;,
    &quot;quin&quot;,
    &quot;seisc&quot;,
    &quot;setec&quot;,
    &quot;ochoc&quot;,
    &quot;novec&quot;,
    &quot;diez&quot;
  };

  private SpanishNumberToWords() {}

  private static String convertZeroToHundred(int number) {

    int theTens = number / 10;
    int theUnit = number % 10;
    String result = &quot;&quot;;

    // separator
    String theSeparator = &quot;&quot;;
    if (theTens &amp;gt; 1) {
        theSeparator = &quot; y &quot;;
    }
    // particular cases
    switch (theUnit) {
    case 0:
        theSeparator = &quot;&quot;;
      break;
    default:
    }

    // tens in letters
    switch (theTens) {
    case 0:
        result = unitNames1[theUnit];
      break;
    case 1: case 2:
        result =  unitNames1[theTens*10+theUnit];
        break;
    default :
        result = tensNames[theTens]
                              + theSeparator + unitNames1[theUnit];
    }
    return result;
  }

  private static String convertLessThanOneThousand(int number) {

    int theHundreds = number / 100;
    int leReste = number % 100;
    String sReste = convertZeroToHundred(leReste);

    String result;
    switch (theHundreds) {
    case 0:
        result = sReste;
      break;
    case 1 :
      if (leReste &amp;gt; 0) {
          result = &quot;ciento &quot; + sReste;
      }
      else {
          result = &quot;cien&quot;;
      }
      break;
    default :
      if (leReste &amp;gt; 0) {
          result = unitNames2[theHundreds] + &quot;ientos &quot; + sReste;
      }
      else {
          result = unitNames2[theHundreds] + &quot;ientos&quot;;
      }
    }
    return result;
  }

  public static String convert(long number) {
    // 0 à 999 999 999 999
    if (number == 0) { return &quot;cero&quot;; }

    String snumber = Long.toString(number);

    // pad des &quot;0&quot;
    String mask = &quot;000000000000&quot;;
    DecimalFormat df = new DecimalFormat(mask);
    snumber = df.format(number);

    // XXXnnnnnnnnn
    int theMilliards = Integer.parseInt(snumber.substring(0,3));
    // nnnXXXnnnnnn
    int theMillions  = Integer.parseInt(snumber.substring(3,6));
    // nnnnnnXXXnnn
    int theCentMiles = Integer.parseInt(snumber.substring(6,9));
    // nnnnnnnnnXXX
    int lesMille = Integer.parseInt(snumber.substring(9,12));

    String tradMilliards;
    switch (theMilliards) {
    case 0:
      tradMilliards = &quot;&quot;;
      break;
    case 1 :
      tradMilliards = convertLessThanOneThousand(theMilliards)
         + &quot; mil millones &quot;;
      break;
    default :
      tradMilliards = convertLessThanOneThousand(theMilliards)
         + &quot; mil millones &quot;;
    }
    String resultat =  tradMilliards;

    String tradMillions;
    switch (theMillions) {
    case 0:
      tradMillions = &quot;&quot;;
      break;
    case 1 :
      tradMillions = convertLessThanOneThousand(theMillions)
         + &quot; millon &quot;;
      break;
    default :
      tradMillions = convertLessThanOneThousand(theMillions)
         + &quot; millones &quot;;
    }
    resultat =  resultat + tradMillions;

    String tradCentMille;
    switch (theCentMiles) {
    case 0:
      tradCentMille = &quot;&quot;;
      break;
    case 1 :
      tradCentMille = &quot;mil &quot;;
      break;
    default :
      tradCentMille = convertLessThanOneThousand(theCentMiles)
         + &quot; mil &quot;;
    }
    resultat =  resultat + tradCentMille;

    String tradMille;
    tradMille = convertLessThanOneThousand(lesMille);
    resultat =  resultat + tradMille;

    return resultat;
  }

  public static void main(String[] args) {
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(0));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(1));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(2));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(3));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(4));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(5));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(7));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(12));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(16));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(19));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(21));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(24));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(28));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(29));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(30));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(31));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(42));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(71));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(72));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(80));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(81));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(89));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(90));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(91));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(97));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(100));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(101));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(110));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(120));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(200));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(201));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(232));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(999));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(521));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(912));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(999));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(1000));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(1001));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(10000));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(10001));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(100000));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(267578));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(3000000000L));
    System.out.println(&quot;*** &quot; + SpanishNumberToWords.convert(2147483647));
    /*
     *** OUTPUT
        *** cero
        *** un
        *** dos
        *** tres
        *** cuatro
        *** cinco
        *** siete
        *** doce
        *** dieciseis
        *** diecinueve
        *** veintiun
        *** veinticuatro
        *** veintiocho
        *** veintinueve
        *** treinta
        *** treinta y un
        *** cuarenta y dos
        *** setenta y un
        *** setenta y dos
        *** ochenta
        *** ochenta y un
        *** ochenta y nueve
        *** noventa
        *** noventa y un
        *** noventa y siete
        *** cien
        *** ciento un
        *** ciento diez
        *** ciento veinte
        *** doscientos
        *** doscientos un
        *** doscientos treinta y dos
        *** novecientos noventa y nueve
        *** quinientos veintiun
        *** novecientos doce
        *** novecientos noventa y nueve
        *** mil 
        *** mil un
        *** diez mil 
        *** diez mil un
        *** cien mil 
        *** doscientos sesenta y siete mil quinientos setenta y ocho
        *** tres mil millones 
        *** dos mil millones ciento cuarenta y siete millones cuatrocientos ochenta y tres mil seiscientos cuarenta y siete
     */
  }
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;class NumberToWord {
    private static Map&amp;lt;Integer, String&amp;gt; numbers = new HashMap&amp;lt;Integer, String&amp;gt;();
    private static Set&amp;lt;Integer&amp;gt; numberSet = new TreeSet&amp;lt;Integer&amp;gt;(new Comparator&amp;lt;Integer&amp;gt;() {
        public int compare(Integer o1, Integer o2) {
            return o2 - o1;
        }
    });

    static {
        init();
        numberSet.addAll(numbers.keySet());
    }

    public static void main(String[] args) {
        System.out.println(getNumberInWord(1898765));
    }

    /*
     * convert positive numbers in word format number &amp;gt; 0 only
     */
    static String getNumberInWord(int number) {
        StringBuilder word = new StringBuilder();
        for (Integer n : numberSet) {
            if (number &amp;gt; 0 &amp;amp;&amp;amp; number &amp;gt;= n) {
                int div = number / n;
                String strNum = numbers.get(div);
                if (strNum == null) {
                    word.append(getNumberInWord(div));
                }
                // for less than 100, we don't need to say 1
                if (strNum != null &amp;amp;&amp;amp; (div &amp;gt; 1 || n &amp;gt; 100))
                    word.append(strNum + &quot; &quot;);

                word.append(numbers.get(n) + &quot; &quot;);
                number = number % n;
            }
        }
        return word.toString();
    }

    static void init() {
        numbers.put(0, &quot;Zero&quot;);
        numbers.put(1, &quot;One&quot;);
        numbers.put(2, &quot;Two&quot;);
        numbers.put(3, &quot;Three&quot;);
        numbers.put(4, &quot;Four&quot;);
        numbers.put(5, &quot;Five&quot;);
        numbers.put(6, &quot;Six&quot;);
        numbers.put(7, &quot;Seven&quot;);
        numbers.put(8, &quot;Eight&quot;);
        numbers.put(9, &quot;Nine&quot;);
        numbers.put(10, &quot;Ten&quot;);
        numbers.put(11, &quot;Eleven&quot;);
        numbers.put(12, &quot;Twelve&quot;);
        numbers.put(13, &quot;Thirteen&quot;);
        numbers.put(14, &quot;Fourteen&quot;);
        numbers.put(15, &quot;Fifteen&quot;);
        numbers.put(16, &quot;Sixteen&quot;);
        numbers.put(17, &quot;Seventeen&quot;);
        numbers.put(18, &quot;Eighteeen&quot;);
        numbers.put(19, &quot;Nineteen&quot;);
        numbers.put(20, &quot;Twenty&quot;);
        numbers.put(30, &quot;Thirty&quot;);
        numbers.put(40, &quot;Forty&quot;);
        numbers.put(50, &quot;Fifty&quot;);
        numbers.put(60, &quot;Sixty&quot;);
        numbers.put(70, &quot;Seventy&quot;);
        numbers.put(80, &quot;Eighty&quot;);
        numbers.put(90, &quot;Ninty&quot;);
        numbers.put(100, &quot;Hundred&quot;);
        numbers.put(1000, &quot;Thousand&quot;);
        numbers.put(1000000, &quot;Million&quot;);
        numbers.put(100000000, &quot;Billion&quot;);
    }

}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주어진 숫자를 단어로 변환하는 자바 컴포넌트를 개발했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Java &lt;s papago-id=&quot;44-1&quot;&gt;&lt;a href=&quot;http://www.javaservletsjspweb.in/2009/05/java-class-to-convert-number-into-words.html&quot; papago-id=&quot;44-1-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;프로그램에서 전체&lt;/a&gt;&lt;/s&gt; 클래스를 복사하여 &lt;s papago-id=&quot;44-1&quot;&gt;&lt;a href=&quot;http://www.javaservletsjspweb.in/2009/05/java-class-to-convert-number-into-words.html&quot; papago-id=&quot;44-1-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;숫자를 단어&lt;/a&gt;&lt;/s&gt;로 &lt;s papago-id=&quot;44-1&quot;&gt;&lt;a href=&quot;http://www.javaservletsjspweb.in/2009/05/java-class-to-convert-number-into-words.html&quot; papago-id=&quot;44-1-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;변환&lt;/a&gt;&lt;/s&gt;하고 프로젝트에 붙여넣기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 호출합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Words w = Words.getInstance(1234567);
System.out.println(w.getNumberInWords());
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 프로그램은 천만까지 지원합니다.&lt;/font&gt;&lt;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;2345223 = Twenty Three Lakh Fourty Five Thousand Two Hundred Twenty Three
9999999 = Ninety Nine Lakh Ninety Nine Thousand Nine Hundred Ninety Nine
199 = One Hundred Ninety Nine
10 = Ten
&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;/p&gt;&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;직관적인 솔루션&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1: [&lt;strong papago-id=&quot;50-1&quot;&gt;value &lt;/strong&gt;-&lt;strong papago-id=&quot;50-1&quot;&gt; word]&lt;/strong&gt;타입의 정렬된 매트릭스 작성&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2: 행렬에서 &lt;strong papago-id=&quot;51-1&quot;&gt;n/&lt;/strong&gt;value &amp;gt; &lt;strong papago-id=&quot;51-1&quot;&gt;0에 가장&lt;/strong&gt; 가까운 값을 찾습니다(binary_search 사용 가능).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3: 번호의 &lt;strong papago-id=&quot;52-1&quot;&gt;왼쪽&lt;/strong&gt;과 오른쪽 &lt;strong papago-id=&quot;52-3&quot;&gt;부분&lt;/strong&gt;을 반복적으로 작성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정답은 &lt;strong papago-id=&quot;53-1&quot;&gt;left_part&lt;/strong&gt; + &lt;strong papago-id=&quot;53-3&quot;&gt;word&lt;/strong&gt; + &lt;strong papago-id=&quot;53-5&quot;&gt;right_part&lt;/strong&gt; 입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-java prettyprint-override&quot;&gt;&lt;code&gt;class Solution {
    private final Object[][] pairs = {
            {1000_000_000, &quot;Billion&quot;}, {100_00_00, &quot;Million&quot;}, {1000, &quot;Thousand&quot;}, {100, &quot;Hundred&quot;},
            {90, &quot;Ninety&quot;}, {80, &quot;Eighty&quot;}, {70, &quot;Seventy&quot;}, {60, &quot;Sixty&quot;},
            {50, &quot;Fifty&quot;}, {40, &quot;Forty&quot;}, {30, &quot;Thirty&quot;}, {20, &quot;Twenty&quot;},
            {19, &quot;Nineteen&quot;}, {18, &quot;Eighteen&quot;}, {17, &quot;Seventeen&quot;}, {16, &quot;Sixteen&quot;},
            {15, &quot;Fifteen&quot;}, {14, &quot;Fourteen&quot;}, {13, &quot;Thirteen&quot;}, {12, &quot;Twelve&quot;},
            {11, &quot;Eleven&quot;}, {10, &quot;Ten&quot;}, {9, &quot;Nine&quot;}, {8, &quot;Eight&quot;},
            {7, &quot;Seven&quot;}, {6, &quot;Six&quot;}, {5, &quot;Five&quot;}, {4, &quot;Four&quot;},
            {3, &quot;Three&quot;}, {2, &quot;Two&quot;}, {1, &quot;One&quot;}
    };

    private Object[] getPair(int num) {
        int n = pairs.length;
        int l = 0, r = n - 1;
        int result = -1;
        while (l &amp;lt;= r) {
            int mid = (l + r) &amp;gt;&amp;gt;&amp;gt; 1;
            int value = (Integer) pairs[mid][0];
            if (value == num) {
                return pairs[mid];
            }
            else if (num / value &amp;gt; 0) {
                result = mid;
                r = mid - 1;
            }
            else {
                l = mid + 1;
            }
        }
        return pairs[result];
    }

    public String numberToWords(int num) {
        if (num == 0) {
            return &quot;Zero&quot;;
        }
        var pair = getPair(num);
        String word = (String) pair[1];
        int value = (Integer) pair[0];
        var left = num &amp;gt;= 100 ? numberToWords(num / value) + &quot; &quot; : &quot;&quot;;
        var right = num % value == 0 ? &quot;&quot; : &quot; &quot; + numberToWords(num % value);
        return left + word + right;
    }
}
&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;package com.stack.overflow.number.in.english;

import java.util.ResourceBundle;

public class ActualImplementation {

    public static ResourceBundle readPropertyFile = ResourceBundle
            .getBundle(&quot;NumberEnglishRepresentation&quot;);

    public static void main(String[] args) {
        System.out.println(ActualImplementation.main(-2));
    }

    public static String main(Integer number) {
        int power;
        // Calculate Number of digits

        Integer numberOfDigits = number &amp;gt; 0 ? (int) Math.log10((double) number) + 1
                : 1;
        String output = &quot;&quot;;
        // If number is negative convert it to positive an append minus to
        // output
        if (Integer.signum(number) == -1) {
            output = &quot;minus &quot;;
            number = number &amp;lt; 0 ? number * -1 : number;
        }
        String stringVal = String.valueOf(number);

        if (number &amp;lt;= 20 || number == 30 || number == 40 || number == 50
                || number == 60 || number == 70 || number == 80 || number == 90
                || number == 100 || number == 1000)
            output += readPropertyFile.getString(stringVal);

        else {
            int i;
            for (i = 0; i &amp;lt; numberOfDigits; i++) {

                if (number != 0) {

                    numberOfDigits = number &amp;gt; 0 ? (int) Math
                            .log10((double) number) + 1 : 1;

                    power = (int) Math.pow(10, numberOfDigits - 1);
                    // If number is like 10,001 then print ten first and then
                    // remaining value
                    if (numberOfDigits &amp;gt;= 5 &amp;amp;&amp;amp; numberOfDigits % 2 == 1) {
                        power = (int) Math.pow(10, numberOfDigits - 2);
                    }

                    if (readPropertyFile.containsKey(String.valueOf(number)))
                        output += readPropertyFile.getString(String
                                .valueOf(number));
                    else {
                        // As the digits at units and tens place are read
                        // differently
                        if (numberOfDigits &amp;gt; 2) {

                            output += readPropertyFile.getString(String
                                    .valueOf(number / power))
                                    + readPropertyFile.getString(String
                                            .valueOf(power));
                        } else {
                            output += readPropertyFile.getString(String
                                    .valueOf(number - number % power));

                        }
                    }
                    number = (int) (number % power);

                }
            }
        }

        return output;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리소스 파일은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;0=zero
1=one
2=two
3=three
4=four
5=five
6=six
7=seven
8=eight
9=nine
10=ten 


11=eleven
12=twelve
13=thirteen
14=fourteen
15fifteen
16=sixteen
17=seventeen
18=eighteen
19=nineteen
20=twenty

30=thirty
40=fourty
50=fifty
60=sixty
70=seventy
80=eighty
90=ninety

100=hundred
1000=thousand
100000=Lakh
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 10lakhs까지만 구현됩니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;public class NumberConverter {

    private String[] singleDigit = {&quot;&quot;, &quot; one&quot;, &quot; two&quot;, &quot; three&quot;,
    &quot; four&quot;, &quot; five&quot;,&quot; six&quot;, &quot; seven&quot;, &quot; eight&quot;, &quot; nine&quot;};

    private String[] tens = {&quot; ten&quot;, &quot; eleven&quot;, &quot; twelve&quot;, &quot; thirteen&quot;,
            &quot; fourteen&quot;, &quot; fifteen&quot;,&quot; sixteen&quot;, &quot; seventeen&quot;, &quot; eighteen&quot;, &quot; nineteen&quot;};

    private String[] twoDigits = {&quot;&quot;, &quot;&quot;, &quot; twenty&quot;, &quot; thirty&quot;,
            &quot; forty&quot;, &quot; fifty&quot;,&quot; sixty&quot;, &quot; seventy&quot;, &quot; eighty&quot;, &quot; ninety&quot;};

    public String convertToWords(String input) {
        long number = Long.parseLong(input);
        int size = input.length();
        if (size &amp;lt;= 3) {
            int num = (int) number;
            return handle3Digits(num);
        } else if (size &amp;gt; 3 &amp;amp;&amp;amp; size &amp;lt;= 6) {
            int thousand = (int)(number/1000);
            int hundred = (int) (number % 1000);
            String thousands = handle3Digits(thousand);

            String hundreds = handle3Digits(hundred);
            String word = &quot;&quot;;

            if (!thousands.isEmpty()) {
                word = thousands +&quot; thousand&quot;;
            }
            word += hundreds;
            return word;
        } else if (size &amp;gt; 6 &amp;amp;&amp;amp; size &amp;lt;= 9) {
            int million = (int) (number/ 1000000);
            number = number % 1000000;
            int thousand = (int)(number/1000);
            int hundred = (int) (number % 1000);

            String millions = handle3Digits(million);
            String thousands = handle3Digits(thousand);
            String hundreds = handle3Digits(hundred);

            String word = &quot;&quot;;

            if (!millions.isEmpty()) {
                word = millions +&quot; million&quot;;
            }
            if (!thousands.isEmpty()) {
                word += thousands +&quot; thousand&quot;;
            }
            word += hundreds;
            return word;
        }

        return &quot;Not implemented yet.&quot;;
    }


    private String handle3Digits(int number) {
        if (number &amp;lt;= 0)
            return &quot;&quot;;

        String word = &quot;&quot;;
        if (number/100 &amp;gt; 0) {
            int dividend = number/100;
            word = singleDigit[dividend] + &quot; hundred&quot;;
            number = number % 100;
        }
        if (number/10 &amp;gt; 1) {
            int dividend = number/10;
            number = number % 10;
            word += twoDigits[dividend];
        } else if (number/10 == 1) {
            number = number % 10;
            word += tens[number];
            return word;
        } else {
            number = number % 10;
        }
        if (number &amp;gt; 0) {
            word += singleDigit[number];
        }

        return word;
    }
}
&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;이 프로그램은 최대 102자리까지 변환할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제안이나 코멘트는 대단히 감사합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;package com.kegeesoft;
/**
 * @author Chandana Gamage +94 710 980 120
 * @author maheshgamage375@gmail.com
 * @author KeGee Software Solutions
 */
import java.math.BigDecimal;
import java.math.BigInteger;

public class Converter {
    private final BigInteger zero = new BigInteger(&quot;0&quot;);        
    private final BigInteger scale[] = new BigInteger[33];                                        
    private final String scaleName[] = {&quot; Duotrigintillion&quot;,&quot; Untrigintillion&quot;,&quot; Trigintillion&quot;,
                                        &quot; Nonvigintillion&quot;,&quot; Octovigintillion&quot;,&quot; Septvigintillion&quot;,
                                        &quot; Sexvigintillion&quot;,&quot; Quinvigintillion&quot;,&quot; Quattuorvigintillion&quot;,
                                        &quot; Trevigintillion&quot;,&quot; Duovigintillion&quot;,&quot; Unvigintillion&quot;,
                                        &quot; Vigintillion&quot;,&quot; Novemdecillion&quot;,&quot; Octodecillion&quot;,
                                        &quot; Septemdecillion&quot;,&quot; Sexdecillion&quot;,&quot; Quindecillion&quot;,
                                        &quot; Quattuordecillion &quot;,&quot; Tredecillion&quot;,&quot; Duodecillion&quot;,
                                        &quot; Undecillion&quot;,&quot; Decillion&quot;,&quot; Nonillion&quot;,&quot; Octillion&quot;,
                                        &quot; Septillion&quot;,&quot; Sextillion&quot;,&quot; Quintillion&quot;,&quot; Quadrillion&quot;,
                                        &quot; Trillion&quot;,&quot; Billion&quot;,&quot; Million&quot;,&quot; Thousand&quot;};
    private final String ones[] = {&quot;&quot;,&quot; One&quot;,&quot; Two&quot;,&quot; Three&quot;,&quot; Four&quot;,&quot; Five&quot;,&quot; Six&quot;,&quot; Seven&quot;,&quot; Eight&quot;,&quot; Nine&quot;,
                                   &quot; Ten&quot;,&quot; Eleven&quot;,&quot; Twelve&quot;,&quot; Thirteen&quot;,&quot; Fourteen&quot;,&quot; Fifteen&quot;,&quot; Sixteen&quot;,
                                   &quot; Seventeen&quot;,&quot; Eighteen&quot;,&quot; Nineteen&quot;};    
    private final String tens[] = {&quot;&quot;,&quot;&quot;,&quot; Twenty&quot;,&quot; Thirty&quot;,&quot; Forty&quot;,&quot; Fifty&quot;,&quot; Sixty&quot;,&quot; Seventy&quot;,&quot; Eighty&quot;,&quot; Ninety&quot;};
    private int index = 0;    
    private String shortValueInWords = &quot;&quot;;
    private String output = &quot;&quot;;
    private String decimalInWords = &quot;&quot;;
    private String valueInWords;

    public String setValue(BigInteger value) throws Exception{
        return this.bigValueInWords(value);
    }

    public String setValue(BigDecimal value) throws Exception{
        int indexOfDecimalPoint = (value.toString()).indexOf(&quot;.&quot;);

        // Split and pass interger value of given decimal value to constructor
        String tempIntValue = (value.toString()).substring(0, indexOfDecimalPoint);
        BigInteger intValue = new BigInteger(tempIntValue);

        // Split and pass decimal value of given decimal value to constructor
        String tempDeciValue = (value.toString()).substring(indexOfDecimalPoint+1, value.toString().length());
        BigInteger deciValue = new BigInteger(tempDeciValue);

        this.bigValueInWords(intValue);
        this.decimalValueInWords(deciValue);
        return null;
    }

    public String setValue(BigDecimal value, String currencyName, String centsName) throws Exception{
        int indexOfDecimalPoint = (value.toString()).indexOf(&quot;.&quot;);

        // Split and pass interger value of given decimal value to constructor
        String tempIntValue = (value.toString()).substring(0, indexOfDecimalPoint);
        BigInteger intValue = new BigInteger(tempIntValue);

        // Split and pass decimal value of given decimal value to constructor
        String tempDeciValue = (value.toString()).substring(indexOfDecimalPoint+1, value.toString().length());
        @SuppressWarnings(&quot;UnusedAssignment&quot;)
        BigInteger deciValue = null;

        // Concatenate &quot;0&quot; if decimal value has only single digit
        if(tempDeciValue.length() == 1){
            deciValue = new BigInteger(tempDeciValue.concat(&quot;0&quot;));
        }else{
            deciValue = new BigInteger(tempDeciValue);
        }

        this.output = currencyName+&quot; &quot;;
        this.bigValueInWords(intValue);
        this.centsValueInWords(deciValue, centsName);

        return null;
    }

    private String bigValueInWords(BigInteger value) throws Exception{
        // Build scale array
        int exponent = 99;
        for (int i = 0; i &amp;lt; scale.length; i++) {
            scale[i] = new BigInteger(&quot;10&quot;).pow(exponent);
            exponent = exponent - 3;
        }

        /* Idntify whether given value is a minus value or not
            if == yes then pass value without minus sign
            and pass Minus word to output
        */
        if(value.compareTo(zero) == -1){
            value = new BigInteger(value.toString().substring(1,value.toString().length()));
            output += &quot;Minus &quot;;
        }

        // Get value in words of big numbers (duotrigintillions to thousands)
        for (int i=0; i &amp;lt; scale.length; i++) {
            if((value.divide(scale[i])).compareTo(zero)==1){
            this.index = (int)(value.divide(scale[i])).intValue();
            output += shortValueInWords(this.index) + scaleName[i];
            value = value.mod(scale[i]);
            }
        }

        // Get value in words of short numbers (hundreds, tens and ones)
        output += shortValueInWords((int)(value.intValue()));

        // Get rid of any space at the beginning of output and return value in words
        return this.valueInWords = output.replaceFirst(&quot;\\s&quot;, &quot;&quot;);
    }

    private String shortValueInWords(int shortValue) throws Exception{
        // Get hundreds
        if(String.valueOf(shortValue).length()==3){
            shortValueInWords = ones[shortValue / 100]+&quot; Hundred&quot;+shortValueInWords(shortValue % 100);
        }

        // Get tens
        if(String.valueOf(shortValue).length()== 2 &amp;amp;&amp;amp; shortValue &amp;gt;= 20){
            if((shortValue / 10)&amp;gt;=2 &amp;amp;&amp;amp; (shortValue % 10)&amp;gt;=0){
                shortValueInWords = tens[shortValue / 10] + ones[shortValue % 10];
            }
        }

        // Get tens between 10 and 20
        if(String.valueOf(shortValue).length()== 2 &amp;amp;&amp;amp; shortValue &amp;gt;= 10 &amp;amp;&amp;amp; shortValue &amp;lt; 20){
            shortValueInWords = ones[shortValue];
        }

        // Get ones
        if(String.valueOf(shortValue).length()==1){
            shortValueInWords = ones[shortValue];
        }

        return this.shortValueInWords;
    }

    private String decimalValueInWords(BigInteger decimalValue) throws Exception{
        decimalInWords = &quot; Point&quot;;
        // Get decimals in point form (0.563 = zero point five six three)
        for(int i=0; i &amp;lt; (decimalValue.toString().length()); i++){
            decimalInWords += ones[Integer.parseInt(String.valueOf(decimalValue.toString().charAt(i)))];
        }

        return this.decimalInWords;
    }

    private String centsValueInWords(BigInteger decimalValue, String centsName) throws Exception{
        decimalInWords = &quot; and&quot;+&quot; &quot;+centsName;

        // Get cents in words (5.52 = five and cents fifty two)
        if(decimalValue.intValue() == 0){
            decimalInWords += shortValueInWords(decimalValue.intValue())+&quot; Zero only&quot;;
        }else{
            decimalInWords += shortValueInWords(decimalValue.intValue())+&quot; only&quot;;
        }


        return this.decimalInWords;
    }

    public String getValueInWords(){
        return this.valueInWords + decimalInWords;
    }

    public static void main(String args[]){
        Converter c1 = new Converter();
        Converter c2 = new Converter();
        Converter c3 = new Converter();
        Converter c4 = new Converter();

        try{
            // Get integer value in words
            c1.setValue(new BigInteger(&quot;15634886&quot;));
            System.out.println(c1.getValueInWords());

            // Get minus integer value in words
            c2.setValue(new BigInteger(&quot;-15634886&quot;));
            System.out.println(c2.getValueInWords());

            // Get decimal value in words
            c3.setValue(new BigDecimal(&quot;358621.56895&quot;));
            System.out.println(c3.getValueInWords());

            // Get currency value in words
            c4.setValue(new BigDecimal(&quot;358621.56&quot;),&quot;Dollar&quot;,&quot;Cents&quot;);
            System.out.println(c4.getValueInWords());
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
&lt;/code&gt;&lt;/pre&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;font class=&quot;papago-parent&quot;&gt;이는 정수 범위 내의 숫자에 적용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Scanner;

public class Solution2 {

    static Map&amp;lt;Integer, String&amp;gt; numberMap = new HashMap&amp;lt;Integer, String&amp;gt;();
    static Map&amp;lt;Integer, String&amp;gt; tensMap = new HashMap&amp;lt;Integer, String&amp;gt;();
    static Map&amp;lt;Integer, String&amp;gt; exponentsMap = new HashMap&amp;lt;Integer, String&amp;gt;();
    
    public static void main(String[] args) {

        LinkedList&amp;lt;String&amp;gt; wordList = new LinkedList&amp;lt;String&amp;gt;();
        Scanner scan = new Scanner(System.in);
        int input = scan.nextInt();
        scan.close();

        exponentsMap.put(3, &quot;thousand&quot;);
        exponentsMap.put(6, &quot;million&quot;);
        exponentsMap.put(9, &quot;billion&quot;);

        tensMap.put(2, &quot;twenty&quot;);
        tensMap.put(3, &quot;thirty&quot;);
        tensMap.put(4, &quot;forty&quot;);
        tensMap.put(5, &quot;fifty&quot;);
        tensMap.put(6, &quot;sixty&quot;);
        tensMap.put(7, &quot;seventy&quot;);
        tensMap.put(8, &quot;eighty&quot;);
        tensMap.put(9, &quot;ninety&quot;);

        numberMap.put(1, &quot;one&quot;);
        numberMap.put(2, &quot;two&quot;);
        numberMap.put(3, &quot;three&quot;);
        numberMap.put(4, &quot;four&quot;);
        numberMap.put(5, &quot;five&quot;);
        numberMap.put(6, &quot;six&quot;);
        numberMap.put(7, &quot;seven&quot;);
        numberMap.put(8, &quot;eight&quot;);
        numberMap.put(9, &quot;nine&quot;);
        numberMap.put(10, &quot;ten&quot;);
        numberMap.put(11, &quot;eleven&quot;);
        numberMap.put(12, &quot;twelve&quot;);
        numberMap.put(13, &quot;thirteen&quot;);
        numberMap.put(14, &quot;fourteen&quot;);
        numberMap.put(15, &quot;fifteen&quot;);
        numberMap.put(16, &quot;sixteen&quot;);
        numberMap.put(17, &quot;seventeen&quot;);
        numberMap.put(18, &quot;eighteen&quot;);
        numberMap.put(19, &quot;nineteen&quot;);

        int temp = input;
        
        int exponentCounter =0;
        while(temp&amp;gt;0) {
            // words from 1 to 99
            addLastTwo(temp%100,wordList);
            temp=temp/100;
            
            // add hundreds before exponents
            if(temp!=0) {
                wordList.addFirst(&quot;hundred&quot;);
                wordList.addFirst(numberMap.getOrDefault(temp%10,&quot;&quot;));
                temp = temp/10;
            }
            
            // words for exponents
            if(temp!=0) {
                exponentCounter+=3;
                wordList.addFirst(exponentsMap.getOrDefault(exponentCounter,&quot;&quot;));
            }
        }
        wordList.stream().filter(word -&amp;gt; !word.contentEquals(&quot;&quot;)).forEach(word -&amp;gt; System.out.print(word + &quot; &quot;));
    }

    private static void addLastTwo(int num, LinkedList&amp;lt;String&amp;gt; wordList) {
        if (num &amp;gt; 19) {
            wordList.addFirst(numberMap.getOrDefault(num % 10,&quot;&quot;));
            wordList.addFirst(tensMap.getOrDefault(num / 10,&quot;&quot;));
            
        } else {
            wordList.addFirst(numberMap.getOrDefault(num,&quot;&quot;));
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인도 루피와 밀리언과 억만이 아닌 라흐와 크로르로 이 코드를 찾아보세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메서드에 String 또는 Bigdecimal을 전달할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 paisa에도 올바른 출력이 제공됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;package yourpackage;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

public class Currency {
    
    public static String convertToWords(BigDecimal num) {
        return convertToWords(num.toString());
    }

    public static String convertToWords(String num) {
        BigDecimal bd = new BigDecimal(num);
        long number = bd.longValue();
        long no = bd.longValue();
        int decimal = (int) (bd.remainder(BigDecimal.ONE).doubleValue() * 100);
        int digits_length = String.valueOf(no).length();
        int i = 0;
        ArrayList&amp;lt;String&amp;gt; str = new ArrayList&amp;lt;&amp;gt;();
        HashMap&amp;lt;Integer, String&amp;gt; words = new HashMap&amp;lt;&amp;gt;();
        words.put(0, &quot;&quot;);
        words.put(1, &quot;One&quot;);
        words.put(2, &quot;Two&quot;);
        words.put(3, &quot;Three&quot;);
        words.put(4, &quot;Four&quot;);
        words.put(5, &quot;Five&quot;);
        words.put(6, &quot;Six&quot;);
        words.put(7, &quot;Seven&quot;);
        words.put(8, &quot;Eight&quot;);
        words.put(9, &quot;Nine&quot;);
        words.put(10, &quot;Ten&quot;);
        words.put(11, &quot;Eleven&quot;);
        words.put(12, &quot;Twelve&quot;);
        words.put(13, &quot;Thirteen&quot;);
        words.put(14, &quot;Fourteen&quot;);
        words.put(15, &quot;Fifteen&quot;);
        words.put(16, &quot;Sixteen&quot;);
        words.put(17, &quot;Seventeen&quot;);
        words.put(18, &quot;Eighteen&quot;);
        words.put(19, &quot;Nineteen&quot;);
        words.put(20, &quot;Twenty&quot;);
        words.put(30, &quot;Thirty&quot;);
        words.put(40, &quot;Forty&quot;);
        words.put(50, &quot;Fifty&quot;);
        words.put(60, &quot;Sixty&quot;);
        words.put(70, &quot;Seventy&quot;);
        words.put(80, &quot;Eighty&quot;);
        words.put(90, &quot;Ninety&quot;);
        String digits[] = { &quot;&quot;, &quot;Hundred&quot;, &quot;Thousand&quot;, &quot;Lakh&quot;, &quot;Crore&quot; };
        while (i &amp;lt; digits_length) {
            int divider = (i == 2) ? 10 : 100;
            number = no % divider;
            no = no / divider;
            i += divider == 10 ? 1 : 2;
            if (number &amp;gt; 0) {
                int counter = str.size();
                String plural = (counter &amp;gt; 0 &amp;amp;&amp;amp; number &amp;gt; 9) ? &quot;s&quot; : &quot;&quot;;
                String tmp = (number &amp;lt; 21) ? words.get(Integer.valueOf((int) number)) + &quot; &quot; + digits[counter] + plural
                        : words.get(Integer.valueOf((int) Math.floor(number / 10) * 10)) + &quot; &quot;
                                + words.get(Integer.valueOf((int) (number % 10))) + &quot; &quot; + digits[counter] + plural;
                str.add(tmp);
            } else {
                str.add(&quot;&quot;);
            }
        }

        Collections.reverse(str);
        String Rupees = String.join(&quot; &quot;, str).trim();

        String paise = (decimal) &amp;gt; 0
                ? &quot; And &quot; + words.get(Integer.valueOf((int) (decimal - decimal % 10))) + &quot; &quot;
                        + words.get(Integer.valueOf((int) (decimal % 10))) + &quot; Paise &quot;
                : &quot;&quot;;
        return &quot;Rupees &quot; + Rupees + paise + &quot; Only&quot;;
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        System.out.println(&quot;56721351 = &quot; + Currency.convertToWords(new BigDecimal(56721351)));
        System.out.println(&quot;76521351.61 = &quot; + Currency.convertToWords(&quot;76521351.61&quot;));
    }

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;56721351(Bigdecimal) 및 76521351.61(String)에 대해 이 프로그램을 실행하면 다음과 같이 출력됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;56721351 = Rupees Five Crore Sixty Seven Lakhs Twenty One Thousands Three Hundred Fifty One Only
76521351.61 = Rupees Seven Crore Sixty Five Lakhs Twenty One Thousands Three Hundred Fifty One And Sixty One Paise  Only
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 Java 프로그램은 숫자를 0에서 100만으로 변환하는 방법을 보여줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NumberToStringLiteral 클래스:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class NumberToStringLiteral
{

    public static void main(String[] args)
    {
        NumberToStringLiteral numberToStringLiteral = new NumberToStringLiteral();
        int number = 123456;
        String stringLiteral = numberToStringLiteral.convertIntegerToStringLiteral(number);
        System.out.println(stringLiteral);
    }
    
    private String convertIntegerToStringLiteral(int number)
    {
        if (number &amp;lt; 100)
            return from_0_To_100(number);
        
        if ( number &amp;gt;= 100 &amp;amp;&amp;amp; number &amp;lt; 1000 )
            return from_101_To_999(number);
        
        if ( number &amp;gt;= 1000 &amp;amp;&amp;amp; number &amp;lt;= 99999)
            return from_1000_To_99999(number);
        
        if (number &amp;lt;= 1000000)
            return from_100000_and_above(number);
        
        return Digits.OVER_ONE_MILLION.getStringLiteral();
    }
    
    private String from_0_To_100(int number)
    {
        if (number &amp;lt;= 19 )
            return ZeroToNineteen.getStringLiteral(number);
        
        String LastDigit = ( ZeroToNineteen.getStringLiteral(number % 10) != ZeroToNineteen.ZERO.getStringLiteral() ) ? 
                            ZeroToNineteen.getStringLiteral(number % 10) : &quot;&quot;;
        return Tens.getStringLiteralFromNumber( (number - (number % 10 )) ) + &quot; &quot; + LastDigit;
    }
    
    private String from_101_To_999(int number)
    {
        String LastDigit = ( ZeroToNineteen.getStringLiteral(number % 100) != ZeroToNineteen.ZERO.getStringLiteral() ) ?
                            ZeroToNineteen.getStringLiteral(number % 100)  : &quot;&quot;;
        
        if ( (number % 100) &amp;gt; 19)
            LastDigit = from_0_To_100(number % 100);
            
        if (LastDigit.isBlank())
            return ZeroToNineteen.getStringLiteral(number / 100 ) + Digits.getStringLiteral(getNumberOfDigit(0));
            
        return ZeroToNineteen.getStringLiteral(number / 100 ) + Digits.getStringLiteral(getNumberOfDigit(number)) + LastDigit;
    }
        
    private String from_1000_To_99999(int number)
    {
        String LastDigit = (number % 1000 &amp;lt; 20 ) ? from_0_To_100(number % 1000) : from_101_To_999(number % 1000);
        
        if (LastDigit.equalsIgnoreCase(ZeroToNineteen.ZERO.getStringLiteral()))
            LastDigit = &quot;&quot;;
        
        return from_0_To_100(number / 1000 ) + Digits.getStringLiteral(getNumberOfDigit(number)) + LastDigit;
    }
    
    private String from_100000_and_above(int number)
    {
        if (number == 1000000)
            return Digits.ONE_MILLION.getStringLiteral();
        
        String lastThreeDigit = (number % 1000 &amp;lt;= 100)  ? from_0_To_100(number % 1000) : from_101_To_999(number % 1000);
        
        if (lastThreeDigit.equalsIgnoreCase(ZeroToNineteen.ZERO.toString()))
            lastThreeDigit = &quot;&quot;;
        
        String number1 = from_101_To_999(number / 1000) + Digits.THOUSAND.getStringLiteral() +  lastThreeDigit;
        return String.valueOf(number1);
    }
    
    private int getNumberOfDigit(int number)
    {
        int count = 0;
        while ( number != 0 )
        {
            number /=  10;
            count++;
        }
        return count;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ZeroToNineteen 열거형:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public enum ZeroToNineteen
{
    ZERO(0, &quot;zero&quot;), 
    ONE(1, &quot;one&quot;),
    TWO(2, &quot;two&quot;),
    THREE(3, &quot;three&quot;),
    FOUR(4, &quot;four&quot;),
    FIVE(5, &quot;five&quot;),
    SIX(6, &quot;six&quot;),
    SEVEN(7, &quot;seven&quot;),
    EIGHT(8, &quot;eight&quot;),
    NINE(9, &quot;nine&quot;),
    TEN(10, &quot;ten&quot;),
    ELEVEN(11, &quot;eleven&quot;),
    TWELVE(12, &quot;twelve&quot;),
    THIRTEEN(13, &quot;thirteen&quot;),
    FOURTEEN(14, &quot;fourteen&quot;),
    FIFTEEN(15, &quot;fifteen&quot;),
    SIXTEEN(16, &quot;sixteen&quot;),
    SEVENTEEN(17, &quot;seventeen&quot;),
    EIGHTEEN(18, &quot;eighteen&quot;),
    NINETEEN(19, &quot;nineteen&quot;);
    
    
    private int number;
    private String stringLiteral;
    public static Map&amp;lt;Integer, String&amp;gt; stringLiteralMap;
    
    ZeroToNineteen(int number, String stringLiteral)
    {
        this.number = number;
        this.stringLiteral = stringLiteral;
    }
    
    public int getNumber()
    {
        return this.number;
    }
    
    public String getStringLiteral()
    {
        return this.stringLiteral;
    }
    
    public static String getStringLiteral(int number)
    {
        if (stringLiteralMap == null)
            addData();
        
        return stringLiteralMap.get(number);
    }
    
    private static void addData()
    {
        stringLiteralMap = new HashMap&amp;lt;&amp;gt;();
        for (ZeroToNineteen zeroToNineteen : ZeroToNineteen.values())
        {
            stringLiteralMap.put(zeroToNineteen.getNumber(), zeroToNineteen.getStringLiteral());
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텐스 열거:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public enum Tens
{
    TEN(10, &quot;ten&quot;),
    TWENTY(20, &quot;twenty&quot;),
    THIRTY(30, &quot;thirty&quot;),
    FORTY(40, &quot;forty&quot;),
    FIFTY(50, &quot;fifty&quot;),
    SIXTY(60, &quot;sixty&quot;),
    SEVENTY(70, &quot;seventy&quot;),
    EIGHTY(80, &quot;eighty&quot;),
    NINETY(90, &quot;ninety&quot;),
    HUNDRED(100, &quot;one hundred&quot;);
    
    
    private int number;
    private String stringLiteral;
    private static Map&amp;lt;Integer, String&amp;gt; stringLiteralMap;
    
    Tens(int number, String stringLiteral)
    {
        this.number = number;
        this.stringLiteral = stringLiteral;
    }
    
    public int getNumber()
    {
        return this.number;
    }
    
    public String getStringLiteral()
    {
        return this.stringLiteral;
    }
    
    public static String getStringLiteralFromNumber(int number)
    {
        if (stringLiteralMap == null)
            addDataToStringLiteralMap();
        
        return stringLiteralMap.get(number);
    }
    
    private static void addDataToStringLiteralMap()
    {
        stringLiteralMap = new HashMap&amp;lt;Integer, String&amp;gt;();
        for (Tens tens : Tens.values())
            stringLiteralMap.put(tens.getNumber(), tens.getStringLiteral());
    }
}
&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;pre&gt;&lt;code&gt;public enum Digits
{
    HUNDRED(3, &quot; hundred and &quot;),
    THOUSAND(4, &quot; thousand &quot;),
    TEN_THOUSAND(5,&quot; thousand &quot;),
    ONLY_HUNDRED(0, &quot; hundred&quot; ),
    ONE_MILLION(1000000, &quot;one million&quot;),
    OVER_ONE_MILLION(1000001, &quot;over one million&quot;);
    
    private int digit;
    private String stringLiteral;
    private static Map&amp;lt;Integer, String&amp;gt; stringLiteralMap;
    
    private Digits(int digit, String stringLiteral)
    {
        this.digit = digit;
        this.stringLiteral = stringLiteral;
    }
    
    public int getDigit()
    {
        return this.digit;
    }
    
    public String getStringLiteral()
    {
        return this.stringLiteral;
    }
    
    public static String getStringLiteral(int number)
    {
        if ( stringLiteralMap == null )
            addStringLiteralMap();
        
        return stringLiteralMap.get(number);
    }
    
    private static void addStringLiteralMap()
    {
        stringLiteralMap = new HashMap&amp;lt;Integer, String&amp;gt;();
        for ( Digits digits : Digits.values() )
            stringLiteralMap.put(digits.getDigit(), digits.getStringLiteral());
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;one hundred and twenty three thousand four hundred and fifty six
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주의: 상수 변수에는 3개의 열거형을 모두 사용했습니다.배열을 사용할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 도움이 되기를 바라며, 댓글란에 의문 사항이 있으면 알려주세요.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;    import java.util.Scanner;

public class StringToNum {
public static void main(String args[])
  {
    Scanner sc=new Scanner(System.in);
    System.out.println(&quot;Enter the no: &quot;);
    int  no=sc.nextInt();
    int arrNum[]=new int[10];
    int i=0;
    while(no!=0)
    {
      arrNum[i]=no%10;
      no=no/10;
      i++;
    }
    int len=i;
    int arrNum1[]=new int[len];
    int j=0;
    for(int k=len-1;k&amp;gt;=0;k--)
    {
        arrNum1[j]=arrNum[k];
        j++;
    }
    StringToNum stn=new StringToNum();
    String output=&quot;&quot;;
    switch(len)
    {
      case 1:
      {
         output+=stn.strNum1(arrNum1[len-1]);
         System.out.println(&quot;output=&quot;+output);
         break;
      }
      case 2:
      {
        int no1=arrNum1[len-2]*10+arrNum1[len-1];
        if(no1&amp;gt;=11 &amp;amp; no1&amp;lt;=19)
        {
         output=stn.strNum2(no1);
        // output=output+&quot; &quot;+stn.strNum1(arrNum1[len-1]);
         System.out.println(&quot;output=&quot;+output);
        }
        else
        {
         arrNum1[len-2]=arrNum1[len-2]*10;
         output+=stn.strNum2(arrNum1[len-2]);
         output=output+&quot; &quot;+stn.strNum1(arrNum1[len-1]);
         System.out.println(&quot;output=&quot;+output);
        }
         break;
      }
      case 3:
      {
        output=stn.strNum1(arrNum1[len-3])+&quot; hundred &quot;;
        int no1=arrNum1[len-2]*10+arrNum1[len-1];
        if(no1&amp;gt;=11 &amp;amp; no1&amp;lt;=19)
        {
         output=stn.strNum2(no1);
        }
        else
        {
         arrNum1[len-2]=arrNum1[len-2]*10;
         output+=stn.strNum2(arrNum1[len-2]);
         output=output+&quot; &quot;+stn.strNum1(arrNum1[len-1]);
        }
        System.out.println(&quot;output=&quot;+output);  
        break;
      }
      case 4:
      {
        output=stn.strNum1(arrNum1[len-4])+&quot; thousand &quot;;
        if(!stn.strNum1(arrNum1[len - 3]).equals(&quot;&quot;))
        {
        output+=stn.strNum1(arrNum1[len-3])+&quot; hundred &quot;;
        }
        int no1=arrNum1[len-2]*10+arrNum1[len-1];
        if(no1&amp;gt;=11 &amp;amp; no1&amp;lt;=19)
        {
         output=stn.strNum2(no1);
        }
        else
        {
         arrNum1[len-2]=arrNum1[len-2]*10;
         output+=stn.strNum2(arrNum1[len-2]);
         output=output+&quot; &quot;+stn.strNum1(arrNum1[len-1]);
        }
        System.out.println(&quot;output=&quot;+output);
        break;
      }

      case 5:
      {
        int no1=arrNum1[len-5]*10+arrNum1[len-4];
        if(no1&amp;gt;=11 &amp;amp; no1&amp;lt;=19)
        {
         output=stn.strNum2(no1)+&quot; thousand &quot;;
        }
        else
        {
         arrNum1[len-5]=arrNum1[len-5]*10;
         output+=stn.strNum2(arrNum1[len-5]);
         output=output+&quot; &quot;+stn.strNum1(arrNum1[len-4])+&quot; thousand &quot;;
        }
        if( !stn.strNum1(arrNum1[len - 3]).equals(&quot;&quot;))
        {
        output+=stn.strNum1(arrNum1[len-3])+&quot; hundred &quot;;
        }
        no1 = arrNum1[len - 2] * 10 + arrNum1[len - 1];
        if(no1&amp;gt;=11 &amp;amp; no1&amp;lt;=19)
        {
         output=stn.strNum2(no1);
        }
        else
        {
         arrNum1[len-2]=arrNum1[len-2]*10;
         output+=stn.strNum2(arrNum1[len-2]);
         output=output+&quot; &quot;+stn.strNum1(arrNum1[len-1]);
        }
        System.out.println(&quot;output=&quot;+output);
        break;
      }
      case 6:
      {
        output+=stn.strNum1(arrNum1[len-6])+&quot; million &quot;;
        int no1=arrNum1[len-5]*10+arrNum1[len-4];
        if(no1&amp;gt;=11 &amp;amp; no1&amp;lt;=19)
        {
         output+=stn.strNum2(no1)+&quot; thousand &quot;;
        }
        else
        {
         arrNum1[len-5]=arrNum1[len-5]*10;
         output+=stn.strNum2(arrNum1[len-5]);
         output=output+&quot; &quot;+stn.strNum1(arrNum1[len-4])+&quot; thousand &quot;;
        }
        if( !stn.strNum1(arrNum1[len - 3]).equals(&quot;&quot;))
        {
        output+=stn.strNum1(arrNum1[len-3])+&quot; hundred &quot;;
        }
        no1 = arrNum1[len - 2] * 10 + arrNum1[len - 1];
        if(no1&amp;gt;=11 &amp;amp; no1&amp;lt;=19)
        {
         output=stn.strNum2(no1);
        }
        else
        {
         arrNum1[len-2]=arrNum1[len-2]*10;
         output+=stn.strNum2(arrNum1[len-2]);
         output=output+&quot; &quot;+stn.strNum1(arrNum1[len-1]);
        }
        System.out.println(&quot;output=&quot;+output);
        break;
      }
      case 7:
      {
        int no1=arrNum1[len-7]*10+arrNum1[len-6];
        if(no1&amp;gt;=11 &amp;amp; no1&amp;lt;=19)
        {
         output=stn.strNum2(no1)+&quot; Milloin &quot;;
        }
        else
        {
         arrNum1[len-7]=arrNum1[len-7]*10;
         output+=stn.strNum2(arrNum1[len-7]);
         output=output+&quot; &quot;+stn.strNum1(arrNum1[len-6])+&quot; Million &quot;;
        }
        no1=arrNum1[len-5]*10+arrNum1[len-4];
        if(no1&amp;gt;=11 &amp;amp; no1&amp;lt;=19)
        {
         output=stn.strNum2(no1)+&quot; Thousand &quot;;
        }
        else
        {
         arrNum1[len-5]=arrNum1[len-5]*10;
         output+=stn.strNum2(arrNum1[len-5]);
         output=output+&quot; &quot;+stn.strNum1(arrNum1[len-4])+&quot; Thousand &quot;;
        }
        if( !stn.strNum1(arrNum1[len - 3]).equals(&quot;&quot;))
        {
        output+=stn.strNum1(arrNum1[len-3])+&quot; Hundred &quot;;
        }
        no1 = arrNum1[len - 2] * 10 + arrNum1[len - 1];
        if(no1&amp;gt;=11 &amp;amp; no1&amp;lt;=19)
        {
         output=stn.strNum2(no1);
        }
        else
        {
         arrNum1[len-2]=arrNum1[len-2]*10;
         output+=stn.strNum2(arrNum1[len-2]);
         output=output+&quot; &quot;+stn.strNum1(arrNum1[len-1]);
        }
        System.out.println(&quot;output=&quot;+output);
        break;
      }
    }

  }
  String strNum1(int a)
  {
    String op=&quot;&quot;;
    switch(a)
    {
     case 1:
     {
     op=&quot;one&quot;;
     break;
     }
     case 2:
     {
     op=&quot;two&quot;;
     break;
     }
     case 3:
     {
     op=&quot;three&quot;;
     break;
     }
     case 4:
     {
     op=&quot;four&quot;;
     break;
     }
     case 5:
     {
     op=&quot;five&quot;;
     break;
     }
     case 6:
     {
     op=&quot;six&quot;;
     break;
     }
     case 7:
     {
     op=&quot;seven&quot;;
     break;
     }
     case 8:
     {
     op=&quot;eight&quot;;
     break;
     }
     case 9:
     {
     op=&quot;nine&quot;;
     break;
     }
    }
    return op;
  }
  String strNum2(int a)
  {
    String op=&quot;&quot;;
    switch(a)
    {
     case 10:
     {
     op=&quot;ten&quot;;
     break;
     }
     case 20:
     {
     op=&quot;twenty&quot;;
     break;
     }
     case 30:
     {
     op=&quot;thirty&quot;;
     break;
     }
     case 40:
     {
     op=&quot;fourty&quot;;
     break;
     }
     case 50:
     {
     op=&quot;fifty&quot;;
     break;
     }
     case 60:
     {
     op=&quot;sixty&quot;;
     break;
     }
     case 70:
     {
     op=&quot;seventy&quot;;
     break;
     }
     case 80:
     {
     op=&quot;eighty&quot;;
     break;
     }
     case 90:
     {
     op=&quot;ninty&quot;;
     break;
     }
     case 11:
     {
     op=&quot;eleven&quot;;
     break;
     }
     case 12:
     {
     op=&quot;twelve&quot;;
     break;
     }
     case 13:
     {
     op=&quot;thirteen&quot;;
     break;
     }
     case 14:
     {
     op=&quot;fourteen&quot;;
     break;
     }
     case 15:
     {
     op=&quot;fifteen&quot;;
     break;
     }
     case 16:
     {
     op=&quot;sixteen&quot;;
     break;
     }
     case 17:
     {
     op=&quot;seventeen&quot;;
     break;
     }
     case 18:
     {
     op=&quot;eighteen&quot;;
     break;
     }
     case 19:
     {
     op=&quot;nineteen&quot;;
     break;
     }
    }
    return op;
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;/* This program will print words for a number between 0 to 99999*/

    public class NumberInWords5Digits {

        static int testcase1 = 93284;

        public static void main(String args[]){
            NumberInWords5Digits testInstance = new NumberInWords5Digits();
            String result = testInstance.inWords(testcase1);
            System.out.println(&quot;Result : &quot;+result);
        }

        //write your code here
        public String inWords(int num){
            int digit = 0;
            String word = &quot;&quot;;
            int temp = num;
            while(temp&amp;gt;0)
            {
                if(temp%10 &amp;gt;= 0)
                    digit++;
                temp = temp/10;
            }

            if(num == 0)
                return &quot;zero&quot;;

            System.out.println(num);
            if(digit == 1)
                word = inTens(num, digit);
            else if(digit == 2)
                word = inTens(num, digit);
            else if(digit == 3)
                word = inHundreds(num, digit);
            else if(digit == 4)
                word = inThousands(num, digit);
            else if(digit == 5)
                word = inThousands(num, digit);
            return word;
        }

        public String inTens(int num, int digit){
            int tens = 0;
            int units = 0;
            if(digit == 2)      
            {
                tens = num/10;
                units = num%10;
            }
            String unit = &quot;&quot;;
            String ten = &quot;&quot;;
            String word = &quot;&quot;;

            if(num == 10)
            {word = &quot;ten&quot;; return word;}

            if(num == 11)
            {word = &quot;eleven&quot;; return word;}
            if(num == 12)
            {word = &quot;twelve&quot;; return word;}
            if(num == 13)
            {word = &quot;thirteen&quot;; return word;}
            if(num == 14)
            {word = &quot;fourteen&quot;; return word;}
            if(num == 15)
            {word = &quot;fifteen&quot;; return word;}
            if(num == 16)
            {word = &quot;sixteen&quot;; return word;}
            if(num == 17)
            {word = &quot;seventeen&quot;; return word;}
            if(num == 18)
            {word = &quot;eighteen&quot;; return word;}
            if(num == 19)
            {word = &quot;nineteen&quot;; return word;}

            if(units == 1 || num == 1)
                unit = &quot;one&quot;;
            else if(units == 2 || num == 2)
                unit = &quot;two&quot;;
            else if(units == 3 || num == 3)
                unit = &quot;three&quot;;
            else if(units == 4 || num == 4)
                unit = &quot;four&quot;;
            else if(units == 5 || num == 5)
                unit = &quot;five&quot;;
            else if(units == 6 || num == 6)
                unit = &quot;six&quot;;
            else if(units == 7 || num == 7)
                unit = &quot;seven&quot;;
            else if(units == 8 || num == 8)
                unit = &quot;eight&quot;;
            else if(units == 9 || num == 9)
                unit = &quot;nine&quot;;

            if(tens == 2)
                ten = &quot;twenty&quot;;
            else if(tens == 3)
                ten = &quot;thirty&quot;;
            else if(tens == 4)
                ten = &quot;forty&quot;;
            else if(tens == 5)
                ten = &quot;fifty&quot;;
            else if(tens == 6)
                ten = &quot;sixty&quot;;
            else if(tens == 7)
                ten = &quot;seventy&quot;;
            else if(tens == 8)
                ten = &quot;eighty&quot;;
            else if(tens == 9)
                ten = &quot;ninety&quot;;

            if(digit == 1)
                word = unit;
            else if(digit == 2)
                word = ten + &quot; &quot; + unit;
            return word;
        }

        //inHundreds(525, 3)
        public String inHundreds(int num, int digit){

            int hundreds = num/100; // =5
            int tensAndUnits = num%100; // =25
            String hundred = &quot;&quot;;
            String tenAndUnit = &quot;&quot;;
            String word = &quot;&quot;;

            tenAndUnit = inTens(tensAndUnits, 2);

            if(hundreds == 1)
                hundred = &quot;one hundred&quot;;
            else if(hundreds == 2)
                hundred = &quot;two hundred&quot;;
            else if(hundreds == 3)
                hundred = &quot;three hundred&quot;;
            else if(hundreds == 4)
                hundred = &quot;four hundred&quot;;
            else if(hundreds == 5)
                hundred = &quot;five hundred&quot;;
            else if(hundreds == 6)
                hundred = &quot;six hundred&quot;;
            else if(hundreds == 7)
                hundred = &quot;seven hundred&quot;;
            else if(hundreds == 8)
                hundred = &quot;eight hundred&quot;;
            else if(hundreds == 9)
                hundred = &quot;nine hundred&quot;;

            word = hundred + &quot; &quot; + tenAndUnit;
            return word;
        }

        public String inThousands(int num, int digit){

            int thousands = 0;      
            int hundredsAndOthers = num%1000;
            String thousand = &quot;&quot;;
            String hundredAndOther = &quot;&quot;;
            String word = &quot;&quot;;
            if(digit == 5)
            {
                thousands = num/1000;
                thousand = inTens(thousands, 2);            
            }
            else if(digit == 4)
            {
                thousands = num/1000;
                thousand = inTens(thousands, 1);
            }

            if(hundredsAndOthers/100 == 0) // in case of &quot;023&quot;
                hundredAndOther = inTens(hundredsAndOthers, 2);
            else
                hundredAndOther = inHundreds(hundredsAndOthers, 3);

            word = thousand + &quot; thousand &quot; + hundredAndOther;

            return word;
        }
    }
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;import java.lang.*;
import java.io.*;
public class rupee
{
public static void main(String[] args)throws  IOException
{

 int len=0,revnum=0,i,dup=0,j=0,k=0;
 int gvalue;
  String[] ones={&quot;one&quot;,&quot;Two&quot;,&quot;Three&quot;,&quot;Four&quot;,&quot;Five&quot;,&quot;Six&quot;,&quot;Seven&quot;,&quot;Eight&quot;,&quot;Nine&quot;,&quot;Eleven&quot;,&quot;Twelve&quot;,&quot;Thirteen&quot;,&quot;Fourteen&quot;,&quot;Fifteen&quot;,&quot;Sixteen&quot;,&quot;Seventeen&quot;,&quot;Eighteen&quot;,&quot;Nineteen&quot;,&quot;&quot;};
    String[] twos={&quot;Ten&quot;,&quot;Twenty&quot;,&quot;Thirty&quot;,&quot;Fourty&quot;,&quot;fifty&quot;,&quot;Sixty&quot;,&quot;Seventy&quot;,&quot;eighty&quot;,&quot;Ninety&quot;,&quot;&quot;};
System.out.println(&quot;\n Enter value&quot;);
InputStreamReader b=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(b);
gvalue=Integer.parseInt(br.readLine());
if(gvalue==10)

System.out.println(&quot;Ten&quot;);

else if(gvalue==100)

System.out.println(&quot;Hundred&quot;);

else if(gvalue==1000)
System.out.println(&quot;Thousand&quot;);

dup=gvalue;
for(i=0;dup&amp;gt;0;i++)
{
revnum=revnum*10+dup%10;
len++;
dup=dup/10;
}
while(j&amp;lt;len)
{
if(gvalue&amp;lt;10)
{
System.out.println(ones[gvalue-1]);
}
else if(gvalue&amp;gt;10&amp;amp;&amp;amp;gvalue&amp;lt;=19)
{
System.out.println(ones[gvalue-2]);
break;
}
else if(gvalue&amp;gt;19&amp;amp;&amp;amp;gvalue&amp;lt;100)
{
k=gvalue/10;
gvalue=gvalue%10;
System.out.println(twos[k-1]);
}
else if(gvalue&amp;gt;100&amp;amp;&amp;amp;gvalue&amp;lt;1000)
{
k=gvalue/100;
gvalue=gvalue%100;
System.out.println(ones[k-1] +&quot;Hundred&quot;);
}
else if(gvalue&amp;gt;=1000&amp;amp;&amp;amp;gvalue&amp;lt;9999)
{
k=gvalue/1000;
gvalue=gvalue%1000;
System.out.println(ones[k-1]+&quot;Thousand&quot;);
    }
else if(gvalue&amp;gt;=11000&amp;amp;&amp;amp;gvalue&amp;lt;=19000)
{
    k=gvalue/1000;
    gvalue=gvalue%1000;
    System.out.println(twos[k-2]+&quot;Thousand&quot;);
}       
else if(gvalue&amp;gt;=12000&amp;amp;&amp;amp;gvalue&amp;lt;100000)
{
k=gvalue/10000;
    gvalue=gvalue%10000;
System.out.println(ones[gvalue-1]);
}
else
{
System.out.println(&quot;&quot;);
    }
j++;
}
}
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것도 다른 방법인데...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(범위가 한정되어 있습니다)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static String numToWord(Integer i) {

 final  String[] units = { &quot;Zero&quot;, &quot;One&quot;, &quot;Two&quot;, &quot;Three&quot;,
        &quot;Four&quot;, &quot;Five&quot;, &quot;Six&quot;, &quot;Seven&quot;, &quot;Eight&quot;, &quot;Nine&quot;, &quot;Ten&quot;, &quot;Eleven&quot;,
        &quot;Twelve&quot;, &quot;Thirteen&quot;, &quot;Fourteen&quot;, &quot;Fifteen&quot;, &quot;Sixteen&quot;,
        &quot;Seventeen&quot;, &quot;Eighteen&quot;, &quot;Nineteen&quot; };
 final  String[] tens = { &quot;&quot;, &quot;&quot;, &quot;Twenty&quot;, &quot;Thirty&quot;, &quot;Forty&quot;,
        &quot;Fifty&quot;, &quot;Sixty&quot;, &quot;Seventy&quot;, &quot;Eighty&quot;, &quot;Ninety&quot; };
    if (i &amp;lt; 20)
        return units[i];
    if (i &amp;lt; 100)
        return tens[i / 10] + ((i % 10 &amp;gt; 0) ? &quot; &quot; + numToWord(i % 10) : &quot;&quot;);
    if (i &amp;lt; 1000)
        return units[i / 100] + &quot; Hundred&quot;
                + ((i % 100 &amp;gt; 0) ? &quot; and &quot; + numToWord(i % 100) : &quot;&quot;);
    if (i &amp;lt; 1000000)
        return numToWord(i / 1000) + &quot; Thousand &quot;
                + ((i % 1000 &amp;gt; 0) ? &quot; &quot; + numToWord(i % 1000) : &quot;&quot;);
    return numToWord(i / 1000000) + &quot; Million &quot;
            + ((i % 1000000 &amp;gt; 0) ? &quot; &quot; + numToWord(i % 1000000) : &quot;&quot;);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3911966/&lt;a href=&quot;https://stackoverflow.com/questions/3911966/how-to-convert-number-to-words-in-java&quot; target=&quot;_blank&quot; papago-id=&quot;70-1&quot;&gt;how-to-convert-number-to-words-in-java&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>java</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/903</guid>
      <comments>https://bestcode.tistory.com/903#entry903comment</comments>
      <pubDate>Mon, 6 Feb 2023 23:34:25 +0900</pubDate>
    </item>
    <item>
      <title>jQuery를 사용하여 하이퍼링크의 href 속성을 변경하는 방법</title>
      <link>https://bestcode.tistory.com/902</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery를 사용하여 하이퍼링크의 href 속성을 변경하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「 」를  해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;href&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;j를 사용한  타깃&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Query query query query （ 크 query 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;a&quot;).attr(&quot;href&quot;, &quot;http://www.google.com/&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 모든 하이퍼링크의 href를 Google을 가리키도록 변경합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;좀 더 세련된 셀렉터를 원하실 겁니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 링크 소스(하이퍼링크)와 링크 타깃(일명 &quot;앵커&quot;) 앵커태그가 혼재되어 있는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a name=&quot;MyLinks&quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;http://www.codeproject.com/&quot;&amp;gt;The CodeProject&amp;lt;/a&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;&lt;font class=&quot;papago-parent&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;href&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 class=&quot;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;a&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 「」가 붙은 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;href&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;a[href]&quot;) //...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;href&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;$(&quot;a[href='http://www.google.com/']&quot;).attr('href', 'http://www.live.com/')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이 에서 이 링크의 를 확인할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;href&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;http://www.google.com/&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;href&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;a[href^='http://stackoverflow.com']&quot;)
   .each(function()
   { 
      this.href = this.href.replace(/^http:\/\/beta\.stackoverflow\.com/, 
         &quot;http://stackoverflow.com&quot;);
   });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 부분에서는 &lt;em papago-id=&quot;15-1&quot;&gt;href&lt;/em&gt;가 시작하는 링크만 선택합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;http://stackoverflow.com&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;그런 다음 간단한 정규 표현을 사용하여 URL의 이 부분을 새 것으로 바꾸는 함수를 정의합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;링크에 대한 모든 종류의 변경은 여기에서 수행할 수 있으므로 유연성에 유의하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery 1.6 이상에서는 다음을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;a&quot;).prop(&quot;href&quot;, &quot;http://www.jakcms.com&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 class=&quot;papago-parent&quot;&gt;「 」의 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;prop&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;attr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라는 것이다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;attr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하는 반면, 「HTML Atribute」는 「HTML Atribute」를 취득합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;prop&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DOM ★★★★★★★★★★▼&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상세한 것에 &lt;a href=&quot;https://stackoverflow.com/questions/5874652/prop-vs-attr&quot; papago-id=&quot;23-1&quot;&gt;대하여&lt;/a&gt;는, 이 투고를 참조해 주세요. .prop&lt;a href=&quot;https://stackoverflow.com/questions/5874652/prop-vs-attr&quot; papago-id=&quot;23-1&quot;&gt;() vs&lt;/a&gt; .&lt;a href=&quot;https://stackoverflow.com/questions/5874652/prop-vs-attr&quot; papago-id=&quot;23-1&quot;&gt;attr()&lt;/a&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;attr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메서드를 참조합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&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;$(&quot;a.mylink&quot;).attr(&quot;href&quot;, &quot;http://cupcream.com&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;sub papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OP가 jQuery의 답변을 명시적으로 요구했지만 요즘은 모든 것에 jQuery를 사용할 필요가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/sub&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery를 사용하지 않는 몇 가지 방법:&lt;/font&gt;&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;href&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;29-1&quot;&gt;&lt;em papago-id=&quot;29-1-0&quot;&gt;모든&lt;/em&gt;&lt;/strong&gt; 것의 가치&lt;/font&gt;&lt;/font&gt; &lt;code&gt;&amp;lt;a&amp;gt;&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;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/NodeList&quot; papago-id=&quot;30-1&quot;&gt;다음&lt;/a&gt; 노드리스트를 통해 반복: (&lt;a href=&quot;http://jsfiddle.net/kqw7h1nq/&quot; papago-id=&quot;30-3&quot;&gt;&lt;strong papago-id=&quot;30-3-0&quot;&gt;선택사항)&lt;/strong&gt;&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;var anchors = document.querySelectorAll('a');
Array.prototype.forEach.call(anchors, function (element, index) {
    element.href = &quot;http://stackoverflow.com&quot;;
});
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;href&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; '의 값'&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 「」를  .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;href&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Attribute를 Attribute를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[href]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Selector(아트리뷰트 셀렉터)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a[href]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://jsfiddle.net/pLkr9497/&quot; papago-id=&quot;36-1&quot;&gt;&lt;strong papago-id=&quot;36-1-0&quot;&gt;):&lt;/strong&gt;&lt;/a&gt; (&lt;a href=&quot;http://jsfiddle.net/pLkr9497/&quot; papago-id=&quot;36-1&quot;&gt;&lt;strong papago-id=&quot;36-1-0&quot;&gt;표준)&lt;/strong&gt;&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;var anchors = document.querySelectorAll('a[href]');
Array.prototype.forEach.call(anchors, function (element, index) {
    element.href = &quot;http://stackoverflow.com&quot;;
});
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;href&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 의 값&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 값을 포함하는 요소(&lt;em papago-id=&quot;39-1&quot;&gt;예&lt;/em&gt;:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;google.com&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는, 어트리뷰트 셀렉터 「Selector」를 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a[href*=&quot;google.com&quot;]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://jsfiddle.net/eLw5svh2/&quot; papago-id=&quot;41-1&quot;&gt;&lt;strong papago-id=&quot;41-1-0&quot;&gt;:&lt;/strong&gt;&lt;/a&gt; (&lt;a href=&quot;http://jsfiddle.net/eLw5svh2/&quot; papago-id=&quot;41-1&quot;&gt;&lt;strong papago-id=&quot;41-1-0&quot;&gt;표준)&lt;/strong&gt;&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;var anchors = document.querySelectorAll('a[href*=&quot;google.com&quot;]');
Array.prototype.forEach.call(anchors, function (element, index) {
    element.href = &quot;http://stackoverflow.com&quot;;
});
&lt;/code&gt;&lt;/pre&gt; &lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마찬가지로 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors&quot; papago-id=&quot;42-1&quot;&gt;다른 Atribute&lt;/a&gt; Selector도 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;p&gt;&lt;code&gt;a[href$=&quot;.png&quot;]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하여 을 선택할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 elements whose의 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;href&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 ㄴㄴㄴㄴㄴㄴㄴㄴㄴ데로 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.png&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;p&gt;&lt;code&gt;a[href^=&quot;https://&quot;]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하여 을 선택할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「」가 붙은 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;href&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;49-1&quot;&gt;프리픽스&lt;/em&gt;에 부가되는 값&lt;/font&gt;&lt;/font&gt;&lt;code&gt;https://&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;href&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 의 값&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 조건을 만족하는 요소: (&lt;a href=&quot;http://jsfiddle.net/8fxekxLu/&quot; papago-id=&quot;53-1&quot;&gt;&lt;strong papago-id=&quot;53-1-0&quot;&gt;표준)&lt;/strong&gt;&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;var anchors = document.querySelectorAll('a[href^=&quot;https://&quot;], a[href$=&quot;.png&quot;]');
Array.prototype.forEach.call(anchors, function (element, index) {
    element.href = &quot;http://stackoverflow.com&quot;;
});
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;..&lt;em papago-id=&quot;54-1&quot;&gt;대부분&lt;/em&gt;의 경우 정규식은 필요 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 동일한 링크를 다른 링크로 변경할지, 페이지의 특정 섹션에 있는 링크만 제어할지에 따라 다음 중 하나를 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Google에 대한 모든 링크를 변경하여 Google 지도를 가리킵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a href=&quot;http://www.google.com&quot;&amp;gt;

$(&quot;a[href='http://www.google.com/']&quot;).attr('href', 
'http://maps.google.com/');
&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;지정된 섹션의 링크를 변경하려면 container div의 클래스를 선택기에 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 예에서는 콘텐츠의 Google 링크를 변경할 수 있지만 바닥글에서는 변경할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;content&quot;&amp;gt;
    &amp;lt;p&amp;gt;...link to &amp;lt;a href=&quot;http://www.google.com/&quot;&amp;gt;Google&amp;lt;/a&amp;gt;
    in the content...&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div class=&quot;footer&quot;&amp;gt;
    Links: &amp;lt;a href=&quot;http://www.google.com/&quot;&amp;gt;Google&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;

$(&quot;.content a[href='http://www.google.com/']&quot;).attr('href', 
'http://maps.google.com/');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서의 위치에 관계없이 개별 링크를 변경하려면 링크에 ID를 추가한 후 해당 ID를 실렉터에 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 예에서는 콘텐츠의 두 번째 Google 링크를 변경할 수 있지만 첫 번째 링크나 바닥글의 링크는 변경할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;content&quot;&amp;gt;
    &amp;lt;p&amp;gt;...link to &amp;lt;a href=&quot;http://www.google.com/&quot;&amp;gt;Google&amp;lt;/a&amp;gt;
    in the content...&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;...second link to &amp;lt;a href=&quot;http://www.google.com/&quot; 
        id=&quot;changeme&quot;&amp;gt;Google&amp;lt;/a&amp;gt;
    in the content...&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div class=&quot;footer&quot;&amp;gt;
    Links: &amp;lt;a href=&quot;http://www.google.com/&quot;&amp;gt;Google&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;

$(&quot;a#changeme&quot;).attr('href', 
'http://maps.google.com/');
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://api.jquery.com/attr/#attr2&quot; rel=&quot;noreferrer&quot; papago-id=&quot;60-0&quot;&gt;특성&lt;/a&gt; 함수(jQuery 버전 1.0 이후)&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;a&quot;).attr(&quot;href&quot;, &quot;https://stackoverflow.com/&quot;) 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://api.jquery.com/prop/#prop2&quot; rel=&quot;noreferrer&quot; papago-id=&quot;62-0&quot;&gt;프로펠러&lt;/a&gt; 기능(jQuery 버전 1.6 이후)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;a&quot;).prop(&quot;href&quot;, &quot;https://stackoverflow.com/&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 위의 방법의 장점은 셀렉터가1개의 앵커를 선택했을 경우 해당 앵커만 갱신하고, 셀렉터가 앵커 그룹을 반환했을 경우 1개의 스테이트먼트만으로 특정 그룹을 갱신하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 정확한 앵커 또는 앵커 그룹을 식별하는 방법은 많이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매우 심플한 것:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(&quot;a&quot;)&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;index: &quot; &quot; 를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(&quot;a:eq(0)&quot;)&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스의 이 &quot;&quot;&quot;를 만)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;active&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; : ):&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(&quot;a.active&quot;)&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ID를  선택(예: ID)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;profileLink&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; : ID :&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(&quot;a#proileLink&quot;)&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택 : &quot; &quot; &quot; href &quot; :&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(&quot;a:first&quot;)&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 유용한 것:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ol start=&quot;6&quot;&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아트리뷰트 href를 가진 모든 :&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(&quot;[href]&quot;)&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;href를  모든  선택: &quot;href&quot; &quot; &quot; &quot; &quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(&quot;a[href='www.stackoverflow.com']&quot;)&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;href가 : &quot;href&quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; :&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(&quot;a[href!='www.stackoverflow.com']&quot;)&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL이 를 가진 모든  선택:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(&quot;a[href*='www.stackoverflow.com']&quot;)&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL로 를 가진 모든  선택:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(&quot;a[href^='www.stackoverflow.com']&quot;)&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL로  모든 :href URL:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(&quot;a[href$='www.stackoverflow.com']&quot;)&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 특정 URL을 수정하는 경우 다음과 같이 수정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, google.com 에의 모든 URL 에 프록시 Web 사이트를 추가하는 경우는, 다음과 같이 실장할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;a[href^='http://www.google.com']&quot;)
   .each(function()
   { 
      this.href = this.href.replace(/http:\/\/www.google.com\//gi, function (x) {
        return &quot;http://proxywebsite.com/?query=&quot;+encodeURIComponent(x);
    });
   });
&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;클래스 'menu_link'의 링크를 클릭하면 호출되며 링크의 텍스트와 URL을 보여줍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;return false를 지정하면 링크가 추적되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a rel='1' class=&quot;menu_link&quot; href=&quot;option1.html&quot;&amp;gt;Option 1&amp;lt;/a&amp;gt;
&amp;lt;a rel='2' class=&quot;menu_link&quot; href=&quot;option2.html&quot;&amp;gt;Option 2&amp;lt;/a&amp;gt;

$('.menu_link').live('click', function() {
   var thelink = $(this);
   alert ( thelink.html() );
   alert ( thelink.attr('href') );
   alert ( thelink.attr('rel') );

   return false;
});
&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;jQuery를 사용하지 마십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 JavaScript만으로 매우 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.querySelector('#the-link').setAttribute('href', 'http://google.com');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://jsfiddle.net/bo77f8mg/1/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://jsfiddle.net/bo77f8mg/1/&lt;/font&gt;&lt;/a&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;이것을 시험해 보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#link&quot;).attr(&quot;href&quot;, &quot;https://coenvink.com/&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드의 기능 내역:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#link&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드의 이 부분은 ID가 &quot;Link&quot;인 요소를 가져옵니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 후, 어트리뷰트 「href」(위치는 기본적으로 link-to-url)를 새로운 url로 설정합니다.이 경우 witch는 내 웹사이트입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.attr(&quot;href&quot;, &quot;https://coenvink.com/&quot;)
&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;p&gt;&lt;code&gt;href&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성에서는 순수 JavaScript를 사용하여 변경할 수 있지만 페이지에 jQuery가 이미 삽입되어 있다면 걱정하지 마십시오.&lt;/font&gt;&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;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 상상해보세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;href&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이하에 나타냅니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a id=&quot;ali&quot; alt=&quot;Ali&quot; href=&quot;http://dezfoolian.com.au&quot;&amp;gt;Alireza Dezfoolian&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;92&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 넌 그걸 바꾸고 싶어해...&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;93&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라이브러리 없이 &lt;strong papago-id=&quot;93-1&quot;&gt;순수&lt;/strong&gt; JavaScript를 사용하면 &lt;strong papago-id=&quot;93-1&quot;&gt;다음&lt;/strong&gt;을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.getElementById(&quot;ali&quot;).setAttribute(&quot;href&quot;, &quot;https://stackoverflow.com&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;94-1&quot;&gt;jQuery&lt;/strong&gt;에서는 다음 작업을 수행할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#ali&quot;).attr(&quot;href&quot;, &quot;https://stackoverflow.com&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;95&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#ali&quot;).prop(&quot;href&quot;, &quot;https://stackoverflow.com&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery는 jQuery&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;jQuery 1&lt;/font&gt;을 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;합니다&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JS&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 둘, 셋, 셋...&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt; $(&quot;a[href^='http://stackoverflow.com']&quot;)
   .each(function()
   { 
      this.href = this.href.replace(/^http:\/\/beta\.stackoverflow\.com/, 
         &quot;http://stackoverflow.com&quot;);
   });
&lt;/code&gt;&lt;/pre&gt;&lt;h1 papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Wordpress Avada 테마 로고 이미지의 HREF 변경&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;99&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ShortCode Exec PHP 플러그인을 설치하면 myjavascript라는 쇼트코드를 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;?&amp;gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
jQuery(document).ready(function() {
jQuery(&quot;div.fusion-logo a&quot;).attr(&quot;href&quot;,&quot;tel:303-985-9850&quot;);
});
&amp;lt;/script&amp;gt;
&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;[myjavascript]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 이미지를 사용하고 있는지, 레티나를 사용할 수 있는지 여부에 따라 셀렉터가 달라질 수 있지만 개발자 도구를 사용하면 언제든지 알 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해라&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;link.href = 'https://...'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;true&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code snippet-currently-hidden&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;link.href = 'https://stackoverflow.com'&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;a id=&quot;link&quot; href=&quot;#&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 papago-id=&quot;103&quot; papago-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/179713/&lt;a href=&quot;https://stackoverflow.com/questions/179713/how-to-change-the-href-attribute-for-a-hyperlink-using-jquery&quot; target=&quot;_blank&quot; papago-id=&quot;103-1&quot;&gt;how-to-change-the-href-attribute-for-a-hyperlink-using-jquery&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>javascript</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/902</guid>
      <comments>https://bestcode.tistory.com/902#entry902comment</comments>
      <pubDate>Mon, 6 Feb 2023 23:34:00 +0900</pubDate>
    </item>
    <item>
      <title>python에 math nCr 함수가 있나요?</title>
      <link>https://bestcode.tistory.com/901</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;python에 math nCr 함수가 있나요?&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; papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 답변&lt;/b&gt;이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;     &lt;/font&gt;&lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/3025162/statistics-combinations-in-python&quot; dir=&quot;ltr&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;통계: Python에서의 조합&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(답변 19개)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/2096573/counting-combinations-and-permutations-efficiently&quot; dir=&quot;ltr&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조합과 순열을 효율적으로 계수하다&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(13개의 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;닫힘&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;6-1&quot; title=&quot;2022-06-25 03:09:17Z&quot; papago-attr-id=&quot;1&quot;&gt;두&lt;/span&gt; 달 전에요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;python의 수학 라이브러리에 내장된 기능이 nCr (n Choose r) 함수인지 확인하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/OZj2Y.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;2&quot;&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그래밍이 가능한 것은 알고 있습니다만, 사전에 빌트인 되어 있는지 확인해 보려고 생각하고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;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;nCr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;효율적인 방법으로(계수 계산 등)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import operator as op
from functools import reduce

def ncr(n, r):
    r = min(r, n-r)
    numer = reduce(op.mul, range(n, n-r, -1), 1)
    denom = reduce(op.mul, range(1, r+1), 1)
    return numer // denom  # or / in Python 2
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python 3.8에서 이항 계수는 표준 라이브러리에서 다음과 같이 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;math.comb&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;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; from math import comb
&amp;gt;&amp;gt;&amp;gt; comb(10,3)
120
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반복하시겠습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://docs.python.org/library/itertools.html?highlight=itertools.combinations#itertools.combinations&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;13-1&quot;&gt;itertools.combinations&lt;/a&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적인 사용법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import itertools
&amp;gt;&amp;gt;&amp;gt; itertools.combinations('abcd',2)
&amp;lt;itertools.combinations object at 0x01348F30&amp;gt;
&amp;gt;&amp;gt;&amp;gt; list(itertools.combinations('abcd',2))
[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]
&amp;gt;&amp;gt;&amp;gt; [''.join(x) for x in itertools.combinations('abcd',2)]
['ab', 'ac', 'ad', 'bc', 'bd', 'cd']
&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;a href=&quot;http://docs.python.org/library/math.html?highlight=math.factorial#math.factorial&quot; papago-id=&quot;14-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;경우&lt;/a&gt;에는 math&lt;a href=&quot;http://docs.python.org/library/math.html?highlight=math.factorial#math.factorial&quot; papago-id=&quot;14-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;.factorial&lt;/a&gt;을 사용할 수 있지만 큰 조합에서는 빠르지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;math.comb&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 Python 3.8+에서 사용할 수 있는 최적화된 계산입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import math

def nCr(n,r):
    f = math.factorial
    return f(n) // f(r) // f(n-r)

if __name__ == '__main__':
    print nCr(4,2)
&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;6
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python 3.8에서는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;math.comb&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 class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import math
&amp;gt;&amp;gt;&amp;gt; math.comb(4,2)
6
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/4941753/&lt;a href=&quot;https://stackoverflow.com/questions/4941753/is-there-a-math-ncr-function-in-python&quot; target=&quot;_blank&quot; papago-id=&quot;19-1&quot;&gt;is-there-a-math-ncr-function-in-python&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PYTHON</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/901</guid>
      <comments>https://bestcode.tistory.com/901#entry901comment</comments>
      <pubDate>Mon, 6 Feb 2023 23:33:51 +0900</pubDate>
    </item>
    <item>
      <title>대소문자를 구분하지 않는 PHP in_array 함수</title>
      <link>https://bestcode.tistory.com/900</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대소문자를 구분하지 않는 PHP in_array 함수&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;in_array&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능하고 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 다음과 같은 소스 어레이를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$a= array(
 'one',
 'two',
 'three',
 'four'
);
&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;다음 검색은 모두 true로 반환됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;in_array('one', $a);
in_array('two', $a);
in_array('ONE', $a);
in_array('fOUr', $a);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 기능 또는 기능 집합이 동일한 기능을 수행합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;난 그렇게 생각하지 않아.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;in_array&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (in_array(strtolower($word), $array)) { 
  ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 어레이에 대문자가 포함되어 있는 경우는, 다음의 조작을 실시할 필요가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$search_array = array_map('strtolower', $array);
&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 class=&quot;papago-parent&quot;&gt;해도 소용없다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strtolower&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전체 어레이에서 모든 검색을 수행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 배열 검색은 선형입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대규모 어레이를 사용하거나 이 작업을 많이 수행할 경우 검색어를 어레이의 키에 넣는 것이 좋습니다.이렇게 하면 &lt;em papago-id=&quot;11-1&quot;&gt;액세스&lt;/em&gt; 속도가 향상됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$search_array = array_combine(array_map('strtolower', $a), $a);
&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;if ($search_array[strtolower($word)]) { 
  ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 유일한 문제는 어레이 키가 고유해야 하기 때문에 충돌(예: &quot;One&quot;와 &quot;One&quot;)이 발생하면 하나를 제외한 모든 키가 손실된다는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;function in_arrayi($needle, $haystack) {
    return in_array(strtolower($needle), array_map('strtolower', $haystack));
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://us2.php.net/manual/en/function.in-array.php&quot; rel=&quot;noreferrer&quot; papago-id=&quot;14-1&quot;&gt;매뉴얼에서&lt;/a&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;pre&gt;&lt;code&gt;$a= array(
 'one',
 'two',
 'three',
 'four'
);

print_r( preg_grep( &quot;/ONe/i&quot; , $a ) );
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;function in_arrayi($needle, $haystack) {
    return in_array(strtolower($needle), array_map('strtolower', $haystack));
}
&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;a href=&quot;http://uk.php.net/manual/en/function.in-array.php#89256&quot; papago-id=&quot;16-1&quot; rel=&quot;noreferrer&quot;&gt;php.&lt;/a&gt;net &lt;a href=&quot;http://uk.php.net/manual/en/function.in-array.php#89256&quot; papago-id=&quot;16-1&quot; rel=&quot;noreferrer&quot;&gt;in_array 매뉴얼&lt;/a&gt; 페이지&lt;a href=&quot;http://uk.php.net/manual/en/function.in-array.php#89256&quot; papago-id=&quot;16-1&quot; rel=&quot;noreferrer&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;in_array를 사용하는 경우 대소문자를 구분하지 않는 방법을 다음에 나타냅니다.&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;in_array()에서 대소문자를 구분하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;foreach($searchKey as $key =&amp;gt; $subkey) {

     if (in_array(strtolower($subkey), array_map(&quot;strtolower&quot;, $subarray)))
     {
        echo &quot;found&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;foreach($searchKey as $key =&amp;gt; $subkey) {

if (in_array(&quot;$subkey&quot;, $subarray))

     {
        echo &quot;found&quot;;
     }

}
&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;또한 in_array() 함수는 $needle에 대해 어레이를 받아들일 수 있으므로 $needle이 어레이이고 $haystack이 다른 어레이를 포함하고 있으면 array_map('strtolower', $haystack)은 동작하지 않지만 &quot;PHP warning: strtolower() 파라미터 1이 지정될 것으로 예상합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$needle = array('p', 'H');
$haystack = array(array('p', 'H'), 'U');
&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;그래서 대소문자를 구분하고 대소문자를 구분하지 않는 in_array() 체크로 도우미 클래스를 만들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;strtolower() 대신 mb_strtolower()를 사용하고 있기 때문에 다른 인코딩을 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class StringHelper {

public static function toLower($string, $encoding = 'UTF-8')
{
    return mb_strtolower($string, $encoding);
}

/**
 * Digs into all levels of an array and converts all string values to lowercase
 */
public static function arrayToLower($array)
{
    foreach ($array as &amp;amp;$value) {
        switch (true) {
            case is_string($value):
                $value = self::toLower($value);
                break;
            case is_array($value):
                $value = self::arrayToLower($value);
                break;
        }
    }
    return $array;
}

/**
 * Works like the built-in PHP in_array() function — Checks if a value exists in an array, but
 * gives the option to choose how the comparison is done - case-sensitive or case-insensitive
 */
public static function inArray($needle, $haystack, $case = 'case-sensitive', $strict = false)
{
    switch ($case) {
        default:
        case 'case-sensitive':
        case 'cs':
            return in_array($needle, $haystack, $strict);
            break;
        case 'case-insensitive':
        case 'ci':
            if (is_array($needle)) {
                return in_array(self::arrayToLower($needle), self::arrayToLower($haystack), $strict);
            } else {
                return in_array(self::toLower($needle), self::arrayToLower($haystack), $strict);
            }
            break;
    }
}
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;/**
 * in_array function variant that performs case-insensitive comparison when needle is a string.
 *
 * @param mixed $needle
 * @param array $haystack
 * @param bool $strict
 *
 * @return bool
 */
function in_arrayi($needle, array $haystack, bool $strict = false): bool
{

    if (is_string($needle)) {

        $needle = strtolower($needle);

        foreach ($haystack as $value) {

            if (is_string($value)) {
                if (strtolower($value) === $needle) {
                    return true;
                }
            }

        }

        return false;

    }

    return in_array($needle, $haystack, $strict);

}


/**
 * in_array function variant that performs case-insensitive comparison when needle is a string.
 * Multibyte version.
 *
 * @param mixed $needle
 * @param array $haystack
 * @param bool $strict
 * @param string|null $encoding
 *
 * @return bool
 */
function mb_in_arrayi($needle, array $haystack, bool $strict = false, ?string $encoding = null): bool
{

    if (null === $encoding) {
        $encoding = mb_internal_encoding();
    }

    if (is_string($needle)) {

        $needle = mb_strtolower($needle, $encoding);

        foreach ($haystack as $value) {

            if (is_string($value)) {
                if (mb_strtolower($value, $encoding) === $needle) {
                    return true;
                }
            }

        }

        return false;

    }

    return in_array($needle, $haystack, $strict);

}
&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;strong papago-id=&quot;24&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;function in_array_insensitive($needle, $haystack) {
   $needle = strtolower($needle);
   foreach($haystack as $k =&amp;gt; $v) {
      $haystack[$k] = strtolower($v);
   }
   return in_array($needle, $haystack);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용방법:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$array = array('one', 'two', 'three', 'four');
var_dump(in_array_insensitive('fOUr', $array));
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;$a = [1 =&amp;gt; 'funny', 3 =&amp;gt; 'meshgaat', 15 =&amp;gt; 'obi', 2 =&amp;gt; 'OMER'];  

$b = 'omer';

function checkArr($x,$array)
{
    $arr = array_values($array);
    $arrlength = count($arr);
    $z = strtolower($x);

    for ($i = 0; $i &amp;lt; $arrlength; $i++) {
        if ($z == strtolower($arr[$i])) {
            echo &quot;yes&quot;;
        }  
    } 
};

checkArr($b, $a);
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;$user_agent = 'yandeX';
$bots = ['Google','Yahoo','Yandex'];        
        
foreach($bots as $b){
     if( stripos( $user_agent, $b ) !== false ) return $b;
}
&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;regex 대소문자를 구분하지 않는 검색을 사용하면 건초 스택과 니들 모두에서 대소문자가 무시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$haystack = array('MacKnight', 'MacManus', 'MacManUS', 'MacMurray');
$needle='MacMANUS';
$regex='/'.$needle.'/i';
$matches  = preg_grep ($regex, $haystack);
if($m=current($matches)){ // find first case insensitive match
   echo 'match found: '.$m;
}else{
   echo 'no match found.';
} 
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt; 
 &lt;li papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;in_array는 다음 파라미터를 받아들입니다.in_array(search,array,type)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;검색 매개 변수가 문자열이고 type 매개 변수가 TRUE로 설정된 경우 검색은 대소문자를 구분합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;29&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;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$a = 배열('1', '2', '3', '4');&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;$b = in_array ('ONE', $a, false );&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2166512/&lt;a href=&quot;https://stackoverflow.com/questions/2166512/php-case-insensitive-in-array-function&quot; target=&quot;_blank&quot; papago-id=&quot;32-1&quot;&gt;php-case-insensitive-in-array-function&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>php</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/900</guid>
      <comments>https://bestcode.tistory.com/900#entry900comment</comments>
      <pubDate>Mon, 6 Feb 2023 23:33:43 +0900</pubDate>
    </item>
    <item>
      <title>MySQL - 쿼리 속도를 테스트하기 위해 캐시를 사용하지 않음</title>
      <link>https://bestcode.tistory.com/899</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL - 쿼리 속도를 테스트하기 위해 캐시를 사용하지 않음&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL에서 쿼리 속도를 테스트하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스가 이러한 쿼리를 캐싱하고 있기 때문에 쿼리 속도를 테스트할 때 신뢰할 수 있는 결과를 얻기가 어렵습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리의 캐시를 비활성화하는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템: MySQL 4(Linux 웹호스팅), PHPMyAdmin에 액세스할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리에서 &lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/query-cache-in-select.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;SQL_NO_CACHE&lt;/a&gt;(MySQL 5.7) 옵션을 사용해 보십시오(MySQL 5.6 사용자는 여기를 &lt;a href=&quot;https://dev.mysql.com/doc/refman/5.6/en/query-cache-in-select.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-3&quot;&gt;클릭&lt;/a&gt;하십시오).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT SQL_NO_CACHE * FROM TABLE
&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;이렇게 하면 MySQL이 결과를 캐싱하지 않지만 다른 OS 및 디스크 캐시도 성능에 영향을 줄 수 있습니다.&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;SET SESSION query_cache_type=0;
&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;SELECT *,NOW() FROM TABLE
&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;http://dev.mysql.com/tech-resources/articles/&lt;a href=&quot;http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html&quot; papago-id=&quot;10-1&quot;&gt;mysql-query-cache&lt;/a&gt;.html에서 &quot;MySQL Query Cache 사용을 위한 전제조건 및 주의사항&quot;을 참조하십시오.&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;query_cache_size=0 구성 옵션도 있습니다.&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;서버 부팅 시 쿼리 캐시를 비활성화하려면 query_cache_size 시스템 변수를 0으로 설정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리 캐시 코드를 디세블로 하면 현저한 오버헤드가 발생하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스에서 MySQL을 빌드하는 경우 --without-query-cache 옵션을 사용하여 구성을 호출하여 쿼리 캐시 기능을 서버에서 완전히 제외할 수 있습니다.&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;http&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/query-cache.html&quot; papago-id=&quot;13-1&quot; rel=&quot;noreferrer&quot;&gt;://&lt;/a&gt;dev.mysql.com/doc/refman/5.1/en/&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/query-cache.html&quot; papago-id=&quot;13-1&quot; rel=&quot;noreferrer&quot;&gt;query-cache&lt;/a&gt;.html 를 참조해 주세요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 명령을 실행하여 쿼리 캐시를 재설정할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;RESET QUERY CACHE
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 관한 한 가지 문제&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT SQL_NO_CACHE * FROM TABLE
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법은 쿼리 결과만 캐시되지 않도록 하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 테스트할 쿼리와 함께 사용 중인 데이터베이스를 쿼리하는 경우, 다른 클라이언트가 쿼리를 캐시하여 결과에 영향을 줄 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 문제를 해결하기 위해 계속 연구하고 있으며, 만약 문제가 생기면 이 게시물을 편집할 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SHOW VARIABLES LIKE 'query_cache_type';
SET SESSION query_cache_type = OFF;
SHOW VARIABLES LIKE 'query_cache_type';
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리 내에서 사용자 정의 변수를 사용하면 쿼리 재캐시를 수행할 수 없게 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 그것을 사용하는 것보다 훨씬 더 좋은 지표라는 것을 알았다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SQL_NO_CACHE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단, 변수 설정은 퍼포먼스에 큰 영향을 주지 않는 장소에 배치해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT t.*
FROM thetable t, (SELECT @a:=NULL) as init;
&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;Query 캐시를 비활성화하려면 mysql 구성 파일에서 'query_cache_size'를 0으로 설정합니다.설정된 0 mysql일 경우 쿼리 캐시를 사용하지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋은 답변도 있지만, 중요한 경고가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql 쿼리는 캐시되지 않을 수 있지만 기본 O는 차단되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;디스크에 대한 액세스를 메모리에 캐싱합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 일부 쿼리의 경우 특히 회전 디스크에서 데이터를 가져와야 하는 경우 크게 느려질 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 위의 방법을 사용하는 것이 좋지만, 디스크에서 디스크/메모리 캐시로 풀리지 않는 데이터/범위 세트를 매번 사용하여 테스트합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 문자열을 변경해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 문자열은 캐시 키이기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 SQL 설명에 타임스탬프를 추가합니다.&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;PHP의 기능:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function db_RunSQL($SQL, $NoCacheMode=false)
{
$SQL = (($NoCacheMode) ? '/*'.time().'*/ ' : '') . $SQL;
return mysqli_query(db_SavedConnect(), $SQL);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/181894/&lt;a href=&quot;https://stackoverflow.com/questions/181894/mysql-force-not-to-use-cache-for-testing-speed-of-query&quot; target=&quot;_blank&quot; papago-id=&quot;26-1&quot;&gt;mysql-force-not-to-use-cache-for-testing-speed-of-query&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/899</guid>
      <comments>https://bestcode.tistory.com/899#entry899comment</comments>
      <pubDate>Mon, 6 Feb 2023 23:33:34 +0900</pubDate>
    </item>
    <item>
      <title>도커가 다른 사용자로 localhost에서 mariadb에 연결할 수 없습니다.</title>
      <link>https://bestcode.tistory.com/898</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커가 다른 사용자로 localhost에서 mariadb에 연결할 수 없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안녕하세요, 저는 이 &lt;a href=&quot;https://mariadb.com/kb/en/library/installing-and-using-mariadb-via-docker/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;0-1&quot;&gt;mariabdb 도커 튜토리얼&lt;/a&gt;에 따라 이 &lt;a href=&quot;https://stackoverflow.com/questions/23234379/installing-mysql-in-docker-fails-with-error-message-cant-connect-to-local-mysq&quot; papago-id=&quot;0-3&quot;&gt;stackoverflow&lt;/a&gt; 질문도 체크했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;mariadb 컨테이너를 문제없이 시작할 수 있으며,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;root&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;mypass&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;mysql -h0.0.0.0 -uroot -pmypass&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;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;docker ps command&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                    NAMES
268c36eac13a        mariadb/server:10.3   &quot;docker-entrypoint.s…&quot;   31 minutes ago      Up 31 minutes       0.0.0.0:3306-&amp;gt;3306/tcp   mariadbtest
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mariadb 컨테이너에 연결합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker exec -it 268c36eac13a /bin/sh&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 명령어를 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql -uroot -pmypass
create database emails;
grant all on emails.* to 'testUser'@'localhost' identified by '123456';
&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;그러면 실행 시 localhost에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql -h0.0.0.0 -utestUser -123456&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;Access denied for user 'testUser'@'172.17.0.1' (using password: YES)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에러입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도와줘서 고마워요!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;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;testUser&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;localhost&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 class=&quot;papago-parent&quot;&gt;호스트 시스템에서 MariaDB 컨테이너에 로그인할 때 호스트 도커 주소를 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;172.17.0.1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 해결책은 사용자가 임의의 IP에서 접속할 수 있도록 하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;grant all on emails.* to 'testUser'@'%' identified by '123456';
&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;또는 지정된 서브넷으로부터의 IP.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;a href=&quot;https://mariadb.com/kb/en/library/create-user/#host-name-component&quot; papago-id=&quot;18-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;방법&lt;/a&gt;은 CREATE &lt;a href=&quot;https://mariadb.com/kb/en/library/create-user/#host-name-component&quot; papago-id=&quot;18-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;USER&lt;/a&gt; 문서에서 &lt;a href=&quot;https://mariadb.com/kb/en/library/create-user/#host-name-component&quot; papago-id=&quot;18-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;확인&lt;/a&gt;할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 솔루션은 호스트 시스템의 IP에 사용자를 추가하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨테이너 내에서 호스트 IP를 가져와 이 IP에 대한 사용자를 추가할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨테이너에서 호스트 IP를 가져오는 방법에 대해 다음 &lt;a href=&quot;https://stackoverflow.com/questions/22944631/how-to-get-the-ip-address-of-the-docker-host-from-inside-a-docker-container&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;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/56309282/&lt;a href=&quot;https://stackoverflow.com/questions/56309282/docker-cant-connect-to-mariadb-from-localhost-with-different-user&quot; target=&quot;_blank&quot; papago-id=&quot;20-1&quot;&gt;docker-cant-connect-to-mariadb-from-localhost-with-different-user&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/898</guid>
      <comments>https://bestcode.tistory.com/898#entry898comment</comments>
      <pubDate>Tue, 31 Jan 2023 20:52:09 +0900</pubDate>
    </item>
    <item>
      <title>일시적 수식어와 휘발성 수식어가 뭐죠?</title>
      <link>https://bestcode.tistory.com/897</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일시적 수식어와 휘발성 수식어가 뭐죠?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'을'이라고 하는지  좀 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;transient&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Java ★★★★★★★★★★★★★★★★★★★★★★★★★★ ★★&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;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;volatile&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;transient&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;sup papago-id=&quot;6-1&quot;&gt;1&lt;/sup&gt; 수식자를 적용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것 말고는 그들은 관계가 없다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;transient&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;modifier의 할 때 합니다.&lt;/font&gt;&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 class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타입의 는, 0  「0」이 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;false&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 class=&quot;papago-parent&quot;&gt;JLS&lt;a href=&quot;http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.3.1.3&quot; papago-id=&quot;10-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;(제8.3.&lt;/a&gt;1.3항 &lt;a href=&quot;http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.3.1.3&quot; papago-id=&quot;10-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;참조&lt;/a&gt;)에서는, 다음의 정보가 표시되지 않는 것에 주의해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;transient&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://download.oracle.com/javase/6/docs/platform/serialization/spec/serialTOC.html&quot; papago-id=&quot;11-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;는 Java 오브젝트시리얼라이제이션&lt;/a&gt; 사양에 준거합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 직렬화 &lt;em papago-id=&quot;11-3&quot;&gt;메커니즘&lt;/em&gt;은 필드의 다음 항목에 주의할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;transient&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 무시할지 몰라&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;는 (JLS)를 하고 있는 해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;static&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[ ] 로 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;transient&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 조합은 Java 오브젝트시리얼라이제이션에서는 의미가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜냐하면 스태틱스는 시리얼라이제이션되지 않기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 다른 맥락에서는 이 방법이 타당할 수 있기 때문에 이를 완전히 금지하지 않아도 되는 이유가 있습니다.)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;volatile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수식자는 JVM에 필드에 쓰기는 항상 메모리에 동기적으로 플러시되어야 하며 필드의 읽기는 항상 메모리에서&lt;sup papago-id=&quot;17-1&quot;&gt;2&lt;/sup&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;(이는 &amp;gt;&amp;gt; 비휘발성 &amp;lt;&amp;lt;에는 적용되지 않습니다).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;long&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;double&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 JVM에서는 &quot;단어 찢기&quot;가 발생할 수 있습니다.)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JLS의 관련 부분은 &lt;a href=&quot;http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.3.1.4&quot; papago-id=&quot;19-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;8.3.1.&lt;/a&gt;4, &lt;a href=&quot;http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.4&quot; papago-id=&quot;19-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;17.&lt;/a&gt;4 &lt;a href=&quot;http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.4&quot; papago-id=&quot;19-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;및&lt;/a&gt; &lt;a href=&quot;http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.7&quot; papago-id=&quot;19-5&quot; rel=&quot;nofollow noreferrer&quot;&gt;17.7&lt;/a&gt;입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;sup&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;- 단, 되지 않습니다.1 - ,, 、 컬 1 、 1 1 1 1 1 1 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&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;- 이을 차리지 않고하게 설명하고 있습니다.2 - 이이의 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 。&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 휘발성 쓰기 전에 발생하는 비휘발성 쓰기의 가시성에는 추가적인 영향이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JLS 17( 는, 의 「 17해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;모델화된 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; 사용할 수 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JMM 사양은 모델링된 동작에 관한 것이며 플랫폼레벨에서의 동작의 실장 방법에 관계없이 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/sup&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;transient&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;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;transient&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;키워드는 인스턴스 변수와 함께 시리얼화 프로세스에서 제외하기 위해 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필드가 다음과 같은 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;transient&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 반,는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;키워드는 Java 변수를 &quot;메인 메모리에 저장됨&quot;으로 마크하기 위해 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; every &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;캐시가  CPU에 대한 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수는 CPU 캐시뿐만 아니라 메인 메모리에 기록됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;transient&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는, 「키워드」와 함께 할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;static&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 단, &quot;&quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 할 수 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;static&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;transient&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수는 디폴트값으로 초기화되므로 값의 할당 또는 복원은 애플리케이션 코드로 처리되어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상세한 것에 대하여는, 다음의 블로그를 참조해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;a href=&quot;http://javaexplorer03.blogspot.in/2015/07/difference-between-volatile-and.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://javaexplorer03.blogspot.in/2015/07/difference-between-volatile-and.htmlhttpjavaexplorer03.blogspot.in/2015/07/.html&lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;휘발성은 다른 스레드가 특정 변수를 편집할 수 있음을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러가 접근 권한을 부여합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.javamex.com/tutorials/synchronization_volatile.shtml&quot; rel=&quot;noreferrer&quot; papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.javamex.com/tutorials/synchronization_volatile.shtml&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Transient는 오브젝트를 시리얼화할 때 디시리얼라이제이션 시 디폴트값이 반환되는 것을 의미합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.geekinterview.com/question_details/2&quot; rel=&quot;noreferrer&quot; papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.geekinterview.com/question_details/2&lt;/font&gt;&lt;/a&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;p&gt;&lt;strong papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 어떻게 그 차이를 메우는지 알아야 합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1) 액세스 수식어 과도현상은 가변 컴포넌트에만 적용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메서드 또는 클래스에는 사용되지 않습니다.&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;2) transient 키워드는 static 키워드와 함께 사용할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3) 시리얼라이제이션이란 무엇이며 어디에 사용되는가?&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;이것은 Java 프로그래밍에서 중요한 개념 중 하나입니다. 왜냐하면 직렬화는 네트워킹 프로그래밍에서 주로 사용되기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;네트워크를 통해 전송해야 하는 오브젝트는 바이트로 변환해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;transient 키워드를 이해하기 전에 시리얼화의 개념을 이해해 둘 필요가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;독자가 시리얼화에 대해 알고 있는 경우는, 첫 번째 포인트는 생략해 주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주 1) Transient는 주로 serialzation 프로세스에 사용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러기 위해서는, 클래스에서는 java.io 를 실장할 필요가 있습니다.&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;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주 2) deserialize 프로세스가 발생하면 type 제약조건에 따라 기본값인 0, false 또는 null로 설정됩니다.&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;주 3) Transient 키워드 및 그 목적&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;이것이 transient 키워드의 주된 목적입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3544919/&lt;a href=&quot;https://stackoverflow.com/questions/3544919/what-are-transient-and-volatile-modifiers&quot; target=&quot;_blank&quot; papago-id=&quot;54-1&quot;&gt;what-are-transient-and-volatile-modifiers&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>java</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/897</guid>
      <comments>https://bestcode.tistory.com/897#entry897comment</comments>
      <pubDate>Tue, 31 Jan 2023 20:52:04 +0900</pubDate>
    </item>
    <item>
      <title>MySql에 대한 Java 길이</title>
      <link>https://bestcode.tistory.com/896</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySql에 대한 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;MySql 변수 컨텍스트에서 Java long에 해당하는 것은 무엇입니까?&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;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;0-0&quot;&gt;&lt;code papago-id=&quot;0-0-0&quot;&gt;SIGNED BIGINT&lt;/code&gt;&lt;/a&gt; 자바와 같은 8바이트 길이의 정수입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;long&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;Java long max 값은 양수입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;9,223,372,036,854,775,807&lt;/code&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;UNSIGNED BIGINT(19)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 정도면 충분할 겁니다.아니면 그냥 사용하시면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UNSIGNED BIGINT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 동등하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UNSIGNED BIGINT(20)&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;음수까지 사용한다면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BIGINT(19)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;충분할 거야&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3781218/&lt;a href=&quot;https://stackoverflow.com/questions/3781218/java-long-to-mysql&quot; target=&quot;_blank&quot; papago-id=&quot;10-1&quot;&gt;java-long-to-mysql&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/896</guid>
      <comments>https://bestcode.tistory.com/896#entry896comment</comments>
      <pubDate>Tue, 31 Jan 2023 20:50:21 +0900</pubDate>
    </item>
    <item>
      <title>명령줄 경유로 csv를 mysql로 Import</title>
      <link>https://bestcode.tistory.com/895</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령줄 경유로 csv를 mysql로 Import&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매우 큰 .csv 파일(~4GB)을 mysql에 Import하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;phpmyadmin을 사용할까 생각 중이었는데 최대 업로드 사이즈는 2MB입니다.&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;Import 방법은 http&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/mysqlimport.html#c5680&quot; papago-id=&quot;2-1&quot;&gt;://&lt;/a&gt;dev.mysql.com/doc/refman/5.0/en/&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/mysqlimport.html#c5680&quot; papago-id=&quot;2-1&quot;&gt;mysqlimport&lt;/a&gt;.html#c5680 입니다.&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;.csv 테이블의 첫 번째 행을 mysql 테이블의 열 이름으로 설정하려면 어떤 명령을 사용해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 옵션은 phpmyadmin을 통해 사용할 수 있으므로 mysql 명령줄 버전이어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제발 도와주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;- Raj.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 명령어 실행&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; load data local infile 'file.csv' into table table
 fields terminated by ','
 enclosed by '&quot;'
 lines terminated by '\n'
 (column1, column2, column3,...)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 필드는 데이터를 저장해야 하는 실제 테이블 필드입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;괄호로 둘러싸인 행과 끝 행은 옵션이며 Excel 내보내기 등 큰따옴표로 둘러싸인 컬럼이 있는 경우 도움이 됩니다.&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;http://dev.mysql.com/doc/refman/5.1/en/load-data.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-1&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;첫 번째 행을 테이블컬럼 이름으로 설정할 경우 행 읽기를 무시하고 명령어에 값을 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 시험해 보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql -uusername -ppassword --local-infile scrapping -e &quot;LOAD DATA LOCAL INFILE 'CSVname.csv'  INTO TABLE table_name  FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 수 있다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysqlimport --columns='head -n 1 $yourfile' --ignore-lines=1 dbname $yourfile`
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 파일이 쉼표로 구분되어 세미콜론으로 구분되지 않은 경우입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sed&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그걸 통해서도.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 방법으로 Import할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysqlimport --ignore-lines=1 --lines-terminated-by='\n' --fields-terminated-by=',' --fields-enclosed-by='&quot;' --verbose --local -uroot -proot db_name csv_import.csv
&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;주의: Csv 파일 이름과 테이블 이름은 같아야 합니다.&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;mysqlimport를 사용하여 헤더 행이 있는 csv를 Import하려면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;--ignore-lines=N
&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;(데이터 파일의 첫 번째 N 행을 무시합니다)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 옵션은 링크된 페이지에 설명되어 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 방법으로 입력할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;LOAD DATA LOCAL INFILE 'C:/Users/userName/Downloads/tableName.csv' INTO TABLE tableName FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';&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;다른 옵션은 csvkit 라이브러리에서 csvsql 명령을 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령줄에서 직접 사용하는 예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;csvsql --db mysql:///test --tables yourtable --insert yourfile.csv
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 명령줄에서 직접 실행하거나 다수의 파일에 대해 이 작업을 수행해야 하는 경우 자동화를 위해 파이썬 또는 셸 스크립트에 내장할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;csvsql에서는 csv의 구조에 따라 데이터베이스 테이블을 즉시 작성할 수 있습니다.따라서 csv의 첫 번째 행을 MySQL 테이블헤더로 자동 캐스팅하는 라이트 코드 방법입니다.&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;상세한 문서 및 기타 예는 https://csvkit.&lt;a href=&quot;https://csvkit.readthedocs.io/en/1.0.3/scripts/csvsql.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;23-1&quot;&gt;readthedocs&lt;/a&gt;.io/en/1.0.3/scripts/csvsql.html 를 참조해 주세요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커맨드 라인이라는 것은 알지만, MySQL 워크벤치가 있고 csv가 너무 크지 않다면 간단하게 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표에서 선택 *&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSV 전체 복사&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Workbench의 쿼리 결과 섹션에 CSV 붙여넣기&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;28&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;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 MySQL Workbench이기 때문에 최선의 희망을 말하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;언제 터질지 몰라&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;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;mysql -h&amp;lt;server|ip&amp;gt; -u&amp;lt;username&amp;gt; -p --local-infile bark -e &quot;LOAD DATA LOCAL INFILE '&amp;lt;filename.csv&amp;gt;'  INTO TABLE &amp;lt;table&amp;gt;  FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 제가 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-p&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하는 것은 되기 때문에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&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;csv&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;Windows에서 Microsoft Excel에서 파일을 내보내고 Linux 환경에서 동일한 파일을 가져오면 예기치 않은 결과가 나타납니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;올바른 구문은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;load data local infile 'file.csv' into table table fields terminated by ',' enclosed by '&quot;' lines terminated by '\r\n'&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;는 here here here here here here here here here here 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'\r\n'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'\n&lt;/code&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/6605765/&lt;a href=&quot;https://stackoverflow.com/questions/6605765/importing-a-csv-into-mysql-via-command-line&quot; target=&quot;_blank&quot; papago-id=&quot;38-1&quot;&gt;importing-a-csv-into-mysql-via-command-line&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>bestcode</author>
      <guid isPermaLink="true">https://bestcode.tistory.com/895</guid>
      <comments>https://bestcode.tistory.com/895#entry895comment</comments>
      <pubDate>Tue, 31 Jan 2023 20:50:14 +0900</pubDate>
    </item>
  </channel>
</rss>