<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>megabox</title>
    <link>https://megabox.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Thu, 14 May 2026 18:16:33 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>megabox</managingEditor>
    <item>
      <title>PowerShell에서 XML용 하위 요소를 추가하는 방법</title>
      <link>https://megabox.tistory.com/796</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PowerShell에서 XML용 하위 요소를 추가하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 xml에 대한 하위 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;configuration&amp;gt;
&amp;lt;/configuration&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 PowerShell 스크립트를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[xml] $doc = Get-Content($filePath)
$child = $doc.CreateElement(&quot;newElement&quot;)
$doc.configuration.AppendChild($child)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오류가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;[시스템] 때문에 메서드 호출에 실패했습니다.&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;String]에 'ApendChild'라는 메서드가 없습니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;점 표기법을 사용하여 XML 파일을 탐색하는 경우(예:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$doc.configuration&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;), 파워셸은 그것이 반환되는 것에 대해 영리해지려고 노력합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대상 요소가 비어 있거나 텍스트 노드 하나만 포함된 경우 PS는 다음을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대상 요소에 텍스트 노드 이외의 하위 노드가 포함되어 있으면 다음 값을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XmlElement&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대상 요소가 여러 개 존재할 경우 다음을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Object[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 여기서 각각의 개별 배열 요소는 다시 이러한 규칙의 적용을 받습니다. 예를 들어, 그것은 다음 중 하나가 될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;혹은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XmlElement&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내용에 따라서&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대상 요소가 존재하지 않으면 PS가 반환됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$null&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자의 경우 문서 요소에 노드를 추가하기 때문에 쉽습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$doc = New-Object System.Xml.XmlDocument
$doc.Load($filePath)
$child = $doc.CreateElement(&quot;newElement&quot;)
$doc.DocumentElement.AppendChild($child)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 당신은 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$doc.SelectNodes()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$doc.SelectSingleNode()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;XML 문서를 탐색하고 항상 노드/노드 목록을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 동작의 민감성에 대해 논쟁할 수 있지만, 실제로는 구성 파일이나 API 응답에서 값을 읽는 것과 같은 작업과 같이 (정교하게 구조화된) XML을 소비하는 것을 꽤 간단하게 만듭니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것이 이 간단한 구문의 목적입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 복잡한 작업인 XML을 &lt;em&gt;생성&lt;/em&gt;하는 데는 좋은 도구가 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서는 처음부터 DOM API 메소드를 사용하는 것이 더 나은 방법입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/19245359/how-to-add-a-child-element-for-xml-in-powershell&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PowerShell</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/796</guid>
      <comments>https://megabox.tistory.com/796#entry796comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:09:31 +0900</pubDate>
    </item>
    <item>
      <title>Swift에서 UIViewController 하위 클래스의 사용자 지정 이니셜라이저를 만드는 방법은 무엇입니까?</title>
      <link>https://megabox.tistory.com/795</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Swift에서 UIViewController 하위 클래스의 사용자 지정 이니셜라이저를 만드는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전에 질문을 받은 적이 있다면 죄송합니다. 주변을 많이 찾아봤는데 상황이 달랐던 이전 스위프트 베타에서 나온 답변이 많습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;확실한 답을 찾을 수가 없는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서브클래스 하고싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UIViewController&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드로 쉽게 설정할 수 있도록 맞춤형 이니셜라이저를 가지고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스위프트에서 이 일을 하는데 어려움을 겪고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;init()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 특정한 것을 통과하는데 사용할 수 있는 함수.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSURL&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 뷰 컨트롤러와 함께 사용하겠습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 마음속에 그것은 어떤것처럼 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;init(withImageURL: NSURL)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 만약 내가 그 함수를 추가하면 그것은 나에게 그 함수를 추가하라고 요구합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;init(coder: NSCoder)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기능.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;슈퍼클래스에 표시되어 있기 때문이라고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;required&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;키워드?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그럼 서브클래스에서 해야 되는 건가요?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자 이제는 뭐죠?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 특별한 이니셜라이저는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;convenience&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하나? 지정된 거?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;슈퍼 이니셜라이저를 불러야 하나요?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;같은 반의 이니셜라이저?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특수 이니셜라이저를 어떻게 추가할 수 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UIViewController&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서브클래스?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;class ViewController: UIViewController {
        
    var imageURL: NSURL?
    
    // this is a convenient way to create this view controller without a imageURL
    convenience init() {
        self.init(imageURL: nil)
    }
    
    init(imageURL: NSURL?) {
        self.imageURL = imageURL
        super.init(nibName: nil, bundle: nil)
    }
    
    // if this view controller is loaded from a storyboard, imageURL will be nil
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;UI를 코드로 작성하시는 분들께&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class Your_ViewController : UIViewController {

    let your_property : String

    init(your_property: String) {
        self.your_property = your_property
        super.init(nibName: nil, bundle: nil)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    required init?(coder: NSCoder) {
        fatalError(&quot;init(coder:) is not supported&quot;)
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 다른 대답들과 매우 비슷하지만 약간의 설명이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;승인된 답변은 해당 속성이 &lt;em&gt;선택&lt;/em&gt; 사항이며 귀하의 답변에 대한 사실을 노출하지 않기 때문에 오해의 소지가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;init?(coder: NSCoder)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각각의 속성을 초기화해야 하며 이에 대한 유일한 해결책은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fatalError()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 궁극적으로 속성을 옵션으로 설정하면 벗어날 수 있지만 OP의 질문에 제대로 답하지는 못합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Think more of a OnlyNibOrProgrammatic_NOTStoryboardViewController
class ViewController: UIViewController {

    let name: String

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    // I don't have a nib. It's all through my code.
    init(name: String) {
        self.name = name

        super.init(nibName: nil, bundle: nil)
    }

    // I have a nib. I'd like to use my nib and also initialze the `name` property
    init(name: String, nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle? ) {
        self.name = name
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    }

    // when you do storyboard.instantiateViewController(withIdentifier: &quot;ViewController&quot;)
    // The SYSTEM will never call this!
    // it wants to call the required initializer!

    init?(name: String, coder aDecoder: NSCoder) {
        self.name = &quot;name&quot;
        super.init(coder: aDecoder)
    }

    // when you do storyboard.instantiateViewController(withIdentifier: &quot;ViewController&quot;)
    // The SYSTEM WILL call this!
    // because this is its required initializer!
    // but what are you going to do for your `name` property?!
    // are you just going to do `self.name = &quot;default Name&quot; just to make it compile?!
    // Since you can't do anything then it's just best to leave it as `fatalError()`
    required init?(coder aDecoder: NSCoder) {
        fatalError(&quot;I WILL NEVER instantiate through storyboard! It's impossible to initialize super.init?(coder aDecoder: NSCoder) with any other parameter&quot;)
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 스토리보드에서 로드하는 것을 포기해야 합니다. 왜죠?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;왜냐하면 뷰컨트롤러를 호출할 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;storyboard.instantiateViewController(withIdentifier: &quot;viewController&quot;)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 &lt;em&gt;UIKit&lt;/em&gt;이 그 일을 하고 전화를 할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해당 호출을 다른 init 메서드로 리디렉션할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;sub&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문서:&lt;/font&gt;&lt;/sub&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 메서드를 사용하여 프로그래밍 방식으로 표시할 뷰 컨트롤러 개체를 만듭니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 메서드를 호출할 때마다 다음을 사용하여 뷰 컨트롤러의 새 인스턴스를 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;init(coder:)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;방법.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 프로그래밍 방식으로 작성된 viewController 또는 nib으로 작성된 viewController의 경우 위와 같이 해당 호출을 리디렉션할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편의 이니셜라이저는 보조적인 것으로 클래스의 이니셜라이저를 지원합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지정된 이니셜라이저의 일부 매개변수가 기본값으로 설정된 상태에서 편의 이니셜라이저와 동일한 클래스에서 지정된 이니셜라이저를 호출하도록 편의 이니셜라이저를 정의할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편의 이니셜라이저를 정의하여 특정 사용 사례 또는 입력 값 유형에 대해 해당 클래스의 인스턴스를 생성할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://developer.apple.com/library/ios/documentation/swift/conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/TP40014097-CH18-XID_324&quot; rel=&quot;noreferrer&quot;&gt;여기&lt;/a&gt;에 문서화되어 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 팝오버에 사용자 지정 init가 필요한 경우 다음 방법을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;nibName 및 번들과 함께 super init을 사용하는 사용자 지정 init를 만든 후 뷰 속성에 액세스하여 뷰 계층의 로드를 강제로 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 viewDidLoad 기능에서 초기화 시 전달된 파라미터로 뷰를 구성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import UIKit

struct Player {
    let name: String
    let age: Int
}

class VC: UIViewController {


@IBOutlet weak var playerName: UILabel!

let player: Player

init(player: Player) {
    self.player = player
    super.init(nibName: &quot;VC&quot;, bundle: Bundle.main)
    if let view = view, view.isHidden {}
}

override func viewDidLoad() {
    super.viewDidLoad()
    configure()
}

func configure() {
    playerName.text = player.name + &quot;\(player.age)&quot;
}
}

func showPlayerVC() {
    let foo = Player(name: &quot;bar&quot;, age: 666)
    let vc = VC(player: foo)
    present(vc, animated: true, completion: nil)
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/26923003/how-do-i-make-a-custom-initializer-for-a-uiviewcontroller-subclass-in-swift&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>SWIFT</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/795</guid>
      <comments>https://megabox.tistory.com/795#entry795comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:09:24 +0900</pubDate>
    </item>
    <item>
      <title>ForEach-Object - Parallel에서 사용자 지정 함수를 전달하는 방법</title>
      <link>https://megabox.tistory.com/794</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ForEach-Object - Parallel에서 사용자 지정 함수를 전달하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 그 기능을 전달할 방법을 찾을 수가 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변수만.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ForEach 루프 안에 기능을 넣지 않은 아이디어가 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function CustomFunction {
    Param (
        $A
    )
    Write-Host $A
}

$List = &quot;Apple&quot;, &quot;Banana&quot;, &quot;Grape&quot; 
$List | ForEach-Object -Parallel {
    Write-Host $using:CustomFunction $_
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bU0tJ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bU0tJ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;솔루션은 원하는 만큼 간단하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# Sample custom function.
function Get-Custom {
  Param ($A)
  &quot;[$A]&quot;
}

# Get the function's definition *as a string*
$funcDef = ${function:Get-Custom}.ToString()

&quot;Apple&quot;, &quot;Banana&quot;, &quot;Grape&quot;  | ForEach-Object -Parallel {
  # Define the function inside this thread...
  ${function:Get-Custom} = $using:funcDef
  # ... and call it.
  Get-Custom $_
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;sup&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고: 이 &lt;a href=&quot;https://stackoverflow.com/a/68985262/45375&quot;&gt;답변&lt;/a&gt;에는 의 호출자 범위에서 &lt;em&gt;스크립트 블록&lt;/em&gt;을 사용하는 것과 유사한 솔루션이 포함되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ForEach-Object -Parallel&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스크립트 블록입니다.&lt;/font&gt;&lt;/font&gt;&lt;/sup&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;참고&lt;/strong&gt;: 기능이 모듈 자동 &lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Modules#module-auto-loading&quot; rel=&quot;noreferrer&quot;&gt;로딩&lt;/a&gt; 기능으로 알려진 위치 중 하나에 있는 &lt;em&gt;모듈&lt;/em&gt;에 정의되어 있다면 기능 호출은 그대로 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ForEach-Object -Parallel&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 별도의 노력 없이 각 스레드에서 모듈을 가져오는 데 드는 비용이 implicit으로 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 위치(작업 디렉토리)와 환경 변수(프로세스 전체에 적용되는)를 제외하고는 다음과 같은 스레드가 필요하기 때문에 위와 같은 접근 방식이 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ForEach-Object -Parallel&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;create는 호출자의 상태를 볼 수 &lt;em&gt;없으며&lt;/em&gt;, 변수나 함수(사용자 지정 PS 드라이브 및 가져온 모듈)에 대해서도 볼 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PowerShell 7.2.x에서는 &lt;a href=&quot;https://github.com/PowerShell/PowerShell/issues/12240&quot; rel=&quot;noreferrer&quot;&gt;GitHub 이슈 #12240&lt;/a&gt;에서 &lt;em&gt;요구&lt;/em&gt; 시 호출자의 &lt;em&gt;상태&lt;/em&gt;를 병렬 스레드에 복사할 수 있도록 지원하는 향상된 기능이 논의되고 있으며, 이를 통해 호출자의 기능을 자동으로 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;&lt;em&gt;문자열&lt;/em&gt;&lt;/strong&gt;을 통해 각 &lt;strong&gt;&lt;em&gt;스레드&lt;/em&gt;&lt;/strong&gt;의 &lt;strong&gt;함수를 재정의하는 것&lt;/strong&gt;은 aux 없이 수행하기 위한 시도로서 &lt;strong&gt;매우&lt;/strong&gt; 중요합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$funcDef&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변수를 사용하여 함수를 다시 정의하려고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;${function:Get-Custom} = ${using:function:Get-Custom}&lt;/code&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;실패&lt;/em&gt;한다, 왜냐하면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;${function:Get-Custom}&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;는 스크립트&lt;/em&gt; 블록이며 스크립트 블록을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$using:&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스코프 지정자는 교차 thread(교차 실행 공간) 문제를 방지하기 위해 명시적으로 허용되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;${function:Get-Custom} = ${using:function:Get-Custom}&lt;/code&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;을 사용할 수 &lt;em&gt;있습니다&lt;/em&gt;. 예를 들어 이 &lt;a href=&quot;https://stackoverflow.com/a/68882127/45375&quot;&gt;답변&lt;/a&gt;을 참조하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 &lt;em&gt;구문적&lt;/em&gt;으로 다음 작업을 수행할 수 있는 에서 &lt;em&gt;작동&lt;/em&gt;하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp; ${using:function:Get-Custom} $_&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,왜냐면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;${using:function:Get-Custom}&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;스크립트 블록&lt;/em&gt;으로 보존됩니다(와 함께 unlike).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Start-Job&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, &lt;em&gt;문자열&lt;/em&gt;로 역직렬화되는 경우, 그 &lt;em&gt;자체&lt;/em&gt;로 놀라운 동작입니다 - &lt;a href=&quot;https://github.com/PowerShell/PowerShell/issues/11698&quot; rel=&quot;noreferrer&quot;&gt;GitHub issue&lt;/a&gt; #&lt;a href=&quot;https://github.com/PowerShell/PowerShell/issues/11698&quot; rel=&quot;noreferrer&quot;&gt;11698&lt;/a&gt; &lt;em&gt;참조).&lt;/em&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 교차 스레드를 직접적으로 사용하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[scriptblock]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사례들은 불분명한 실패를 야기하고, 그 이유는 이유입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ForEach-Object -Parallel&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것을 애초에 막습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이와 유사한 허점으로 인해 스레드 간 문제가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ForEach-Object -Parallel&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;호출자 범위에서 얻은 &lt;em&gt;command-info 개체&lt;/em&gt;를 사용하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Get-Command&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 나사산의 기능체로서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$using:&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스코프: 이 또한 방지해야 하지만 PowerShell 7.2.7 이후는 아닙니다. 이 &lt;a href=&quot;https://stackoverflow.com/q/74257757/45375&quot;&gt;게시물&lt;/a&gt; 및 &lt;a href=&quot;https://github.com/PowerShell/PowerShell/issues/16461&quot; rel=&quot;noreferrer&quot;&gt;GitHub 이슈 #16461&lt;/a&gt;을 참조하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;code&gt;${function:Get-Custom}&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 &lt;a href=&quot;https://stackoverflow.com/a/55036515/45375&quot;&gt;namespace&lt;/a&gt; 변수 &lt;a href=&quot;https://stackoverflow.com/a/55036515/45375&quot;&gt;표기법&lt;/a&gt;의 한 예로, 함수를 둘 다 &lt;em&gt;얻을&lt;/em&gt; 수 있습니다(&lt;em&gt;body&lt;/em&gt; as a&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[scriptblock]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;instance) 및 a를 할당하여 &lt;em&gt;설정&lt;/em&gt;(define)합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[scriptblock]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 함수 본체를 포함하는 문자열.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;루프 내부의 include를 사용하여 ps1 파일을 통해 병렬 프로세스에 커스텀 기능을 전부 추가하였습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 물건들을 매우 깨끗하고 깔끔하게 유지시켜줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ForEach-Object -Parallel {
    # Include custom functions inside parallel scope
    . $using:PSScriptRoot\CustomFunctions.ps1
    # Now you can reference any function defined in the file
    My-CustomFunction
    ....
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이로 인해 각 병렬 프로세스에서 기능을 로드해야 하는 오버헤드가 발생하지만, 제 경우에는 전체 처리 시간과 관련된 작은 문제였습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;방금 get-command를 사용하는 다른 방법을 알아냈어요 통화 교환원과 함께 작동하는 거죠&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$a는 결국 함수가 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정보 개체.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편집: 이것이 실 안전하지 않다고 들었는데, 왜 그런지 이해가 안 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function hi { 'hi' }
$a = get-command hi
1..3 | foreach -parallel { &amp;amp; $using:a }

hi
hi
hi
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 저는 함수를 동적으로 추가하려는 사람들에게 유용할 수 있는 또 다른 작은 방법을 알아냈습니다. 특히 함수가 배열되어 있을 때와 같이 함수의 이름을 미리 알지 못할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# Store the current function list in a variable
$initialFunctions=Get-ChildItem Function:

# Source all .ps1 files in the current folder and all subfolders
Get-ChildItem . -Recurse | Where-Object { $_.Name -like '*.ps1' } |
     ForEach-Object { . &quot;$($_.FullName)&quot; }

# Get only the functions that were added above, and store them in an array
$functions = @()
Compare-Object $initialFunctions (Get-ChildItem Function:) -PassThru |
    ForEach-Object { $functions = @($functions) + @($_) }

1..3 | ForEach-Object -Parallel {
    # Pull the $functions array from the outer scope and set each function
    # to its definition
    $using:functions | ForEach-Object {
        Set-Content &quot;Function:$($_.Name)&quot; -Value $_.Definition
    }
    # Call one of the functions in the sourced .ps1 files by name
    SourcedFunction $_
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것의 주된 &quot;꼼수&quot;는 다음을 사용하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Set-Content&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Function:&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기능 이름과 더불어 PowerShell은 기본적으로 각 항목을 처리합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Function:&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오솔길로서&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 당신이 다음의 출력을 고려할 때 타당합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Get-PSDrive&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 각 항목은 동일한 방식(즉, 콜론과 함께)으로 &quot;드라이브&quot;로 사용될 수 있기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/61273189/how-to-pass-a-custom-function-inside-a-foreach-object-parallel&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PowerShell</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/794</guid>
      <comments>https://megabox.tistory.com/794#entry794comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:09:16 +0900</pubDate>
    </item>
    <item>
      <title>Javascript/Angular JS에서 반올림하는 방법 -- 그러나 중요하지 않은 숫자를 제거하는 방법</title>
      <link>https://megabox.tistory.com/793</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Javascript/Angular JS에서 반올림하는 방법 -- 그러나 중요하지 않은 숫자를 제거하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바스크립트 컨트롤러에 다음과 같은 문구가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.myList = [0, 1, 0.5, 0.6666666];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마이 앵글&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JS 템플릿에는 다음 행이 포함됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ng-repeat=&quot;i in myList&quot;&amp;gt;{{i}}&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 다음과 같은 HTML 출력이 생성됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div&amp;gt;0&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;1&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;0.5&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;0.6666666&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;숫자를 소수점 2자리로 반올림하고 싶습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;하지만, 저는 출력에서 의미 있는 숫자만 보고 싶습니다.&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt; 뒷걸음질 치는 0을 보고 싶지 않습니다.&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 그걸 어떻게 합니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;{{i | number:2}}&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;후행 0을 제거하지는 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1을 곱하면 참값으로 변환할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ng-repeat=&quot;i in myList&quot;&amp;gt;{{(i | number:2)*1}}&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위의 의견에서 언급한 바와 같이 각 숫자 필터에 의한 로케일 포맷으로 인해 솔루션이 중단됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로케일 서식 및 반올림이 필요한 경우 아래에서 다음을 사용하는 확장 필터를 생성할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;number filter&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$locale&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서비스.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.filter('numberEx', ['numberFilter', '$locale',
  function(number, $locale) {

    var formats = $locale.NUMBER_FORMATS;
    return function(input, fractionSize) {
      //Get formatted value
      var formattedValue = number(input, fractionSize);

      //get the decimalSepPosition
      var decimalIdx = formattedValue.indexOf(formats.DECIMAL_SEP);

      //If no decimal just return
      if (decimalIdx == -1) return formattedValue;


      var whole = formattedValue.substring(0, decimalIdx);
      var decimal = (Number(formattedValue.substring(decimalIdx)) || &quot;&quot;).toString();

      return whole +  decimal.substring(1);
    };
  }
]);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  &amp;lt;div ng-repeat=&quot;i in myList&quot;&amp;gt;{{i | numberEx:2}}&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데모&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;true&quot;&gt; 
 &lt;div class=&quot;snippet-code snippet-currently-hidden&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;angular.module('app', []).controller('ctrl', function($scope) {

  $scope.myList = [0, 10000.56, 0.5, 0.6666666, -1000.23123, 1, 1002, 2.5, 30.5, 22];

}).filter('numberEx', ['numberFilter', '$locale',
  function(number, $locale) {

    var formats = $locale.NUMBER_FORMATS;
    return function(input, fractionSize) {
      //Get formatted value
      var formattedValue = number(input, fractionSize);

      //get the decimalSepPosition
      var decimalIdx = formattedValue.indexOf(formats.DECIMAL_SEP);
      
      //If no decimal just return
      if (decimalIdx == -1) return formattedValue;

 
      var whole = formattedValue.substring(0, decimalIdx);
      var decimal = (Number(formattedValue.substring(decimalIdx)) || &quot;&quot;).toString();
      
      return whole +  decimal.substring(1);
    };
  }
]);&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;div ng-app=&quot;app&quot; ng-controller=&quot;ctrl&quot;&amp;gt;
  &amp;lt;div ng-repeat=&quot;i in myList&quot;&amp;gt;{{i | numberEx:2}}&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 이렇게 하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ng-repeat=&quot;i in myList&quot;&amp;gt;{{formatNumber(i)}}&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컨트롤러에 저장할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.formatNumber = function(i) {
    return Math.round(i * 100)/100; 
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 답변들이 제대로 작동하지 않거나, Angular의 $locale 서비스를 통합하거나 연동하지 않았기 때문에 다음과 같이 적었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;filter&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;템플릿:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;span&amp;gt;{{yourNumber | roundTo: N}}&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필터:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.filter('roundTo', function(numberFilter) {
    return function(value, maxDecimals) {
        return numberFilter((value || 0)
            .toFixed(maxDecimals)
            .replace(/(?:\.0+|(\.\d+?)0+)$/, &quot;$1&quot;)
        );
    }
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;숫자를 최대 소수점 숫자로 반올림합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 트림이 0보다 뒤집니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필요 없을 때 소수점 구분자를 제거합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;Angular의 $locale 형식을 사용&lt;/strong&gt;합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/27850765/how-to-round-in-javascript-angular-js-but-remove-insignificant-digits&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/793</guid>
      <comments>https://megabox.tistory.com/793#entry793comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:09:08 +0900</pubDate>
    </item>
    <item>
      <title>$(이것은) AJAX 성공 내부에서 작동하지 않음</title>
      <link>https://megabox.tistory.com/792</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$(이것은) AJAX 성공 내부에서 작동하지 않음&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 $(이것)을 사용할 수 있도록 클릭 시 사용하는 오래된 코드를 변경하려고 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제는 성공 내부에서 $(이것은) 작동하지 않는다는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;var로 설정하지 않고 이것을 할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('.addToCart').click(function() {

    $.ajax({
        url: 'cart/update',
        type: 'post',
        data: 'product_id=' + $(this).attr(&quot;data-id&quot;),
        dataType: 'json',
        success: function(json) {

            if (json['success']) {

            $(this).addClass(&quot;test&quot;);

            }   
        }
    });

});
&lt;/code&gt;&lt;/pre&gt;&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;콜백 안에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;을 말합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jqXHR&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트 핸들러가 바인딩된 요소가 아닌 Ajax 호출의 개체입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this&quot; rel=&quot;noreferrer&quot;&gt;자바스크립트에서 작동하는 방법에 대해 자세히&lt;/a&gt; 알아봅니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해결책&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ES2015+를 사용할 수 있다면 화살표 &lt;strong&gt;기능&lt;/strong&gt;을 사용하는 것이 가장 간단한 옵션일 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
    //...
    success: (json) =&amp;gt; {
         // `this` refers to whatever `this` refers to outside the function
    }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://api.jquery.com/jQuery.ajax/&quot; rel=&quot;noreferrer&quot;&gt;옵션&lt;/a&gt;을 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 개체는 모든 Ajax 관련 콜백의 컨텍스트가 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 컨텍스트는 호출에 사용된 ajax 설정을 나타내는 개체입니다(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$.ajaxSettings&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전달된 설정과 병합됨&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$.ajax&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;). &lt;em&gt;(...)&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
    //...
    context: this,
    success: function(json) {
         // `this` refers to the value of `context`
    }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 사용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
    //...
    success: $.proxy(function(json) {
         // `this` refers to the second argument of `$.proxy`
    }, this)
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 의 가치에 대한 참조를 유지합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;콜백 외부:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var element = this;

$.ajax({
    //...
    success: function(json) {
         // `this` refers to the jQXHR object
         // use `element` to refer to the DOM element
         // or `$(element)` to refer to the jQuery object
    }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;관련된&lt;/font&gt;&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-context-inside-a-callback&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;콜백 안에서 올바른 this에 접속하는 방법은?&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;pre&gt;&lt;code&gt;jQuery(&quot;.custom-filter-options .sbHolder ul li a&quot;).each(function () {
    var myStr = jQuery(this).text();
    var myArr = myStr.split(&quot; (&quot;);
     url = 'your url'; // New Code
            data = myArr[0];
                try {
                    jQuery.ajax({
                        url : url,
                        context: this,
                        type : 'post',
                        data : data,
                        success : function(data) {
            if(data){
                  jQuery(this).html(data);
            }else{
                  jQuery(this).html(myArr[0]);
            }
                        }
                    });
                } catch (e) {
                } 


});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/6394812/this-inside-of-ajax-success-not-working&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/792</guid>
      <comments>https://megabox.tistory.com/792#entry792comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:09:00 +0900</pubDate>
    </item>
    <item>
      <title>MariaDB Community Server 10.5 Alpha의 MariaDB Columnstore 1.4</title>
      <link>https://megabox.tistory.com/791</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MariaDB Community Server 10.5 Alpha의 MariaDB Columnstore 1.4&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MariaDB의 웹사이트에 따르면, Columnstore 섹션(https://mariadb.com/downloads/ #&lt;a href=&quot;https://mariadb.com/downloads/#mariadb_platform-mariadb_columnstore&quot; rel=&quot;nofollow noreferrer&quot;&gt; &lt;/a&gt;mari&lt;a href=&quot;https://mariadb.com/downloads/#mariadb_platform-mariadb_columnstore&quot; rel=&quot;nofollow noreferrer&quot;&gt;adb_platform- &lt;/a&gt;mariadb_columnstore)에서:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MariaDB ColumnStore 1.4는 이제 MariaDB Enterprise Server 10.4의 일부이며 &lt;strong&gt;다음 MariaDB Community Server 10.5 alpha 릴리스의 일부&lt;/strong&gt;가 될 &lt;strong&gt;것입니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 MariaDB Community Server 10.5 alpha용 .tar에는 &quot;columnstore&quot;라는 텍스트가 포함된 .deb 파일이 포함되어 있지 않습니다(F가 아닌 컬럼스토어 1.4에 대해 찾을 수 있는 유일한 문서를 바탕으로 &quot;MariaDB-columnstore-platform&quot; 및 &quot;MariaDB-columnstore-engine&quot;의 행을 따라 무언가가 보일 것으로 예상됩니다).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 커뮤니티 버전이지만 Enterprise: https://mariadb.com/docs/deploy/col14/) 의 경우.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MariaDB의 웹사이트에는 Columnstore 1.4가 해당 버전으로 출시되었다고 나와 있고, 다른 웹사이트에 게시된 몇몇 기사들도 해당 버전에 포함되어 있다고 언급하고 있지만, MariaDB Community 10.5 alpha에서 Columnstore 1.4와 관련된 동등한 문서를 찾을 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마리아DB 커뮤니티 10.5 alpha에서 컬럼스토어 1.4를 사용해 본 사람이 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;칼럼소트레의 10.5알파 포함은 단순히 취소되었을 뿐이며 웹사이트 전체에서 해당 포함에 대한 언급은 삭제되지 않은 것은 아닐까요?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 누군가가 그것을 작동시켰다면, 당신은 어떻게 작동하는지 대략적으로 설명할 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 10.5는 아직 출시되지 않았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;릴리스 주기는 문제가 많을 가능성이 있는 10.x.0을 출시하는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최악의 문제들을 해결해주는 10.x.1.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;등. 결국 10.x.y는 &quot;Release candidate&quot;로 발행됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;강력한 &quot;얼리 어답터&quot;들은 이것을 시도해 보되, 생산에 투입해서는 안 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마지막으로 10.x.10 정도에 &quot;GA&quot;(Generally Available) 버전을 발행할 예정입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기에는 10.x의 모든 기능이 포함되어 있으며 모든 쇼스토퍼 버그가 처리됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;10.5용 페이지는 10.5.1을 &quot;베타&quot;라고 부르고 있으며, 아직 RC나 GA는 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://mariadb.com/kb/en/what-is-mariadb-105/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://mariadb.com/kb/en/what-is-mariadb-105/&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기능이 &quot;.0&quot; 버전으로 전환되지 않는 것은 드문 일이 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 RC 출시 전에 들어올 가능성이 높습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아마 그들이 Columnstore를 .0에 넣으려고 했지만 정말 안 좋은 일이 생겨서 그들은 그것을 지지한 것 &lt;em&gt;같습니다&lt;/em&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아마도 MariaDB에 있는 누군가가 이 Q&amp;amp;A를 발견하고 더 나은 답변을 해줄 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참기.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/60441043/mariadb-columnstore-1-4-on-mariadb-community-server-10-5-alpha&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/791</guid>
      <comments>https://megabox.tistory.com/791#entry791comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:08:53 +0900</pubDate>
    </item>
    <item>
      <title>WordPress admin: 페이지 속성에 초안 페이지 표시 부모 페이지 드롭다운</title>
      <link>https://megabox.tistory.com/790</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WordPress admin: 페이지 속성에 초안 페이지 표시 부모 페이지 드롭다운&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;명확한 설명을 위해 다음은 이 질문에서 말하는 상자의 사진입니다.&lt;/font&gt;&lt;/font&gt;&lt;img src=&quot;https://i.stack.imgur.com/grD3P.png&quot; alt=&quot;Screenshot of post parent dropdown list&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;배경:&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 블로그보다는 CMS에 가까운 상대적으로 복잡한 WP 사이트를 클라이언트용으로 만들었고, 페이지의 계층 구조에 의존합니다. (글쎄요, 그것들은 사실 맞춤형 게시물 유형입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'hierarchical' =&amp;gt; true&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;세트)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;질문:&lt;/strong&gt; 페이지 속성 '부모 페이지' 드롭다운 목록에 초안(또는 검토 보류 중) 페이지를 표시할 수 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 기능이 없다면, 전체 섹션이 준비되기 전에 각 페이지를 라이브로 만드는 것을 의미하며, 이는 적절한 해결책이 아닙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 시도한 것:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;목록을 만들기 위해 호출되는 작업을 찾습니다(찾을 수 없음).&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;목록이 생성된 위치의 소스 코드를 확인하는 중 (&lt;a href=&quot;http://codex.wordpress.org/Function_Reference/wp_dropdown_pages&quot; rel=&quot;nofollow noreferrer&quot;&gt;wp_dropdown_pages&lt;/a&gt;로 작성되어 게시 상태를 선택할 수 없는 것으로 보임)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 기능을 제공하는 플러그인을 찾고 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아주 좋은 질문입니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음이 그 역할을 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하나의 필터는 편집 페이지 화면을 위한 필터이고 다른 하나는 빠른 편집 메뉴를 위한 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;계층적 사용자 지정 게시물 유형을 사용하여 테스트했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_filter( 'page_attributes_dropdown_pages_args', 'so_3538267_enable_drafts_parents' );
add_filter( 'quick_edit_dropdown_pages_args', 'so_3538267_enable_drafts_parents' );

function so_3538267_enable_drafts_parents( $args )
{
    $args['post_status'] = 'draft,publish,pending';
    return $args;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/C6lNE.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/C6lNE.png&quot; alt=&quot;drafts enabled as parents&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/3538267/wordpress-admin-show-draft-pages-in-page-attributes-parent-page-dropdown&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/790</guid>
      <comments>https://megabox.tistory.com/790#entry790comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:08:47 +0900</pubDate>
    </item>
    <item>
      <title>EnumProcesses() 대 CreateTool help32Snapshot()</title>
      <link>https://megabox.tistory.com/789</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;EnumProcesses() 대 CreateTool help32Snapshot()&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;활성 프로세스와 로드된 모듈을 모두 열거하기 위한 두 Win32 API 함수 &lt;em&gt;EnumProcesses()&lt;/em&gt;와 &lt;em&gt;CreateToolhelp32Snapshot()&lt;/em&gt; 사이에 차이점이 있는지 궁금합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;혹은 어떤 것이 다른 것보다 더 나은지, 그리고 그 이유는.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 몇 가지 기능에서 얻은 결과입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;EnumProcesses: 16msec, 207프로세스&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CreateTool help32스냅샷: 141msec(16msec), 207개 프로세스&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WTSE 수프로세스: 16msec, 207프로세스&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WTS 수프로세스Ex(WTS_CURRENT_SESSION): 16msec, 98프로세스&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WTSE 수프로세스Ex(WTS_ANY_SESSION): 16msec, 207프로세스&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컴퓨터가 UAC가 활성화된 상태에서 Windows 8을 실행하고 있으며, 사용자가 상승하지 않았습니다(예: 시스템 프로세스에 액세스할 수 없음).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주 프로세스는 32비트, 기계는 64비트이므로 주변에 많은 64비트 프로세스가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시스템의 경우 세션 0, 현재 콘솔 사용자의 경우 세션 1, 다른 패스트 스위치 사용자의 경우 세션 2가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;총 207개의 프로세스(의사 &quot;시스템&quot; 프로세스를 포함하여 모두 32비트와 64비트) - 207 또한 프로세스 탐색기에 의해 확인됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 207개의 프로세스 중 23개의 프로세스는 세션 2에 대한 것이고 98개의 프로세스는 세션 1에 대한 것이고 나머지 프로세스는 세션 0에 대한 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;결과는 10회의 단일 함수 호출 주기에 대한 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 런에서 100% 재현성이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CreateToolhelp32Snapshot의 주요 결과는 CreateToolhelp32Snapshot 자체에 대한 호출이며, 두 번째 결과(괄호 안)는 First/Next로 주기됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 사람들이 &quot;모든 프로세스 열거&quot;(PID 획득)와 &quot;프로세스/exe 이름 가져오기&quot;를 혼동한다고 생각합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫 번째 것(&quot;enumerate&quot;)은 x32/x64 교차 비트에 전혀 문제가 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 후자(&quot;get name&quot;)는 문제가 있습니다. 모든 메서드가 x32/x64에서 작동하는 것은 아닙니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CreateToolhelp32Snapshot()은 섹션 개체를 생성하고 모든 정보를 복사하기 때문에 약간의 오버헤드가 있을 수 있지만 EnumProcesses()/EnumProcessModules()는 사용자가 제공하는 버퍼에서 직접 작동하는 반면 CreateToolhelp32Snapshot()은 섹션 개체를 생성하고 모든 정보를 복사하기 때문에 약간의 오버헤드가 있을 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 실제 성능에서는 그 차이는 무시할 수 있을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;EnumProcesses()를 사용하기 더 간단한 API이기 때문에 약간 선호하지만, CreateToolhelp32Snapshot()은 필요한 경우 더 많은 정보를 반환합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;EnumProcesses()의 유일한 단점은 충분히 큰 버퍼를 할당하지 않았을 수 있기 때문에 루프에서 해당 버퍼를 호출해야 한다는 것입니다. CreateToolhelp32Snapshot()이 버퍼 관리를 대신 수행합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제로 저는 1024개의 프로세서 ID나 모듈 핸들을 수용할 수 있을 정도로 큰 버퍼를 스택에 할당할 뿐입니다. 지금까지 이 두 가지 제한 중 어느 것도 거의 도달하지 못한 시스템을 발견하지 못했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론 얼마 전까지만 해도 MAX_PATH에 대해서도 같은 말을 했었지만 지금은 문제에 부딪히고 있습니다...&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정확히 기억은 나지 않지만 CreateToolhelp32Snapshot()과는 달리 EnumProcesses()는 두 가지 또는 두 가지 모두의 제한 중 하나인 1을 가지고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;x64 OS의 32비트 프로세스에서 호출되는 경우 64비트 프로세스를 열거하지 않습니다. 2. Vista 및 Win7의 상승된 프로세스를 열거하지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CreateTool help32Snapshot FTW.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;EnumProcesses는 적어도 Win XP의 svchost.exe의 모든 인스턴스와 같은 모든 시스템 프로세스를 열거하지는 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IMO의 핵심적인 차이점은 권한 요구사항에 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 본 적이 있는 사건은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;EnumProcesses()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실패하겠지만,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CreateToolhelp32Snapshot()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;완벽하게 잘 달렸습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 한 번은 시스템에서 특정 프로세스를 감지하고 적절하게 반응할 수 있는 코드를 작성해야 했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용해서 썼어요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;EnumProcesses()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 기계에서는 잘 작동했지만 테스터들의 기계에서는 잘 작동하지 않았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지금 막 다시 썼어요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CreateToolhelp32Snapshot()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제가 있다는 얘기는 이제 들어본 적이 없어요&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/4021307/enumprocesses-vs-createtoolhelp32snapshot&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/789</guid>
      <comments>https://megabox.tistory.com/789#entry789comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:08:40 +0900</pubDate>
    </item>
    <item>
      <title>matplotlib 객체 지향 인터페이스를 사용하여 seaborn으로 플롯팅</title>
      <link>https://megabox.tistory.com/788</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;matplotlib 객체 지향 인터페이스를 사용하여 seaborn으로 플롯팅&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하는 것을 매우 선호합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;matplotlib&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;OOP 스타일:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;f, axarr = plt.subplots(2, sharex=True)
axarr[0].plot(...)
axarr[1].plot(...)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 통해 여러 수치와 하위 그림을 더 쉽게 추적할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;질문:.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 해초를 사용하는 방법은?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면 이 &lt;a href=&quot;http://www.stanford.edu/~mwaskom/software/seaborn/examples/anscombes_quartet.html&quot;&gt;예제&lt;/a&gt;를 OOP 스타일로 변경하는 방법은 무엇입니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구분하는 방법&lt;/font&gt;&lt;/font&gt;&lt;code&gt;seaborn&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같은 함수를 표시합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lmplot&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Figure&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Axes&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;계획은?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 바다본 기능을 쓰느냐에 따라 조금씩 다릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Seaborn의 플롯 함수는 크게 두 &lt;a href=&quot;https://seaborn.pydata.org/tutorial/function_overview.html#figure-level-vs-axes-level-functions&quot; rel=&quot;noreferrer&quot;&gt;가지 유형으로 구분&lt;/a&gt;됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음을 포함한 &quot;축 수준&quot; 기능&lt;/font&gt;&lt;/font&gt;&lt;code&gt;regplot&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;boxplot&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;kdeplot&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그 외 여러가지&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음을 포함한 &quot;수치 수준&quot; 기능&lt;/font&gt;&lt;/font&gt;&lt;code&gt;relplot&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;catplot&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;displot&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pairplot&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jointplot&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 밖에 한두 명&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫번째 그룹은 명시적인 방법을 취함으로써 식별됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ax&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;논쟁하고 돌려주기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Axes&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물건.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 시사하는 바와 같이, 당신은 그것들을 &quot;객체 지향&quot; 스타일로 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Axes&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그들에게:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;f, (ax1, ax2) = plt.subplots(2)
sns.regplot(x, y, ax=ax1)
sns.kdeplot(x, ax=ax2)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;축 수준 함수는 다음과 같은 위치에만 그려집니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Axes&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;피규어를 건드리는 일이 없기 때문에 오브젝트 중심의 매트플롯립 스크립트에서 완벽하게 행복하게 공존할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 번째 함수 그룹(Figure-level)은 결과 그림에 항상 &quot;의미 있는&quot; 방식으로 구성되는 여러 축이 포함될 수 있다는 사실로 구별됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 함수가 그림을 완전히 제어할 수 있어야 하므로 그림을 그릴 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lmplot&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이미 존재하는 것에.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수를 호출하면 항상 그림을 초기화하고 그 그림에 대해 그림을 설정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만, 일단 전화를 걸면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lmplot&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 유형의 개체를 반환합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 개체에는 그림의 구조에 대해 조금이라도 알고 있는 결과 그림에 대해 작업할 수 있는 몇 가지 방법이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 기본적인 그림과 축 배열을 노출합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FacetGrid.fig&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FacetGrid.axes&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;논쟁. 그.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jointplot&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기능은 매우 비슷하지만 물체를 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 이러한 기능을 객체 지향적인 맥락에서 사용할 수 있지만, 모든 사용자 지정은 기능을 호출한 후에 이루어져야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/23969619/plotting-with-seaborn-using-the-matplotlib-object-oriented-interface&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PYTHON</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/788</guid>
      <comments>https://megabox.tistory.com/788#entry788comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:08:33 +0900</pubDate>
    </item>
    <item>
      <title>javascript를 사용하여 로케일 단기 날짜 형식 가져오기</title>
      <link>https://megabox.tistory.com/787</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;javascript를 사용하여 로케일 단기 날짜 형식 가져오기&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제어판 -&amp;gt; 지역 및 언어 설정에서 사용하는 짧은 날짜 형식을 자바스크립트를 사용하여 알 수 있는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음의 조합을 사용하면 로케일 Long Name 형식을 얻을 수 있다는 것을 알고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;toString()
toLocaleString()
toLocaleDateString()
toLocaleTimeString()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 자바스크립트에는 다음과 같은 직접적인 기능이 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;toLocaleShortDateString()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자 설정이 무엇인지 알아볼 수 있는 스크립트가 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;function getLocaleDateString() {
  const formats = {
    &quot;af-ZA&quot;: &quot;yyyy/MM/dd&quot;,
    &quot;am-ET&quot;: &quot;d/M/yyyy&quot;,
    &quot;ar-AE&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;ar-BH&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;ar-DZ&quot;: &quot;dd-MM-yyyy&quot;,
    &quot;ar-EG&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;ar-IQ&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;ar-JO&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;ar-KW&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;ar-LB&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;ar-LY&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;ar-MA&quot;: &quot;dd-MM-yyyy&quot;,
    &quot;ar-OM&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;ar-QA&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;ar-SA&quot;: &quot;dd/MM/yy&quot;,
    &quot;ar-SY&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;ar-TN&quot;: &quot;dd-MM-yyyy&quot;,
    &quot;ar-YE&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;arn-CL&quot;: &quot;dd-MM-yyyy&quot;,
    &quot;as-IN&quot;: &quot;dd-MM-yyyy&quot;,
    &quot;az-Cyrl-AZ&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;az-Latn-AZ&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;ba-RU&quot;: &quot;dd.MM.yy&quot;,
    &quot;be-BY&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;bg-BG&quot;: &quot;dd.M.yyyy&quot;,
    &quot;bn-BD&quot;: &quot;dd-MM-yy&quot;,
    &quot;bn-IN&quot;: &quot;dd-MM-yy&quot;,
    &quot;bo-CN&quot;: &quot;yyyy/M/d&quot;,
    &quot;br-FR&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;bs-Cyrl-BA&quot;: &quot;d.M.yyyy&quot;,
    &quot;bs-Latn-BA&quot;: &quot;d.M.yyyy&quot;,
    &quot;ca-ES&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;co-FR&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;cs-CZ&quot;: &quot;d.M.yyyy&quot;,
    &quot;cy-GB&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;da-DK&quot;: &quot;dd-MM-yyyy&quot;,
    &quot;de-AT&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;de-CH&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;de-DE&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;de-LI&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;de-LU&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;dsb-DE&quot;: &quot;d. M. yyyy&quot;,
    &quot;dv-MV&quot;: &quot;dd/MM/yy&quot;,
    &quot;el-GR&quot;: &quot;d/M/yyyy&quot;,
    &quot;en-029&quot;: &quot;MM/dd/yyyy&quot;,
    &quot;en-AU&quot;: &quot;d/MM/yyyy&quot;,
    &quot;en-BZ&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;en-CA&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;en-GB&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;en-IE&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;en-IN&quot;: &quot;dd-MM-yyyy&quot;,
    &quot;en-JM&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;en-MY&quot;: &quot;d/M/yyyy&quot;,
    &quot;en-NZ&quot;: &quot;d/MM/yyyy&quot;,
    &quot;en-PH&quot;: &quot;M/d/yyyy&quot;,
    &quot;en-SG&quot;: &quot;d/M/yyyy&quot;,
    &quot;en-TT&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;en-US&quot;: &quot;M/d/yyyy&quot;,
    &quot;en-ZA&quot;: &quot;yyyy/MM/dd&quot;,
    &quot;en-ZW&quot;: &quot;M/d/yyyy&quot;,
    &quot;es-AR&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;es-BO&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;es-CL&quot;: &quot;dd-MM-yyyy&quot;,
    &quot;es-CO&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;es-CR&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;es-DO&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;es-EC&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;es-ES&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;es-GT&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;es-HN&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;es-MX&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;es-NI&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;es-PA&quot;: &quot;MM/dd/yyyy&quot;,
    &quot;es-PE&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;es-PR&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;es-PY&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;es-SV&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;es-US&quot;: &quot;M/d/yyyy&quot;,
    &quot;es-UY&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;es-VE&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;et-EE&quot;: &quot;d.MM.yyyy&quot;,
    &quot;eu-ES&quot;: &quot;yyyy/MM/dd&quot;,
    &quot;fa-IR&quot;: &quot;MM/dd/yyyy&quot;,
    &quot;fi-FI&quot;: &quot;d.M.yyyy&quot;,
    &quot;fil-PH&quot;: &quot;M/d/yyyy&quot;,
    &quot;fo-FO&quot;: &quot;dd-MM-yyyy&quot;,
    &quot;fr-BE&quot;: &quot;d/MM/yyyy&quot;,
    &quot;fr-CA&quot;: &quot;yyyy-MM-dd&quot;,
    &quot;fr-CH&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;fr-FR&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;fr-LU&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;fr-MC&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;fy-NL&quot;: &quot;d-M-yyyy&quot;,
    &quot;ga-IE&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;gd-GB&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;gl-ES&quot;: &quot;dd/MM/yy&quot;,
    &quot;gsw-FR&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;gu-IN&quot;: &quot;dd-MM-yy&quot;,
    &quot;ha-Latn-NG&quot;: &quot;d/M/yyyy&quot;,
    &quot;he-IL&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;hi-IN&quot;: &quot;dd-MM-yyyy&quot;,
    &quot;hr-BA&quot;: &quot;d.M.yyyy.&quot;,
    &quot;hr-HR&quot;: &quot;d.M.yyyy&quot;,
    &quot;hsb-DE&quot;: &quot;d. M. yyyy&quot;,
    &quot;hu-HU&quot;: &quot;yyyy. MM. dd.&quot;,
    &quot;hy-AM&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;id-ID&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;ig-NG&quot;: &quot;d/M/yyyy&quot;,
    &quot;ii-CN&quot;: &quot;yyyy/M/d&quot;,
    &quot;is-IS&quot;: &quot;d.M.yyyy&quot;,
    &quot;it-CH&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;it-IT&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;iu-Cans-CA&quot;: &quot;d/M/yyyy&quot;,
    &quot;iu-Latn-CA&quot;: &quot;d/MM/yyyy&quot;,
    &quot;ja-JP&quot;: &quot;yyyy/MM/dd&quot;,
    &quot;ka-GE&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;kk-KZ&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;kl-GL&quot;: &quot;dd-MM-yyyy&quot;,
    &quot;km-KH&quot;: &quot;yyyy-MM-dd&quot;,
    &quot;kn-IN&quot;: &quot;dd-MM-yy&quot;,
    &quot;ko-KR&quot;: &quot;yyyy. MM. dd&quot;,
    &quot;kok-IN&quot;: &quot;dd-MM-yyyy&quot;,
    &quot;ky-KG&quot;: &quot;dd.MM.yy&quot;,
    &quot;lb-LU&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;lo-LA&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;lt-LT&quot;: &quot;yyyy.MM.dd&quot;,
    &quot;lv-LV&quot;: &quot;yyyy.MM.dd.&quot;,
    &quot;mi-NZ&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;mk-MK&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;ml-IN&quot;: &quot;dd-MM-yy&quot;,
    &quot;mn-MN&quot;: &quot;yy.MM.dd&quot;,
    &quot;mn-Mong-CN&quot;: &quot;yyyy/M/d&quot;,
    &quot;moh-CA&quot;: &quot;M/d/yyyy&quot;,
    &quot;mr-IN&quot;: &quot;dd-MM-yyyy&quot;,
    &quot;ms-BN&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;ms-MY&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;mt-MT&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;nb-NO&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;ne-NP&quot;: &quot;M/d/yyyy&quot;,
    &quot;nl-BE&quot;: &quot;d/MM/yyyy&quot;,
    &quot;nl-NL&quot;: &quot;d-M-yyyy&quot;,
    &quot;nn-NO&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;nso-ZA&quot;: &quot;yyyy/MM/dd&quot;,
    &quot;oc-FR&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;or-IN&quot;: &quot;dd-MM-yy&quot;,
    &quot;pa-IN&quot;: &quot;dd-MM-yy&quot;,
    &quot;pl-PL&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;prs-AF&quot;: &quot;dd/MM/yy&quot;,
    &quot;ps-AF&quot;: &quot;dd/MM/yy&quot;,
    &quot;pt-BR&quot;: &quot;d/M/yyyy&quot;,
    &quot;pt-PT&quot;: &quot;dd-MM-yyyy&quot;,
    &quot;qut-GT&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;quz-BO&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;quz-EC&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;quz-PE&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;rm-CH&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;ro-RO&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;ru-RU&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;rw-RW&quot;: &quot;M/d/yyyy&quot;,
    &quot;sa-IN&quot;: &quot;dd-MM-yyyy&quot;,
    &quot;sah-RU&quot;: &quot;MM.dd.yyyy&quot;,
    &quot;se-FI&quot;: &quot;d.M.yyyy&quot;,
    &quot;se-NO&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;se-SE&quot;: &quot;yyyy-MM-dd&quot;,
    &quot;si-LK&quot;: &quot;yyyy-MM-dd&quot;,
    &quot;sk-SK&quot;: &quot;d. M. yyyy&quot;,
    &quot;sl-SI&quot;: &quot;d.M.yyyy&quot;,
    &quot;sma-NO&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;sma-SE&quot;: &quot;yyyy-MM-dd&quot;,
    &quot;smj-NO&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;smj-SE&quot;: &quot;yyyy-MM-dd&quot;,
    &quot;smn-FI&quot;: &quot;d.M.yyyy&quot;,
    &quot;sms-FI&quot;: &quot;d.M.yyyy&quot;,
    &quot;sq-AL&quot;: &quot;yyyy-MM-dd&quot;,
    &quot;sr-Cyrl-BA&quot;: &quot;d.M.yyyy&quot;,
    &quot;sr-Cyrl-CS&quot;: &quot;d.M.yyyy&quot;,
    &quot;sr-Cyrl-ME&quot;: &quot;d.M.yyyy&quot;,
    &quot;sr-Cyrl-RS&quot;: &quot;d.M.yyyy&quot;,
    &quot;sr-Latn-BA&quot;: &quot;d.M.yyyy&quot;,
    &quot;sr-Latn-CS&quot;: &quot;d.M.yyyy&quot;,
    &quot;sr-Latn-ME&quot;: &quot;d.M.yyyy&quot;,
    &quot;sr-Latn-RS&quot;: &quot;d.M.yyyy&quot;,
    &quot;sv-FI&quot;: &quot;d.M.yyyy&quot;,
    &quot;sv-SE&quot;: &quot;yyyy-MM-dd&quot;,
    &quot;sw-KE&quot;: &quot;M/d/yyyy&quot;,
    &quot;syr-SY&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;ta-IN&quot;: &quot;dd-MM-yyyy&quot;,
    &quot;te-IN&quot;: &quot;dd-MM-yy&quot;,
    &quot;tg-Cyrl-TJ&quot;: &quot;dd.MM.yy&quot;,
    &quot;th-TH&quot;: &quot;d/M/yyyy&quot;,
    &quot;tk-TM&quot;: &quot;dd.MM.yy&quot;,
    &quot;tn-ZA&quot;: &quot;yyyy/MM/dd&quot;,
    &quot;tr-TR&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;tt-RU&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;tzm-Latn-DZ&quot;: &quot;dd-MM-yyyy&quot;,
    &quot;ug-CN&quot;: &quot;yyyy-M-d&quot;,
    &quot;uk-UA&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;ur-PK&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;uz-Cyrl-UZ&quot;: &quot;dd.MM.yyyy&quot;,
    &quot;uz-Latn-UZ&quot;: &quot;dd/MM yyyy&quot;,
    &quot;vi-VN&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;wo-SN&quot;: &quot;dd/MM/yyyy&quot;,
    &quot;xh-ZA&quot;: &quot;yyyy/MM/dd&quot;,
    &quot;yo-NG&quot;: &quot;d/M/yyyy&quot;,
    &quot;zh-CN&quot;: &quot;yyyy/M/d&quot;,
    &quot;zh-HK&quot;: &quot;d/M/yyyy&quot;,
    &quot;zh-MO&quot;: &quot;d/M/yyyy&quot;,
    &quot;zh-SG&quot;: &quot;d/M/yyyy&quot;,
    &quot;zh-TW&quot;: &quot;yyyy/M/d&quot;,
    &quot;zu-ZA&quot;: &quot;yyyy/MM/dd&quot;,
  };

  return formats[navigator.language] || &quot;dd/MM/yyyy&quot;;
}
console.log(navigator.language,getLocaleDateString());&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이게 최선의 방법이라고 생각해요&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;    var date = new Date();

    var options = {
        weekday: &quot;short&quot;,
        year: &quot;numeric&quot;,
        month: &quot;2-digit&quot;,
        day: &quot;numeric&quot;
    };

console.log(
    date.toLocaleDateString(&quot;en&quot;, options) //en is language option, you may specify..
);&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;추가 옵션 및 해당 예제...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Option          Values          Sample output
----------------------------------------------------
weekday         'narrow'        'M'
                'short'         'Mon'
                'long'          'Monday'

year            '2-digit'       '01'
                'numeric'       '2001'

month           '2-digit'       '01'
                'numeric'       '1'
                'narrow'        'J'
                'short'         'Jan'
                'long'          'January'

day             '2-digit'       '01'
                'numeric'       '1'

hour            '2-digit'       '12 AM'
                'numeric'       '12 AM'

minute          '2-digit'       '0'
                'numeric'       '0'

second          '2-digit'       '0'
                'numeric'       '0'

timeZoneName    'short'         '1/1/2001 GMT+00:00'
                'long'          '1/1/2001 GMT+00:00'
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat&quot; rel=&quot;noreferrer&quot;&gt;MDN&lt;/a&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인터네셔널.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DateTimeFormat 개체는 언어에 민감한 날짜 및 시간 형식을 활성화하는 개체의 생성자입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var date = new Date(2014, 11, 31, 12, 30, 0);

var formatter = new Intl.DateTimeFormat(&quot;ru&quot;);
console.log(formatter.format(date)); // 31.12.2014

var formatter = new Intl.DateTimeFormat(&quot;en-US&quot;);

console.log(formatter.format(date)); // 12/31/2014&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래 StackSnippet은 현재 날짜를 로컬 형식으로 기록합니다.&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;console.log(new Intl.DateTimeFormat(Intl.DateTimeFormat().resolvedOptions().locale).format(new Date()))&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;function getLocaleShortDateString(d)
{
    var f={&quot;ar-SA&quot;:&quot;dd/MM/yy&quot;,&quot;bg-BG&quot;:&quot;dd.M.yyyy&quot;,&quot;ca-ES&quot;:&quot;dd/MM/yyyy&quot;,&quot;zh-TW&quot;:&quot;yyyy/M/d&quot;,&quot;cs-CZ&quot;:&quot;d.M.yyyy&quot;,&quot;da-DK&quot;:&quot;dd-MM-yyyy&quot;,&quot;de-DE&quot;:&quot;dd.MM.yyyy&quot;,&quot;el-GR&quot;:&quot;d/M/yyyy&quot;,&quot;en-US&quot;:&quot;M/d/yyyy&quot;,&quot;fi-FI&quot;:&quot;d.M.yyyy&quot;,&quot;fr-FR&quot;:&quot;dd/MM/yyyy&quot;,&quot;he-IL&quot;:&quot;dd/MM/yyyy&quot;,&quot;hu-HU&quot;:&quot;yyyy. MM. dd.&quot;,&quot;is-IS&quot;:&quot;d.M.yyyy&quot;,&quot;it-IT&quot;:&quot;dd/MM/yyyy&quot;,&quot;ja-JP&quot;:&quot;yyyy/MM/dd&quot;,&quot;ko-KR&quot;:&quot;yyyy-MM-dd&quot;,&quot;nl-NL&quot;:&quot;d-M-yyyy&quot;,&quot;nb-NO&quot;:&quot;dd.MM.yyyy&quot;,&quot;pl-PL&quot;:&quot;yyyy-MM-dd&quot;,&quot;pt-BR&quot;:&quot;d/M/yyyy&quot;,&quot;ro-RO&quot;:&quot;dd.MM.yyyy&quot;,&quot;ru-RU&quot;:&quot;dd.MM.yyyy&quot;,&quot;hr-HR&quot;:&quot;d.M.yyyy&quot;,&quot;sk-SK&quot;:&quot;d. M. yyyy&quot;,&quot;sq-AL&quot;:&quot;yyyy-MM-dd&quot;,&quot;sv-SE&quot;:&quot;yyyy-MM-dd&quot;,&quot;th-TH&quot;:&quot;d/M/yyyy&quot;,&quot;tr-TR&quot;:&quot;dd.MM.yyyy&quot;,&quot;ur-PK&quot;:&quot;dd/MM/yyyy&quot;,&quot;id-ID&quot;:&quot;dd/MM/yyyy&quot;,&quot;uk-UA&quot;:&quot;dd.MM.yyyy&quot;,&quot;be-BY&quot;:&quot;dd.MM.yyyy&quot;,&quot;sl-SI&quot;:&quot;d.M.yyyy&quot;,&quot;et-EE&quot;:&quot;d.MM.yyyy&quot;,&quot;lv-LV&quot;:&quot;yyyy.MM.dd.&quot;,&quot;lt-LT&quot;:&quot;yyyy.MM.dd&quot;,&quot;fa-IR&quot;:&quot;MM/dd/yyyy&quot;,&quot;vi-VN&quot;:&quot;dd/MM/yyyy&quot;,&quot;hy-AM&quot;:&quot;dd.MM.yyyy&quot;,&quot;az-Latn-AZ&quot;:&quot;dd.MM.yyyy&quot;,&quot;eu-ES&quot;:&quot;yyyy/MM/dd&quot;,&quot;mk-MK&quot;:&quot;dd.MM.yyyy&quot;,&quot;af-ZA&quot;:&quot;yyyy/MM/dd&quot;,&quot;ka-GE&quot;:&quot;dd.MM.yyyy&quot;,&quot;fo-FO&quot;:&quot;dd-MM-yyyy&quot;,&quot;hi-IN&quot;:&quot;dd-MM-yyyy&quot;,&quot;ms-MY&quot;:&quot;dd/MM/yyyy&quot;,&quot;kk-KZ&quot;:&quot;dd.MM.yyyy&quot;,&quot;ky-KG&quot;:&quot;dd.MM.yy&quot;,&quot;sw-KE&quot;:&quot;M/d/yyyy&quot;,&quot;uz-Latn-UZ&quot;:&quot;dd/MM yyyy&quot;,&quot;tt-RU&quot;:&quot;dd.MM.yyyy&quot;,&quot;pa-IN&quot;:&quot;dd-MM-yy&quot;,&quot;gu-IN&quot;:&quot;dd-MM-yy&quot;,&quot;ta-IN&quot;:&quot;dd-MM-yyyy&quot;,&quot;te-IN&quot;:&quot;dd-MM-yy&quot;,&quot;kn-IN&quot;:&quot;dd-MM-yy&quot;,&quot;mr-IN&quot;:&quot;dd-MM-yyyy&quot;,&quot;sa-IN&quot;:&quot;dd-MM-yyyy&quot;,&quot;mn-MN&quot;:&quot;yy.MM.dd&quot;,&quot;gl-ES&quot;:&quot;dd/MM/yy&quot;,&quot;kok-IN&quot;:&quot;dd-MM-yyyy&quot;,&quot;syr-SY&quot;:&quot;dd/MM/yyyy&quot;,&quot;dv-MV&quot;:&quot;dd/MM/yy&quot;,&quot;ar-IQ&quot;:&quot;dd/MM/yyyy&quot;,&quot;zh-CN&quot;:&quot;yyyy/M/d&quot;,&quot;de-CH&quot;:&quot;dd.MM.yyyy&quot;,&quot;en-GB&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-MX&quot;:&quot;dd/MM/yyyy&quot;,&quot;fr-BE&quot;:&quot;d/MM/yyyy&quot;,&quot;it-CH&quot;:&quot;dd.MM.yyyy&quot;,&quot;nl-BE&quot;:&quot;d/MM/yyyy&quot;,&quot;nn-NO&quot;:&quot;dd.MM.yyyy&quot;,&quot;pt-PT&quot;:&quot;dd-MM-yyyy&quot;,&quot;sr-Latn-CS&quot;:&quot;d.M.yyyy&quot;,&quot;sv-FI&quot;:&quot;d.M.yyyy&quot;,&quot;az-Cyrl-AZ&quot;:&quot;dd.MM.yyyy&quot;,&quot;ms-BN&quot;:&quot;dd/MM/yyyy&quot;,&quot;uz-Cyrl-UZ&quot;:&quot;dd.MM.yyyy&quot;,&quot;ar-EG&quot;:&quot;dd/MM/yyyy&quot;,&quot;zh-HK&quot;:&quot;d/M/yyyy&quot;,&quot;de-AT&quot;:&quot;dd.MM.yyyy&quot;,&quot;en-AU&quot;:&quot;d/MM/yyyy&quot;,&quot;es-ES&quot;:&quot;dd/MM/yyyy&quot;,&quot;fr-CA&quot;:&quot;yyyy-MM-dd&quot;,&quot;sr-Cyrl-CS&quot;:&quot;d.M.yyyy&quot;,&quot;ar-LY&quot;:&quot;dd/MM/yyyy&quot;,&quot;zh-SG&quot;:&quot;d/M/yyyy&quot;,&quot;de-LU&quot;:&quot;dd.MM.yyyy&quot;,&quot;en-CA&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-GT&quot;:&quot;dd/MM/yyyy&quot;,&quot;fr-CH&quot;:&quot;dd.MM.yyyy&quot;,&quot;ar-DZ&quot;:&quot;dd-MM-yyyy&quot;,&quot;zh-MO&quot;:&quot;d/M/yyyy&quot;,&quot;de-LI&quot;:&quot;dd.MM.yyyy&quot;,&quot;en-NZ&quot;:&quot;d/MM/yyyy&quot;,&quot;es-CR&quot;:&quot;dd/MM/yyyy&quot;,&quot;fr-LU&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-MA&quot;:&quot;dd-MM-yyyy&quot;,&quot;en-IE&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-PA&quot;:&quot;MM/dd/yyyy&quot;,&quot;fr-MC&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-TN&quot;:&quot;dd-MM-yyyy&quot;,&quot;en-ZA&quot;:&quot;yyyy/MM/dd&quot;,&quot;es-DO&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-OM&quot;:&quot;dd/MM/yyyy&quot;,&quot;en-JM&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-VE&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-YE&quot;:&quot;dd/MM/yyyy&quot;,&quot;en-029&quot;:&quot;MM/dd/yyyy&quot;,&quot;es-CO&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-SY&quot;:&quot;dd/MM/yyyy&quot;,&quot;en-BZ&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-PE&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-JO&quot;:&quot;dd/MM/yyyy&quot;,&quot;en-TT&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-AR&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-LB&quot;:&quot;dd/MM/yyyy&quot;,&quot;en-ZW&quot;:&quot;M/d/yyyy&quot;,&quot;es-EC&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-KW&quot;:&quot;dd/MM/yyyy&quot;,&quot;en-PH&quot;:&quot;M/d/yyyy&quot;,&quot;es-CL&quot;:&quot;dd-MM-yyyy&quot;,&quot;ar-AE&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-UY&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-BH&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-PY&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-QA&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-BO&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-SV&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-HN&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-NI&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-PR&quot;:&quot;dd/MM/yyyy&quot;,&quot;am-ET&quot;:&quot;d/M/yyyy&quot;,&quot;tzm-Latn-DZ&quot;:&quot;dd-MM-yyyy&quot;,&quot;iu-Latn-CA&quot;:&quot;d/MM/yyyy&quot;,&quot;sma-NO&quot;:&quot;dd.MM.yyyy&quot;,&quot;mn-Mong-CN&quot;:&quot;yyyy/M/d&quot;,&quot;gd-GB&quot;:&quot;dd/MM/yyyy&quot;,&quot;en-MY&quot;:&quot;d/M/yyyy&quot;,&quot;prs-AF&quot;:&quot;dd/MM/yy&quot;,&quot;bn-BD&quot;:&quot;dd-MM-yy&quot;,&quot;wo-SN&quot;:&quot;dd/MM/yyyy&quot;,&quot;rw-RW&quot;:&quot;M/d/yyyy&quot;,&quot;qut-GT&quot;:&quot;dd/MM/yyyy&quot;,&quot;sah-RU&quot;:&quot;MM.dd.yyyy&quot;,&quot;gsw-FR&quot;:&quot;dd/MM/yyyy&quot;,&quot;co-FR&quot;:&quot;dd/MM/yyyy&quot;,&quot;oc-FR&quot;:&quot;dd/MM/yyyy&quot;,&quot;mi-NZ&quot;:&quot;dd/MM/yyyy&quot;,&quot;ga-IE&quot;:&quot;dd/MM/yyyy&quot;,&quot;se-SE&quot;:&quot;yyyy-MM-dd&quot;,&quot;br-FR&quot;:&quot;dd/MM/yyyy&quot;,&quot;smn-FI&quot;:&quot;d.M.yyyy&quot;,&quot;moh-CA&quot;:&quot;M/d/yyyy&quot;,&quot;arn-CL&quot;:&quot;dd-MM-yyyy&quot;,&quot;ii-CN&quot;:&quot;yyyy/M/d&quot;,&quot;dsb-DE&quot;:&quot;d. M. yyyy&quot;,&quot;ig-NG&quot;:&quot;d/M/yyyy&quot;,&quot;kl-GL&quot;:&quot;dd-MM-yyyy&quot;,&quot;lb-LU&quot;:&quot;dd/MM/yyyy&quot;,&quot;ba-RU&quot;:&quot;dd.MM.yy&quot;,&quot;nso-ZA&quot;:&quot;yyyy/MM/dd&quot;,&quot;quz-BO&quot;:&quot;dd/MM/yyyy&quot;,&quot;yo-NG&quot;:&quot;d/M/yyyy&quot;,&quot;ha-Latn-NG&quot;:&quot;d/M/yyyy&quot;,&quot;fil-PH&quot;:&quot;M/d/yyyy&quot;,&quot;ps-AF&quot;:&quot;dd/MM/yy&quot;,&quot;fy-NL&quot;:&quot;d-M-yyyy&quot;,&quot;ne-NP&quot;:&quot;M/d/yyyy&quot;,&quot;se-NO&quot;:&quot;dd.MM.yyyy&quot;,&quot;iu-Cans-CA&quot;:&quot;d/M/yyyy&quot;,&quot;sr-Latn-RS&quot;:&quot;d.M.yyyy&quot;,&quot;si-LK&quot;:&quot;yyyy-MM-dd&quot;,&quot;sr-Cyrl-RS&quot;:&quot;d.M.yyyy&quot;,&quot;lo-LA&quot;:&quot;dd/MM/yyyy&quot;,&quot;km-KH&quot;:&quot;yyyy-MM-dd&quot;,&quot;cy-GB&quot;:&quot;dd/MM/yyyy&quot;,&quot;bo-CN&quot;:&quot;yyyy/M/d&quot;,&quot;sms-FI&quot;:&quot;d.M.yyyy&quot;,&quot;as-IN&quot;:&quot;dd-MM-yyyy&quot;,&quot;ml-IN&quot;:&quot;dd-MM-yy&quot;,&quot;en-IN&quot;:&quot;dd-MM-yyyy&quot;,&quot;or-IN&quot;:&quot;dd-MM-yy&quot;,&quot;bn-IN&quot;:&quot;dd-MM-yy&quot;,&quot;tk-TM&quot;:&quot;dd.MM.yy&quot;,&quot;bs-Latn-BA&quot;:&quot;d.M.yyyy&quot;,&quot;mt-MT&quot;:&quot;dd/MM/yyyy&quot;,&quot;sr-Cyrl-ME&quot;:&quot;d.M.yyyy&quot;,&quot;se-FI&quot;:&quot;d.M.yyyy&quot;,&quot;zu-ZA&quot;:&quot;yyyy/MM/dd&quot;,&quot;xh-ZA&quot;:&quot;yyyy/MM/dd&quot;,&quot;tn-ZA&quot;:&quot;yyyy/MM/dd&quot;,&quot;hsb-DE&quot;:&quot;d. M. yyyy&quot;,&quot;bs-Cyrl-BA&quot;:&quot;d.M.yyyy&quot;,&quot;tg-Cyrl-TJ&quot;:&quot;dd.MM.yy&quot;,&quot;sr-Latn-BA&quot;:&quot;d.M.yyyy&quot;,&quot;smj-NO&quot;:&quot;dd.MM.yyyy&quot;,&quot;rm-CH&quot;:&quot;dd/MM/yyyy&quot;,&quot;smj-SE&quot;:&quot;yyyy-MM-dd&quot;,&quot;quz-EC&quot;:&quot;dd/MM/yyyy&quot;,&quot;quz-PE&quot;:&quot;dd/MM/yyyy&quot;,&quot;hr-BA&quot;:&quot;d.M.yyyy.&quot;,&quot;sr-Latn-ME&quot;:&quot;d.M.yyyy&quot;,&quot;sma-SE&quot;:&quot;yyyy-MM-dd&quot;,&quot;en-SG&quot;:&quot;d/M/yyyy&quot;,&quot;ug-CN&quot;:&quot;yyyy-M-d&quot;,&quot;sr-Cyrl-BA&quot;:&quot;d.M.yyyy&quot;,&quot;es-US&quot;:&quot;M/d/yyyy&quot;};

    var l=navigator.language?navigator.language:navigator['userLanguage'],y=d.getFullYear(),m=d.getMonth()+1,d=d.getDate();
    f=(l in f)?f[l]:&quot;MM/dd/yyyy&quot;;
    function z(s){s=''+s;return s.length&amp;gt;1?s:'0'+s;}
    f=f.replace(/yyyy/,y);f=f.replace(/yy/,String(y).substr(2));
    f=f.replace(/MM/,z(m));f=f.replace(/M/,m);
    f=f.replace(/dd/,z(d));f=f.replace(/d/,d);
    return f;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;shortedDate=getLocaleShortDateString(new Date(1992, 0, 7));
&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;shortedDate = getLocaleShortDateString(new Date(1992, 0, 7));
console.log(shortedDate);

function getLocaleShortDateString(d) {
  var f={&quot;ar-SA&quot;:&quot;dd/MM/yy&quot;,&quot;bg-BG&quot;:&quot;dd.M.yyyy&quot;,&quot;ca-ES&quot;:&quot;dd/MM/yyyy&quot;,&quot;zh-TW&quot;:&quot;yyyy/M/d&quot;,&quot;cs-CZ&quot;:&quot;d.M.yyyy&quot;,&quot;da-DK&quot;:&quot;dd-MM-yyyy&quot;,&quot;de-DE&quot;:&quot;dd.MM.yyyy&quot;,&quot;el-GR&quot;:&quot;d/M/yyyy&quot;,&quot;en-US&quot;:&quot;M/d/yyyy&quot;,&quot;fi-FI&quot;:&quot;d.M.yyyy&quot;,&quot;fr-FR&quot;:&quot;dd/MM/yyyy&quot;,&quot;he-IL&quot;:&quot;dd/MM/yyyy&quot;,&quot;hu-HU&quot;:&quot;yyyy. MM. dd.&quot;,&quot;is-IS&quot;:&quot;d.M.yyyy&quot;,&quot;it-IT&quot;:&quot;dd/MM/yyyy&quot;,&quot;ja-JP&quot;:&quot;yyyy/MM/dd&quot;,&quot;ko-KR&quot;:&quot;yyyy-MM-dd&quot;,&quot;nl-NL&quot;:&quot;d-M-yyyy&quot;,&quot;nb-NO&quot;:&quot;dd.MM.yyyy&quot;,&quot;pl-PL&quot;:&quot;yyyy-MM-dd&quot;,&quot;pt-BR&quot;:&quot;d/M/yyyy&quot;,&quot;ro-RO&quot;:&quot;dd.MM.yyyy&quot;,&quot;ru-RU&quot;:&quot;dd.MM.yyyy&quot;,&quot;hr-HR&quot;:&quot;d.M.yyyy&quot;,&quot;sk-SK&quot;:&quot;d. M. yyyy&quot;,&quot;sq-AL&quot;:&quot;yyyy-MM-dd&quot;,&quot;sv-SE&quot;:&quot;yyyy-MM-dd&quot;,&quot;th-TH&quot;:&quot;d/M/yyyy&quot;,&quot;tr-TR&quot;:&quot;dd.MM.yyyy&quot;,&quot;ur-PK&quot;:&quot;dd/MM/yyyy&quot;,&quot;id-ID&quot;:&quot;dd/MM/yyyy&quot;,&quot;uk-UA&quot;:&quot;dd.MM.yyyy&quot;,&quot;be-BY&quot;:&quot;dd.MM.yyyy&quot;,&quot;sl-SI&quot;:&quot;d.M.yyyy&quot;,&quot;et-EE&quot;:&quot;d.MM.yyyy&quot;,&quot;lv-LV&quot;:&quot;yyyy.MM.dd.&quot;,&quot;lt-LT&quot;:&quot;yyyy.MM.dd&quot;,&quot;fa-IR&quot;:&quot;MM/dd/yyyy&quot;,&quot;vi-VN&quot;:&quot;dd/MM/yyyy&quot;,&quot;hy-AM&quot;:&quot;dd.MM.yyyy&quot;,&quot;az-Latn-AZ&quot;:&quot;dd.MM.yyyy&quot;,&quot;eu-ES&quot;:&quot;yyyy/MM/dd&quot;,&quot;mk-MK&quot;:&quot;dd.MM.yyyy&quot;,&quot;af-ZA&quot;:&quot;yyyy/MM/dd&quot;,&quot;ka-GE&quot;:&quot;dd.MM.yyyy&quot;,&quot;fo-FO&quot;:&quot;dd-MM-yyyy&quot;,&quot;hi-IN&quot;:&quot;dd-MM-yyyy&quot;,&quot;ms-MY&quot;:&quot;dd/MM/yyyy&quot;,&quot;kk-KZ&quot;:&quot;dd.MM.yyyy&quot;,&quot;ky-KG&quot;:&quot;dd.MM.yy&quot;,&quot;sw-KE&quot;:&quot;M/d/yyyy&quot;,&quot;uz-Latn-UZ&quot;:&quot;dd/MM yyyy&quot;,&quot;tt-RU&quot;:&quot;dd.MM.yyyy&quot;,&quot;pa-IN&quot;:&quot;dd-MM-yy&quot;,&quot;gu-IN&quot;:&quot;dd-MM-yy&quot;,&quot;ta-IN&quot;:&quot;dd-MM-yyyy&quot;,&quot;te-IN&quot;:&quot;dd-MM-yy&quot;,&quot;kn-IN&quot;:&quot;dd-MM-yy&quot;,&quot;mr-IN&quot;:&quot;dd-MM-yyyy&quot;,&quot;sa-IN&quot;:&quot;dd-MM-yyyy&quot;,&quot;mn-MN&quot;:&quot;yy.MM.dd&quot;,&quot;gl-ES&quot;:&quot;dd/MM/yy&quot;,&quot;kok-IN&quot;:&quot;dd-MM-yyyy&quot;,&quot;syr-SY&quot;:&quot;dd/MM/yyyy&quot;,&quot;dv-MV&quot;:&quot;dd/MM/yy&quot;,&quot;ar-IQ&quot;:&quot;dd/MM/yyyy&quot;,&quot;zh-CN&quot;:&quot;yyyy/M/d&quot;,&quot;de-CH&quot;:&quot;dd.MM.yyyy&quot;,&quot;en-GB&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-MX&quot;:&quot;dd/MM/yyyy&quot;,&quot;fr-BE&quot;:&quot;d/MM/yyyy&quot;,&quot;it-CH&quot;:&quot;dd.MM.yyyy&quot;,&quot;nl-BE&quot;:&quot;d/MM/yyyy&quot;,&quot;nn-NO&quot;:&quot;dd.MM.yyyy&quot;,&quot;pt-PT&quot;:&quot;dd-MM-yyyy&quot;,&quot;sr-Latn-CS&quot;:&quot;d.M.yyyy&quot;,&quot;sv-FI&quot;:&quot;d.M.yyyy&quot;,&quot;az-Cyrl-AZ&quot;:&quot;dd.MM.yyyy&quot;,&quot;ms-BN&quot;:&quot;dd/MM/yyyy&quot;,&quot;uz-Cyrl-UZ&quot;:&quot;dd.MM.yyyy&quot;,&quot;ar-EG&quot;:&quot;dd/MM/yyyy&quot;,&quot;zh-HK&quot;:&quot;d/M/yyyy&quot;,&quot;de-AT&quot;:&quot;dd.MM.yyyy&quot;,&quot;en-AU&quot;:&quot;d/MM/yyyy&quot;,&quot;es-ES&quot;:&quot;dd/MM/yyyy&quot;,&quot;fr-CA&quot;:&quot;yyyy-MM-dd&quot;,&quot;sr-Cyrl-CS&quot;:&quot;d.M.yyyy&quot;,&quot;ar-LY&quot;:&quot;dd/MM/yyyy&quot;,&quot;zh-SG&quot;:&quot;d/M/yyyy&quot;,&quot;de-LU&quot;:&quot;dd.MM.yyyy&quot;,&quot;en-CA&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-GT&quot;:&quot;dd/MM/yyyy&quot;,&quot;fr-CH&quot;:&quot;dd.MM.yyyy&quot;,&quot;ar-DZ&quot;:&quot;dd-MM-yyyy&quot;,&quot;zh-MO&quot;:&quot;d/M/yyyy&quot;,&quot;de-LI&quot;:&quot;dd.MM.yyyy&quot;,&quot;en-NZ&quot;:&quot;d/MM/yyyy&quot;,&quot;es-CR&quot;:&quot;dd/MM/yyyy&quot;,&quot;fr-LU&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-MA&quot;:&quot;dd-MM-yyyy&quot;,&quot;en-IE&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-PA&quot;:&quot;MM/dd/yyyy&quot;,&quot;fr-MC&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-TN&quot;:&quot;dd-MM-yyyy&quot;,&quot;en-ZA&quot;:&quot;yyyy/MM/dd&quot;,&quot;es-DO&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-OM&quot;:&quot;dd/MM/yyyy&quot;,&quot;en-JM&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-VE&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-YE&quot;:&quot;dd/MM/yyyy&quot;,&quot;en-029&quot;:&quot;MM/dd/yyyy&quot;,&quot;es-CO&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-SY&quot;:&quot;dd/MM/yyyy&quot;,&quot;en-BZ&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-PE&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-JO&quot;:&quot;dd/MM/yyyy&quot;,&quot;en-TT&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-AR&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-LB&quot;:&quot;dd/MM/yyyy&quot;,&quot;en-ZW&quot;:&quot;M/d/yyyy&quot;,&quot;es-EC&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-KW&quot;:&quot;dd/MM/yyyy&quot;,&quot;en-PH&quot;:&quot;M/d/yyyy&quot;,&quot;es-CL&quot;:&quot;dd-MM-yyyy&quot;,&quot;ar-AE&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-UY&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-BH&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-PY&quot;:&quot;dd/MM/yyyy&quot;,&quot;ar-QA&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-BO&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-SV&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-HN&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-NI&quot;:&quot;dd/MM/yyyy&quot;,&quot;es-PR&quot;:&quot;dd/MM/yyyy&quot;,&quot;am-ET&quot;:&quot;d/M/yyyy&quot;,&quot;tzm-Latn-DZ&quot;:&quot;dd-MM-yyyy&quot;,&quot;iu-Latn-CA&quot;:&quot;d/MM/yyyy&quot;,&quot;sma-NO&quot;:&quot;dd.MM.yyyy&quot;,&quot;mn-Mong-CN&quot;:&quot;yyyy/M/d&quot;,&quot;gd-GB&quot;:&quot;dd/MM/yyyy&quot;,&quot;en-MY&quot;:&quot;d/M/yyyy&quot;,&quot;prs-AF&quot;:&quot;dd/MM/yy&quot;,&quot;bn-BD&quot;:&quot;dd-MM-yy&quot;,&quot;wo-SN&quot;:&quot;dd/MM/yyyy&quot;,&quot;rw-RW&quot;:&quot;M/d/yyyy&quot;,&quot;qut-GT&quot;:&quot;dd/MM/yyyy&quot;,&quot;sah-RU&quot;:&quot;MM.dd.yyyy&quot;,&quot;gsw-FR&quot;:&quot;dd/MM/yyyy&quot;,&quot;co-FR&quot;:&quot;dd/MM/yyyy&quot;,&quot;oc-FR&quot;:&quot;dd/MM/yyyy&quot;,&quot;mi-NZ&quot;:&quot;dd/MM/yyyy&quot;,&quot;ga-IE&quot;:&quot;dd/MM/yyyy&quot;,&quot;se-SE&quot;:&quot;yyyy-MM-dd&quot;,&quot;br-FR&quot;:&quot;dd/MM/yyyy&quot;,&quot;smn-FI&quot;:&quot;d.M.yyyy&quot;,&quot;moh-CA&quot;:&quot;M/d/yyyy&quot;,&quot;arn-CL&quot;:&quot;dd-MM-yyyy&quot;,&quot;ii-CN&quot;:&quot;yyyy/M/d&quot;,&quot;dsb-DE&quot;:&quot;d. M. yyyy&quot;,&quot;ig-NG&quot;:&quot;d/M/yyyy&quot;,&quot;kl-GL&quot;:&quot;dd-MM-yyyy&quot;,&quot;lb-LU&quot;:&quot;dd/MM/yyyy&quot;,&quot;ba-RU&quot;:&quot;dd.MM.yy&quot;,&quot;nso-ZA&quot;:&quot;yyyy/MM/dd&quot;,&quot;quz-BO&quot;:&quot;dd/MM/yyyy&quot;,&quot;yo-NG&quot;:&quot;d/M/yyyy&quot;,&quot;ha-Latn-NG&quot;:&quot;d/M/yyyy&quot;,&quot;fil-PH&quot;:&quot;M/d/yyyy&quot;,&quot;ps-AF&quot;:&quot;dd/MM/yy&quot;,&quot;fy-NL&quot;:&quot;d-M-yyyy&quot;,&quot;ne-NP&quot;:&quot;M/d/yyyy&quot;,&quot;se-NO&quot;:&quot;dd.MM.yyyy&quot;,&quot;iu-Cans-CA&quot;:&quot;d/M/yyyy&quot;,&quot;sr-Latn-RS&quot;:&quot;d.M.yyyy&quot;,&quot;si-LK&quot;:&quot;yyyy-MM-dd&quot;,&quot;sr-Cyrl-RS&quot;:&quot;d.M.yyyy&quot;,&quot;lo-LA&quot;:&quot;dd/MM/yyyy&quot;,&quot;km-KH&quot;:&quot;yyyy-MM-dd&quot;,&quot;cy-GB&quot;:&quot;dd/MM/yyyy&quot;,&quot;bo-CN&quot;:&quot;yyyy/M/d&quot;,&quot;sms-FI&quot;:&quot;d.M.yyyy&quot;,&quot;as-IN&quot;:&quot;dd-MM-yyyy&quot;,&quot;ml-IN&quot;:&quot;dd-MM-yy&quot;,&quot;en-IN&quot;:&quot;dd-MM-yyyy&quot;,&quot;or-IN&quot;:&quot;dd-MM-yy&quot;,&quot;bn-IN&quot;:&quot;dd-MM-yy&quot;,&quot;tk-TM&quot;:&quot;dd.MM.yy&quot;,&quot;bs-Latn-BA&quot;:&quot;d.M.yyyy&quot;,&quot;mt-MT&quot;:&quot;dd/MM/yyyy&quot;,&quot;sr-Cyrl-ME&quot;:&quot;d.M.yyyy&quot;,&quot;se-FI&quot;:&quot;d.M.yyyy&quot;,&quot;zu-ZA&quot;:&quot;yyyy/MM/dd&quot;,&quot;xh-ZA&quot;:&quot;yyyy/MM/dd&quot;,&quot;tn-ZA&quot;:&quot;yyyy/MM/dd&quot;,&quot;hsb-DE&quot;:&quot;d. M. yyyy&quot;,&quot;bs-Cyrl-BA&quot;:&quot;d.M.yyyy&quot;,&quot;tg-Cyrl-TJ&quot;:&quot;dd.MM.yy&quot;,&quot;sr-Latn-BA&quot;:&quot;d.M.yyyy&quot;,&quot;smj-NO&quot;:&quot;dd.MM.yyyy&quot;,&quot;rm-CH&quot;:&quot;dd/MM/yyyy&quot;,&quot;smj-SE&quot;:&quot;yyyy-MM-dd&quot;,&quot;quz-EC&quot;:&quot;dd/MM/yyyy&quot;,&quot;quz-PE&quot;:&quot;dd/MM/yyyy&quot;,&quot;hr-BA&quot;:&quot;d.M.yyyy.&quot;,&quot;sr-Latn-ME&quot;:&quot;d.M.yyyy&quot;,&quot;sma-SE&quot;:&quot;yyyy-MM-dd&quot;,&quot;en-SG&quot;:&quot;d/M/yyyy&quot;,&quot;ug-CN&quot;:&quot;yyyy-M-d&quot;,&quot;sr-Cyrl-BA&quot;:&quot;d.M.yyyy&quot;,&quot;es-US&quot;:&quot;M/d/yyyy&quot;};

  var l = navigator.language ? navigator.language : navigator['userLanguage'],
    y = d.getFullYear(),
    m = d.getMonth() + 1,
    d = d.getDate();
  f = (l in f) ? f[l] : &quot;MM/dd/yyyy&quot;;

  function z(s) {
    s = '' + s;
    return s.length &amp;gt; 1 ? s : '0' + s;
  }
  f = f.replace(/yyyy/, y);
  f = f.replace(/yy/, String(y).substr(2));
  f = f.replace(/MM/, z(m));
  f = f.replace(/M/, m);
  f = f.replace(/dd/, z(d));
  f = f.replace(/d/, d);
  return f;
}&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;function getDatePattern(locale) {
  // expected style = year: 2010, month: 12, day: 31
  var options = { year: &quot;numeric&quot;, month: &quot;2-digit&quot;, day: &quot;2-digit&quot; };

  // formatToParts() returns array of object breaking down the locales dateformat
  // [ 
  //  {type: &quot;month&quot;, value: &quot;03&quot;},
  //  {type: &quot;literal&quot;, value: &quot;/&quot;},
  //  {type: &quot;day&quot;, value: &quot;30&quot;},
  //  {type: &quot;literal&quot;, value: &quot;/&quot;},
  //  {type: &quot;year&quot;, value: &quot;2021&quot;},
  // ]
  var formatter = new Intl.DateTimeFormat(locale, options).formatToParts();

  return formatter.map(function(e) {
      switch(e.type) {
        case 'month':
          return 'MM'; break;
        case 'day':
          return 'DD'; break;
        case 'year':
          return 'YYYY'; break;
        default: 
          return e.value;
      };
    }).join('');
}

// &quot;YYYY/MM/DD&quot;
console.log(getDatePattern('en'));
// &quot;YYYY. MM. DD.&quot;
console.log(getDatePattern('ko'));&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;날짜 선택 필드에 자리 표시자를 표시하는 방법을 알아보다가 이 스레드를 우연히 발견했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;궁극적으로 브라우저의 로케일(예:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'en-AU'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표시하고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'dd/mm/yyyy'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지난 몇 년간 이를 달성하기 위한 다양한 방법이 있었던 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;new Intl.DateTimeFormat(&quot;en-AU&quot;)).resolved.pattern&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예전에는 꽤 잘 지원되었던 것처럼 보이지만, &lt;a href=&quot;https://github.com/tc39/ecma402/issues/21&quot; rel=&quot;noreferrer&quot;&gt;현재&lt;/a&gt;는 을 &lt;a href=&quot;https://github.com/tc39/ecma402/issues/21&quot; rel=&quot;noreferrer&quot;&gt;선호&lt;/a&gt;하여 제거되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;formatToParts&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;날짜를 구성 요소로 계산하면 패턴 문자열을 추정할 수 있습니다. 여기 제가 작성한 기본 함수가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/**
 * Get the date format pattern for the given locale. 
 * @example 
 *     getDateFormatPattern('en-AU');   // dd/mm/yyyy
 *     getDateFormatPattern('en-US');   // m/d/yyyy
 */
const getDateFormatPattern = (locale: string) =&amp;gt; {
    const getPatternForPart = (part: Intl.DateTimeFormatPart) =&amp;gt; {
        switch (part.type) {
            case 'day':
                return 'd'.repeat(part.value.length);
            case 'month':
                return 'm'.repeat(part.value.length);
            case 'year':
                return 'y'.repeat(part.value.length);
            case 'literal':
                return part.value;
            default:
                console.log('Unsupported date part', part);
                return '';
        }
    };

    return new Intl.DateTimeFormat(locale).formatToParts(new Date('2021-01-01'))
        .map(getPatternForPart)
        .join('');
};
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;할 수 없음.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;크로스 브라우저 자바스크립트는 이러한 지역 맞춤화를 제공하는 플랫폼에서 사용자가 선택한 실제 짧은 날짜 형식을 사용할 방법이 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;게다가 자바스크립트에는 어떤 종류의 포맷이든 관련된 커다란 구멍이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제로패딩이 얼마나 번거로운지 보세요!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언어 설정을 얻기 위해 긴 길이로 이동할 수 있으며 해당 로케일에 대한 &lt;em&gt;일반&lt;/em&gt; 형식을 얻을 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;올바른 로케일인지(국제 언어 머리글이 종종 부정확하거나 충분히 구체적이지 않은 경우가 많음) 또는 사용자가 다른 형식으로 사용자 지정한 경우에도 이는 많은 작업입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클라이언트 VBScript(이 모든 지역 포맷 순열에 대한 기능이 있음)를 사용해 볼 수 있지만, 이는 완전히 죽어가는(dead?) 것이기 때문에 좋은 생각이 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IE별 기술.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Java/Flash/Silverlight를 사용하여 포맷을 찾아 볼 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 또한 많은 추가 작업이지만 성공을 위한 최고의 기회를 가질 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오버헤드를 최소화하기 위해 세션에 캐시할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML5 &amp;lt;time&amp;gt; 요소가 i18n 날짜/시간 표시에 약간의 완화를 제공하기를 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필드에 대한 질문이 있다면, 여기 파일 작성을 위한 스크립트가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;value=&quot;&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특성:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(new Date()).toISOString().split('T')[0]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Intl&quot; rel=&quot;noreferrer&quot;&gt;인터네셔널&lt;/a&gt; 오브젝트(&lt;a href=&quot;https://ecma-international.org/ecma-402/4.0/index.html#datetimeformat-objects&quot; rel=&quot;noreferrer&quot;&gt;ecma-402&lt;/a&gt;)를 사용하여 다음을 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data-date-pattern=&quot;&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(new Intl.DateTimeFormat()).resolved.pattern // &quot;M/d/y&quot; for &quot;en-US&quot; in Google Chrome
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 finaly, 현재 l10n에서 날짜를 정할 때,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data-date=&quot;&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(new Intl.DateTimeFormat()).format(new Date());
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;폴리필: https://github.com/andyearnshaw/Intl.js/issues/129&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;짧은 날짜 패턴:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const shortDatePatterns = {
'aa-DJ': &quot;dd/MM/yyyy&quot;,
'aa-ER': &quot;dd/MM/yyyy&quot;,
'aa-ET': &quot;dd/MM/yyyy&quot;,
'af': &quot;yyyy-MM-dd&quot;,
'af-NA': &quot;yyyy-MM-dd&quot;,
'af-ZA': &quot;yyyy-MM-dd&quot;,
'agq-CM': &quot;d/M/yyyy&quot;,
'ak-GH': &quot;yyyy/MM/dd&quot;,
'am': &quot;dd/MM/yyyy&quot;,
'am-ET': &quot;dd/MM/yyyy&quot;,
'ar': &quot;dd/MM/yy&quot;,
'ar-001': &quot;d/M/yyyy&quot;,
'ar-AE': &quot;dd/MM/yyyy&quot;,
'ar-BH': &quot;dd/MM/yyyy&quot;,
'ar-DJ': &quot;d/M/yyyy&quot;,
'ar-DZ': &quot;dd-MM-yyyy&quot;,
'ar-EG': &quot;dd/MM/yyyy&quot;,
'ar-ER': &quot;d/M/yyyy&quot;,
'ar-IL': &quot;d/M/yyyy&quot;,
'ar-IQ': &quot;dd/MM/yyyy&quot;,
'ar-JO': &quot;dd/MM/yyyy&quot;,
'ar-KM': &quot;d/M/yyyy&quot;,
'ar-KW': &quot;dd/MM/yyyy&quot;,
'ar-LB': &quot;dd/MM/yyyy&quot;,
'ar-LY': &quot;dd/MM/yyyy&quot;,
'ar-MA': &quot;dd-MM-yyyy&quot;,
'ar-MR': &quot;d/M/yyyy&quot;,
'ar-OM': &quot;dd/MM/yyyy&quot;,
'ar-PS': &quot;d/M/yyyy&quot;,
'ar-QA': &quot;dd/MM/yyyy&quot;,
'ar-SA': &quot;dd/MM/yy&quot;,
'ar-SD': &quot;d/M/yyyy&quot;,
'ar-SO': &quot;d/M/yyyy&quot;,
'ar-SS': &quot;d/M/yyyy&quot;,
'ar-SY': &quot;dd/MM/yyyy&quot;,
'ar-TD': &quot;d/M/yyyy&quot;,
'ar-TN': &quot;dd-MM-yyyy&quot;,
'ar-YE': &quot;dd/MM/yyyy&quot;,
'arn-CL': &quot;dd-MM-yyyy&quot;,
'as': &quot;dd-MM-yyyy&quot;,
'as-IN': &quot;dd-MM-yyyy&quot;,
'asa-TZ': &quot;dd/MM/yyyy&quot;,
'ast-ES': &quot;d/M/yyyy&quot;,
'az': &quot;dd.MM.yyyy&quot;,
'az-Cyrl-AZ': &quot;dd.MM.yyyy&quot;,
'az-Latn-AZ': &quot;dd.MM.yyyy&quot;,
'ba': &quot;dd.MM.yy&quot;,
'ba-RU': &quot;dd.MM.yy&quot;,
'bas-CM': &quot;d/M/yyyy&quot;,
'be': &quot;dd.MM.yy&quot;,
'be-BY': &quot;dd.MM.yy&quot;,
'bem-ZM': &quot;dd/MM/yyyy&quot;,
'bez-TZ': &quot;dd/MM/yyyy&quot;,
'bg': &quot;d.M.yyyy 'г.'&quot;,
'bg-BG': &quot;d.M.yyyy 'г.'&quot;,
'bin-NG': &quot;d/M/yyyy&quot;,
'bm': &quot;d/M/yyyy&quot;,
'bm-Latn-ML': &quot;d/M/yyyy&quot;,
'bn': &quot;d/M/yyyy&quot;,
'bn-BD': &quot;d/M/yyyy&quot;,
'bn-IN': &quot;dd-MM-yy&quot;,
'bo': &quot;yyyy/M/d&quot;,
'bo-CN': &quot;yyyy/M/d&quot;,
'bo-IN': &quot;yyyy-MM-dd&quot;,
'br': &quot;dd/MM/yyyy&quot;,
'br-FR': &quot;dd/MM/yyyy&quot;,
'brx-IN': &quot;M/d/yyyy&quot;,
'bs': &quot;d.M.yyyy.&quot;,
'bs-Cyrl-BA': &quot;d.M.yyyy&quot;,
'bs-Latn-BA': &quot;d.M.yyyy.&quot;,
'byn-ER': &quot;dd/MM/yyyy&quot;,
'ca': &quot;d/M/yyyy&quot;,
'ca-AD': &quot;d/M/yyyy&quot;,
'ca-ES': &quot;d/M/yyyy&quot;,
'ca-ES-valencia': &quot;d/M/yyyy&quot;,
'ca-FR': &quot;d/M/yyyy&quot;,
'ca-IT': &quot;d/M/yyyy&quot;,
'ce-RU': &quot;yyyy-MM-dd&quot;,
'cgg-UG': &quot;dd/MM/yyyy&quot;,
'chr-Cher-US': &quot;M/d/yyyy&quot;,
'co': &quot;dd/MM/yyyy&quot;,
'co-FR': &quot;dd/MM/yyyy&quot;,
'cs-CZ': &quot;dd.MM.yyyy&quot;,
'cu': &quot;yyyy.MM.dd&quot;,
'cu-RU': &quot;yyyy.MM.dd&quot;,
'cy': &quot;dd/MM/yyyy&quot;,
'cy-GB': &quot;dd/MM/yyyy&quot;,
'da-DK': &quot;dd-MM-yyyy&quot;,
'da-GL': &quot;dd/MM/yyyy&quot;,
'dav-KE': &quot;dd/MM/yyyy&quot;,
'de': &quot;dd.MM.yyyy&quot;,
'de-AT': &quot;dd.MM.yyyy&quot;,
'de-BE': &quot;dd.MM.yyyy&quot;,
'de-CH': &quot;dd.MM.yyyy&quot;,
'de-DE': &quot;dd.MM.yyyy&quot;,
'de-IT': &quot;dd.MM.yyyy&quot;,
'de-LI': &quot;dd.MM.yyyy&quot;,
'de-LU': &quot;dd.MM.yyyy&quot;,
'dje-NE': &quot;d/M/yyyy&quot;,
'dsb-DE': &quot;d. M. yyyy&quot;,
'dua-CM': &quot;d/M/yyyy&quot;,
'dv-MV': &quot;dd/MM/yy&quot;,
'dyo-SN': &quot;d/M/yyyy&quot;,
'dz': &quot;yyyy-MM-dd&quot;,
'dz-BT': &quot;yyyy-MM-dd&quot;,
'ebu-KE': &quot;dd/MM/yyyy&quot;,
'ee': &quot;M/d/yyyy&quot;,
'ee-GH': &quot;M/d/yyyy&quot;,
'ee-TG': &quot;M/d/yyyy&quot;,
'el-CY': &quot;d/M/yyyy&quot;,
'el-GR': &quot;d/M/yyyy&quot;,
'en-001': &quot;dd/MM/yyyy&quot;,
'en-029': &quot;dd/MM/yyyy&quot;,
'en-150': &quot;dd/MM/yyyy&quot;,
'en-AG': &quot;dd/MM/yyyy&quot;,
'en-AI': &quot;dd/MM/yyyy&quot;,
'en-AS': &quot;M/d/yyyy&quot;,
'en-AT': &quot;dd/MM/yyyy&quot;,
'en-AU': &quot;d/MM/yyyy&quot;,
'en-BB': &quot;dd/MM/yyyy&quot;,
'en-BE': &quot;dd/MM/yyyy&quot;,
'en-BI': &quot;M/d/yyyy&quot;,
'en-BM': &quot;dd/MM/yyyy&quot;,
'en-BS': &quot;dd/MM/yyyy&quot;,
'en-BW': &quot;dd/MM/yyyy&quot;,
'en-BZ': &quot;dd/MM/yyyy&quot;,
'en-CA': &quot;yyyy-MM-dd&quot;,
'en-CC': &quot;dd/MM/yyyy&quot;,
'en-CH': &quot;dd/MM/yyyy&quot;,
'en-CK': &quot;dd/MM/yyyy&quot;,
'en-CM': &quot;dd/MM/yyyy&quot;,
'en-CX': &quot;dd/MM/yyyy&quot;,
'en-CY': &quot;dd/MM/yyyy&quot;,
'en-DE': &quot;dd/MM/yyyy&quot;,
'en-DK': &quot;dd/MM/yyyy&quot;,
'en-DM': &quot;dd/MM/yyyy&quot;,
'en-ER': &quot;dd/MM/yyyy&quot;,
'en-FI': &quot;dd/MM/yyyy&quot;,
'en-FJ': &quot;dd/MM/yyyy&quot;,
'en-FK': &quot;dd/MM/yyyy&quot;,
'en-FM': &quot;dd/MM/yyyy&quot;,
'en-GB': &quot;dd/MM/yyyy&quot;,
'en-GD': &quot;dd/MM/yyyy&quot;,
'en-GG': &quot;dd/MM/yyyy&quot;,
'en-GH': &quot;dd/MM/yyyy&quot;,
'en-GI': &quot;dd/MM/yyyy&quot;,
'en-GM': &quot;dd/MM/yyyy&quot;,
'en-GU': &quot;M/d/yyyy&quot;,
'en-GY': &quot;dd/MM/yyyy&quot;,
'en-HK': &quot;d/M/yyyy&quot;,
'en-ID': &quot;dd/MM/yyyy&quot;,
'en-IE': &quot;dd/MM/yyyy&quot;,
'en-IL': &quot;dd/MM/yyyy&quot;,
'en-IM': &quot;dd/MM/yyyy&quot;,
'en-IN': &quot;dd-MM-yyyy&quot;,
'en-IO': &quot;dd/MM/yyyy&quot;,
'en-JE': &quot;dd/MM/yyyy&quot;,
'en-JM': &quot;d/M/yyyy&quot;,
'en-KE': &quot;dd/MM/yyyy&quot;,
'en-KI': &quot;dd/MM/yyyy&quot;,
'en-KN': &quot;dd/MM/yyyy&quot;,
'en-KY': &quot;dd/MM/yyyy&quot;,
'en-LC': &quot;dd/MM/yyyy&quot;,
'en-LR': &quot;dd/MM/yyyy&quot;,
'en-LS': &quot;dd/MM/yyyy&quot;,
'en-MG': &quot;dd/MM/yyyy&quot;,
'en-MH': &quot;M/d/yyyy&quot;,
'en-MO': &quot;dd/MM/yyyy&quot;,
'en-MP': &quot;M/d/yyyy&quot;,
'en-MS': &quot;dd/MM/yyyy&quot;,
'en-MT': &quot;dd/MM/yyyy&quot;,
'en-MU': &quot;dd/MM/yyyy&quot;,
'en-MW': &quot;dd/MM/yyyy&quot;,
'en-MY': &quot;d/M/yyyy&quot;,
'en-NA': &quot;dd/MM/yyyy&quot;,
'en-NF': &quot;dd/MM/yyyy&quot;,
'en-NG': &quot;dd/MM/yyyy&quot;,
'en-NL': &quot;dd/MM/yyyy&quot;,
'en-NR': &quot;dd/MM/yyyy&quot;,
'en-NU': &quot;dd/MM/yyyy&quot;,
'en-NZ': &quot;d/MM/yyyy&quot;,
'en-PG': &quot;dd/MM/yyyy&quot;,
'en-PH': &quot;dd/MM/yyyy&quot;,
'en-PK': &quot;dd/MM/yyyy&quot;,
'en-PN': &quot;dd/MM/yyyy&quot;,
'en-PR': &quot;M/d/yyyy&quot;,
'en-PW': &quot;dd/MM/yyyy&quot;,
'en-RW': &quot;dd/MM/yyyy&quot;,
'en-SB': &quot;dd/MM/yyyy&quot;,
'en-SC': &quot;dd/MM/yyyy&quot;,
'en-SD': &quot;dd/MM/yyyy&quot;,
'en-SE': &quot;yyyy-MM-dd&quot;,
'en-SG': &quot;d/M/yyyy&quot;,
'en-SH': &quot;dd/MM/yyyy&quot;,
'en-SI': &quot;dd/MM/yyyy&quot;,
'en-SL': &quot;dd/MM/yyyy&quot;,
'en-SS': &quot;dd/MM/yyyy&quot;,
'en-SX': &quot;dd/MM/yyyy&quot;,
'en-SZ': &quot;dd/MM/yyyy&quot;,
'en-TC': &quot;dd/MM/yyyy&quot;,
'en-TK': &quot;dd/MM/yyyy&quot;,
'en-TO': &quot;dd/MM/yyyy&quot;,
'en-TT': &quot;dd/MM/yyyy&quot;,
'en-TV': &quot;dd/MM/yyyy&quot;,
'en-TZ': &quot;dd/MM/yyyy&quot;,
'en-UG': &quot;dd/MM/yyyy&quot;,
'en-UM': &quot;M/d/yyyy&quot;,
'en-US': &quot;M/d/yyyy&quot;,
'en-VC': &quot;dd/MM/yyyy&quot;,
'en-VG': &quot;dd/MM/yyyy&quot;,
'en-VI': &quot;M/d/yyyy&quot;,
'en-VU': &quot;dd/MM/yyyy&quot;,
'en-WS': &quot;dd/MM/yyyy&quot;,
'en-ZA': &quot;yyyy/MM/dd&quot;,
'en-ZM': &quot;dd/MM/yyyy&quot;,
'en-ZW': &quot;d/M/yyyy&quot;,
'eo-001': &quot;yyyy-MM-dd&quot;,
'es': &quot;dd/MM/yyyy&quot;,
'es-419': &quot;d/M/yyyy&quot;,
'es-AR': &quot;d/M/yyyy&quot;,
'es-BO': &quot;d/M/yyyy&quot;,
'es-BR': &quot;d/M/yyyy&quot;,
'es-BZ': &quot;d/M/yyyy&quot;,
'es-CL': &quot;dd-MM-yyyy&quot;,
'es-CO': &quot;d/MM/yyyy&quot;,
'es-CR': &quot;d/M/yyyy&quot;,
'es-CU': &quot;d/M/yyyy&quot;,
'es-DO': &quot;d/M/yyyy&quot;,
'es-EC': &quot;d/M/yyyy&quot;,
'es-ES': &quot;dd/MM/yyyy&quot;,
'es-GQ': &quot;d/M/yyyy&quot;,
'es-GT': &quot;d/MM/yyyy&quot;,
'es-HN': &quot;d/M/yyyy&quot;,
'es-MX': &quot;dd/MM/yyyy&quot;,
'es-NI': &quot;d/M/yyyy&quot;,
'es-PA': &quot;MM/dd/yyyy&quot;,
'es-PE': &quot;d/MM/yyyy&quot;,
'es-PH': &quot;d/M/yyyy&quot;,
'es-PR': &quot;MM/dd/yyyy&quot;,
'es-PY': &quot;d/M/yyyy&quot;,
'es-SV': &quot;d/M/yyyy&quot;,
'es-US': &quot;M/d/yyyy&quot;,
'es-UY': &quot;d/M/yyyy&quot;,
'es-VE': &quot;d/M/yyyy&quot;,
'et': &quot;dd.MM.yyyy&quot;,
'et-EE': &quot;dd.MM.yyyy&quot;,
'eu-ES': &quot;yyyy/M/d&quot;,
'ewo-CM': &quot;d/M/yyyy&quot;,
'fa-IR': &quot;dd/MM/yyyy&quot;,
'ff-CM': &quot;d/M/yyyy&quot;,
'ff-GN': &quot;d/M/yyyy&quot;,
'ff-Latn-SN': &quot;dd/MM/yyyy&quot;,
'ff-MR': &quot;d/M/yyyy&quot;,
'ff-NG': &quot;d/M/yyyy&quot;,
'fi': &quot;d.M.yyyy&quot;,
'fi-FI': &quot;d.M.yyyy&quot;,
'fil-PH': &quot;M/d/yyyy&quot;,
'fo': &quot;dd.MM.yyyy&quot;,
'fo-DK': &quot;dd.MM.yyyy&quot;,
'fo-FO': &quot;dd.MM.yyyy&quot;,
'fr': &quot;dd/MM/yyyy&quot;,
'fr-029': &quot;dd/MM/yyyy&quot;,
'fr-BE': &quot;dd-MM-yy&quot;,
'fr-BF': &quot;dd/MM/yyyy&quot;,
'fr-BI': &quot;dd/MM/yyyy&quot;,
'fr-BJ': &quot;dd/MM/yyyy&quot;,
'fr-BL': &quot;dd/MM/yyyy&quot;,
'fr-CA': &quot;yyyy-MM-dd&quot;,
'fr-CD': &quot;dd/MM/yyyy&quot;,
'fr-CF': &quot;dd/MM/yyyy&quot;,
'fr-CG': &quot;dd/MM/yyyy&quot;,
'fr-CH': &quot;dd.MM.yyyy&quot;,
'fr-CI': &quot;dd/MM/yyyy&quot;,
'fr-CM': &quot;dd/MM/yyyy&quot;,
'fr-DJ': &quot;dd/MM/yyyy&quot;,
'fr-DZ': &quot;dd/MM/yyyy&quot;,
'fr-FR': &quot;dd/MM/yyyy&quot;,
'fr-GA': &quot;dd/MM/yyyy&quot;,
'fr-GF': &quot;dd/MM/yyyy&quot;,
'fr-GN': &quot;dd/MM/yyyy&quot;,
'fr-GP': &quot;dd/MM/yyyy&quot;,
'fr-GQ': &quot;dd/MM/yyyy&quot;,
'fr-HT': &quot;dd/MM/yyyy&quot;,
'fr-KM': &quot;dd/MM/yyyy&quot;,
'fr-LU': &quot;dd/MM/yyyy&quot;,
'fr-MA': &quot;dd/MM/yyyy&quot;,
'fr-MC': &quot;dd/MM/yyyy&quot;,
'fr-MF': &quot;dd/MM/yyyy&quot;,
'fr-MG': &quot;dd/MM/yyyy&quot;,
'fr-ML': &quot;dd/MM/yyyy&quot;,
'fr-MQ': &quot;dd/MM/yyyy&quot;,
'fr-MR': &quot;dd/MM/yyyy&quot;,
'fr-MU': &quot;dd/MM/yyyy&quot;,
'fr-NC': &quot;dd/MM/yyyy&quot;,
'fr-NE': &quot;dd/MM/yyyy&quot;,
'fr-PF': &quot;dd/MM/yyyy&quot;,
'fr-PM': &quot;dd/MM/yyyy&quot;,
'fr-RE': &quot;dd/MM/yyyy&quot;,
'fr-RW': &quot;dd/MM/yyyy&quot;,
'fr-SC': &quot;dd/MM/yyyy&quot;,
'fr-SN': &quot;dd/MM/yyyy&quot;,
'fr-SY': &quot;dd/MM/yyyy&quot;,
'fr-TD': &quot;dd/MM/yyyy&quot;,
'fr-TG': &quot;dd/MM/yyyy&quot;,
'fr-TN': &quot;dd/MM/yyyy&quot;,
'fr-VU': &quot;dd/MM/yyyy&quot;,
'fr-WF': &quot;dd/MM/yyyy&quot;,
'fr-YT': &quot;dd/MM/yyyy&quot;,
'fur-IT': &quot;dd/MM/yyyy&quot;,
'fy-NL': &quot;dd-MM-yyyy&quot;,
'ga': &quot;dd/MM/yyyy&quot;,
'ga-IE': &quot;dd/MM/yyyy&quot;,
'gd': &quot;dd/MM/yyyy&quot;,
'gd-GB': &quot;dd/MM/yyyy&quot;,
'gl': &quot;dd/MM/yyyy&quot;,
'gl-ES': &quot;dd/MM/yyyy&quot;,
'gn': &quot;dd/MM/yyyy&quot;,
'gn-PY': &quot;dd/MM/yyyy&quot;,
'gsw-CH': &quot;dd.MM.yyyy&quot;,
'gsw-FR': &quot;dd/MM/yyyy&quot;,
'gsw-LI': &quot;dd.MM.yyyy&quot;,
'gu': &quot;dd-MM-yy&quot;,
'gu-IN': &quot;dd-MM-yy&quot;,
'guz-KE': &quot;dd/MM/yyyy&quot;,
'gv-IM': &quot;dd/MM/yyyy&quot;,
'ha-Latn-GH': &quot;d/M/yyyy&quot;,
'ha-Latn-NE': &quot;d/M/yyyy&quot;,
'ha-Latn-NG': &quot;d/M/yyyy&quot;,
'haw-US': &quot;d/M/yyyy&quot;,
'he-IL': &quot;dd/MM/yyyy&quot;,
'hi-IN': &quot;dd-MM-yyyy&quot;,
'hr': &quot;d.M.yyyy.&quot;,
'hr-BA': &quot;d. M. yyyy.&quot;,
'hr-HR': &quot;d.M.yyyy.&quot;,
'hsb-DE': &quot;d.M.yyyy&quot;,
'hu': &quot;yyyy. MM. dd.&quot;,
'hu-HU': &quot;yyyy. MM. dd.&quot;,
'hy-AM': &quot;dd.MM.yyyy&quot;,
'ia-001': &quot;yyyy/MM/dd&quot;,
'ia-FR': &quot;yyyy/MM/dd&quot;,
'ibb-NG': &quot;d/M/yyyy&quot;,
'id': &quot;dd/MM/yyyy&quot;,
'id-ID': &quot;dd/MM/yyyy&quot;,
'ig-NG': &quot;dd/MM/yyyy&quot;,
'ii-CN': &quot;yyyy/M/d&quot;,
'is': &quot;d.M.yyyy&quot;,
'is-IS': &quot;d.M.yyyy&quot;,
'it': &quot;dd/MM/yyyy&quot;,
'it-CH': &quot;dd.MM.yyyy&quot;,
'it-IT': &quot;dd/MM/yyyy&quot;,
'it-SM': &quot;dd/MM/yyyy&quot;,
'it-VA': &quot;dd/MM/yyyy&quot;,
'iu-Cans-CA': &quot;d/M/yyyy&quot;,
'iu-Latn-CA': &quot;d/MM/yyyy&quot;,
'ja-JP': &quot;yyyy/MM/dd&quot;,
'jgo-CM': &quot;yyyy-MM-dd&quot;,
'jmc-TZ': &quot;dd/MM/yyyy&quot;,
'jv-Java-ID': &quot;dd/MM/yyyy&quot;,
'jv-Latn-ID': &quot;dd/MM/yyyy&quot;,
'ka-GE': &quot;dd.MM.yyyy&quot;,
'kab-DZ': &quot;d/M/yyyy&quot;,
'kam-KE': &quot;dd/MM/yyyy&quot;,
'kde-TZ': &quot;dd/MM/yyyy&quot;,
'kea-CV': &quot;d/M/yyyy&quot;,
'khq-ML': &quot;d/M/yyyy&quot;,
'ki': &quot;dd/MM/yyyy&quot;,
'ki-KE': &quot;dd/MM/yyyy&quot;,
'kk-KZ': &quot;dd.MM.yyyy&quot;,
'kkj-CM': &quot;dd/MM yyyy&quot;,
'kl-GL': &quot;dd-MM-yyyy&quot;,
'kln-KE': &quot;dd/MM/yyyy&quot;,
'km': &quot;dd/MM/yy&quot;,
'km-KH': &quot;dd/MM/yy&quot;,
'kn': &quot;dd-MM-yy&quot;,
'kn-IN': &quot;dd-MM-yy&quot;,
'ko-KP': &quot;yyyy. M. d.&quot;,
'ko-KR': &quot;yyyy-MM-dd&quot;,
'kok-IN': &quot;dd-MM-yyyy&quot;,
'kr': &quot;d/M/yyyy&quot;,
'kr-NG': &quot;d/M/yyyy&quot;,
'ks-Arab-IN': &quot;M/d/yyyy&quot;,
'ks-Deva-IN': &quot;dd-MM-yyyy&quot;,
'ksb-TZ': &quot;dd/MM/yyyy&quot;,
'ksf-CM': &quot;d/M/yyyy&quot;,
'ksh-DE': &quot;d. M. yyyy&quot;,
'ku-Arab-IQ': &quot;yyyy/MM/dd&quot;,
'ku-Arab-IR': &quot;dd/MM/yyyy&quot;,
'kw': &quot;dd/MM/yyyy&quot;,
'kw-GB': &quot;dd/MM/yyyy&quot;,
'ky': &quot;d-MMM yy&quot;,
'ky-KG': &quot;d-MMM yy&quot;,
'la': &quot;dd/MM/yyyy&quot;,
'la-001': &quot;dd/MM/yyyy&quot;,
'lag-TZ': &quot;dd/MM/yyyy&quot;,
'lb': &quot;dd.MM.yy&quot;,
'lb-LU': &quot;dd.MM.yy&quot;,
'lg-UG': &quot;dd/MM/yyyy&quot;,
'lkt-US': &quot;M/d/yyyy&quot;,
'ln-AO': &quot;d/M/yyyy&quot;,
'ln-CD': &quot;d/M/yyyy&quot;,
'ln-CF': &quot;d/M/yyyy&quot;,
'ln-CG': &quot;d/M/yyyy&quot;,
'lo-LA': &quot;d/M/yyyy&quot;,
'lrc-IQ': &quot;yyyy-MM-dd&quot;,
'lrc-IR': &quot;dd/MM/yyyy&quot;,
'lt': &quot;yyyy-MM-dd&quot;,
'lt-LT': &quot;yyyy-MM-dd&quot;,
'lu': &quot;d/M/yyyy&quot;,
'lu-CD': &quot;d/M/yyyy&quot;,
'luo-KE': &quot;dd/MM/yyyy&quot;,
'luy-KE': &quot;dd/MM/yyyy&quot;,
'lv': &quot;dd.MM.yyyy&quot;,
'lv-LV': &quot;dd.MM.yyyy&quot;,
'mas-KE': &quot;dd/MM/yyyy&quot;,
'mas-TZ': &quot;dd/MM/yyyy&quot;,
'mer-KE': &quot;dd/MM/yyyy&quot;,
'mfe-MU': &quot;d/M/yyyy&quot;,
'mg': &quot;yyyy-MM-dd&quot;,
'mg-MG': &quot;yyyy-MM-dd&quot;,
'mgh-MZ': &quot;dd/MM/yyyy&quot;,
'mgo-CM': &quot;yyyy-MM-dd&quot;,
'mi-NZ': &quot;dd/MM/yyyy&quot;,
'mk': &quot;dd.M.yyyy&quot;,
'mk-MK': &quot;dd.M.yyyy&quot;,
'ml': &quot;d/M/yyyy&quot;,
'ml-IN': &quot;d/M/yyyy&quot;,
'mn': &quot;yyyy.MM.dd&quot;,
'mn-MN': &quot;yyyy.MM.dd&quot;,
'mn-Mong-CN': &quot;yyyy/M/d&quot;,
'mn-Mong-MN': &quot;yyyy/M/d&quot;,
'mni-IN': &quot;dd/MM/yyyy&quot;,
'moh-CA': &quot;M/d/yyyy&quot;,
'mr': &quot;dd-MM-yyyy&quot;,
'mr-IN': &quot;dd-MM-yyyy&quot;,
'ms': &quot;d/MM/yyyy&quot;,
'ms-BN': &quot;d/MM/yyyy&quot;,
'ms-MY': &quot;d/MM/yyyy&quot;,
'ms-SG': &quot;d/MM/yyyy&quot;,
'mt': &quot;dd/MM/yyyy&quot;,
'mt-MT': &quot;dd/MM/yyyy&quot;,
'mua-CM': &quot;d/M/yyyy&quot;,
'my': &quot;dd-MM-yyyy&quot;,
'my-MM': &quot;dd-MM-yyyy&quot;,
'mzn-IR': &quot;dd/MM/yyyy&quot;,
'naq-NA': &quot;dd/MM/yyyy&quot;,
'nb-NO': &quot;dd.MM.yyyy&quot;,
'nb-SJ': &quot;dd.MM.yyyy&quot;,
'nd-ZW': &quot;dd/MM/yyyy&quot;,
'nds-DE': &quot;d.MM.yyyy&quot;,
'nds-NL': &quot;d.MM.yyyy&quot;,
'ne': &quot;M/d/yyyy&quot;,
'ne-IN': &quot;yyyy/M/d&quot;,
'ne-NP': &quot;M/d/yyyy&quot;,
'nl': &quot;d-M-yyyy&quot;,
'nl-AW': &quot;dd-MM-yyyy&quot;,
'nl-BE': &quot;d/MM/yyyy&quot;,
'nl-BQ': &quot;dd-MM-yyyy&quot;,
'nl-CW': &quot;dd-MM-yyyy&quot;,
'nl-NL': &quot;d-M-yyyy&quot;,
'nl-SR': &quot;dd-MM-yyyy&quot;,
'nl-SX': &quot;dd-MM-yyyy&quot;,
'nmg-CM': &quot;d/M/yyyy&quot;,
'nn-NO': &quot;dd.MM.yyyy&quot;,
'nnh-CM': &quot;dd/MM/yyyy&quot;,
'no': &quot;dd.MM.yyyy&quot;,
'nqo-GN': &quot;dd/MM/yyyy&quot;,
'nr': &quot;yyyy-MM-dd&quot;,
'nr-ZA': &quot;yyyy-MM-dd&quot;,
'nso-ZA': &quot;yyyy-MM-dd&quot;,
'nus-SS': &quot;d/MM/yyyy&quot;,
'nyn-UG': &quot;dd/MM/yyyy&quot;,
'oc-FR': &quot;dd/MM/yyyy&quot;,
'om': &quot;dd/MM/yyyy&quot;,
'om-ET': &quot;dd/MM/yyyy&quot;,
'om-KE': &quot;dd/MM/yyyy&quot;,
'or-IN': &quot;dd-MM-yy&quot;,
'os-GE': &quot;dd.MM.yyyy&quot;,
'os-RU': &quot;dd.MM.yyyy&quot;,
'pa': &quot;dd-MM-yy&quot;,
'pa-Arab-PK': &quot;dd-MM-yy&quot;,
'pa-IN': &quot;dd-MM-yy&quot;,
'pap-029': &quot;d-M-yyyy&quot;,
'pl': &quot;dd.MM.yyyy&quot;,
'pl-PL': &quot;dd.MM.yyyy&quot;,
'prg-001': &quot;dd.MM.yyyy&quot;,
'prs-AF': &quot;yyyy/M/d&quot;,
'ps': &quot;yyyy/M/d&quot;,
'ps-AF': &quot;yyyy/M/d&quot;,
'pt': &quot;dd/MM/yyyy&quot;,
'pt-AO': &quot;dd/MM/yyyy&quot;,
'pt-BR': &quot;dd/MM/yyyy&quot;,
'pt-CH': &quot;dd/MM/yyyy&quot;,
'pt-CV': &quot;dd/MM/yyyy&quot;,
'pt-GQ': &quot;dd/MM/yyyy&quot;,
'pt-GW': &quot;dd/MM/yyyy&quot;,
'pt-LU': &quot;dd/MM/yyyy&quot;,
'pt-MO': &quot;dd/MM/yyyy&quot;,
'pt-MZ': &quot;dd/MM/yyyy&quot;,
'pt-PT': &quot;dd/MM/yyyy&quot;,
'pt-ST': &quot;dd/MM/yyyy&quot;,
'pt-TL': &quot;dd/MM/yyyy&quot;,
'quc-Latn-GT': &quot;dd/MM/yyyy&quot;,
'quz-BO': &quot;dd/MM/yyyy&quot;,
'quz-EC': &quot;dd/MM/yyyy&quot;,
'quz-PE': &quot;dd/MM/yyyy&quot;,
'rm-CH': &quot;dd-MM-yyyy&quot;,
'rn-BI': &quot;d/M/yyyy&quot;,
'ro': &quot;dd.MM.yyyy&quot;,
'ro-MD': &quot;dd.MM.yyyy&quot;,
'ro-RO': &quot;dd.MM.yyyy&quot;,
'rof-TZ': &quot;dd/MM/yyyy&quot;,
'ru': &quot;dd.MM.yyyy&quot;,
'ru-BY': &quot;dd.MM.yyyy&quot;,
'ru-KG': &quot;dd.MM.yyyy&quot;,
'ru-KZ': &quot;dd.MM.yyyy&quot;,
'ru-MD': &quot;dd.MM.yyyy&quot;,
'ru-RU': &quot;dd.MM.yyyy&quot;,
'ru-UA': &quot;dd.MM.yyyy&quot;,
'rw': &quot;yyyy-MM-dd&quot;,
'rw-RW': &quot;yyyy-MM-dd&quot;,
'rwk-TZ': &quot;dd/MM/yyyy&quot;,
'sa': &quot;dd-MM-yyyy&quot;,
'sa-IN': &quot;dd-MM-yyyy&quot;,
'sah-RU': &quot;dd.MM.yyyy&quot;,
'saq-KE': &quot;dd/MM/yyyy&quot;,
'sbp-TZ': &quot;dd/MM/yyyy&quot;,
'sd': &quot;dd/MM/yyyy&quot;,
'sd-Arab-PK': &quot;dd/MM/yyyy&quot;,
'sd-Deva-IN': &quot;dd/MM/yyyy&quot;,
'se': &quot;yyyy-MM-dd&quot;,
'se-FI': &quot;d.M.yyyy&quot;,
'se-NO': &quot;yyyy-MM-dd&quot;,
'se-SE': &quot;yyyy-MM-dd&quot;,
'seh-MZ': &quot;d/M/yyyy&quot;,
'ses-ML': &quot;d/M/yyyy&quot;,
'sg': &quot;d/M/yyyy&quot;,
'sg-CF': &quot;d/M/yyyy&quot;,
'shi-Latn-MA': &quot;d/M/yyyy&quot;,
'shi-Tfng-MA': &quot;d/M/yyyy&quot;,
'si': &quot;yyyy-MM-dd&quot;,
'si-LK': &quot;yyyy-MM-dd&quot;,
'sk': &quot;d. M. yyyy&quot;,
'sk-SK': &quot;d. M. yyyy&quot;,
'sl': &quot;d. MM. yyyy&quot;,
'sl-SI': &quot;d. MM. yyyy&quot;,
'sma-NO': &quot;dd.MM.yyyy&quot;,
'sma-SE': &quot;yyyy-MM-dd&quot;,
'smj-NO': &quot;dd.MM.yyyy&quot;,
'smj-SE': &quot;yyyy-MM-dd&quot;,
'smn-FI': &quot;d.M.yyyy&quot;,
'sms-FI': &quot;d.M.yyyy&quot;,
'sn': &quot;yyyy-MM-dd&quot;,
'sn-Latn-ZW': &quot;yyyy-MM-dd&quot;,
'so': &quot;dd/MM/yyyy&quot;,
'so-DJ': &quot;dd/MM/yyyy&quot;,
'so-ET': &quot;dd/MM/yyyy&quot;,
'so-KE': &quot;dd/MM/yyyy&quot;,
'so-SO': &quot;dd/MM/yyyy&quot;,
'sq-AL': &quot;d.M.yyyy&quot;,
'sq-MK': &quot;d.M.yyyy&quot;,
'sq-XK': &quot;d.M.yyyy&quot;,
'sr': &quot;d.M.yyyy.&quot;,
'sr-Cyrl-BA': &quot;d.M.yyyy.&quot;,
'sr-Cyrl-ME': &quot;d.M.yyyy.&quot;,
'sr-Cyrl-RS': &quot;dd.MM.yyyy.&quot;,
'sr-Cyrl-XK': &quot;d.M.yyyy.&quot;,
'sr-Latn-BA': &quot;d.M.yyyy.&quot;,
'sr-Latn-ME': &quot;d.M.yyyy.&quot;,
'sr-Latn-RS': &quot;d.M.yyyy.&quot;,
'sr-Latn-XK': &quot;d.M.yyyy.&quot;,
'ss': &quot;yyyy-MM-dd&quot;,
'ss-SZ': &quot;yyyy-MM-dd&quot;,
'ss-ZA': &quot;yyyy-MM-dd&quot;,
'ssy-ER': &quot;dd/MM/yyyy&quot;,
'st': &quot;yyyy-MM-dd&quot;,
'st-LS': &quot;yyyy-MM-dd&quot;,
'st-ZA': &quot;yyyy-MM-dd&quot;,
'sv': &quot;yyyy-MM-dd&quot;,
'sv-AX': &quot;yyyy-MM-dd&quot;,
'sv-FI': &quot;dd-MM-yyyy&quot;,
'sv-SE': &quot;yyyy-MM-dd&quot;,
'sw-CD': &quot;dd/MM/yyyy&quot;,
'sw-KE': &quot;dd/MM/yyyy&quot;,
'sw-TZ': &quot;dd/MM/yyyy&quot;,
'sw-UG': &quot;dd/MM/yyyy&quot;,
'syr-SY': &quot;dd/MM/yyyy&quot;,
'ta-IN': &quot;dd-MM-yyyy&quot;,
'ta-LK': &quot;d/M/yyyy&quot;,
'ta-MY': &quot;d/M/yyyy&quot;,
'ta-SG': &quot;d/M/yyyy&quot;,
'te-IN': &quot;dd-MM-yy&quot;,
'teo-KE': &quot;dd/MM/yyyy&quot;,
'teo-UG': &quot;dd/MM/yyyy&quot;,
'tg': &quot;dd.MM.yyyy&quot;,
'tg-Cyrl-TJ': &quot;dd.MM.yyyy&quot;,
'th': &quot;d/M/yyyy&quot;,
'th-TH': &quot;d/M/yyyy&quot;,
'ti-ER': &quot;dd/MM/yyyy&quot;,
'ti-ET': &quot;dd/MM/yyyy&quot;,
'tig-ER': &quot;dd/MM/yyyy&quot;,
'tk': &quot;dd.MM.yy 'ý.'&quot;,
'tk-TM': &quot;dd.MM.yy 'ý.'&quot;,
'tn': &quot;yyyy-MM-dd&quot;,
'tn-BW': &quot;yyyy-MM-dd&quot;,
'tn-ZA': &quot;yyyy-MM-dd&quot;,
'to': &quot;d/M/yyyy&quot;,
'to-TO': &quot;d/M/yyyy&quot;,
'tr': &quot;d.MM.yyyy&quot;,
'tr-CY': &quot;d.MM.yyyy&quot;,
'tr-TR': &quot;d.MM.yyyy&quot;,
'ts-ZA': &quot;yyyy-MM-dd&quot;,
'tt': &quot;dd.MM.yyyy&quot;,
'tt-RU': &quot;dd.MM.yyyy&quot;,
'twq-NE': &quot;d/M/yyyy&quot;,
'tzm-Arab-MA': &quot;d/M/yyyy&quot;,
'tzm-Latn-DZ': &quot;dd-MM-yyyy&quot;,
'tzm-Latn-MA': &quot;dd/MM/yyyy&quot;,
'tzm-Tfng-MA': &quot;dd-MM-yyyy&quot;,
'ug': &quot;yyyy-M-d&quot;,
'ug-CN': &quot;yyyy-M-d&quot;,
'uk-UA': &quot;dd.MM.yyyy&quot;,
'ur-IN': &quot;d/M/yy&quot;,
'ur-PK': &quot;dd/MM/yyyy&quot;,
'uz': &quot;dd/MM/yyyy&quot;,
'uz-Arab-AF': &quot;dd/MM yyyy&quot;,
'uz-Cyrl-UZ': &quot;dd/MM/yyyy&quot;,
'uz-Latn-UZ': &quot;dd/MM/yyyy&quot;,
'vai-Latn-LR': &quot;dd/MM/yyyy&quot;,
'vai-Vaii-LR': &quot;dd/MM/yyyy&quot;,
've': &quot;yyyy-MM-dd&quot;,
've-ZA': &quot;yyyy-MM-dd&quot;,
'vi': &quot;dd/MM/yyyy&quot;,
'vi-VN': &quot;dd/MM/yyyy&quot;,
'vo-001': &quot;yyyy-MM-dd&quot;,
'vun-TZ': &quot;dd/MM/yyyy&quot;,
'wae-CH': &quot;yyyy-MM-dd&quot;,
'wal-ET': &quot;dd/MM/yyyy&quot;,
'wo-SN': &quot;dd/MM/yyyy&quot;,
'xh-ZA': &quot;yyyy-MM-dd&quot;,
'xog-UG': &quot;dd/MM/yyyy&quot;,
'yav-CM': &quot;d/M/yyyy&quot;,
'yi-001': &quot;dd/MM/yyyy&quot;,
'yo-BJ': &quot;dd/MM/yyyy&quot;,
'yo-NG': &quot;dd/MM/yyyy&quot;,
'zgh-Tfng-MA': &quot;d/M/yyyy&quot;,
'zh-CN': &quot;yyyy/M/d&quot;,
'zh-Hans-HK': &quot;d/M/yyyy&quot;,
'zh-Hans-MO': &quot;d/M/yyyy&quot;,
'zh-HK': &quot;d/M/yyyy&quot;,
'zh-MO': &quot;d/M/yyyy&quot;,
'zh-SG': &quot;d/M/yyyy&quot;,
'zh-TW': &quot;yyyy/M/d&quot;,
'zu-ZA': &quot;M/d/yyyy&quot;,
};
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 그것을 할 방법을 모릅니다(&lt;a href=&quot;https://stackoverflow.com/questions/1043339/javascript-for-detecting-browser-language-preference&quot;&gt;언어&lt;/a&gt;를 구해서 그것에서 로케일을 빼려고 하면 됩니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 그것을 시도하기 위해 약간의 요리를 시도했습니다(단 하나의 로케일로 파이어폭스에서만 테스트됨).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;짧은 날짜 문자열에 날짜가 숫자로 포함되어 있는 한 작동해야 하므로 아랍어의 경우 실패할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 버그도 있을 수도 있어요. 여러 지역의 특이점을 다 알지는 못해요. 이건 그냥 개념일 뿐이에요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function getShortDateFormat() {
    var d = new Date(1992, 0, 7);
    var s = d.toLocaleDateString();

    function formatReplacer(str) {
        var num = parseInt(str);
        switch (num % 100) {
            case 92:
                return str.replace(/.{1}/g, &quot;Y&quot;);
            case 1:
                return str.length == 1 ? &quot;mM&quot; : &quot;MM&quot;
            case 7:
                return str.length == 1 ? &quot;dD&quot; : &quot;DD&quot;
        }
    }

    shortDateFormat = s.replace(/\d+/g, formatReplacer);
    return shortDateFormat;
}

getShortDateFormat();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출력되는 형식은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Y: 연도를 나타낼 자리 수&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;dD = 짧은 날 (예: 가능한 경우 한 자리만 사용)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DD = 긴 날짜 형식(즉, 항상 두 자리)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;mM/MM - 몇달동안 동일&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 제 브라우저에서는 &quot;MM/DD/YYYY&quot;라는 짧은 Date 형식이 나옵니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 브라우저에 따라 다릅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;toLocaleDateString()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 크롬에서는 다음과 같은 것을 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Tuesday, January DD, YYYY&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것을 사용할 수 있다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;new Date().toLocaleDateString();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로케일에 대한 매개변수를 허용할 수 있는 위치:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;new Date().toLocaleDateString(&quot;en-us&quot;);
new Date().toLocaleDateString(&quot;he-il&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;크롬, IE, 엣지로 지원되는 것으로 알고 있습니다. 결과는 달라질 수 있지만 저는 꽤 잘합니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;new Date(YOUR_DATE_STRING).toLocaleDateString(navigator.language)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;~ 위의 답변을 종합하여.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;인터네셔널&lt;/strong&gt;을 이용하는 1개의 정기선:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;new Intl.DateTimeFormat(undefined, { dateStyle: 'short', timeStyle: 'short' }).format(date)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;date&lt;/em&gt;는 변환할 날짜입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;undefined&lt;/em&gt;는 Intl에게 브라우저 로케일을 사용하도록 지시합니다(여기에 로케일 문자열을 전달할 수도 있음).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DateTimeFormat 기능에 대한 자세한 내용은 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat&quot; rel=&quot;nofollow noreferrer&quot;&gt;여기&lt;/a&gt;에서 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Intl은 이미 &lt;a href=&quot;https://caniuse.com/?search=Intl&quot; rel=&quot;nofollow noreferrer&quot;&gt;많은 브라우저&lt;/a&gt;에서 지원되고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전 브라우저를 지원해야 하는 경우에는 폴리필(&lt;a href=&quot;https://polyfill.io/v3/polyfill.min.js?features=Intl&quot; rel=&quot;nofollow noreferrer&quot;&gt;CDN&lt;/a&gt; 또는 &lt;a href=&quot;https://www.npmjs.com/search?q=Intl&quot; rel=&quot;nofollow noreferrer&quot;&gt;npm&lt;/a&gt;)을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쉬운 방법이 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;신뢰할 수 있는 크로스 브라우저 솔루션을 원한다면 문화별로 룩업 테이블과 시간 형식 문자열을 구축해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;날짜 형식을 지정하려면 해당 형식 문자열을 구문 분석하고 날짜에서 관련 부분(예: 일, 월, 년)을 추출한 후 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 @no의 답변에서 볼 수 있듯이 Microsoft가 AJAX 라이브러리로 수행하는 작업입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Mitali의 반응을 약간 수정했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보다 지역화된 솔루션을 위한 언어를 동적으로 생성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var lang= window.navigator.userLanguage || window.navigator.language;

var date = new Date();

var options = {
   weekday: &quot;short&quot;,
   year: &quot;numeric&quot;,
   month: &quot;2-digit&quot;,
   day: &quot;numeric&quot;
};

date.toLocaleDateString(lang, options);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;en-CA를 예로 들면, 만약 당신이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;date-fns&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script type=&quot;module&quot;&amp;gt;
  import { enCA } from 'https://cdn.skypack.dev/date-fns/locale';
  console.log(enCA.formatLong.date({width:'short'}))
  // yyyy-MM-dd
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출처 : https://github.com/date-fns/date-fns/blob/master/src/locale/en-CA/_lib/formatLong/index.js&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CLDR &amp;amp; Paul Irish의 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import locale from 'cldr-dates-modern/main/en-CA/ca-gregorian.json'
console.log(locale.main['en-CA'].dates.calendars.gregorian.dateFormats.short)
// y-MM-dd
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출처 : https://github.com/unicode-cldr/cldr-dates-modern/blob/master/main/en-CA/ca-gregorian.json&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용 사례: 이 값을 입력의 자리 표시자 속성으로 사용했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 자바스크립트 구현에서 흔히 발생하는 문제입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://tc39.es/ecma262/#sec-date.prototype.tolocaledatestring&quot; rel=&quot;nofollow noreferrer&quot;&gt;ECMA는 구현&lt;/a&gt;이 정의되어 &lt;a href=&quot;https://tc39.es/ecma262/#sec-date.prototype.tolocaledatestring&quot; rel=&quot;nofollow noreferrer&quot;&gt;있다고 말합니다&lt;/a&gt;.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 자바스크립트 구현은 호스트별 날짜별 로케일을 자유롭게 구현할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제는 대부분의 자바스크립트 구현체들이 인쇄 날짜 작업을 ICU 라이브러리에 전달한다는 것입니다. ICU 라이브러리는 ICU 라이브러리 자체에서 &lt;a href=&quot;https://unicode-org.atlassian.net/browse/ICU-111&quot; rel=&quot;nofollow noreferrer&quot;&gt;호스트별&lt;/a&gt; 로케일 정의를 지원하지 &lt;a href=&quot;https://unicode-org.atlassian.net/browse/ICU-111&quot; rel=&quot;nofollow noreferrer&quot;&gt;않습니다&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@compat=host&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot; ICU가 지원하는 로케일에 대한 옵션은 거의 사용되지 않으며 대부분의 자바스크립트 구현에서는 선택한 로케일에 이러한 옵션을 설정할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;별도의 라이브러리 없이 모든 브라우저에서 로컬화된 짧은 날짜를 생성하는 방법을 찾던 중 서버에서 생성된 ISO 날짜를 포맷하기 위한 간단한 호출을 통해 이 스레드를 찾았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;holden321과 mwrf의 답변을 종합해 봤습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기능 외부의 형식을 저장하는 것이 더 편리하기 때문에 저장하고, 항상 유용하기 때문에 현재의 로케일 형식을 저장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 함수는 유효한 날짜를 얻기 위해 날짜 작성자에게 전달할 수 있는 모든 것과 유연성을 위한 언어 또는 형식을 전달할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;먼저 포맷 목록과 몇 가지 사항을 설정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var LOCALE_DATE_FORMATS = {
  // as per mwrf's list
  ...
}

var LANG = window.navigator.userLanguage || window.navigator.language;

var LOCALE_DATE_FORMAT = LOCALE_DATE_FORMATS[LANG] || 'dd/MM/yyyy';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇다면 기능은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function getLocalizedDate(o, options)
{
    var res = '';
    var date = new Date(o);     

    if(o != null &amp;amp;&amp;amp; !isNaN(date) &amp;amp;&amp;amp; typeof(date.getFullYear) == 'function')
    {
        var d = date.getDate();
        var dd = d &amp;lt; 10 ? '0' + d : d;
        var M = date.getMonth() + 1;
        var MM = M &amp;lt; 10 ? '0' + M : M;
        var yyyy = date.getFullYear();
        var yy = new String(yyyy).substring(2);

        var format = LOCALE_DATE_FORMAT;

        if(options &amp;amp;&amp;amp; options.lang)
            format = LOCALE_DATE_FORMATS[options.lang];
        else if(options &amp;amp;&amp;amp; options.format)
            format = options.format;

        res = format
            .replace(/dd/g, dd)
            .replace(/d/g, d)
            .replace(/MM/g, MM)
            .replace(/M/g, M)
            .replace(/yyyy/g, yyyy)
            .replace(/yy/g, yy);
    }

    return res;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;getLocalizedDate('2013-03-01T00:00:00', {lang:'sk-SK'})&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;=&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1. 3. 2013&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;EDIT: 물론 사용자의 로케일을 사용하기 위해 인수 없이 호출합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;getLocalizedDate('2013-03-01T00:00:00')&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;=&lt;/font&gt;&lt;/font&gt;&lt;code&gt;01/03/2013&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(나에게)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로토타입을 확장하는 것을 좋아한다면 기능 정의의 첫 줄은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Date.prototype.getLocalized = function(options)
{
  var date = this;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론 이렇게 부릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;new Date('2013-03-01T00:00:00').getLocalized({lang:'sk-SK'})&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;=&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1. 3. 2013&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;EDIT: 다시 한번 인수 없이 호출하여 사용자의 로케일을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;new Date('2013-03-01T00:00:00').getLocalized()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;=&lt;/font&gt;&lt;/font&gt;&lt;code&gt;01/03/2013&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(나에게)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;const newDate = newDate(); const currentDate = newDate.toLocaleDateString(&quot;sv-SE&quot;, {년: 'numeric', 월: 'numeric', 일: 'numeric'});&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 어떻습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;// pass in a localeAbbv string to get the format for a specific locale,
// otherwise the browser's default localte will be used
function getLocaleShortDateFormat(localeAbbv?: string) {
    return new Intl.DateTimeFormat(Intl.DateTimeFormat(localeAbbv).resolvedOptions().locale)
        .format(new Date(2021, 0, 2))
        .replace(/0?1/, &quot;MM&quot;).replace(/0?2/, &quot;DD&quot;).replace(/(?:20)?21/, &quot;YYYY&quot;);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 단지 알려진 날짜(2021년 1월 2일)를 잡고, 현재 로케일을 사용하여 포맷한 다음, 알려진 값(2021년=년, 1=월, 2=일)을 적절한 날짜 문자열로 바꾸는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 표준 호환 메서드 호출을 사용하므로 모든 최신 브라우저에서 작동해야 한다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제로 사용자에게 표시할 날짜를 포맷할 때는 '/' 대신 '-'를 사용하는 것이 좋다고 생각합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이에 대한 몇 가지 이유: 1) &quot;-&quot;가 숫자만큼 높지 않아 날짜 구성 요소 간의 단절이 더 두드러지기 때문에 구성 요소를 쉽게 식별할 수 있고, 2) 날짜 구성 요소 간의 대시를 사용하는 ISO 8601 형식에 더 가깝다는 점에서 더 나은 UX를 제공합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 작업을 수행하려면 다른 항목을 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.replace(/\//g, &quot;-&quot;)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쇠사슬로&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;양식에서 날짜를 받으시려면 이걸 쓰셔야 해요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;const date_ = new Date(props.date);
 const month = date_.toLocaleString(&quot;en&quot;, { month: &quot;long&quot; });
 const day = date_.toLocaleString(&quot;en-029&quot;, { day: &quot;2-digit&quot; });
 const year = date_.toLocaleString(&quot;en-US&quot;, { year: &quot;numeric&quot; });
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MO/DY/YEAR 또는 DY/MO/YEAR(또는 로케일과 관련된 형식)와 같은 출력의 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let time = new Date()
let timestampDate = new Date(time).toLocaleDateString(navigator.language)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시도해 보기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;new Date().toLocaleFormat(&quot;%x&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 기능에 대한 모든 형식은 여기 http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html 에서 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(2021)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그냥 사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.toLocaleDateString()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 브라우저가 모든 것을 처리합니다. 예를 들어:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;console.log(
  new Date().toLocaleDateString()
); // -&amp;gt; something like '7/18/2021', depending on user's location
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 사용자에게 적합한지 확인하려면 다음을 테스트할 로케일 문자열을 전달합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;const toVerify = [
  'af-ZA',
  'am-ET',
  'ar-AE',
  'ar-BH',
  'ar-DZ',
  'ar-EG',
  'ar-IQ',
  'ar-JO',
  'ar-KW',
  'ar-LB',
  'ar-LY',
  'ar-MA',
  'ar-OM',
  'ar-QA',
  'ar-SA',
  'ar-SY',
  'ar-TN',
  'ar-YE',
  'arn-CL',
  'as-IN',
  'az-Cyrl-AZ',
  'az-Latn-AZ',
  'ba-RU',
  'be-BY',
  'bg-BG',
  'bn-BD',
  'bn-IN',
  'bo-CN',
  'br-FR',
  'bs-Cyrl-BA',
  'bs-Latn-BA',
  'ca-ES',
  'co-FR',
  'cs-CZ',
  'cy-GB',
  'da-DK',
  'de-AT',
  'de-CH',
  'de-DE',
  'de-LI',
  'de-LU',
  'dsb-DE',
  'dv-MV',
  'el-GR',
  'en-029',
  'en-AU',
  'en-BZ',
  'en-CA',
  'en-GB',
  'en-IE',
  'en-IN',
  'en-JM',
  'en-MY',
  'en-NZ',
  'en-PH',
  'en-SG',
  'en-TT',
  'en-US',
  'en-ZA',
  'en-ZW',
  'es-AR',
  'es-BO',
  'es-CL',
  'es-CO',
  'es-CR',
  'es-DO',
  'es-EC',
  'es-ES',
  'es-GT',
  'es-HN',
  'es-MX',
  'es-NI',
  'es-PA',
  'es-PE',
  'es-PR',
  'es-PY',
  'es-SV',
  'es-US',
  'es-UY',
  'es-VE',
  'et-EE',
  'eu-ES',
  'fa-IR',
  'fi-FI',
  'fil-PH',
  'fo-FO',
  'fr-BE',
  'fr-CA',
  'fr-CH',
  'fr-FR',
  'fr-LU',
  'fr-MC',
  'fy-NL',
  'ga-IE',
  'gd-GB',
  'gl-ES',
  'gsw-FR',
  'gu-IN',
  'ha-Latn-NG',
  'he-IL',
  'hi-IN',
  'hr-BA',
  'hr-HR',
  'hsb-DE',
  'hu-HU',
  'hy-AM',
  'id-ID',
  'ig-NG',
  'ii-CN',
  'is-IS',
  'it-CH',
  'it-IT',
  'iu-Cans-CA',
  'iu-Latn-CA',
  'ja-JP',
  'ka-GE',
  'kk-KZ',
  'kl-GL',
  'km-KH',
  'kn-IN',
  'ko-KR',
  'kok-IN',
  'ky-KG',
  'lb-LU',
  'lo-LA',
  'lt-LT',
  'lv-LV',
  'mi-NZ',
  'mk-MK',
  'ml-IN',
  'mn-MN',
  'mn-Mong-CN',
  'moh-CA',
  'mr-IN',
  'ms-BN',
  'ms-MY',
  'mt-MT',
  'nb-NO',
  'ne-NP',
  'nl-BE',
  'nl-NL',
  'nn-NO',
  'nso-ZA',
  'oc-FR',
  'or-IN',
  'pa-IN',
  'pl-PL',
  'prs-AF',
  'ps-AF',
  'pt-BR',
  'pt-PT',
  'qut-GT',
  'quz-BO',
  'quz-EC',
  'quz-PE',
  'rm-CH',
  'ro-RO',
  'ru-RU',
  'rw-RW',
  'sa-IN',
  'sah-RU',
  'se-FI',
  'se-NO',
  'se-SE',
  'si-LK',
  'sk-SK',
  'sl-SI',
  'sma-NO',
  'sma-SE',
  'smj-NO',
  'smj-SE',
  'smn-FI',
  'sms-FI',
  'sq-AL',
  'sr-Cyrl-BA',
  'sr-Cyrl-CS',
  'sr-Cyrl-ME',
  'sr-Cyrl-RS',
  'sr-Latn-BA',
  'sr-Latn-CS',
  'sr-Latn-ME',
  'sr-Latn-RS',
  'sv-FI',
  'sv-SE',
  'sw-KE',
  'syr-SY',
  'ta-IN',
  'te-IN',
  'tg-Cyrl-TJ',
  'th-TH',
  'tk-TM',
  'tn-ZA',
  'tr-TR',
  'tt-RU',
  'tzm-Latn-DZ',
  'ug-CN',
  'uk-UA',
  'ur-PK',
  'uz-Cyrl-UZ',
  'uz-Latn-UZ',
  'vi-VN',
  'wo-SN',
  'xh-ZA',
  'yo-NG',
  'zh-CN',
  'zh-HK',
  'zh-MO',
  'zh-SG',
  'zh-TW',
  'zu-ZA',
];

toVerify.forEach((locale) =&amp;gt; {
  console.log(locale, new Date().toLocaleDateString(locale));
});&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;날짜를 사용해 봅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CultureInfo.format패턴.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;짧은 날짜&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/2388115/get-locale-short-date-format-using-javascript&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>javascript</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/787</guid>
      <comments>https://megabox.tistory.com/787#entry787comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:08:27 +0900</pubDate>
    </item>
    <item>
      <title>Can C++ array end at memory boundary?</title>
      <link>https://megabox.tistory.com/786</link>
      <description>&lt;h2&gt;Can C++ array end at memory boundary?&lt;/h2&gt;
&lt;p&gt;C++ standard (and C for that matter) allows to create (not dereference though) a pointer to one element past the end of the array. Does this mean that an array will never be allocated at such a location that its last element ends at the memory boundary? I understand that in practice some/all implementation might follow this convention, but which one the following is true:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;It's actually false, and an array might end at memory boundary, OR&lt;/li&gt; 
 &lt;li&gt;It is mandated by C++ standard to end at least one element's worth of memory before the boundary, OR&lt;/li&gt; 
 &lt;li&gt;Neither 1, nor 2, but it is still like that in actual compilers because it makes implementation easier.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Is anything different for the case of C?&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;업데이트 &lt;/strong&gt;: &lt;strong&gt;1&lt;/strong&gt;이 정답인 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래 James Kanze의 답변을 참조하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;efence&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(http://linux.die.net/man/3/efence - 그것에 대한 포인터를 준 Michael Chastain에게 감사드립니다.)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;An implementation must allow a pointer to one past the end to exist. How it does this is its business. On many machines, you can safely put any value into a pointer, without risk (unless you dereference it); on such systems, the one past the end pointer may point to unmapped memory—I've actually encountered a case under Windows where it did. &lt;/p&gt; 
&lt;p&gt;On other machines, just loading a pointer to unmapped memory into a register will trap, causing the program to crash. On such machines, the implementation must ensure that this doesn't happen, either by refusing to use the last byte or word of allocated memory, or by ensuring that all use of the pointer other than dereferencing it avoids any instructions which might cause the hardware to treat it as an invalid pointer. (Most such systems have separate address and data registers, and will only trap if the pointer is loaded into an address register. If the data registers are large enough, the compiler can safely load the pointer into a data register for e.g. comparison. This is often necessary anyway, as the address registers don't always support comparison.)&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마지막 질문을 다시 하십시오. 이 점에서 C와 C++는 정확히 일치합니다. C++는 단순히 C로부터 규칙을 넘겨받았을 뿐입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;§3.9.2/3[복합형]에 흥미로운 통로가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;void로 표시할 포인터의 유형 또는 개체 유형의 포인터를 개체 포인터 유형이라고 합니다. [...] 개체 포인터 유형의 유효한 값은 메모리의 바이트 주소(1.7) 또는 null 포인터(4.10)를 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;§5.7/5 [추가 연산자]의 텍스트와 함께:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;[...] 또한, 식 P가 어레이 객체의 마지막 요소를 가리키면, 식 (P)+1이 어레이 객체의 마지막 요소를 하나 가리키고, 식 (Q)-1이 어레이 객체의 마지막 요소를 하나 가리키면, 식 (Q)-1이 어레이 객체의 마지막 요소를 가리킵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메모리의 마지막 바이트로 끝나는 배열은 할당할 수 없는 것 같습니다. 한 번의 끝 포인터가 유효해야 한다는 요구 사항이 있는 경우입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 한 번의 끝을 가리키는 포인터가 유효하지 않다면, 저는 답을 모릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;§3.7.4.2/4절 [할당 해제 기능]은 다음과 같이 기술합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;잘못된 포인터 값을 사용하는 경우(할당 해제 함수에 전달하는 경우 포함)의 효과는 정의되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 할당된 배열에 대해 한 번의 끝 포인터를 비교하는 것이 지원되어야 하는 경우에는 한 번의 끝 포인터가 유효해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 받은 의견을 토대로 볼 때, 저는 구현이 어레이의 한 끝 포인터가 사용 가능한지 여부에 신경 쓰지 않고 어레이를 할당할 수 있다고 생각합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다만 이에 대한 기준에서 관련된 부분을 알아보고 싶습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반은 옳아요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가상 구현에서 선형 주소 지정 메모리와 16비트 부호 없는 정수로 표시되는 포인터를 사용한다고 가정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 null 포인터가 0으로 표시된다고 가정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 마지막으로, 당신이 16바이트의 메모리를 요구한다고 가정하고,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *p = malloc(16);&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 그러면 숫자 값이 65520보다 작은 포인터를 얻을 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;65520이라는 값 자체는 유효하지 않을 것입니다. 왜냐하면 여러분이 정확히 지적하신 것처럼, 할당이 성공했다고 가정하면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;p + 16&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 Null 포인터가 되어서는 안 되는 유효한 포인터입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 이제 가상 구현에서 선형 주소 지정 메모리와 32비트 부호 없는 정수로 표현되는 포인터를 사용하지만 주소 공간은 16비트에 불과하다고 가정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 null 포인터가 0으로 표시된다고 가정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 마지막으로, 당신이 16바이트의 메모리를 요구한다고 다시 한번 가정해 보겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *p = malloc(16);&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 그러면 숫자 값이 65520보다 작거나 같은 포인터만 얻을 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;65520이라는 값 자체가 유효할 것입니다. 구현을 통해 16을 더하면 65536이라는 값이 나오고 16을 빼면 65520으로 돌아갑니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주소 65536에 메모리(물리적 또는 가상)가 전혀 없는 경우에도 유효합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표준은 포인터를 마지막 요소로 증가시킬 때 발생하는 동작을 명시적으로 명시합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열이 종료되기 전인지 또는 종료되기 전인지 확인하기 위한 비교로만 사용할 수 있는 값을 제공합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;포인터는 다른 개체에 대해 유효하게 할당된 메모리를 가리킬 수 있지만, 이는 완전한 정의되지 않은(구현 정의된?) 동작이며 이 포인터를 사용하는 것은 확실히 정의되지 않은 동작입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 얻고자 하는 것은, 한 번의 끝을 가리키는 포인터가 바로 그것입니다. 마지막 요소로 포인터를 늘리면 아주 저렴한 방법으로 배열의 끝을 표시할 수 있는 포인터입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 관련이 없는 객체의 포인터를 비교하는 것은 완전히 말도 안 되는 일입니다. (만약 제가 착각하지 않았다면, 심지어 정의되지 않은 행동도 있을 수 있습니다.)&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 포인터 &quot;값&quot;이 서로 다른 개체 간에 중복될 수 있다는 사실은 문제가 되지 않습니다. 이를 이용하면 정의되지 않은 동작의 땅으로 들어갈 수 있기 때문입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 구현에 따라 달라집니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;적어도 시각적인 C++에서는 배열 경계 검사를 사용하지 않고 배열의 끝을 지나는 요소의 수에 상관없이 포인터를 만들 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참조를 취소해도 액세스 중인 메모리 주소가 프로그램의 할당된 힙/스택 내에 있는 한 여전히 작동합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해당 메모리 위치의 값이 무엇이든 읽거나 수정하게 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주소가 할당된 메모리 공간 밖에 있으면 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이런 종류의 코딩은 추적하기 매우 어려운 버그를 만들기 때문에 디버거는 이러한 것들을 탐지하기 위한 검사를 수행합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/26420348/can-c-array-end-at-memory-boundary&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/786</guid>
      <comments>https://megabox.tistory.com/786#entry786comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:07:54 +0900</pubDate>
    </item>
    <item>
      <title>어레이를 결합할 때 정의되지 않은 속성 '푸시'를 읽을 수 없습니다.</title>
      <link>https://megabox.tistory.com/785</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어레이를 결합할 때 정의되지 않은 속성 '푸시'를 읽을 수 없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열의 내용을 다른 배열로 푸시할 때 다음과 같이 표시됨&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 토막글의 &quot;Uncatched TypeError: 정의되지 않은 속성 'push'를 읽을 수 없습니다.&quot; 오류입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;var order = new Object(), stack = [];
for(var i=0;i&amp;lt;a.length;i++){
    if(parseInt(a[i].daysleft) == 0){ order[0].push(a[i]); }
    if(parseInt(a[i].daysleft) &amp;gt; 0){ order[1].push(a[i]); }
    if(parseInt(a[i].daysleft) &amp;lt; 0){ order[2].push(a[i]); }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 번째 &lt;strong&gt;if&lt;/strong&gt; 문에서 이 오류가 발생하는 이유는 무엇입니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정말 고마워.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오류가 나는 이유는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;order[1]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 오류 메시지는 코드 어딘가에서 어떤 이름을 가진 속성에 액세스하려고 시도하고 있음을 의미합니다(여기서는 &quot;push&quot;입니다). 그러나 개체 대신 참조를 위한 기본은 실제로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 따라서 문제를 찾기 위해 속성 이름(&quot;push&quot;)을 참조하는 코드를 찾아 왼쪽에 무엇이 있는지 확인합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 경우 코드는&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if(parseInt(a[i].daysleft) &amp;gt; 0){ order[1].push(a[i]); }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 말은 코드가 예상하는 것은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;order[1]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;집단이 될 겁니다&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 이건 배열이 &lt;em&gt;아니라&lt;/em&gt; 배열입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 오류가 나는군요&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;왜 그럴까요?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;? 뭐, 당신의 코드는 당신의 질문에 근거해서 다른 어떤 것도 만들지 못합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자, 만약 당신이 그냥 여기에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a[i]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 물건의 특정 속성에서, 전화할 필요가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.push()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전혀:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var order = [], stack = [];
for(var i=0;i&amp;lt;a.length;i++){
    if(parseInt(a[i].daysleft) == 0){ order[0] = a[i]; }
    if(parseInt(a[i].daysleft) &amp;gt; 0){ order[1] = a[i]; }
    if(parseInt(a[i].daysleft) &amp;lt; 0){ order[2] = a[i]; }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열 공백을 초기화하지 않은 경우 이 오류가 각도 단위로 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;userlist: any[ ];
this.userlist = [ ]; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;userlist: any = [ ];
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;order&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Object&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 조금도 아닌&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Array()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;push()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열용입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/8925820/javascript-object-push-function&quot;&gt;이 게시글 참조&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래도 시도해 보십시오(그러나 하위 개체는 다음과 같아야 합니다).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Arrays()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var order = new Array();

// initialize order; n = index
order[n] = new Array();

// and then you can perform push()
order[n].push(some_value);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 order를 배열이 아닌 개체의 배열로 사용할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var order = new Array();

order.push(a[n]);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대부분의 경우 배열을 초기화해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let list: number[] = [];
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래와 같이 타자기로 고쳤습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;화재 정의 및 초기화&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;페이지 번호: number[] = [ ];&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것을 채우는 것보다&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;for (let i = 1; i &amp;lt; 201; i++) {
    this.pageNumbers.push(i);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로 배열의 끝에 요소를 추가할 때 푸시 방법을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서는 'order'인 배열이 아닌 개체에 푸시 메서드를 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;디버그하는 단계...&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;개체를 빈 배열로 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var order = [], stack = [];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 평소처럼 이 배열에 푸시 방법을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 'order' 배열에 푸시 메서드를 사용하려면 배열에 푸시 메서드를 호출할 때 배열 인덱스를 사용하면 안 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열 이름만 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var order = [], stack = [];

for(var i = 0; i&amp;lt;a.length; i++){

   if(parseInt(a[i].daysleft) == 0){ 
     order.push(a[i]); 
   }

   if(parseInt(a[i].daysleft) &amp;gt; 0){ 
     order.push(a[i]); 
   }

   if(parseInt(a[i].daysleft) &amp;lt; 0){ 
     order.push(a[i]); 
   }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인덱스를 지정할 필요는 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;order[0].push(a[i])&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그냥 하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;order.push(a[i])&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 질문에 대한 답은 단순한 순서는 물체가 아니라 배열을 만드는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;varorder = new Array(); order. push(/item to&lt;em&gt; &lt;/em&gt;push/); 이 오류가 나타날 때마다 이 오류가 어떤 속성의 왼쪽에 있는지 확인하면 됩니다. 이 경우에는 push가 order[]이므로 이 오류가 정의되지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;순서[]가 정의되지 않은 이유입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;순서 정의[1]...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;[n] = 어느 정도 가치가 있습니다&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것으로 해결될 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;논리적 AND(&amp;amp;&amp;amp;)를 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;let users = [{id: 1, name: 'amoos'}, {id: 2, name: 'rifat'}]
let newUser = {id: 3, name: 'someone'} 
    users &amp;amp;&amp;amp; users.push(newUser)    
    console.log('After', users)&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/24841476/cannot-read-property-push-of-undefined-when-combining-arrays&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/785</guid>
      <comments>https://megabox.tistory.com/785#entry785comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:07:47 +0900</pubDate>
    </item>
    <item>
      <title>Google Sign In 버튼을 클릭하면 앱이 다운됩니다.</title>
      <link>https://megabox.tistory.com/784</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Google Sign In 버튼을 클릭하면 앱이 다운됩니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구글 로그인 SDK 4.0.1을 사용하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구글 사인인 버튼을 누르면 앱이 다운됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 이 문제를 해결하는 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Your app is missing support for the following URL schemes: com.googleusercontent.apps.107731993306-6s44u18onibp6gi0ddj94si1aifshhg6'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000101ac0d4b __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x000000010110121e objc_exception_throw + 48
    2   CoreFoundation                      0x0000000101b2a2b5 +[NSException raise:format:] + 197
    3   xxxxx                           0x000000010084b3cb -[GIDSignIn signInWithOptions:] + 246
    4   xxxxx                           0x000000010084efc2 -[GIDSignInButton pressed] + 242
    5   UIKit                               0x00000001028f78bc -[UIApplication sendAction:to:from:forEvent:] + 83
    6   UIKit                               0x0000000102a7dc38 -[UIControl sendAction:to:forEvent:] + 67
    7   UIKit                               0x0000000102a7df51 -[UIControl _sendActionsForEvents:withEvent:] + 444
    8   UIKit                               0x0000000102a7ce4d -[UIControl touchesEnded:withEvent:] + 668
    9   UIKit                               0x0000000102965545 -[UIWindow _sendTouchesForEvent:] + 2747
    10  UIKit                               0x0000000102966c33 -[UIWindow sendEvent:] + 4011
    11  UIKit                               0x00000001029139ab -[UIApplication sendEvent:] + 371
    12  UIKit                               0x000000010310072d __dispatchPreprocessedEventFromEventQueue + 3248
    13  UIKit                               0x00000001030f9463 __handleEventQueue + 4879
    14  CoreFoundation                      0x0000000101a65761 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    15  CoreFoundation                      0x0000000101a4a98c __CFRunLoopDoSources0 + 556
    16  CoreFoundation                      0x0000000101a49e76 __CFRunLoopRun + 918
    17  CoreFoundation                      0x0000000101a49884 CFRunLoopRunSpecific + 420
    18  GraphicsServices                    0x00000001074cfa6f GSEventRunModal + 161
    19  UIKit                               0x00000001028f5c68 UIApplicationMain + 159
    20  xxxxxxxx                           0x00000001007c449f main + 111
    21  libdyld.dylib                       0x0000000104d5368d start + 1
    22  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException`
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 앱 대리인.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스위프트는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate {
public func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
   if (error == nil) {

    let userId:NSString = user.userID as NSString;                  // For client-side use only!
    let idToken: NSString = user.authentication.idToken as NSString; // Safe to send to the server
    let fullName:NSString = user.profile.name as NSString;
    let givenName:NSString = user.profile.givenName as NSString;
    let familyName:NSString = user.profile.familyName as NSString;
    let email:NSString = user.profile.email as NSString;
    print(userId)
    print(userId,idToken,fullName,givenName,familyName,email)
    }

   else {
    print(&quot;\(error.localizedDescription)&quot;)
    }
}

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -&amp;gt; Bool {

    let kclientID:NSString = &quot;107731993306-xxxxxxxxxxxxxxxxx.apps.googleusercontent.com&quot;

   GIDSignIn.sharedInstance().clientID = kclientID as String!

    GIDSignIn.sharedInstance().delegate = self
    return true
}


func application(application: UIApplication,
                 openURL url: NSURL, options: [String: AnyObject], annotation:Any, sourceApplication:String?) -&amp;gt; Bool {

    return GIDSignIn.sharedInstance().handle(url as URL!, sourceApplication:sourceApplication, annotation: annotation)
} 
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해결책을 제시해 주십시오.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;왜 추락한 거지?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오류가 분명하게 말해주듯이, 당신의 앱은 url scheme에 대한 지원이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;info.plist에 다음 구성을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;key&amp;gt;CFBundleURLTypes&amp;lt;/key&amp;gt;
&amp;lt;array&amp;gt;
    &amp;lt;dict&amp;gt;
        &amp;lt;key&amp;gt;CFBundleTypeRole&amp;lt;/key&amp;gt;
        &amp;lt;string&amp;gt;Editor&amp;lt;/string&amp;gt;
        &amp;lt;key&amp;gt;CFBundleURLSchemes&amp;lt;/key&amp;gt;
        &amp;lt;array&amp;gt;
            &amp;lt;string&amp;gt;***Your bundle ID***&amp;lt;/string&amp;gt;
        &amp;lt;/array&amp;gt;
    &amp;lt;/dict&amp;gt;
    &amp;lt;dict&amp;gt;
        &amp;lt;key&amp;gt;CFBundleTypeRole&amp;lt;/key&amp;gt;
        &amp;lt;string&amp;gt;Editor&amp;lt;/string&amp;gt;
        &amp;lt;key&amp;gt;CFBundleURLSchemes&amp;lt;/key&amp;gt;
        &amp;lt;array&amp;gt;
            &amp;lt;string&amp;gt;com.googleusercontent.apps.107731993306-6s44u18onibp6gi0ddj94si1aifshhg6&amp;lt;/string&amp;gt;
        &amp;lt;/array&amp;gt;
    &amp;lt;/dict&amp;gt;
    &amp;lt;dict&amp;gt;
        &amp;lt;key&amp;gt;CFBundleTypeRole&amp;lt;/key&amp;gt;
        &amp;lt;string&amp;gt;Editor&amp;lt;/string&amp;gt;
        &amp;lt;key&amp;gt;CFBundleURLSchemes&amp;lt;/key&amp;gt;
        &amp;lt;array&amp;gt;
            &amp;lt;string&amp;gt;***Something here***&amp;lt;/string&amp;gt;
        &amp;lt;/array&amp;gt;
    &amp;lt;/dict&amp;gt;
&amp;lt;/array&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 url에서 아이디를 확인하세요 =&amp;gt; https://developers.google.com/identity/sign-in/ios/start-integrating . https://developers.google.com/identity/sign-in/ios/start-integrating&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;info.plist는 -&amp;gt;와 같이 보여야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eSbun.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eSbun.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트에 URL 스킴을 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트 구성 열기: 왼쪽 트리 보기에서 프로젝트 이름을 두 번 클릭합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;TARGETS&lt;/strong&gt; 섹션에서 앱을 선택한 다음 Info 탭을 선택하고 &lt;em&gt;URL Type 섹션&lt;/em&gt;을 펼칩니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;+&lt;/em&gt; 버튼을 클릭하고 URL 스키마를 &lt;em&gt;추가합니다 &lt;/em&gt;-com.&lt;em&gt;google&lt;/em&gt; 사용자 &lt;em&gt;content.&lt;/em&gt;apps.&lt;em&gt;107731993306-6s44u18onibp6gi0ddj94si1aifshh&lt;/em&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;a href=&quot;https://developers.google.com/identity/sign-in/ios/start-integrating#add_a_url_scheme_for_google_sign-in_to_your_project&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://developers.google.com/identity/sign-in/ios/start-integrating#add_a_url_scheme_for_google_sign-in_to_your_project&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/r5uXP.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/r5uXP.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저도 그 충돌 사고를 당했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 승낙된 대답은 저에게 도움이 되지 않았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 방법으로 사고를 고쳤습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다시 확인해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AppDelegate&lt;/code&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;직선&lt;/strong&gt; DNS:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;GIDSignIn.sharedInstance().clientID = &quot;536164374389-ivga9a9at2g31nfmhpvdyhc98yf6afnr.apps.googleusercontent.com&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Info.plist&lt;/code&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;DNS&lt;/strong&gt; 역방향:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;string&amp;gt;com.googleusercontent.apps.536164374389-ivga9a9at2g31nfmhpvdyhc98yf6afnr&amp;lt;/string&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Xcode는 문자열을 제공합니다 - 아래 이미지와 같이 여기에 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ef9UF.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ef9UF.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저도 비슷한 문제에 부딪혔습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 방법이 도움이 되지 않았다면 이 방법을 사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구글과 페이스북 로그인을 함께 구현하는 경우가 많아 함께 구현할 가능성이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최신 Google Dev 문서를 사용하면 프로젝트 대상 &amp;gt; 정보 &amp;gt; URL 유형을 사용하여 URL 스킴을 구현할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;페이스북 문서들은 당신에게 url scheme을 실행하라고 말할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;info.plist&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;file. plist 파일로 구현하면 다른 URL Scheme이 대체됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 Project의 Target 섹션에서 모든 URL Scheme을 구현합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Zw7cW.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트 대상은 다음과 같습니다.&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;누군가 이것이 도움이 되기를 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Flutter에서 와주신 분들께는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;google_sign_in&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;iOS 기기의 패키지 - 이미 &lt;a href=&quot;https://stackoverflow.com/a/60057204/5502121&quot;&gt;여기&lt;/a&gt;서 이 문제를 다루었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;긴 이야기 요약: 속성을 명시적으로 설정해 봅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;hostedDomain&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;clientId&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;GoogleSignIn googleSignIn = GoogleSignIn( 
  scopes: ['email', 'profile'],
  hostedDomain: &quot;&quot;, 
  clientId: &quot;&quot;,);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 일반적인 것 대신에 역클라이언트 ID를 추가해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유사한 로그를 위해 4시간 이상을 낭비했습니다(VScode로 flooter해서 ios app을 개발하고 있습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제게 가장 큰 문제는 GoogleService-Info.plist가 실제로 Runner 디렉토리에 있지 않다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Runner와 add files 버튼을 마우스 오른쪽 버튼으로 클릭하여 GoogleService-Info.plist를 XCODE로 추가해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전반적으로 The flotter debugger(또는 vScode plugin?)가 오류에 대한 전체 정보를 제공하지 않는다는 것을 알게 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자세한 내용은 https://github.com/flutter/flutter/issues/22536 에서 확인하시기 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kdtjz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 이미지에서 'Right Clicking Runner and than add files' 항목을 확인합니다.&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GoogleSignIn SDK 5.0에서&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드를 추가합니다&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GIDsignIn.sharedInstance().delegate = self&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GIDsignIn.sharedInstance().ViewController = self를 표시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 코드 대신에&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GIDsignIn.sharedInstance().delegate = self&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GIDsignIn.sharedInstance().uiDelegate = self&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저의 경우, 리액티브 파이어베이스를 사용하여 웹과 ios clientiD를 모두 설정하고 iosClientId만 사용하여 해결했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GoogleSignin.configure({ webClientId: '' });&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL을 다음과 같이 반전시키기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;com.googleusercontent.apps.app_id&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xeITH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;url types는 마침내 이렇게 보입니다.&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 경우에는 두 개의 info.plist 파일을 가지고 있었는데, 하나는 debbug용이고 하나는 프로덕션용입니다. 둘 다 동일한 URL Scheme을 가지고 있는지 확인하세요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 누군가가 위의 모든 옵션을 시도했지만 여전히 같은 오류가 발생한다면요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Google 서비스를 추가하는 것을 잊지 마십시오.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트에 파일을 나열합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저의 경우 파이어베이스에서 Xcode 프로젝트로 GoogleService-info.plist를 내보내는 것을 잊어버렸습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/42197729/app-getting-crash-when-click-on-googlesignin-button&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>SWIFT</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/784</guid>
      <comments>https://megabox.tistory.com/784#entry784comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:07:40 +0900</pubDate>
    </item>
    <item>
      <title>POI를 사용하여 숫자 형식으로 Excel 셀 값 설정</title>
      <link>https://megabox.tistory.com/783</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;POI를 사용하여 숫자 형식으로 Excel 셀 값 설정&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;숫자 데이터를 엑셀 시트에 저장하고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;숫자 데이터는 내 자바 코드에서 String 타입으로 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주조하지 않고 숫자로 설정 가능한가요?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래 코드를 사용해 보았지만 숫자형으로 변환되지 않았습니다. (번호는 텍스트로 저장되어 있다고 엑셀로 경고를 받습니다...)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;HSSFCell dCell =...
dCell.setCellType(Cell.CELL_TYPE_NUMERIC);
dCell.setCellValue(&quot;112.45&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 그 가치를 두 배로 제공해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html#setCellValue%28boolean%29&quot;&gt;의사&lt;/a&gt;의 말대로라면&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;setCellValue&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;code&gt;public void setCellValue(double value)&lt;/code&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;셀의 숫자 값을 설정합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;매개변수&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;value&lt;/em&gt; - 셀을 설정할 숫자 값입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수식의 경우 미리 계산된 값을 설정하고, 수치의 경우 값을 설정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 유형의 경우 셀을 숫자 셀로 변경하여 값을 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서, 그래야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dCell.setCellValue(new Double(&quot;123&quot;));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오어&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dCell.setCellValue(123);  //Remember, the way you did was, you actually passed a string (no quotes)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;빅 십진법을 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dCell.setCellValue(new BigDecimal(&quot;112.45&quot;).doubleValue());
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;래퍼 클래스를 사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dCell.setCellValue(new Double(112.45));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그건 그렇고, 더블 코트 대신에 값만 제시하면 다음과 같이 효과가 있을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dCell.setCellValue(112.45);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오래된 것이지만 그래도 이것은 누군가에게 도움이 될 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NPOI를 사용하는 NET&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dCell.setCellValue(Convert.ToDouble(112.45));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cell.SetCellType(NPOI.SS.UserModel.CellType.NUMERIC); 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;경고를 제거하지는 않지만 .net에서 모든 정수에 대한 Double과 Double 값으로 변환한 후 첫 번째 코드가 작동했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/8967942/setting-excel-cell-value-in-numeric-format-using-poi&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Excel</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/783</guid>
      <comments>https://megabox.tistory.com/783#entry783comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:07:30 +0900</pubDate>
    </item>
    <item>
      <title>Oracle PL/SQL where 절에서 변수를 사용하는 방법</title>
      <link>https://megabox.tistory.com/782</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle PL/SQL where 절에서 변수를 사용하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle PL/SQL where 절에서 작동할 변수를 얻을 수 없는 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 마이크로소프트 SQL 서버 배경 출신이고 거기서는 쉬웠습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 다음과 유사한 작업을 수행하는 데 필요한 모든 단계는 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;declare @var int set @var = 1

select * from SomeTable where SomeField = @var
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 PL/SQL에서는 어려울 것 같지 않지만 분명히 어려울 것입니다. :-/ PL/SQL에서는 커서 등을 사용해야 한다고 하던데요?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 도움이라도 주시면 대단히 감사하겠습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SELECT가 반환하는 데이터를 어떻게 처리하시겠습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PL/SQL이 전혀 필요 없는 경우 SQL Plus에서 이 작업을 수행하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;variable var number
exec :var := 1

select * from SomeTable where SomeField = :var;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 SQL Developer나 Toad와 같은 툴에서 다음과 같은 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select * from SomeTable where SomeField = :var;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 :var에 대한 값을 입력하라는 메시지가 나타납니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 코드는 변수를 선언합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;var&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에 사용하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WHERE&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;절과 변수&lt;/font&gt;&lt;/font&gt;&lt;code&gt;result&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;결과를 에 넣은 다음 PL/SQL 블록 안에서 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DECLARE
   var      INT := 1;
   result   INT;
BEGIN
   SELECT 123
     INTO result
     FROM DUAL
    WHERE var = 1;

   DBMS_OUTPUT.put_line (var);
   DBMS_OUTPUT.put_line (result);
END;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DBMS_OUTPUT.PUT_LINE&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;호출을 통해 다음과 같은 DBMS 출력이 생성됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;1
123
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;declare

  type t_rec is record
  (
  col1 number,
  col2 myTable.col2%type
  );
  v_rec t_rec;

  type t_tab is table of v_rec%type index by binary_integer;
  v_tab t_tab;

begin

  select col1, col2
  bulk collect into v_tab
  from myTable
  where col3 = 'BLAH';

  -- do something great with v_tab...

end;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 변수를 선택(또는 대량 수집)하려고 해도 반환되는 행이 없으면 no_data_found 예외가 발생하므로 해당 상황을 처리해야 할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;pl/sql 컬렉션에 대한 &lt;a href=&quot;http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/collections.htm#CIHIEBJC&quot; rel=&quot;nofollow&quot;&gt;자세한&lt;/a&gt; 내용은 &lt;a href=&quot;http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/collections.htm#CIHIEBJC&quot; rel=&quot;nofollow&quot;&gt;여기&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위에서는 연관 배열을 사용하지만 중첩된 표와 배열도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다시 링크를 봅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 써요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select * from sec_mainmenu where serno = '&amp;amp;MENU_ID';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행하면 PL/sql에서 MENU_ID 값을 입력하라는 메시지가 나타납니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/5666647/how-to-use-variables-in-an-oracle-pl-sql-where-clause&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/782</guid>
      <comments>https://megabox.tistory.com/782#entry782comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:07:24 +0900</pubDate>
    </item>
    <item>
      <title>const로 정의된 객체의 값을 포인터를 통해 변경할 수 있습니까?</title>
      <link>https://megabox.tistory.com/781</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;const로 정의된 객체의 값을 포인터를 통해 변경할 수 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
int main()
{
    const int a = 12;
    int *p;
    p = &amp;amp;a;
    *p = 70;
}
&lt;/code&gt;&lt;/pre&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;이것은 &quot;정의되지 않은 행동&quot;입니다. 이것을 시도할 때 어떤 일이 일어날지를 기준으로 예측할 수 없다는 것을 의미합니다.&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;이 경우 가장 자주 발생하는 것은 &quot;예&quot;입니다. 변수는 상수든 아니든 간에 단지 메모리의 한 위치일 뿐이며, 일정성의 규칙을 어기고 간단히 덮어쓸 수 있습니다. (물론 프로그램의 다른 부분이 일정한 데이터에 의존하고 있다면 심각한 버그를 일으킬 것입니다!)&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;const static&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;data -- 컴파일러는 이러한 변수를 읽기 전용 영역의 메모리에 넣을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 MSVC는 일반적으로 실행 파일의 .text 세그먼트에 고정 int를 넣는데, 이는 사용자가 파일에 쓰려고 하면 운영 체제가 보호 오류를 던져 프로그램이 중단된다는 것을 의미합니다.&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;em papago-id=&quot;6-1&quot;&gt;있는&lt;/em&gt; 한 가지는 이 패턴이 당신의 코드를 읽어야만 하는 사람들을 짜증나게 할 것이라는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명확하지 않은 행동입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;증명:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/* program.c */

int main()
{
        const int a = 12;
        int* p;
        p = &amp;amp;a;
        *p = 70;
        printf(&quot;%d\n&quot;, a);
        return 0;
}


gcc program.c
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력은 70(gcc 4.3)이 됩니다.&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;gcc -O2 program.c
&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;출력은 12가 될 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;최적화를 수행할 때 컴파일러는 아마도 레지스터에 12를 로드하고 a가 변경될 수 없다는 것을 &quot;알기&quot; 때문에 인쇄용 a에 액세스해야 할 때 다시 로드하지 않습니다.&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; 수정 a&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const&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;.text&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 papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 정말로 gcc와 함께 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래도 마음에 안들었어요.&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;test.c:6: warning: assignment는 한정자를 포인터 대상 유형에서 폐기합니다.&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;그러나 실행 시 값이 변경되었습니다.&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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&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;a&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;is global (gcc-compiled 프로그램이 나에게 준&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;segmentation fault&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;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 말하면, 사랑하는 C에서는 거의 항상 변경되거나 노출되어서는 안 되는 것들을 해킹할 수 있는 방법을 찾을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 한 예가 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 가난한 사람(아마도 6개월 후의 제 자신)을 생각하면, 저는 종종 그렇게 하지 않기로 결정합니다.&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;p&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font 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;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;const int*&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;&amp;amp;a&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;=&amp;gt; 의 주소=&amp;gt; a&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;암묵적 캐스트는 일관성을 제거하지만, gcc는 경고를 던집니다(이는 구현에 따라 크게 달라집니다).&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;포인터가 a로 선언되지 않았으므로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const&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;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 그 포인터가 다음과 같이 선언된다면.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const int* p = &amp;amp;a&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;*p = 70&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;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드에는 &lt;em papago-id=&quot;34-1&quot;&gt;제약&lt;/em&gt; 조건 &lt;em papago-id=&quot;34-1&quot;&gt;위반&lt;/em&gt;이 포함되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const int a = 12;
int *p;
p = &amp;amp;a;
&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;위반된 제약 조건은 C116.5.16.1/1 &quot;Simple assignment&quot;입니다. 두 피연산자가 모두 포인터라면 왼쪽이 가리키는 유형에는 오른쪽이 가리키는 유형의 모든 한정자가 있어야 합니다. (그리고 유형 sans 한정자는 호환되어야 합니다.)&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;&amp;amp;a&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;const int *&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;const&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;p&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어느 것이&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int *&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;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;Pointer to a constant&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;/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;Constant Pointer&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 가 메모리  다른  할 수 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 즉, 포인터가 메모리 위치를 가리키면 다른 위치를 가리킬 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나쁜 생각, 나쁜 생각.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 플랫폼 및 구현별 동작을 수행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;상수가 쓰기 불가능한 메모리에 저장되어 있는 플랫폼에서 실행 중인 경우, 이는 분명히 작동하지 않습니다.&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;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 값을 변경할 때의 문제&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수는 컴파일러가 그런 일이 일어날 것으로 예상하지 않는다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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 int a = 12;
int * p = &amp;amp;a;
*p = 70;
printf(&quot;%d\n&quot;, a);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러는 왜 다음과 같이 읽을까요?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막 진술에서?&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;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;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;12&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;code&gt;const&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 절대 변하지 않을 겁니다&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 옵티마이저는 위의 코드를 다음과 같이 변환할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const int a = 12;
int * p = &amp;amp;a;
*p = 70;
printf(&quot;%d\n&quot;, 12);
&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;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;strong papago-id=&quot;58-1&quot;&gt;코드&lt;/strong&gt;를 다음과 같이 변환할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;printf(&quot;%d\n&quot;, 12);
&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;효과가 없는 코드를 제외하면 전체 프로그램에도 영향이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반면에, 괜찮은 컴파일러는 당신의 코드가 결함이 있다는 것을 인식하고 당신에게 경고할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int * p = &amp;amp;a;
&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;pre&gt;&lt;code&gt;const int * p = &amp;amp;a;
&lt;/code&gt;&lt;/pre&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;p&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;code&gt;int&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;code&gt;const int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게 선언되면 다음 줄은 하드 컴파일 오류를 발생시킵니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경고를 없애려면 다음을 캐스팅해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int * p = (int *)&amp;amp;a;
&lt;/code&gt;&lt;/pre&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&gt;&lt;/font&gt;&lt;code&gt;const&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;a&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;const&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;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;/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;C 표준이 그 경우에 대한 동작을 정의했다면 모든 컴파일러가 구현해야 할 것이고 표준이 무엇을 정의했든 구현이 어려워 컴파일러를 작성하려는 모든 사람에게 큰 부담이 되었을 것입니다.&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;font class=&quot;papago-parent&quot;&gt;다음과 같이 규정하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const&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&gt;&lt;/p&gt;&lt;p&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&gt;&lt;br&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드를 사용해 보십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

int main()
{
    const  int x=10;

    int *p;
    p=(int*)&amp;amp;x;
    *p=12;
    printf(&quot;%d&quot;,x);
}
&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;URL : https://stackoverflow.com/questions/3801557/can-we-change-the-value-of-an-object-defined-with-const-through-pointers&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/781</guid>
      <comments>https://megabox.tistory.com/781#entry781comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:42:46 +0900</pubDate>
    </item>
    <item>
      <title>$파일의 각 $파일에 대한 PowerShell</title>
      <link>https://megabox.tistory.com/780</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$파일의 각 $파일에 대한 PowerShell&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 기준에 맞는 파일을 이동하고 파일 목록을 가져오는 PowerShell 스크립트가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foreach&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;만약 $i가 존재하지 않는다면 실행되지 않을 것이라고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 $filePath에 결과가 없는 경우 forEach 루프가 한 번 실행되는 이유는 무엇입니까?&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;이 작업을 수행하려면 $filePath가 forEach 루프 이전에 존재하는지 확인하기만 하면 됩니다.&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;예를 들어 if($filePath){...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; $filePath = Get-ChildItem -Path $sourceDir | Where-Object {! $_.PSIsContainer -AND ($_.Name -Match &quot;^XXX_XXX*&quot; -OR $_.Name -Match &quot;^YYY_XX*&quot;)}

 ForEach($i in $filePath){
     $sfName =  $i.Name
     $sfDir = $i.Directory
     $tFileName = testFile $destDir $sfName
     $sFile = $sourceDir + $sfName
     $tFile = $destDir + $tFileName

     moveFile $sFile $tFile
&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;이 문제는 PowerShell V3 IIRC에서 해결된 고전적인 문제입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파워쉘의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foreach&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루프를 사용하면 스칼라 값에 대해 반복할 수 있습니다. 예:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;foreach ($i in 1) {$i}
&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;반복하는 컬렉션에 0, 1 또는 N개의 항목이 포함될 수 있으므로 편리합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$files = Get-ChildItem c:\temp\*.txt
foreach ($file in $files) {$file}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우에는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Get-ChildItem&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;0, 1 또는 N개의 파일을 반환할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;N개의 파일은 훌륭합니다. 우리는 그것을 반복할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 만약 그것이 하나의 파일을 반환하고 당신이 사용할 수 있도록 배열된 하나의 파일을 고정시켜야 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foreach&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;foreach&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;code&gt;Get-ChildItem&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;0개의 개체를 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 $파일에는 빈 배열이 할당되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 $null이 할당됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell은 $null을 스칼라로 간주하므로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foreach&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루프는 반복되는 값이 $ null인 경우 한 번 실행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그건 좀 꽝이네요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 저를 비롯한 많은 분들이 일찍부터 팀에 말씀을 드려서 V3에서 바뀌었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foreach&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값이 $ null이면 스칼라를 반복하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;V1/V2에서 이 문제를 해결하는 또 다른 방법은 빈 경우 $null이 아닌 빈 어레이를 생성하도록 하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 그것을 사용해서 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열식(예:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$files = @(Get-ChildItem c:\temp\*.txt)
foreach ($file in $files) {$file}
&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;0, 1, N 파일에 적용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;0개의 파일에 대해 작동합니다. 왜냐하면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@()&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;foreach&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;빈 배열을 루프오버할 때 본문을 실행하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/29440314/powershell-foreach-file-in-files&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PowerShell</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/780</guid>
      <comments>https://megabox.tistory.com/780#entry780comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:42:38 +0900</pubDate>
    </item>
    <item>
      <title>각도 사용법.각 컨트롤러 또는 스코프에서 Json에게</title>
      <link>https://megabox.tistory.com/779</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;각 컨트롤러 또는 스코프에서 Json에게&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular.js 객체를 angular를 사용하여 Json 표현으로 밀어 넣으려는 다음 jsFiddle 예를 참조하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Json에게.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과적으로 &quot;$SCOPE&quot;를 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/K2GsS/12/&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://jsfiddle.net/K2GsS/12/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 하고 싶은 일은 현재의 속성과 값을 구하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 예에서 제가 보고 싶은 것은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{ firstName: 'Frank', lastName: 'Williams' }
&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;Json 형태(범위를 사용하지 않는 것)로 해당 데이터를 얻을 수 있는 더 나은 방법이 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;분명히 나는 값을 가져다가 Json 표현을 밀어내는 방법을 손으로 굴릴 수 있지만 컨트롤러가 바뀌면 그것도 기능하기 때문에 차라리 toJson 타입 방법을 부르고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 하는 적절한 방법을 아는 사람?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;미리 감사드립니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 jQuery 세계에서 온다는 것을 알 수 있지만 angular.js로 일이 훨씬 간단해지고 있습니다. 이 jsFiddle: http://jsfiddle.net/pkozlowski_opensource/ASspB/1/ 을 확인해 주세요.&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;angular.js를 사용하면 이벤트를 훨씬 더 간단하게 첨부할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;input type=&quot;button&quot; ng-click=&quot;showJson()&quot; value=&quot;Object To JSON&quot; /&amp;gt;
&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; $scope.showJson = function() {
    $scope.json = angular.toJson($scope.user);
}
&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;실제로 angular.js 필터를 사용하면 이 작업을 더욱 쉽게 수행할 수 있습니다. jsFiddle: http://jsfiddle.net/pkozlowski_opensource/ASspB/2/ 에서 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{{user | json}}
&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;angular.js를 사용하면 jQuery 습관 중 일부를 &quot;학습하지&quot; 않으면 되지만, 대부분의 경우 훨씬, 훨씬 쉬워지기 때문에 좋습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;json 필터에 내장된 각도를 다음과 같이 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{{ user | json }}
&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;여기서 user는 문자열화하거나 angular를 사용할 Json 개체입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Json으로 변환하여 JSON 형식의 문자열로 변환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 fiddle https://jsfiddle.net/deeps_the_coder/vtz6ej8f/2/ 을 참고해주세요.&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;$scope&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;angular 1.5.9&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;strong papago-id=&quot;2-1&quot;&gt;구성요소&lt;/strong&gt; 예제(&lt;strong papago-id=&quot;2-3&quot;&gt;각도&lt;/strong&gt; 1.5.&lt;strong papago-id=&quot;2-3&quot;&gt;8&lt;/strong&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;strong papago-id=&quot;15-1&quot;&gt;각도 2&lt;/strong&gt;로 쉽게 마이그레이션할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 이 모든 소스를 별도의 파일로 분리할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;Type Safety&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;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var module = angular.module(&quot;settingsApp&quot;, []);

module.service(&quot;userSettingsService&quot;, UserSettingsService);

module.component(&quot;userDetails&quot;, {
        template: `
        	&amp;lt;input ng-model=&quot;$ctrl.userDetail.firstName&quot; /&amp;gt;
            &amp;lt;input ng-model=&quot;$ctrl.userDetail.lastName&quot; /&amp;gt;
            &amp;lt;input type=&quot;button&quot; ng-click=&quot;$ctrl.showJson()&quot; value=&quot;to JSON&quot; /&amp;gt;
            &amp;lt;hr/&amp;gt;  
            {{$ctrl.json}}`,
      	controller: UserDetailsController
    });

UserSettingsService.$inject = [&quot;$q&quot;];
function UserSettingsService($q) {
	var _this = this;
	this.$q = $q;
	this.userDetails = [{
        firstName: &quot;Frank&quot;,
        lastName: &quot;Williams&quot;
    }];
	this.getSettings = function (id) {
    	return _this.$q.resolve(this.userDetails[id]);
    }
}

UserDetailsController.$inject = [&quot;userSettingsService&quot;];
function UserDetailsController(userSettingsService) {
	var _this = this;
	var userId = 0;
	
    this.userSettingsService = userSettingsService;
    userSettingsService.getSettings(userId).then(function (data) {
    	_this.userDetail = data;
    });
}

UserDetailsController.prototype.showJson = function() {
    this.json = angular.toJson(this.userDetail);
}


angular.bootstrap(document, ['settingsApp']);&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.9/angular.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;user-details&amp;gt;&amp;lt;/user-details&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;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/11819301/how-to-use-angular-tojson-on-a-angular-controller-or-scope&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/779</guid>
      <comments>https://megabox.tistory.com/779#entry779comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:42:31 +0900</pubDate>
    </item>
    <item>
      <title>AngularJS는 ng-model에서 포맷된 날짜를 얻습니다.</title>
      <link>https://megabox.tistory.com/778</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AngularJS는 ng-model에서 포맷된 날짜를 얻습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타임스탬프에 모델 값으로 채워진 다음 텍스트 입력이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;datetime&quot; ng-model=&quot;workerDetail.dateOfBirth&quot;  class=&quot;form-control&quot; id=&quot;date_of_birth&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 값을 주어진 타임스탬프로 표시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력에 보이는 값을 포맷된 날짜(YYYY/MM/DD)로 변환하고 싶지만, 모델에서는 항상 타임스탬프가 있어야 합니다.&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;{{workerDetail.dateOfBirth | date:'MMM'}}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 운이 없소.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 조언이든 감사합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필터를 사용해보실 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;datetime&quot; ng-model=&quot;mydateOfBirth&quot;  class=&quot;form-control&quot; id=&quot;date_of_birth&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨트롤러 JS&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.$watch('mydateOfBirth', function (newValue) {
    $scope.workerDetail.dateOfBirth = $filter('date')(newValue, 'yyyy/MM/dd'); 
});

$scope.$watch('workerDetail.dateOfBirth', function (newValue) {
    $scope.mydateOfBirth = $filter('date')(newValue, 'yyyy/MM/dd'); 
});
&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;$scope.$watch('workerDetail.dateOfBirth', function (newDate) {
    $scope.workerDetail.dateOfBirth = $filter('date')(newDate, 'HH:mm', 'UTC'); 
});
&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;날짜만 가져오려면 이 코드를 사용하십시오(dd/mm/yyyyy).&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;html&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;col-lg-3&quot;&amp;gt;
&amp;lt;input type=&quot;date&quot; name=&quot;dob&quot; class=&quot;input-lg form-group&quot; ng-model='dob'&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앵귤러js&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.controller('myctrl',function($scope, $http,$window,$filter) {
$scope.sent=function(){
    $scope.date = $filter(&quot;date&quot;)($scope.dob, 'dd-MM-yyyy');
    alert($scope.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;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/26486696/angularjs-get-formatted-date-in-ng-model&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/778</guid>
      <comments>https://megabox.tistory.com/778#entry778comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:42:24 +0900</pubDate>
    </item>
    <item>
      <title>PHP, MySQL 오류: 열 개수가 1행의 값 개수와 일치하지 않음</title>
      <link>https://megabox.tistory.com/777</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHP, MySQL 오류: 열 개수가 1행의 값 개수와 일치하지 않음&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;Column count doesn't match value count at row 1&lt;/code&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;$name = $_GET['name'];
$description = $_GET['description'];
$shortDescription = $_GET['shortDescription'];
$ingredients = $_GET['ingredients'];
$method = $_GET['method'];
//$image = $_GET['image'];
$username = $_GET['username'];
$length = $_GET['length'];
$dateAdded = uk_date();
$conn = mysql_connect('localhost', 'dbname', 'pass');
mysql_select_db('dbname');
$query = sprintf(&quot;INSERT INTO dbname (id, Name, Description, shortDescription, Ingredients, Method, Length, dateAdded, Username) VALUES ('', '%s', '%s', '%s', '%s', '%s', '%s', '%s')&quot;,
    mysql_real_escape_string($name),
    mysql_real_escape_string($description),
    mysql_real_escape_string($shortDescription),
    mysql_real_escape_string($ingredients),
    //mysql_real_escape_string($image),
    mysql_real_escape_string($length),
    mysql_real_escape_string($dateAdded),
    mysql_real_escape_string($username));

    $result = mysql_query($query) or die(mysql_error());
&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;9개의 필드가 나열되어 있지만 8개의 값만 나열되어 있습니다.&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;삽입 쿼리의 열 매개 변수 수는 9개이지만 8개의 값만 제공했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;INSERT INTO dbname (id, Name, Description, shortDescription, Ingredients, Method, Length, dateAdded, Username) VALUES ('', '%s', '%s', '%s', '%s', '%s', '%s', '%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;쿼리는 자동 생성되기 때문에 &quot;id&quot; 매개 변수를 생략해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;INSERT INTO dbname (Name, Description, shortDescription, Ingredients, Method, Length, dateAdded, Username) VALUES ('', '%s', '%s', '%s', '%s', '%s', '%s', '%s')
&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;쿼리에는 8개 또는 9개의 변수가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름, 설명 등&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 가치관, 이런 것들 ---&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'', '%s', '%s', '%s', '%s', '%s', '%s', '%s')&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;, 총 7개만 변수의 수가 값과 같아야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 문제가 있었는데 알아냈어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 당신에게도 효과가 있기를 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/5931900/php-mysql-error-column-count-doesnt-match-value-count-at-row-1&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/777</guid>
      <comments>https://megabox.tistory.com/777#entry777comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:42:17 +0900</pubDate>
    </item>
    <item>
      <title>메모리를 할당하고 문자열을 c로 저장합니다.</title>
      <link>https://megabox.tistory.com/776</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모리를 할당하고 문자열을 c로 저장합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드가 왜 작동하지 않는지 궁금합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int main(int argc, char **argv)
{
     char *test = (char*) malloc(12*sizeof(char));
     test = &quot;testingonly&quot;;
     free(test);
}
&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;고민 끝에 저의 가정은 우선 메모리에 12자를 넣을 공간을 할당하는데 다음 줄의 과제는 스택에 char 배열을 만들고 그 메모리 주소는 테스트를 위해 전달된다는 것이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;so free()는 허용되지 않는 스택의 공간을 해제하려고 합니다.&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;int main(int argc, char **argv)
{
     char *test = (char*) malloc(12*sizeof(char));
     strcpy(test, &quot;testingonly&quot;);
     free(test);
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;char *test = (char*) malloc(12*sizeof(char));

        +-+-+-+-+-+-+-+-+-+-+-+-+
test---&amp;gt;|x|x|x|x|x|x|x|x|x|x|x|x|   (uninitialized memory, heap)
        +-+-+-+-+-+-+-+-+-+-+-+-+

test = &quot;testingonly&quot;;

        +-+-+-+-+-+-+-+-+-+-+-+-+
test +  |x|x|x|x|x|x|x|x|x|x|x|x|
     |  +-+-+-+-+-+-+-+-+-+-+-+-+
     |  +-+-+-+-+-+-+-+-+-+-+-+-+
     +-&amp;gt;|t|e|s|t|i|n|g|o|n|l|y|0|  
        +-+-+-+-+-+-+-+-+-+-+-+-+

free(test); // error, because test is no longer pointing to allocated space.
&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;test&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;&quot;testingonly&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 할당된 장소로 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strcpy&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;strdup&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;malloc&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;strdup&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;NULL&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;char *test = (char*) malloc(12*sizeof(char));
strcpy(test, &quot;testingonly&quot;);

        +-+-+-+-+-+-+-+-+-+-+-+-+
test---&amp;gt;|t|e|s|t|i|n|g|o|n|l|y|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;char *test = strdup(&quot;testingonly&quot;);

        +-+-+-+-+-+-+-+-+-+-+-+-+
test---&amp;gt;|t|e|s|t|i|n|g|o|n|l|y|0|
        +-+-+-+-+-+-+-+-+-+-+-+-+
&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;기본적으로 strcpy는 문자열을 복사하는 적절한 방법입니다.&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;free&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;문자열 리터럴은 일반적으로 메모리의 상수/읽기 전용 섹션에 저장됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;과제는 아무것도 베끼지 않고, 그냥 만드는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;test&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 기억의 영역을 가리킵니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자유롭게 할 수 없습니다.&lt;/font&gt;&lt;font 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;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;code&gt;strdup&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 구현할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신 말이 맞습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 첫 번째 코드 조각에 대해 알아보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *test = (char*) malloc(12*sizeof(char));
&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;test = &quot;testingonly&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 포인터를 수정했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;test&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모리 누출로 이어집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 당신이 자유롭게 하려고 할 때 당신은 실제 할당된 포인터를 자유롭게 하는 것이 아니라 가리키는 &quot;테스트 전용&quot; 리터럴 하나를 자유롭게 하는 것입니다.&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;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 두 번째 코드 조각에 대해, 이것은 리터럴이 있는 곳에서 당신의 것이 있는 곳으로 데이터를 명시적으로 복사했을 때 잘 작동할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;test&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&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;strcpy&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;다른 방법으로는 원시 바이트를 복사하는 경우 'memcpy'가 있습니다.&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;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;#include &amp;lt;stdio.h&amp;gt;
int main(int argc, char **argv)
{
     char *test = (char*) malloc(12*sizeof(char));
     strcpy(test, &quot;testingonly&quot;);
     printf(&quot;string is: %s\n&quot;,test);
     free(test);
     return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;통할 것입니다&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 메모리를 할당하기 위한 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *string;
string = (char *) malloc(15);
&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;strcpy(str, &quot;kavitajain&quot;);
printf(&quot;String = %s,  Address = %u\n&quot;, str, str);
&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;URL : https://stackoverflow.com/questions/8600181/allocate-memory-and-save-string-in-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/776</guid>
      <comments>https://megabox.tistory.com/776#entry776comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:42:11 +0900</pubDate>
    </item>
    <item>
      <title>기본 단어 변경쿼리를 제목별 순서로 누릅니다.</title>
      <link>https://megabox.tistory.com/775</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;기본 쿼리라는 단어를 포스트 ID가 아닌 카테고리를 볼 때 제목별로 순서를 변경하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설명하기에 너무 지루하기 때문에(!) 사용자 지정 쿼리를 사용하는 것보다 기본 설정을 변경하고 싶습니다(사용자 지정 쿼리를 사용하는 방법은 알고 있습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이상적으로 그것은 기능에 들어가는 어떤 코드일 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 템플릿의 php, 코어 설치를 해킹할 필요가 없습니다.&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;http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;pre_get_posts' 작업&lt;/a&gt;을 사용하여 다음과 같은 변수를 기준으로 순서를 변경할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_action( 'pre_get_posts', 'custom_get_posts' );

function custom_get_posts( $query ) {

  if( (is_category() || is_archive()) &amp;amp;&amp;amp; $query-&amp;gt;is_main_query() ) {    
    $query-&amp;gt;query_vars['orderby'] = 'name';
    $query-&amp;gt;query_vars['order'] = 'ASC';
  }

}
&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;참고: is_main_query() 검사를 통해 플러그인 및 테마 기능에서 의도하지 않은 동작이 발생하지 않도록 할 수 있습니다.&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;당신의 기록보관소에서 php, 암호를 찾아보세요&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (have_posts()) : while (have_posts()) : the_post();
&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;$cat_posts = new WP_Query($query_string.&quot;&amp;amp;orderby=title&amp;amp;order=ASC&quot;);
if ($cat_posts-&amp;gt;have_posts()):while($cat_posts-&amp;gt;have_posts()):$cat_posts-&amp;gt;the_post();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 효과가 있을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;update: 소스 코드를 변경하려는 경우에 사용됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 당신의 아카이브에서 또 다른 일을 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드 줄을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;global $query_string; // required
$posts = query_posts($query_string.&quot;&amp;amp;orderby=title&amp;amp;order=ASC&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 암호 앞에&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (have_posts()) : while (have_posts()) : the_post();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 워드 프레스 루프를 사용하면 원하는 것을 얻을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 당신에게 많은 도움이 되기를 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모두에게 감사를 표합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/6467031/change-default-wordpress-query-to-orderby-title&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/775</guid>
      <comments>https://megabox.tistory.com/775#entry775comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:42:03 +0900</pubDate>
    </item>
    <item>
      <title>엑셀 2010에서 &amp;quot;*&amp;quot;자를 제거하는 방법은?</title>
      <link>https://megabox.tistory.com/774</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;엑셀 2010에서 &quot;*&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;Excel 스프레드시트에는 별(*) 문자로 유의성이 표시된 회귀 테이블이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것들은 세포 안에 있는 숫자에 붙어 있고 별들의 숫자는 일정하지 않습니다: 때로는 3개, 때로는 2개, 때로는 1개, 때로는 0개.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;셀에 있는 번호를 사용할 수 있도록 해당 별표를 삭제하고 싶습니다(현재 별표가 존재하여 엑셀에서는 텍스트로 이해되고 있습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 다음을 시도했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;*라는 문자를 검색하여 대체하지만, Excel은 &quot;모든 것&quot;으로 이해하기 때문에 원치 않는 결과를 초래하게 됩니다.&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;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트에서 열로: 그러나 별표의 수가 일정하지 않기 때문에 작동할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;게다가, 이 해결책은 실행이 불가능하기 때문에, 저는 그것을 많은 수의 열에 대해 수작업으로 해야 할 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&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;/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;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;A1=1***&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;A2=2*&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;A3=3&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;A4=sum(A1:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;A3)&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;Excel에서 이스케이프 문자는 ~입니다. 따라서 모든 별표를 찾아서 바꾸려면 ~*를 검색하고 nothing으로 바꿉니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;*문자를 모두 제거하기 위해서는 이미지를 확인해주시기 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/sTRNw.png&quot; alt=&quot;screenshot&quot;&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;텍스트 열을 사용하는 경우 연속 구분 기호를 하나로 취급 확인란이 있으며, 이 확인란은 필요한 항목에 대한 완벽한 대안입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 공식을 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;B1 = TRUNC(SUBSTITUTE(A1; &quot;*&quot;; &quot;&quot;); 0)
B2 = TRUNC(SUBSTITUTE(A2; &quot;*&quot;; &quot;&quot;); 0)
B3 = TRUNC(SUBSTITUTE(A3; &quot;*&quot;; &quot;&quot;); 0)
B4 = SUM(B1:B3)
&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;URL : https://stackoverflow.com/questions/20631723/how-to-remove-the-character-in-excel-2010&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Excel</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/774</guid>
      <comments>https://megabox.tistory.com/774#entry774comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:41:57 +0900</pubDate>
    </item>
    <item>
      <title>DialogFragment에서 결과 수신</title>
      <link>https://megabox.tistory.com/773</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DialogFragment에서 결과 수신&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;목록에서 항목 선택, 텍스트 입력 등 여러 가지 작업에 Dialog &lt;strong papago-id=&quot;1-1&quot;&gt;Fragments&lt;/strong&gt;를 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값(예: 문자열 또는 목록의 항목)을 호출 활동/프래그먼트로 되돌리는 가장 좋은 방법은 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;DismissListener&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;DialogFragment에 활동에 대한 참조를 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 Dialog(대화 상자)가 호출됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;OnDimiss&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;method in activity and activity는 DialogFragment 객체에서 결과를 가져옵니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매우 지저분하고 DialogFragment(대화 상자)에서 활동에 대한 참조가 손실되므로 구성 변경(방향 변경)에서는 작동하지 않습니다.&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;/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;myDialogFragment.setTargetFragment(this, MY_REQUEST_CODE)&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;getTargetFragment().onActivityResult(getTargetRequestCode(), ...)&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;onActivityResult()&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&gt;&lt;code&gt;onActivityResult()&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;하지만 공식적인 구글 사람들이 추천하는 것을 봤고, 아마도 API 데모에서도 볼 수 있을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각엔 그게&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;g/setTargetFragment()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 추가되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 &lt;a href=&quot;http://android-developers.blogspot.in/2012/05/using-dialogfragments.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;14-1&quot;&gt;보시는&lt;/a&gt; 것처럼 아주 간단한 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;DialogFragment&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;public interface EditNameDialogListener {
    void onFinishEditDialog(String inputText);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 해당 수신기에 참조를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private EditNameDialogListener listener;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수신기 메서드를 &quot;활성화&quot;하고 부모 Activity/Fragment가 이 인터페이스를 구현하는지 확인하는 데 사용됩니다(아래 참조).&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&gt;&lt;code&gt;Activity&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;FragmentActivity&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;Fragment&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;이라고&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DialogFragment&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 인터페이스를 구현하기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DialogFragment&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;DialogFragment&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;listener.onFinishEditDialog(mEditText.getText().toString());
this.dismiss();
&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;mEditText.getText().toString()&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;Activity&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;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 내용을 반환하려면 청취자가 취하는 주장을 변경하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 인터페이스가 실제로 상위 활동/파편에 의해 구현되었는지 확인해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public void onAttach(Context context) {
    super.onAttach(context);
    // Verify that the host activity implements the callback interface
    try {
        // Instantiate the EditNameDialogListener so we can send events to the host
        listener = (EditNameDialogListener) context;
    } catch (ClassCastException e) {
        // The activity doesn't implement the interface, throw exception
        throw new ClassCastException(context.toString()
                + &quot; must implement EditNameDialogListener&quot;);
    }
}
&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;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Dialog Fragment에서 결과를 받는 훨씬 더 간단한 방법이 있습니다.&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;먼저 Activity, Fragment 또는 FragmentActivity에서 다음 정보를 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Stuff to do, dependent on requestCode and resultCode
    if(requestCode == 1) { // 1 is an arbitrary number, can be any int
         // This is the return result of your DialogFragment
         if(resultCode == 1) { // 1 is an arbitrary number, can be any int
              // Now do what you need to do after the dialog dismisses.
         }
     }
}
&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 class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;requestCode&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;기본적으로 전화하신 DialogFragment의 int 레이블입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 잠시 후에 이것이 어떻게 작동하는지 보여드리겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ResultCode는 DialogFragment에서 현재 대기 중인 Activity, Fragment 또는 FragmentActivity에서 발생한 작업을 알려주는 코드입니다.&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;다음으로 입력할 코드는 Dialog Fragment에 대한 호출입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DialogFragment dialogFrag = new MyDialogFragment();
// This is the requestCode that you are sending.
dialogFrag.setTargetFragment(this, 1);     
// This is the tag, &quot;dialog&quot; being sent.
dialogFrag.show(getFragmentManager(), &quot;dialog&quot;);
&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;이 세 줄로 DialogFragment(DialogFragment)를 선언하고 requestCode(요청 코드)를 설정합니다(Dialog(대화)가 해제되면 onActivityResult(...)). 그런 다음 대화 상자를 표시합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게 간단하다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 DialogFragment(대화 상자)에서 한 줄을 바로 앞에 추가하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dismiss()&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;결과 코드를 onActivityResult()로 다시 보내도록 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, getActivity().getIntent());
dismiss();
&lt;/code&gt;&lt;/pre&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;바로 그겁니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고로 결과Code는 다음과 같이 정의됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int resultCode&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 하기로 한 것은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;resultCode = 1;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우에는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 Dialog Fragment의 결과를 호출 작업, Fragment 또는 Fragment Activity로 다시 보낼 수 있습니다.&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;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;46-0&quot;&gt;EDIT 2016.06.24&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;dialogFrag.setTargetFragment(this, 1);
&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;목표를 정합니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Fragment&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;Activity&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;InterfaceCommunicator&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DialogFragment&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;public InterfaceCommunicator interfaceCommunicator;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 처리할 공용 기능을 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public interface InterfaceCommunicator {
    void sendRequestCode(int code);
}
&lt;/code&gt;&lt;/pre&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 class=&quot;papago-parent&quot;&gt;그러면 코드를 다시 보낼 준비가 되면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Activity&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;DialogFragment&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;code&gt;dismiss();&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;DialogFragment&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;pre&gt;&lt;code&gt;interfaceCommunicator.sendRequestCode(1); // the parameter is any int code you choose.
&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;dialogFrag.setTargetFragment(this, 1);  
&lt;/code&gt;&lt;/pre&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 인터페이스를 구현하면 모두 끝입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 행을 추가하면 가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;implements&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;pre&gt;&lt;code&gt;public class MyClass Activity implements MyDialogFragment.InterfaceCommunicator
&lt;/code&gt;&lt;/pre&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;@Override&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public void sendRequestCode(int code) {
    // your code here
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&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;onActivityResult()&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 class=&quot;papago-parent&quot;&gt;인터페이스 방법이 다음을 위한 것인 경우를 제외하고는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DialogFragments&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 다른 하나는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Fragments&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아직도 이 글을 읽고 있는 모든 사람들:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setTargetFragment()&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 를 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FragmentResultListener&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;API는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-kotlin prettyprint-override&quot;&gt;&lt;code&gt;override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setFragmentResultListener(&quot;requestKey&quot;) { key, bundle -&amp;gt;
        val result = bundle.getString(&quot;resultKey&quot;)
        // Do something with the result...
    }

    ...

    // Somewhere show your dialog
    MyDialogFragment.newInstance().show(parentFragmentManager, &quot;tag&quot;)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 당신의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyDialogFragment&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과를 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-kotlin prettyprint-override&quot;&gt;&lt;code&gt;button.setOnClickListener{
    val result = &quot;some string&quot;
    setFragmentResult(&quot;requestKey&quot;, bundleOf(&quot;resultKey&quot; to result))
    dismiss()
}
&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;DialogFragment&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대답과 .&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; @brandon의 대답과 매우 비슷합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전화 드립니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DialogFragment&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 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;FragmentManager fragmentManager = getFragmentManager();
            categoryDialog.setTargetFragment(this,1);
            categoryDialog.show(fragmentManager, &quot;dialog&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어디에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;categoryDialog&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;s입니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DialogFragment&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;code&gt;dialogfragment&lt;/code&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터를 설정할 위치에 이 코드를 배치합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;치의 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;resultCode&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 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;pre&gt;&lt;code&gt;            Intent intent = new Intent();
            intent.putExtra(&quot;listdata&quot;, stringData);
            getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, intent);
            getDialog().dismiss();
&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;이제 호출 프래그먼트로 돌아가서 이 메소드를 구현해야 할 때입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 경우 데이터 유효성 또는 결과 성공 여부를 검사합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;resultCode&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;requestCode&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 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; @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);        
        //do what ever you want here, and get the result from intent like below
        String myData = data.getStringExtra(&quot;listdata&quot;);
Toast.makeText(getActivity(),data.getStringExtra(&quot;listdata&quot;),Toast.LENGTH_SHORT).show();
    }
&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;strong papago-id=&quot;84-3&quot;&gt;다른&lt;/strong&gt; 접근 방식으로 &lt;strong papago-id=&quot;84-1&quot;&gt;프래그먼트&lt;/strong&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;&lt;strong papago-id=&quot;85-0&quot;&gt;1)&lt;/strong&gt;조각에 공용 인터페이스를 정의하고 이에 대한 변수를 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public OnFragmentInteractionListener mCallback;

public interface OnFragmentInteractionListener {
    void onFragmentInteraction(int id);
}
&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;strong papago-id=&quot;86-0&quot;&gt;2)&lt;/strong&gt;프래그먼트의 mCallback 변수에 활동 캐스트&lt;strong papago-id=&quot;86-0&quot;&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;try {
    mCallback = (OnFragmentInteractionListener) getActivity();
} catch (Exception e) {
    Log.d(TAG, e.getMessage());
}
&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;&lt;strong papago-id=&quot;87-0&quot;&gt;3)&lt;/strong&gt;활동에 청취자 구현&lt;strong papago-id=&quot;87-0&quot;&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class MainActivity extends AppCompatActivity implements DFragment.OnFragmentInteractionListener  {
     //your code here
}
&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;strong papago-id=&quot;88-0&quot;&gt;4)&lt;/strong&gt;OnFragment 재정의&lt;strong papago-id=&quot;88-0&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;@Override
public void onFragmentInteraction(int id) {
    Log.d(TAG, &quot;received from fragment: &quot; + id);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 자세한 정보: https://developer.android.com/training/basics/fragments/communicating.html&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;90&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 가지 쉬운 방법은 다음과 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 대화상자를 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  CallingActivity callingActivity = (CallingActivity) getActivity();
  callingActivity.onUserSelectValue(&quot;insert selected value here&quot;);
  dismiss();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;91&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 Dialog Fragment라는 활동에서 다음과 같은 적절한 기능을 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; public void onUserSelectValue(String selectedValue) {

        // TODO add your implementation.
      Toast.makeText(getBaseContext(), &quot;&quot;+ selectedValue, Toast.LENGTH_LONG).show();
    }
&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;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;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&gt;&lt;code&gt;DialogFragment&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Activity&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소통!&lt;/font&gt; &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;보다 훨씬 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그것이 다른 제안들보다 훨씬 더 간단하고 깨끗하다고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로, 당신은 당신의 인터넷 주소를 등록합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Activity&lt;/code&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;DialogFragment&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;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 설정 방법에 대한 단계별 가이드는 &lt;a href=&quot;http://adilatwork.blogspot.co.uk/2015/10/android-how-to-pass-data-from.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;69-1&quot;&gt;여기&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 다음과 같은 ViewModel 공유:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class SharedViewModel extends ViewModel {
    private final MutableLiveData&amp;lt;Item&amp;gt; selected = new MutableLiveData&amp;lt;Item&amp;gt;();

    public void select(Item item) {
        selected.setValue(item);
    }

    public LiveData&amp;lt;Item&amp;gt; getSelected() {
        return selected;
    }
}


public class MasterFragment extends Fragment {
    private SharedViewModel model;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
        itemSelector.setOnClickListener(item -&amp;gt; {
            model.select(item);
        });
    }
}

public class DetailFragment extends Fragment {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SharedViewModel model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
        model.getSelected().observe(this, { item -&amp;gt;
           // Update the UI.
        });
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://developer.android.com/topic/libraries/architecture/viewmodel#sharing_data_between_fragments&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;99&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://developer.android.com/topic/libraries/architecture/viewmodel#sharing_data_between_fragments&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;100&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우에는 대상 프래그먼트에 인수를 전달해야 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 &quot;프래그먼트는 이미 활성화되어 있습니다&quot;라는 예외가 생겼습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 나는 내 DialogFragment에 인터페이스를 선언했고, 이 인터페이스는 parentFragment가 구현했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;상위 조각이 DialogFragment를 시작할 때 자체를 TargetFragment로 설정했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음 Dialog Fragment에서 전화를 걸었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; ((Interface)getTargetFragment()).onSomething(selectedListPosition);
&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;    // My DialogFragment
class FiltroDialogFragment : DialogFragment(), View.OnClickListener {
    
    var listener: InterfaceCommunicator? = null

    override fun onAttach(context: Context?) {
        super.onAttach(context)
        listener = context as InterfaceCommunicator
    }

    interface InterfaceCommunicator {
        fun sendRequest(value: String)
    }   

    override fun onClick(v: View) {
        when (v.id) {
            R.id.buttonOk -&amp;gt; {    
        //You can change value             
                listener?.sendRequest('send data')
                dismiss()
            }
            
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;// 마이 액티비티&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class MyActivity: AppCompatActivity(),FiltroDialogFragment.InterfaceCommunicator {

    override fun sendRequest(value: String) {
    // :)
    Toast.makeText(this, value, Toast.LENGTH_LONG).show()
    }
}
 
&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;도움이 되었으면 좋겠군요, 개선이 된다면 수정 부탁드립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 영어실력은 매우 좋지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;104&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인수를 보내고 두 번째 fragment에서 결과를 수신하려면 fragment를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업을 수행하기 위한 인수 설정&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;static class FirstFragment extends Fragment {
    final Handler mUIHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case 101: // receive the result from SecondFragment
                Object result = msg.obj;
                // do something according to the result
                break;
            }
        };
    };

    void onStartSecondFragments() {
        Message msg = Message.obtain(mUIHandler, 101, 102, 103, new Object()); // replace Object with a Parcelable if you want to across Save/Restore
                                                                               // instance
        putParcelable(new SecondFragment(), msg).show(getFragmentManager().beginTransaction(), null);
    }
}

static class SecondFragment extends DialogFragment {
    Message mMsg; // arguments from the caller/FirstFragment

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onViewCreated(view, savedInstanceState);
        mMsg = getParcelable(this);
    }

    void onClickOK() {
        mMsg.obj = new Object(); // send the result to the caller/FirstFragment
        mMsg.sendToTarget();
    }
}

static &amp;lt;T extends Fragment&amp;gt; T putParcelable(T f, Parcelable arg) {
    if (f.getArguments() == null) {
        f.setArguments(new Bundle());
    }
    f.getArguments().putParcelable(&quot;extra_args&quot;, arg);
    return f;
}
static &amp;lt;T extends Parcelable&amp;gt; T getParcelable(Fragment f) {
    return f.getArguments().getParcelable(&quot;extra_args&quot;);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;105&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TL;DR - 이 &lt;strong papago-id=&quot;105-1&quot;&gt;AppDialog&lt;/strong&gt; 클래스를 사용하여 DialogFragment에 데이터를 전달하고 결과를 가져옵니다.&lt;/font&gt;&lt;/p&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;ul&gt; 
 &lt;li papago-id=&quot;107&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;107-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;Dialog(대화 상자)를 사용할 때 사용자가 장치를 회전하고 방향을 변경할 때 Dialog Fragment(대화 상자)가 예기치 않게 사라지지 않도록 Dialog Fragment(대화 상자)로 래핑하는 것이 좋습니다(Dialog Fragment(대화 상자)가 장치를 다시 만들고 다시 표시합니다).&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;108&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;108-0&quot;&gt;제한&lt;/strong&gt;(따라서 이 질문) - DialogFragment의 작동 방식은 구성 변경 시 재인스톨이 필요한 클래스를 사용하는 것입니다. 즉, 하위 클래스에 생성자 매개변수를 지정하여 매개변수를 전달할 수 없으며, 일반적으로 대화 결과를 전달하려면 뷰 모델을 통해 사용자 지정 콜백을 수행해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 일반적으로 모든 대화상자에 대한 새로운 하위 클래스를 의미합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;109&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;109-0&quot;&gt;해결책&lt;/strong&gt; - 이 모든 것을 돕기 위해 이 사용자 지정 AppDialog fragment가 복구됩니다. 매개 변수는 메모리에 저장됩니다(보기 모델과 유사하게 T를 메모리에 저장하고 이를 사용하여 구성 변경에 대한 대화 상자를 다시 생성하는 작은 사용자 지정 뷰 모델이라고 생각할 수 있습니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 전화를 거는 적절한 방법은 뷰 모델을 통해서일 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;AppDialog(앱 대화 상자)를 표시하는 조각의 경우, 이미 뷰 모델이 있고 대화 상자를 만드는 데 사용된 람다에서 참조할 수 있습니다. 즉, 대화 상자 조각이 제거될 때까지 뷰 모델에 대한 추가적인 강력한 참조를 의미합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;110&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;110-0&quot;&gt;예제&lt;/strong&gt; - 이 AppDialog 유틸리티 클래스를 사용하여 매개 변수를 수신하고 모델을 보기 위해 콜백하여 결과를 알리는 간단한 대화 상자 예제를 참조합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;111&quot; papago-translate=&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 AppDialog&amp;lt;T&amp;gt;: DialogFragment() {
    companion object {

        fun&amp;lt;T&amp;gt; buildDialog(params: T? = null, builder: AppDialogLambda&amp;lt;T&amp;gt;): AppDialog&amp;lt;T&amp;gt; {

            // Setup arguments
            val args = Bundle()
            args.putInt(&quot;key&quot;, pushDialogArgs(params, builder))

            // Instantiate
            val fragment = AppDialog&amp;lt;T&amp;gt;()
            fragment.arguments = args
            return fragment
        }

        // --------------------
        // Dialog Arguments

        private var lastKey: Int = 0
        private val dialogArgs = mutableMapOf&amp;lt;Int, Pair&amp;lt;Any?, AppDialogLambda&amp;lt;*&amp;gt;&amp;gt;&amp;gt;()

        private fun pushDialogArgs(params: Any?, builder: AppDialogLambda&amp;lt;*&amp;gt;): Int {
            dialogArgs[lastKey] = params to builder
            return lastKey++
        }

        private fun getDialogArgs(key: Int): Pair&amp;lt;Any?, AppDialogLambda&amp;lt;*&amp;gt;&amp;gt; {
            return dialogArgs[key]!!
        }

        private fun deleteDialogArgs(key: Int) {
            dialogArgs.remove(key)
        }
    }

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        // Get arguments
        val argKey = requireArguments().getInt(&quot;key&quot;)
        val (params, builder) = getDialogArgs(argKey)

        // We are getting back our arguments we passed AppDialog.buildDialog and
        // the type is guaranteed to be the same. Silence this warning
        @Suppress(&quot;UNCHECKED_CAST&quot;)
        return (builder as AppDialogLambda&amp;lt;T&amp;gt;)(this, params as T?)
    }

    override fun onDismiss(dialog: DialogInterface) {
        super.onDismiss(dialog)
        val argKey = requireArguments().getInt(&quot;key&quot;)
        deleteDialogArgs(argKey)
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;112&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 예시(&lt;strong papago-id=&quot;112-1&quot;&gt;이후&lt;/strong&gt;):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        val info = mapOf(&quot;message&quot; to &quot;${error.description}\n\nPlease check your Internet connection and try again.&quot;)
        AppDialog.buildDialog(info) { fragment, params -&amp;gt;
            fragment.isCancelable = false // since we are in a DialogFragment
            AlertDialog.Builder(fragment.context)
                .setTitle(&quot;Terms Of Service Failed To Load&quot;)
                .setMessage(params!![&quot;message&quot;])
                .setPositiveButton(&quot;Retry&quot;) { _, _ -&amp;gt;
                    // Update the view model instead of calling UserTOSFragment directly 
                    // as the fragment may be destroyed and recreated
                    // on configuration changes. The viewModel will stay alive.
                    viewModel.onTermsOfServiceReload()
                }
                .setNegativeButton(&quot;Cancel&quot;) { _, _ -&amp;gt;
                    viewModel.onTermsOfServiceDeclined()
                    fragment.findNavController().popBackStack()
                }.create()
        }.show(parentFragmentManager, &quot;TOS Failed Dialog&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;113&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 예시(&lt;strong papago-id=&quot;113-1&quot;&gt;이전&lt;/strong&gt;):&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DialogFragment를 사용하지 않으면(설명을 위해 이 작업을 수행하지 마십시오. 구성 변경 시 대화 상자가 삭제되므로 이는 잘못된 관행입니다.) UserTOSFragment.kt - 다시 시도할 때 UserTOSFragment.loadContent()를 직접 호출하는 데 사용되는 코드입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위 예제에서 대신 viewModel.onTermsOfServiceDeclined()를 호출하도록 다시 작성해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        AlertDialog.Builder(context)
            .setTitle(&quot;Terms Of Service Failed To Load&quot;)
            .setMessage(&quot;${error.description}\n\nPlease check your Internet connection and try again.&quot;)
            .setPositiveButton(&quot;Retry&quot;) { _, _ -&amp;gt;
                loadContent()
            }
            .setCancelable(false)
            .setNegativeButton(&quot;Cancel&quot;) { _, _ -&amp;gt;
                viewModel.onTermsOfServiceDeclined()
                findNavController().popBackStack()
            }
            .show()
&lt;/code&gt;&lt;/pre&gt;&lt;h2 papago-id=&quot;114&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다양한 접근법(2023):&lt;/font&gt;&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;115&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;115-0&quot;&gt;탐색 그래프 사용:&lt;/strong&gt; 반환 방향에 대한 인수(대화 상자 조각에서 부모로)를 설정하고 대상에서 수신하면 됩니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대화 상자에서 보내기(자바):&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NavHostFragment.navigate(this, YourDialogName+Directions .action+---+To---(DefinedArgument)));&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부모(자바)로 받기:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dialogResult = NameOfFragmentArgs.fromBundle(requireArguments()).get+DefinedArgument;&lt;/code&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong papago-id=&quot;118&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;탐색 그래프 및 ViewModel+LiveData 사용 (권장)&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;119&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://gitlab.com/commonsguy/cw-jetpack-java/-/tree/vFINAL/NukeFromOrbit/src/main/java/com/commonsware/jetpack/samplerj/dialog&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;119-1&quot;&gt;CommonsWare 웹사이트&lt;/a&gt;에는 이러한 접근방식에 대한 완전한 예시가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;strong papago-id=&quot;120&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;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;72&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;72-0&quot;&gt;사용자 지정 UI를 사용하여 대화상자&lt;/strong&gt;에 직접 액세스할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setOnClickListener&lt;/code&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;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;74&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;74-0&quot;&gt;정의된 인터페이스 구현&lt;/strong&gt;(예:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setOnYes&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&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;strong&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;FragmentManager&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;setFragmentResult(String, Bundle)&lt;/code&gt;&lt;/strong&gt; &lt;a href=&quot;https://stackoverflow.com/a/64869730/6576302&quot; papago-id=&quot;127&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;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;128&quot; papago-translate=&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 AbcDialogFragment(private val ondata: (data: String) -&amp;gt; Unit) :  DialogFragment() {}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;129&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;fragment/Activity에서 대화 상자를 표시하는 코드&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;val abcDialogFragment = AbcDialogFragment(ondata = {data-&amp;gt;  })
                
abcDialogFragment.show(requireActivity().supportFragmentManager, &quot;TAG&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;130&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대화 조각에서 대화 조각이 닫히거나 클릭 수신기를 클릭하면 onData를 호출할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;131&quot; papago-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;bus.post(new AnswerAvailableEvent(42));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;132&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 발신자(Activity 또는 Fragment)에게 가입하게 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Subscribe public void answerAvailable(AnswerAvailableEvent event) {
   // TODO: React to the event somehow!
}
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/10905312/receive-result-from-dialogfragment&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Android</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/773</guid>
      <comments>https://megabox.tistory.com/773#entry773comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:41:50 +0900</pubDate>
    </item>
    <item>
      <title>Windows 다운로드 폴더 경로 가져오기</title>
      <link>https://megabox.tistory.com/772</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 다운로드 폴더 경로 가져오기&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;1-1&quot;&gt;다운로드&lt;/em&gt; 폴더 경로를 알아야 하는 엑셀 VBA 코드가 있습니다.&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;Downloads 폴더(&lt;em papago-id=&quot;0-1&quot;&gt;또한&lt;/em&gt; &lt;em papago-id=&quot;0-3&quot;&gt;Documents&lt;/em&gt; 및 대부분의 폴더를 폴더 속성을 통해 이동할 수 있으므로 환경 변수는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%USERPROFILE%&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;%USERPROFILE%\Downloads&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;WScript.Shell.SpecialFolders&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;strong papago-id=&quot;6-0&quot;&gt;등기부 열람을 해야 &lt;/strong&gt;할&lt;strong papago-id=&quot;6-0&quot;&gt; &lt;/strong&gt;것&lt;strong papago-id=&quot;6-0&quot;&gt; 같은데&lt;/strong&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;h2 papago-id=&quot;8&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;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@assylias님의 댓글입니다.&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;Function GetDownloadsPath() As String
    GetDownloadsPath = Environ$(&quot;USERPROFILE&quot;) &amp;amp; &quot;\Downloads&quot;
End Function
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;베스트 솔루션&lt;/font&gt;&lt;/h2&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;게시된 답변은 &quot;%USERProfile%&quot;\&quot;을(를) 반환하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다운로드&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;font class=&quot;papago-parent&quot;&gt;이렇게 부릅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Debug.Print GetCurrentUserDownloadsPath&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;Debug.Print GetCurrentUserDownloadsPath&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 레지스트리 키를 읽는 방법을 보여주고 폴더 경로로 레지스트리 키를 찾아준 @s_a에게 감사드립니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;' Downloads Folder Registry Key
Private Const GUID_WIN_DOWNLOADS_FOLDER As String = &quot;{374DE290-123F-4565-9164-39C4925E467B}&quot;
Private Const KEY_PATH As String = &quot;HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\&quot;
'
Public Function GetCurrentUserDownloadsPath()
    Dim pathTmp As String

    On Error Resume Next
    pathTmp = RegKeyRead(KEY_PATH &amp;amp; GUID_WIN_DOWNLOADS_FOLDER)
    pathTmp = Replace$(pathTmp, &quot;%USERPROFILE%&quot;, Environ$(&quot;USERPROFILE&quot;))
    On Error GoTo 0

    GetCurrentUserDownloadsPath = pathTmp
End Function
'
Private Function RegKeyRead(registryKey As String) As String
' Returns the value of a windows registry key.
    Dim winScriptShell As Object

    On Error Resume Next
    Set winScriptShell = VBA.CreateObject(&quot;WScript.Shell&quot;)  ' access Windows scripting
    RegKeyRead = winScriptShell.RegRead(registryKey)    ' read key from registry
End Function
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구글 답을 조금 더 찾았는데...&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레지스트리를 읽는 방법은 http://vba-corner.livejournal.com/3054.html 와 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;'reads the value for the registry key i_RegKey
'if the key cannot be found, the return value is &quot;&quot;
Function RegKeyRead(i_RegKey As String) As String
Dim myWS As Object

  On Error Resume Next
  'access Windows scripting
  Set myWS = CreateObject(&quot;WScript.Shell&quot;)
  'read key from registry
  RegKeyRead = myWS.RegRead(i_RegKey)
End Function
&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;MSDN의 http://msdn.microsoft.com/en-us/library/windows/desktop/dd378457(v=vs.85).aspx 에 따르면 다운로드 폴더에 대한 GUID:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;{374DE290-123F-4565-9164-39C4925E467B}&lt;/code&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;RegKeyRead(&quot;HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\{374DE290-123F-4565-9164-39C4925E467B}&quot;)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 사용자의 다운로드 폴더 경로를 나타냅니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&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;SHGetKnownFolderPath&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러기 위해 VBA 코드를 작성했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Excel 2000에서 테스트 된 적이 있습니다.&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;64비트 버전의 Office에서는 작동하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유니코드 쉐나니건이 2000년도 보다 최근 버전의 오피스에서 작동할지는 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 예쁘지 않다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Option Explicit

Private Type GuidType
  data1 As Long
  data2 As Long
  data3 As Long
  data4 As Long
End Type

Declare Function SHGetKnownFolderPath Lib &quot;shell32.dll&quot; (ByRef guid As GuidType, ByVal flags As Long, ByVal token As Long, ByRef hPath As Long) As Long
Declare Function lstrlenW Lib &quot;kernel32.dll&quot; (ByVal hString As Long) As Long
Declare Sub CoTaskMemFree Lib &quot;ole32.dll&quot; (ByVal hMemory As Long)
Declare Sub RtlMoveMemory Lib &quot;ntdll.dll&quot; (ByVal dest As String, ByVal source As Long, ByVal count As Long)

'Read the location of the user's &quot;Downloads&quot; folder
Function DownloadsFolder() As String

' {374DE290-123F-4565-9164-39C4925E467B}
Dim FOLDERID_Downloads As GuidType
    FOLDERID_Downloads.data1 = &amp;amp;H374DE290
    FOLDERID_Downloads.data2 = &amp;amp;H4565123F
    FOLDERID_Downloads.data3 = &amp;amp;HC4396491
    FOLDERID_Downloads.data4 = &amp;amp;H7B465E92
Dim result As Long
Dim hPath As Long
Dim converted As String
Dim length As Long
    'A buffer for the string
    converted = String$(260, &quot;*&quot;)
    'Convert it to UNICODE
    converted = StrConv(converted, vbUnicode)
    'Get the path
    result = SHGetKnownFolderPath(FOLDERID_Downloads, 0, 0, hPath)
    If result = 0 Then
        'Get its length
        length = lstrlenW(hPath)
        'Copy the allocated string over the VB string
        RtlMoveMemory converted, hPath, (length + 1) * 2
        'Truncate it
        converted = Mid$(converted, 1, length * 2)
        'Convert it to ANSI
        converted = StrConv(converted, vbFromUnicode)
        'Free the memory
        CoTaskMemFree hPath
        'Return the value
        DownloadsFolder = converted
    Else
        Error 1
    End If
End Function
&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;코드를 가능한 적게 사용하려면 VBA에서 이 PowerShell One-liner를 실행하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;$downloadsFolder = (New-Object -ComObject Shell.Application).NameSpace('shell:Downloads').Self.Path&lt;/code&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;.ps1을 실행하는 방법은 &lt;a href=&quot;https://stackoverflow.com/questions/51293191/how-to-run-powershell-script-through-excel-vba&quot; papago-id=&quot;24-1&quot;&gt;여기&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 하나의 라이너를 내장할 수도 있습니다(그러나 이는 새로운 주제입니다).&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Sub GetDownloadedFolderFiles()
'
' Keep it simple - Paul Seré
'
Dim fso  As New FileSystemObject
Dim flds As Folders
Dim fls  As Files
Dim f    As File

'Downloads folder for the actual user!

Set fls = fso.GetFolder(&quot;C:\Users\User\Downloads&quot;).Files 

For Each f In fls
    Debug.Print f.Name
Next

End Sub
&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;레지스트리에서 올바른 GUID와 함께 다운로드 폴더를 읽고 결과를 사용자 프로파일 경로와 혼합해 보는 것은 어떨까요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Function RegKeyRead(i_RegKey As String) As String
    
    Dim myWS As Object

    On Error Resume Next
    'access Windows scripting
    Set myWS = CreateObject(&quot;WScript.Shell&quot;)
    'read key from registry
    RegKeyRead = myWS.RegRead(i_RegKey)
    
End Function

Public Function Replace(strExpression As Variant, strSearch As String, StrReplace As String) As String

    Dim lngStart As Long
    
    If IsNull(strExpression) Then Exit Function
    
    lngStart = 1
    While InStr(lngStart, strExpression, strSearch) &amp;lt;&amp;gt; 0
        lngStart = InStr(lngStart, strExpression, strSearch)
        strExpression = Left(strExpression, lngStart - 1) &amp;amp; StrReplace &amp;amp; Mid(strExpression, lngStart + Len(strSearch))
        lngStart = lngStart + Len(StrReplace)
    Wend

    Replace = strExpression
    
End Function

Function GetDownloadedFolderPath() As String

    GetDownloadedFolderPath = RegKeyRead(&quot;HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\{374DE290-123F-4565-9164-39C4925E467B}&quot;)
    GetDownloadedFolderPath = Replace(GetDownloadedFolderPath, &quot;%USERPROFILE%&quot;, Environ$(&quot;USERPROFILE&quot;))

End Function
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/23070299/get-the-windows-download-folders-path&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Excel</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/772</guid>
      <comments>https://megabox.tistory.com/772#entry772comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:41:37 +0900</pubDate>
    </item>
    <item>
      <title>다른 변수와 함께 mariaDB 테이블에 타임스탬프 삽입</title>
      <link>https://megabox.tistory.com/771</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 변수와 함께 mariaDB 테이블에 타임스탬프 삽입&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;now()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 mariadb(SQL) 테이블에 들어가지만 터미널에서 스크립트를 실행하면 오류가 발생합니다.&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;cursor.execute(&quot;INSERT INTO outdoorsensorstable
     (time, col2, col3, col4, col5, col6, col7)
     VALUES (%s, %s, %s, %s, %s, %s, %s)&quot;,
     (now(), '', '', data4, '', data6, ''))
&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;(데이터 4와 데이터 6은 이에 앞서 제 스크립트에서 생성된 변수입니다.)&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;TypeError: 'datetime.datetime' object is not callable&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&gt;&lt;/font&gt;&lt;code&gt;now()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 VALUES 세그먼트로 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cursor.execute(&quot;INSERT INTO outdoorsensorstable (time, col2, col3, col4, col5, col6, col7) VALUES (now(), %s, %s, %s, %s, %s, %s)&quot;, ('', '', '', data4, '', data6, ''))
&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;mysql.connector.errors.ProgrammingError: Not all parameters were used in the SQL statement
&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;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 두번째 노력은 거의 옳습니다. 단지 어떤 파라미터도 전달하지 마십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NOW()&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;sql = &quot;INSERT INTO outdoorsensorstable (time, col2, col3, col4, col5, col6, col7) &quot;
sql += &quot;VALUES (now(), %s, %s, %s, %s, %s, %s)&quot;
cursor.execute(sql, ('', '', data4, '', data6, ''))
&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;URL : https://stackoverflow.com/questions/47950587/inserting-timestamp-into-mariadb-table-along-with-other-variables&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/771</guid>
      <comments>https://megabox.tistory.com/771#entry771comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:41:12 +0900</pubDate>
    </item>
    <item>
      <title>CentOS에서 unixODBC를 사용하여 MariaDB에서 OracleDB로 연결할 때 문자 인코딩 문제 발생</title>
      <link>https://megabox.tistory.com/770</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CentOS에서 unixODBC를 사용하여 MariaDB에서 OracleDB로 연결할 때 문자 인코딩 문제 발생&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;MariaDB에 연결하여 다음 명령을 실행한 후&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CREATE TABLE ora_emp ENGINE=CONNECT TABLE_TYPE=ODBC TABNAME='tablename' CONNECTION='DSN=ORCL;UID=userid;PWD=pass';&lt;/code&gt; &lt;code&gt;INSERT INTO test.ora_emp(gubun1, gubun2) VALUES ('한', '글')&lt;/code&gt; &lt;code&gt;SELECT * FROM ora_emp&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://i.stack.imgur.com/fMjyb.png&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;1-0&quot;&gt;&lt;img alt=&quot;enter image description here&quot; papago-id=&quot;1-0-0&quot; src=&quot;https://i.stack.imgur.com/fMjyb.png&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;ol&gt; 
 &lt;li papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MariaDB의 모든 캐릭터 세트를 euccr로 변경하였습니다.&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;/etc/ odbc.ini 파일의 [ORCL] 섹션에 'Charset = euckr'을 추가했습니다.&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;환경변수 NLS_LANG을 KOREAN_KOREA로 설정하였습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;KO16KSC5601.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/76676392/character-encoding-issue-when-connecting-from-mariadb-to-oracle-db-using-unixodb&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/770</guid>
      <comments>https://megabox.tistory.com/770#entry770comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:41:05 +0900</pubDate>
    </item>
    <item>
      <title>angularjs에서 문자열을 다듬으려면 어떻게 해야 합니까?</title>
      <link>https://megabox.tistory.com/769</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;angularjs에서 문자열을 다듬으려면 어떻게 해야 합니까?&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;만약 그렇지 않다면 내장된 jquery를 사용해서 해야 하나요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내장된 jquery를 사용해야 하는 경우 $를 사용하지 않고 트림() 기능으로 이동하려면 어떻게 해야 합니까?&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;편집 - 예 str.trim()에 대해 알고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;미안하다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;IE 8에서 작동하려면 이것이 필요합니다.&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;편집 - 이 질문이 중복되는 한, 저는 참조된 답변이 자바스크립트, 노드 및 jquery에서 수행하는 방법을 설명하는 각도로 수행하는 방법을 구체적으로 묻고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내장된 jquery를 각도로 사용하는 방법이 있습니까?&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;편집 - 보아하니 답은 &quot;각도&quot;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS는 이렇게 하지 않습니다.&quot;&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;em papago-id=&quot;5-1&quot;&gt;&lt;strong papago-id=&quot;5-1-0&quot;&gt;&lt;a href=&quot;http://www.w3schools.com/jsref/jsref_trim_string.asp&quot; papago-id=&quot;5-1-0-0&quot; rel=&quot;noreferrer&quot;&gt;자바스크립트&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;의 트림&lt;em papago-id=&quot;5-1&quot;&gt;&lt;strong papago-id=&quot;5-1-0&quot;&gt;&lt;a href=&quot;http://www.w3schools.com/jsref/jsref_trim_string.asp&quot; papago-id=&quot;5-1-0-0&quot; rel=&quot;noreferrer&quot;&gt;()&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;을 사용하는 것은 어떨까요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;str.trim() //Will work everywhere irrespective of any framework.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와의 호환성을 위해&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;IE9&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;if(typeof String.prototype.trim !== 'function') {
  String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, ''); 
  }
}
&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;em papago-id=&quot;8-1&quot;&gt;&lt;strong papago-id=&quot;8-1-0&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/2308157/3894168&quot; papago-id=&quot;8-1-0-0&quot;&gt;여기&lt;/a&gt;&lt;/strong&gt;&lt;/em&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;em papago-id=&quot;9-1&quot;&gt;표시&lt;/em&gt;해야 하는 경우에는 원래 문자열을 조작하고 &lt;a href=&quot;https://docs.angularjs.org/api/ng/filter/filter&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-3&quot;&gt;필터&lt;/a&gt;를 사용하는 것을 권장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.filter('trim', function () {
    return function(value) {
        if(!angular.isString(value)) {
            return value;
        }  
        return value.replace(/^\s+|\s+$/g, ''); // you could use .trim, but it's not going to work in IE&amp;lt;9
    };
});
&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;&amp;lt;span&amp;gt;{{ foo | trim }}&amp;lt;/span&amp;gt;
&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;모든 angularjs 후에 javascript의 트림 () 방법을 사용하는 것도 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;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var x=&quot;hello world&quot;;
x=x.trim()
&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;pre&gt;&lt;code&gt;ng-show=&quot;!Contract.BuyerName.trim()&quot; &amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS.trim()은 IE 8 이하를 제외한 모든 것에서 기본적으로 지원됩니다.&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;해당 기능과 함께 작동하려면 JQuery를 사용할 수 있지만 2.x.x 라인에서 IE8 지원이 제거되었기 때문에 2.0.0 미만이어야 합니다.&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;IE7/8(앞서 언급한 대로)에 관심이 있는 경우 다른 옵션은 직접 트림을 추가하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if(typeof String.prototype.trim !== 'function') {
  String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, ''); 
  }
}
&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;URL : https://stackoverflow.com/questions/30506300/how-do-i-trim-a-string-in-angularjs&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/769</guid>
      <comments>https://megabox.tistory.com/769#entry769comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:40:59 +0900</pubDate>
    </item>
    <item>
      <title>mysql 열에 있는 모든 값을 변경합니다.</title>
      <link>https://megabox.tistory.com/768</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;나는 &quot;Quellendatum&quot; 테이블 열의 모든 값을 변경하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;행 값이 2005-06-20인 경우 2012-06-20으로 대체해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;행 값이 NULL이거나 비어 있으면 손상되지 않아야 합니다.&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;UPDATE  `outgoing2`.`tbl_hochschule` 
SET  `Quellendatum` =  '2012-06-20' 
WHERE  `tbl_hochschule`.`id` =1;
&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;UPDATE outgoing2.tbl_hochschule 
SET Quellendatum = '2012-06-20' 
WHERE Quellendatum = '2005-06-20' 
AND !isnull( Quellendatum );
&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;MySql에서 다음을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UPDATE TABLENAME    
SET IDCOLUMN=VALUE    
WHERE IDCOLUMN=VALUE    
AND !isnull (IDCOLUMN)
&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;UPDATE tablename 
SET Quellendatum = '2012-06-20' 
WHERE Quellendatum = '2005-06-20'
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;UPDATE outgoing2.tbl_hochschule 
SET Quellendatum = '2012-06-20' 
WHERE Quellendatum &amp;lt;&amp;gt; '' AND Quellendatum &amp;lt;&amp;gt; NULL;
&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;UPDATE TABLE 
SET COLUMN_NAME = &quot; &quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열에 있는 모든 값이 업데이트됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;0-1&quot;&gt;Quellendatum&lt;/strong&gt; = &lt;strong papago-id=&quot;0-1&quot;&gt;&quot;2005-06-20&quot;&lt;/strong&gt;이면 NULL이 될 수 없습니다. 그래서 '의 사용이 보이지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AND !isnull (Quellendatum)&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/15430009/mysql-change-all-values-in-a-column&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/768</guid>
      <comments>https://megabox.tistory.com/768#entry768comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:40:52 +0900</pubDate>
    </item>
    <item>
      <title>angularjs에서 여러 부분 보기에 대한 단일 html 보기 만들기</title>
      <link>https://megabox.tistory.com/767</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;나는 태그가 여러 개인 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;지금 나는 다음과 같이 하고 있습니다: app.js&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    angular.module('productapp', []).
    config(['$routeProvider', function($routeProvider) {
    $routeProvider.
        when('/productapp', {templateUrl: 'partials/productList.html', controller: productsCtrl}).
        when('/productapp/:productId', {templateUrl: 'partials/edit.html', controller: editCtrl}).
        otherwise({redirectTo: '/productapp'});
        }], 
        ['$locationProvider', function($locationProvider) {
            $locationProvider.html5Mode = 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;색인을 보다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html ng-app = &quot;productapp&quot;&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;Search form with AngualrJS&amp;lt;/title&amp;gt;
        &amp;lt;script src=&quot;../angular-1.0.1.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
        &amp;lt;script src=&quot;http://code.jquery.com/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
        &amp;lt;script src=&quot;js/products.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
        &amp;lt;script src=&quot;js/app.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div ng-view&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;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;partials 폴더: edit. html 및 productlist라는 이름의 html view 2개가 있습니다.&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;이 두개의 파일을 만드는것 대신에 나는 그것들을 하나로 모아서 루팅을 통해 그것들을 (divs)라고 부르고 싶습니다.&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;ng-switch를 사용하여 경로 매개변수에 따라 productList를 조건부로 include로 렌더링할 수 있습니다.&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;    angular.module('productapp', [])
      .config(['$routeProvider', function($routeProvider) {
      $routeProvider
        .when('/productapp', {templateUrl: 'partials/productList.html', controller: productsCtrl})
        .when('/productapp/:productId', {templateUrl: 'partials/productList.html', controller: productsCtrl})
        .otherwise({redirectTo: '/productapp'});
&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;    function productsCtrl($scope, $routeParams) {
      $scope.productId = $routeParams.productId;
    }
&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;그리고 html에:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;...productListHtml...&amp;gt;
    &amp;lt;div ng-switch=&quot;productId != null&quot;&amp;gt;
      &amp;lt;div ng-switch-when=&quot;true&quot; ng-include=&quot;'partials/product.html'&quot;&amp;gt;
    &amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$routerProvide가 여러 ng-view를 지원하지 않으므로 Angular에서 보기를 중첩하고 딥링크하는 데 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 &lt;a href=&quot;http://www.bennadel.com/blog/2441-Nested-Views-Routing-And-Deep-Linking-With-AngularJS.htm&quot; rel=&quot;nofollow&quot; papago-id=&quot;9-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;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 문제가 있었는데 이제 &lt;a href=&quot;https://github.com/angular-ui/ui-router#get-started&quot; rel=&quot;nofollow&quot; papago-id=&quot;10-1&quot;&gt;UI-Router&lt;/a&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;ngRoute가 아닌 이것을 사용하는 장점은 &quot;ui-view&quot; 명명 규칙을 사용하여 동일한 페이지에 여러 보기를 가질 수 있다는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/12577378/create-a-single-html-view-for-multiple-partial-views-in-angularjs&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/767</guid>
      <comments>https://megabox.tistory.com/767#entry767comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:40:46 +0900</pubDate>
    </item>
    <item>
      <title>C/P 스레드 사용: 공유 변수가 변동성이 있어야 합니까?</title>
      <link>https://megabox.tistory.com/766</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C/P 스레드 사용: 공유 변수가 변동성이 있어야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C 프로그래밍 언어와 Pthreads를 쓰레드 라이브러리로 사용합니다. 쓰레드 간에 공유되는 변수/구조를 volatile로 선언해야 합니까?&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;pthread POSIX 표준은 이것에 대한 발언권이 있습니까, 이 컴파일러에 의존하는 것입니까, 아니면 둘 다입니까?&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;font class=&quot;papago-parent&quot;&gt;하지만 자물쇠를 사용하지 &lt;em papago-id=&quot;3-1&quot;&gt;않는다면&lt;/em&gt; 어떨까요? 예를 들어 &lt;a href=&quot;http://en.wikipedia.org/wiki/Barrier_(computer_science)&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-3&quot;&gt;장벽&lt;/a&gt;을 사용한다면 어떨까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 &lt;a href=&quot;http://en.wikipedia.org/wiki/Compare_and_swap&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-5&quot;&gt;비교-스왑&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;font class=&quot;papago-parent&quot;&gt;사실, 만약 여러분이 변수에 변동성을 부여하고 있다면 여러분은 이미 틀렸을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://web.archive.org/web/20190219170904/https://software.intel.com/en-us/blogs/2007/11/30/volatile-almost-useless-for-multi-threaded-programming/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://software.intel.com/en-us/blogs/2007/11/30/volatile-almost-useless-for-multi-threaded-programming/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정답은 '아니오'입니다. 적절한 동기화 프리미티브 외에 'volatile'을 사용할 필요는 없습니다.&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;volatile'을 사용하는 것은 필요하지도 충분하지도 않습니다.&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;예를 들어, 다른 CPU에서 원자성이나 가시성을 보장하지는 않습니다.&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;font class=&quot;papago-parent&quot;&gt;데이터가 컴파일러의 재량에 따라 레지스터에 캐싱되지 않고 실제 메모리에 예측 가능하게 기록되도록 하려면 휘발성이 있는 것으로 표시해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 기능을 수정한 후 공유 데이터에만 액세스하는 경우에도 문제가 없을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 저는 값이 레지스터에서 메모리로 다시 쓰여지는 것을 확실하게 하기 위해 맹운에 의존하지 않는 것을 제안합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;맞습니다. 하지만 휘발성을 사용하더라도 CPU는 공유 데이터를 쓰기 게시 버퍼에 얼마든지 자유롭게 캐시할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자를 물어뜯을 수 있는 최적화 집합은 'volatile'이 비활성화하는 최적화 집합과 정확하게 같지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 'volatile'을 사용하면 맹운에 &lt;em papago-id=&quot;9-1&quot;&gt;의존&lt;/em&gt;하게 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반면 정의된 다중 스레드 의미론과 함께 동기화 프리미티브를 사용하면 작동이 보장됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 '휘발성'이라는 엄청난 성능 히트를 감수하지 않아도 됩니다.&lt;/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;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터가 컴파일러의 재량에 따라 레지스터에 캐싱되지 않고 실제 메모리에 예측 가능하게 기록되도록 하려면 휘발성이 있는 것으로 표시해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 기능을 수정한 후 공유 데이터에만 액세스하는 경우에도 문제가 없을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 저는 값이 레지스터에서 메모리로 다시 쓰여지는 것을 확실하게 하기 위해 맹운에 의존하지 않는 것을 제안합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특히 레지스터가 풍부한 머신(즉, x86이 아닌)에서는 변수가 레지스터에서 꽤 오랜 기간 동안 유지될 수 있으며, 훌륭한 컴파일러는 구조의 일부 또는 전체 구조를 레지스터에 캐시할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 휘발성을 사용해야 하지만 성능을 위해 값을 로컬 변수에 복사한 다음 명시적인 쓰기-백을 수행해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 휘발성을 효율적으로 사용한다는 것은 C 코드에서 로드 스토어(load-store) 사고를 약간 수행한다는 것을 의미합니다.&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;어떤 경우든 정확한 프로그램을 만들기 위해서는 OS 수준의 동기화 메커니즘을 사용해야 합니다.&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;volatile의 약점에 대한 예는 http://jakob.engbloms.se/archives/65, 에서 decker의 알고리즘 예를 참조하십시오. 이는 volatile이 동기화하는 데 작동하지 않는다는 것을 꽤 잘 증명합니다.&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 papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Hans Boehm은 휘발성에 대한 휴대용 용도는 세 가지뿐이라고 &lt;a href=&quot;http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2016.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;17-1&quot;&gt;지적&lt;/a&gt;합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;18-0&quot;&gt;volatile&lt;/em&gt;은 값이 긴 jmp에 걸쳐 보존되어야 하는 setjmp와 동일한 범위에 있는 지역 변수를 표시하는 데 사용될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제의 지역 변수를 공유할 방법이 없는 경우 원자성과 순서 제약은 아무런 영향을 미치지 않기 때문에 어떤 부분의 사용이 느려질지는 불분명합니다. (모든 변수를 긴 jmp에 걸쳐 보존하도록 요구함으로써 어떤 부분의 사용이 느려질지조차 불분명합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이는 별개의 문제이며 여기서는 고려되지 않습니다.)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;19-0&quot;&gt;volatile&lt;/em&gt;은 변수가 &quot;외부적으로 수정&quot;될 수 있지만, 사실 수정은 스레드 자체에 의해 동기적으로 트리거됩니다. 예를 들어 기본 메모리가 여러 위치에 매핑되어 있기 때문입니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;20-1&quot;&gt;휘발성&lt;/em&gt; sigatomic_t는 제한된 방식으로 동일한 스레드에서 신호 핸들러와 통신하기 위해 사용될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;sigatomic_t 케이스에 대한 요구사항을 약화시키는 것을 고려할 수 있지만, 그것은 다소 직관적이지 않은 것으로 보입니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속도를 위해 &lt;em papago-id=&quot;21-1&quot;&gt;멀티스레딩&lt;/em&gt;을 하는 경우 코드 속도를 줄이는 것은 확실히 원하는 것이 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다중 스레드 프로그래밍의 경우 휘발성이 종종 실수로 해결되는 것으로 생각되는 두 가지 핵심 문제는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;em papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원자성&lt;/font&gt;&lt;/em&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;23-0&quot;&gt;메모리 일관성&lt;/em&gt;, 즉 다른 스레드에서 볼 수 있는 스레드의 작업 순서입니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(1)을 먼저 다루도록 하겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;휘발성은 원자 읽기 또는 쓰기를 보장하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 129비트 구조의 휘발성 읽기 또는 쓰기는 대부분의 최신 하드웨어에서 원자성이 아닐 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;32비트 int의 휘발성 읽기 또는 쓰기는 대부분의 최신 하드웨어에서 원자이지만 &lt;em papago-id=&quot;24-1&quot;&gt;휘발성은 이와 무관&lt;/em&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;휘발성 물질이 없으면 원자일 가능성이 높습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;원자성은 컴파일러의 마음에 걸려 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C나 C++ 표준에는 원자가 되어야 한다는 내용이 없습니다.&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;이제 이슈(2)를 생각해 봅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;때때로 프로그래머들은 휘발성을 휘발성 접근의 최적화를 끄는 것으로 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 실제로는 대체로 사실입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 그것은 휘발성이 없는 접근이 아니라 휘발성이 있는 접근일 뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 조각을 고려합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; volatile int Ready;       

    int Message[100];      

    void foo( int i ) {      

        Message[i/10] = 42;      

        Ready = 1;      

    }
&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;다른 스레드는 Ready가 0이 아닐 때까지 기다렸다가 Message를 읽습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;gcc 4.0 또는 icc를 사용하여 &quot;gcc -O2 -S&quot;로 컴파일해 보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 다 Ready로 먼저 스토어를 진행하기 때문에 i/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 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;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;이 예에서 x86 하드웨어는 순서를 변경하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Itanium 컴파일러는 휘발성 저장소를 위한 메모리 펜스를 삽입하기 때문에 Itanium(TM) 프로세서도 마찬가지입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 똑똑한 Itanium 확장입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 파워(TM)와 같은 칩은 다시 주문할 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;주문할 때 정말로 필요한 것은 &lt;em papago-id=&quot;27-3&quot;&gt;메모리 장벽이라고&lt;/em&gt;도 불리는 &lt;em papago-id=&quot;27-1&quot;&gt;메모리 펜스&lt;/em&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모리 펜스는 펜스를 넘어 메모리 작업의 순서를 바꾸거나, 경우에 따라서는 한 방향의 순서를 바꾸는 것을 막습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;휘발성은 기억의 울타리와는 상관이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;ul&gt; 
 &lt;li papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;POSIX 스레드&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows(TM) 스레드&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OpenMP&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;TBB&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://software.intel.com/en-us/blogs/2007/11/30/volatile-almost-useless-for-multi-threaded-programming/&quot; papago-id=&quot;33-1&quot; rel=&quot;nofollow&quot;&gt;Arch Robison&lt;/a&gt; (&lt;a href=&quot;http://software.intel.com/en-us/blogs/2007/11/30/volatile-almost-useless-for-multi-threaded-programming/&quot; papago-id=&quot;33-1&quot; rel=&quot;nofollow&quot;&gt;Intel)&lt;/a&gt;의 기사를 기반으로 합니다&lt;a href=&quot;http://software.intel.com/en-us/blogs/2007/11/30/volatile-almost-useless-for-multi-threaded-programming/&quot; papago-id=&quot;33-1&quot; rel=&quot;nofollow&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 경험으로는, 아니요. 당신은 단지 당신이 그러한 값들에 쓸 때 당신 자신을 적절하게 뮤텍스하거나, 스레드들이 다른 스레드의 동작에 의존하는 데이터에 접근하기 전에 스레드들이 멈추도록 당신의 프로그램을 구성하기만 하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 프로젝트인 x264는 이 방법을 사용합니다. 스레드는 엄청난 양의 데이터를 공유하지만 대부분의 스레드는 읽기 전용이거나 스레드는 데이터에 액세스하기 전에 데이터가 사용 가능해지거나 최종적으로 완료되기를 기다리므로 음소거가 필요하지 않습니다.&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 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&gt;&lt;code&gt;Volatile&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;CPU 읽기/쓰기 명령과 독립적으로 변경할 수 있는 메모리 위치를 읽을 때만 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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가 각 쓰레드에 대한 메모리 읽기/쓰기를 완전히 제어하므로 컴파일러는 메모리가 일관성이 있다고 가정하고 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;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;메모리 매핑 I/O에 액세스하기 위한 것입니다.&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 class=&quot;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;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;이 조건에서 CPU는 새로 업데이트된 값을 읽는 대신 이전에 캐시된 메모리 값을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&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;POSIX 7은 다음과 같은 기능을 보장합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pthread_lock&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;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_11&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;43-0&quot;&gt;https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_11&lt;/a&gt; &quot;4.12 메모리 동기화&quot;는 다음과 같이 말합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 기능은 메모리를 다른 스레드와 동기화합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;pthread_barrier_wait()
pthread_cond_broadcast()
pthread_cond_signal()
pthread_cond_timedwait()
pthread_cond_wait()
pthread_create()
pthread_join()
pthread_mutex_lock()
pthread_mutex_timedlock()
pthread_mutex_trylock()
pthread_mutex_unlock()
pthread_spin_lock()
pthread_spin_trylock()
pthread_spin_unlock()
pthread_rwlock_rdlock()
pthread_rwlock_timedrdlock()
pthread_rwlock_timedwrlock()
pthread_rwlock_tryrdlock()
pthread_rwlock_trywrlock()
pthread_rwlock_unlock()
pthread_rwlock_wrlock()
sem_post()
sem_timedwait()
sem_trywait()
sem_wait()
semctl()
semop()
wait()
waitpid()
&lt;/code&gt;&lt;/pre&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 변수가 다음 값 사이에서 보호되는 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pthread_mutex_lock&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;pthread_mutex_unlock&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;volatile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&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/3208060/does-guarding-a-variable-with-a-pthread-mutex-guarantee-its-also-not-cached&quot; papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;pthread mutex로 변수를 보호하면 캐시되지 않는 것이 보장됩니까?&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/24137964/does-pthread-mutex-lock-contains-memory-fence-instruction&quot; papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;pthread_mutex_lock에 메모리 펜스 명령이 포함되어 있습니까?&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;휘발성은 한 스레드가 무언가를 쓰고 다른 스레드가 그것을 읽을 때까지 지연이 전혀 필요 없는 경우에만 유용할 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 일종의 잠금이 없다면, 다른 스레드가 &lt;em papago-id=&quot;52-1&quot;&gt;언제&lt;/em&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;단순한 값(int 및 float)의 경우 명시적인 동기점이 필요 없는 경우 뮤텍스가 오버킬일 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;뮤텍스나 잠금 같은 것을 사용하지 않는 경우 변수 휘발성을 선언해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;뮤텍스를 사용하면 만반의 준비가 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;복잡한 유형의 경우에는 뮤텍스를 사용해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업은 원자가 아닌 작업이므로 뮤텍스가 없는 반변경 버전을 읽을 수 있습니다.&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;volatile을 설정하지 않으면 컴파일된 코드가 데이터를 레지스터에 오랫동안 저장할 수 있습니다.&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;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;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;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;근본적인 이유는 C 언어 시맨틱이 단일 &lt;strong papago-id=&quot;59-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;59-3&quot;&gt;스레드&lt;/strong&gt;에서 실행해도 프로그램 동작이 변하지 않는다고 생각되는 경우 메모리 액세스를 폐기할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 의심할 수 있듯이 프로그램이 실제로 멀티 스레드 방식으로 실행되어야 하는 경우 동작이 &lt;strong papago-id=&quot;59-5&quot;&gt;변경&lt;/strong&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;Paul Mckenny는 유명한 &lt;a href=&quot;http://elixir.free-electrons.com/linux/latest/source/Documentation/memory-barriers.txt#L264&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;메모리- barriers.txt&quot; papago-id=&quot;60-1&quot; papago-attr-id=&quot;2&quot;&gt;Linux 커널 문서&lt;/a&gt;에서 다음과 같이 지적했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러가 READ_ONCE() 및 WRITE_ONCE()에 의해 보호되지 않는 메모리 참조로 사용자가 원하는 작업을 수행한다고 가정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러가 없으면 컴파일러는 모든 종류의 &quot;창의적인&quot; 변환을 수행할 수 있는 권한 내에 있게 됩니다. 이는 COLLIGER BARRIER 섹션에서 다룹니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;READ_ONCE() 및 WRITE_ONCE()는 참조된 변수의 휘발성 캐스트로 정의됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int y;
int x = READ_ONCE(y);
&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;int y;
int x = *(volatile int *)&amp;amp;y;
&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;strong papago-id=&quot;64-1&quot;&gt;번&lt;/strong&gt;만 수행된다는 보장이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 함수(예: pthread_mutex_lock)를 호출하면 컴파일러가 전역 변수에 메모리 액세스를 수행할 수 있습니다.&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;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요약하면 여러 스레드에서 공유하는 변수를 휘발성으로 표시하거나 휘발성 캐스트를 사용하여 액세스해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;66&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;67&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;hr&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 &lt;strong papago-id=&quot;68-1&quot;&gt;C11/C++11&lt;/strong&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;font class=&quot;papago-parent&quot;&gt;&quot;케이시&quot;는 CPU가 정확히 하나라고 가정하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동기화 프리미티브가 외부 함수이고 문제의 기호가 컴파일 단위 외부(글로벌 이름, 내보내기 포인터, 이를 수정할 수 있는 내보내기 함수)에 표시되는 경우 컴파일러는 모든 외부에서 볼 수 있는 개체에 대한 메모리 펜스로 처리하거나 기타 외부 함수 호출을 처리합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;/font&gt;&lt;font class=&quot;papago-parent&quot;&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;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;volatile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하지 않는 보장된 멀티스레드 시맨틱스를 제공하는 수많은 다른 작업이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 여기에는 원자 연산, 음소거 등이 포함됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;volatile&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;C 표준은 선언된 변수에 대해 멀티스레드 동작에 대한 보장을 제공하지 않습니다.&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;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;/p&gt; 
&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 필요하지도 충분하지도 않기 때문에, 그것을 사용하는 것은 큰 의미가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 가지 예외는 멀티 스레드 의미론을 문서화한 특정 플랫폼(Visual Studio 등)입니다.&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;스레드 간에 공유되는 변수는 'volatile'로 선언해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 컴파일러에게 하나의 스레드가 그러한 변수에 쓸 때 쓰기는 (레지스터와 반대로) 메모리에 있어야 한다는 것을 알려줍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/78172/using-c-pthreads-do-shared-variables-need-to-be-volatile&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/766</guid>
      <comments>https://megabox.tistory.com/766#entry766comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:57:17 +0900</pubDate>
    </item>
    <item>
      <title>angularjs에서 배열 푸시의 중복을 방지하는 방법</title>
      <link>https://megabox.tistory.com/765</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;angularjs에서 배열 푸시의 중복을 방지하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var arr = [];
arr.push(item1,item2);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게&lt;/font&gt;&lt;/font&gt;&lt;code&gt;arr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 포함됩니다: [&quot;이름&quot;, &quot;thing1&quot;]&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 정확한 값이 같은 요소를 푸시할 때 문제가 발생했습니다. 동일한 요소 값을 필터링하면서도 업데이트/변경을 수락하는 방법은 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://jsfiddle.net/AziziMusa/m9e1fkdg/2/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-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;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용가능&lt;/font&gt;&lt;/font&gt;&lt;code&gt;arr.indexOf&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;찾을 수 없으면 -1을 반환하므로 추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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 (arr.indexOf(item) == -1) {
    arr.push(item);
}
&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&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JQuery에는 메서드가 있습니다(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$.indexOf&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;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트만 있으면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열에 항목이 포함된 경우 인덱스는 &amp;gt;= 0입니다.&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;인덱스 == -1이면 배열에 항목이 존재하지 않으므로 고유 항목을 푸시할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if(arr.indexOf(item) == -1) {
   arr.push(item);
}
&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;strong papago-id=&quot;14-0&quot;&gt;편집:&lt;/strong&gt; 번호 변경을 요청하셨네요, 이게 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var index = arr.indexOf(item);
if(index &amp;gt; -1) { //checking if item exist in array
  arr[index]++;   // you can access that element by using arr[index], 
                 // then change it as you want, I'm just incrementing in above example
}
&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;Array.prototype.indexOf()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값이 존재하는지 여부를 확인하는 방법입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 확인하기 위해서는 문자열의 배열을 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng-models&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;selects.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&gt;&lt;/font&gt;&lt;code&gt;ng-change()&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;strong&gt;&lt;a href=&quot;http://jsfiddle.net/m9e1fkdg/3/&quot; rel=&quot;nofollow&quot; papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데모&lt;/font&gt;&lt;/a&gt;&lt;/strong&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;pre&gt;&lt;code&gt;$scope.goChange = function(name, value){
  if(!~arr.indexOf(value)) {
          arr.push(name, value);
          console.log(arr);
  }
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;select ng-model=&quot;selects&quot; ng-change=&quot;goChange(item.name, selects.value)&quot; ng-options=&quot;i as i.value for i in options&quot;&amp;gt;
  &amp;lt;option value=&quot;&quot;&amp;gt;&amp;lt;/option&amp;gt;
&amp;lt;/select&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;&lt;a href=&quot;https://docs.angularjs.org/api/ng/filter/filter&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;23-1&quot;&gt;Angular Filters&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;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/15914658/angular-js-how-to-make-ng-repeat-filter-out-duplicate-results&quot; papago-id=&quot;24-1&quot;&gt;중복된 결과를 ng-repeat 필터로 제거하는 방법&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열에서 중복을 필터링하려면(es6):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let arr = ['foo', 'foo', 'bar', 'baz'];
Array.from(new Set(arr));
console.log(arr);
// ['foo', 'bar', 'baz'];
&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/25667253/how-to-prevent-duplicate-in-array-push-in-angularjs&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/765</guid>
      <comments>https://megabox.tistory.com/765#entry765comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:57:08 +0900</pubDate>
    </item>
    <item>
      <title>Woocommerce: html 출력을 대체하는 데 도움</title>
      <link>https://megabox.tistory.com/764</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Woocommerce: 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;나의 체크아웃 청구서 필드와 배송 필드는 3개의 다른 행 정렬로 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;/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;div class=&quot;woocommerce-billing-fields&quot;&amp;gt;

    &amp;lt;h3&amp;gt;Faktureringsdetaljer&amp;lt;/h3&amp;gt;




    &amp;lt;p class=&quot;form-row form-row form-row-first validate-required&quot; id=&quot;billing_first_name_field&quot;&amp;gt;&amp;lt;label for=&quot;billing_first_name&quot; class=&quot;&quot;&amp;gt;Fornavn &amp;lt;abbr class=&quot;required&quot; title=&quot;påkrevet&quot;&amp;gt;*&amp;lt;/abbr&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;text&quot; class=&quot;input-text &quot; name=&quot;billing_first_name&quot; id=&quot;billing_first_name&quot; placeholder=&quot;&quot; value=&quot;&quot;&amp;gt;&amp;lt;/p&amp;gt;

    &amp;lt;p class=&quot;form-row form-row form-row-last validate-required&quot; id=&quot;billing_last_name_field&quot;&amp;gt;&amp;lt;label for=&quot;billing_last_name&quot; class=&quot;&quot;&amp;gt;Etternavn &amp;lt;abbr class=&quot;required&quot; title=&quot;påkrevet&quot;&amp;gt;*&amp;lt;/abbr&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;text&quot; class=&quot;input-text &quot; name=&quot;billing_last_name&quot; id=&quot;billing_last_name&quot; placeholder=&quot;&quot; value=&quot;&quot;&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;div class=&quot;clear&quot;&amp;gt;&amp;lt;/div&amp;gt;

    &amp;lt;p class=&quot;form-row form-row form-row-wide&quot; id=&quot;billing_company_field&quot;&amp;gt;&amp;lt;label for=&quot;billing_company&quot; class=&quot;&quot;&amp;gt;Navn på firma&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;text&quot; class=&quot;input-text &quot; name=&quot;billing_company&quot; id=&quot;billing_company&quot; placeholder=&quot;&quot; value=&quot;&quot;&amp;gt;&amp;lt;/p&amp;gt;

    &amp;lt;p class=&quot;form-row form-row form-row-wide address-field validate-required&quot; id=&quot;billing_address_1_field&quot;&amp;gt;&amp;lt;label for=&quot;billing_address_1&quot; class=&quot;&quot;&amp;gt;Adresse &amp;lt;abbr class=&quot;required&quot; title=&quot;påkrevet&quot;&amp;gt;*&amp;lt;/abbr&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;text&quot; class=&quot;input-text &quot; name=&quot;billing_address_1&quot; id=&quot;billing_address_1&quot; placeholder=&quot;Gateadresse&quot; value=&quot;&quot;&amp;gt;&amp;lt;/p&amp;gt;

    &amp;lt;p class=&quot;form-row form-row form-row-last address-field validate-required validate-postcode&quot; id=&quot;billing_postcode_field&quot;&amp;gt;&amp;lt;label for=&quot;billing_postcode&quot; class=&quot;&quot;&amp;gt;Postnummer  &amp;lt;abbr class=&quot;required&quot; title=&quot;påkrevet&quot;&amp;gt;*&amp;lt;/abbr&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;text&quot; class=&quot;input-text &quot; name=&quot;billing_postcode&quot; id=&quot;billing_postcode&quot; placeholder=&quot;Postnummer &quot; value=&quot;&quot;&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;div class=&quot;clear&quot;&amp;gt;&amp;lt;/div&amp;gt;

    &amp;lt;p class=&quot;form-row form-row form-row-wide address-field validate-required&quot; id=&quot;billing_city_field&quot;&amp;gt;&amp;lt;label for=&quot;billing_city&quot; class=&quot;&quot;&amp;gt;Sted &amp;lt;abbr class=&quot;required&quot; title=&quot;påkrevet&quot;&amp;gt;*&amp;lt;/abbr&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;text&quot; class=&quot;input-text &quot; name=&quot;billing_city&quot; id=&quot;billing_city&quot; placeholder=&quot;Sted&quot; value=&quot;&quot;&amp;gt;&amp;lt;/p&amp;gt;

    &amp;lt;p class=&quot;form-row form-row form-row-first address-field validate-state&quot; id=&quot;billing_state_field&quot; style=&quot;display: none&quot;&amp;gt;&amp;lt;label for=&quot;billing_state&quot; class=&quot;&quot;&amp;gt;Delstat / Fylke&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;hidden&quot; class=&quot;hidden&quot; name=&quot;billing_state&quot; id=&quot;billing_state&quot; value=&quot;&quot; placeholder=&quot;&quot;&amp;gt;&amp;lt;/p&amp;gt;

    &amp;lt;p class=&quot;form-row form-row form-row-first validate-required validate-email&quot; id=&quot;billing_email_field&quot;&amp;gt;&amp;lt;label for=&quot;billing_email&quot; class=&quot;&quot;&amp;gt;Epostadresse &amp;lt;abbr class=&quot;required&quot; title=&quot;påkrevet&quot;&amp;gt;*&amp;lt;/abbr&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;email&quot; class=&quot;input-text &quot; name=&quot;billing_email&quot; id=&quot;billing_email&quot; placeholder=&quot;&quot; value=&quot;kreegah@gmail.com&quot;&amp;gt;&amp;lt;/p&amp;gt;

    &amp;lt;p class=&quot;form-row form-row form-row-last validate-required validate-phone&quot; id=&quot;billing_phone_field&quot;&amp;gt;&amp;lt;label for=&quot;billing_phone&quot; class=&quot;&quot;&amp;gt;Telefon &amp;lt;abbr class=&quot;required&quot; title=&quot;påkrevet&quot;&amp;gt;*&amp;lt;/abbr&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;tel&quot; class=&quot;input-text &quot; name=&quot;billing_phone&quot; id=&quot;billing_phone&quot; placeholder=&quot;&quot; value=&quot;&quot;&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;div class=&quot;clear&quot;&amp;gt;&amp;lt;/div&amp;gt;


&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 것:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;woocommerce-billing-fields&quot;&amp;gt;

    &amp;lt;h3&amp;gt;Faktureringsdetaljer&amp;lt;/h3&amp;gt;




    &amp;lt;p class=&quot;form-row form-row form-row-first validate-required&quot; id=&quot;billing_first_name_field&quot;&amp;gt;&amp;lt;label for=&quot;billing_first_name&quot; class=&quot;&quot;&amp;gt;Fornavn &amp;lt;abbr class=&quot;required&quot; title=&quot;påkrevet&quot;&amp;gt;*&amp;lt;/abbr&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;text&quot; class=&quot;input-text &quot; name=&quot;billing_first_name&quot; id=&quot;billing_first_name&quot; placeholder=&quot;&quot; value=&quot;&quot;&amp;gt;&amp;lt;/p&amp;gt;

    &amp;lt;p class=&quot;form-row form-row form-row-last validate-required&quot; id=&quot;billing_last_name_field&quot;&amp;gt;&amp;lt;label for=&quot;billing_last_name&quot; class=&quot;&quot;&amp;gt;Etternavn &amp;lt;abbr class=&quot;required&quot; title=&quot;påkrevet&quot;&amp;gt;*&amp;lt;/abbr&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;text&quot; class=&quot;input-text &quot; name=&quot;billing_last_name&quot; id=&quot;billing_last_name&quot; placeholder=&quot;&quot; value=&quot;&quot;&amp;gt;&amp;lt;/p&amp;gt;

    &amp;lt;p class=&quot;form-row form-row form-row-first&quot; id=&quot;billing_company_field&quot;&amp;gt;&amp;lt;label for=&quot;billing_company&quot; class=&quot;&quot;&amp;gt;Navn på firma&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;text&quot; class=&quot;input-text &quot; name=&quot;billing_company&quot; id=&quot;billing_company&quot; placeholder=&quot;&quot; value=&quot;&quot;&amp;gt;&amp;lt;/p&amp;gt;

    &amp;lt;p class=&quot;form-row form-row form-row-last address-field validate-required&quot; id=&quot;billing_address_1_field&quot;&amp;gt;&amp;lt;label for=&quot;billing_address_1&quot; class=&quot;&quot;&amp;gt;Adresse &amp;lt;abbr class=&quot;required&quot; title=&quot;påkrevet&quot;&amp;gt;*&amp;lt;/abbr&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;text&quot; class=&quot;input-text &quot; name=&quot;billing_address_1&quot; id=&quot;billing_address_1&quot; placeholder=&quot;Gateadresse&quot; value=&quot;&quot;&amp;gt;&amp;lt;/p&amp;gt;

    &amp;lt;p class=&quot;form-row form-row form-row-first address-field validate-required validate-postcode&quot; id=&quot;billing_postcode_field&quot;&amp;gt;&amp;lt;label for=&quot;billing_postcode&quot; class=&quot;&quot;&amp;gt;Postnummer  &amp;lt;abbr class=&quot;required&quot; title=&quot;påkrevet&quot;&amp;gt;*&amp;lt;/abbr&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;text&quot; class=&quot;input-text &quot; name=&quot;billing_postcode&quot; id=&quot;billing_postcode&quot; placeholder=&quot;Postnummer &quot; value=&quot;&quot;&amp;gt;&amp;lt;/p&amp;gt;

    &amp;lt;p class=&quot;form-row form-row form-row-last address-field validate-required&quot; id=&quot;billing_city_field&quot;&amp;gt;&amp;lt;label for=&quot;billing_city&quot; class=&quot;&quot;&amp;gt;Sted &amp;lt;abbr class=&quot;required&quot; title=&quot;påkrevet&quot;&amp;gt;*&amp;lt;/abbr&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;text&quot; class=&quot;input-text &quot; name=&quot;billing_city&quot; id=&quot;billing_city&quot; placeholder=&quot;Sted&quot; value=&quot;&quot;&amp;gt;&amp;lt;/p&amp;gt;

    &amp;lt;p class=&quot;form-row form-row form-row-first address-field validate-state&quot; id=&quot;billing_state_field&quot; style=&quot;display: none&quot;&amp;gt;&amp;lt;label for=&quot;billing_state&quot; class=&quot;&quot;&amp;gt;Delstat / Fylke&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;hidden&quot; class=&quot;hidden&quot; name=&quot;billing_state&quot; id=&quot;billing_state&quot; value=&quot;&quot; placeholder=&quot;&quot;&amp;gt;&amp;lt;/p&amp;gt;

    &amp;lt;p class=&quot;form-row form-row form-row-first validate-required validate-email&quot; id=&quot;billing_email_field&quot;&amp;gt;&amp;lt;label for=&quot;billing_email&quot; class=&quot;&quot;&amp;gt;Epostadresse &amp;lt;abbr class=&quot;required&quot; title=&quot;påkrevet&quot;&amp;gt;*&amp;lt;/abbr&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;email&quot; class=&quot;input-text &quot; name=&quot;billing_email&quot; id=&quot;billing_email&quot; placeholder=&quot;&quot; value=&quot;kreegah@gmail.com&quot;&amp;gt;&amp;lt;/p&amp;gt;

    &amp;lt;p class=&quot;form-row form-row form-row-last validate-required validate-phone&quot; id=&quot;billing_phone_field&quot;&amp;gt;&amp;lt;label for=&quot;billing_phone&quot; class=&quot;&quot;&amp;gt;Telefon &amp;lt;abbr class=&quot;required&quot; title=&quot;påkrevet&quot;&amp;gt;*&amp;lt;/abbr&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;input type=&quot;tel&quot; class=&quot;input-text &quot; name=&quot;billing_phone&quot; id=&quot;billing_phone&quot; placeholder=&quot;&quot; value=&quot;&quot;&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;div class=&quot;clear&quot;&amp;gt;&amp;lt;/div&amp;gt;


&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이걸 어디서 무시할 수 있는지 아는 사람?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 우커머스 폴더에 있는 대부분의 /includes에서 아래위로 검색했습니다.&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;font class=&quot;papago-parent&quot;&gt;그 차이를 비교하고 발견하는 것은 상당히 어렵습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 필드의 클래스만 변경하려면 다음을 수행하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

function custom_override_checkout_fields( $fields ) {

    $fields['billing']['billing_company']['class'] = array('form-row', 'form-row', 'form-row-first');
    $fields['billing']['billing_address_1']['class'] = array('form-row', 'form-row', 'form-row-first', 'address-field', 'validate-required');
    $fields['billing']['billing_postcode']['class'] = array('form-row', 'form-row', 'form-row-first', 'address-field', 'validate-required');
    $fields['billing']['billing_city']['class'] = array('form-row', 'form-row', 'form-row-last', 'address-field', 'validate-required');
    $fields['billing']['billing_state']['class'] = array('form-row', 'form-row', 'form-row-first', 'address-field', 'validate-state');
    $fields['billing']['billing_email']['class'] = array('form-row', 'form-row', 'form-row-first', 'address-field', 'validate-email');
    $fields['billing']['billing_phone']['class'] = array('form-row', 'form-row', 'form-row-last', 'address-field', 'validate-phone');
    return $fields;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;절대 자바스크립트를 사용해서는 안 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 클래스를 추가하면 해당 클래스를 추가하는 원인에 대해 루트 파일을 추적하기가 어려운 테마 또는 플러그인에 의해 동적으로 추가되는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&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;그리고 운 좋게도 각 필드에 ID가 있어서 특정 요소를 선택하고 속성을 변경할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 당신에게 도움이 될만한 코드가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery(&quot;#billing_company_field&quot;).removeClass( &quot;form-row-wide&quot; ).addClass( &quot;form-row-first&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;위 코드는 div 요소 하나에 대해서만 클래스를 변경합니다.&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;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/32191218/woocommerce-help-replacing-html-output&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/764</guid>
      <comments>https://megabox.tistory.com/764#entry764comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:57:01 +0900</pubDate>
    </item>
    <item>
      <title>데이터베이스에 암호를 저장하는 가장 좋은 방법</title>
      <link>https://megabox.tistory.com/763</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스에 암호를 저장하는 가장 좋은 방법&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item mr8&quot;&gt; 
     &lt;svg aria-hidden=&quot;true&quot; class=&quot;svg-icon iconLightbulb&quot; width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 18 18&quot;&gt;
      &lt;path d=&quot;M15 6.38A6.48 6.48 0 0 0 7.78.04h-.02A6.49 6.49 0 0 0 2.05 5.6a6.31 6.31 0 0 0 2.39 5.75c.49.39.76.93.76 1.5v.24c0 1.07.89 1.9 1.92 1.9h2.75c1.04 0 1.92-.83 1.92-1.9v-.2c0-.6.26-1.15.7-1.48A6.32 6.32 0 0 0 15 6.37ZM4.03 5.85A4.49 4.49 0 0 1 8 2.02a4.48 4.48 0 0 1 5 4.36 4.3 4.3 0 0 1-1.72 3.44c-.98.74-1.5 1.9-1.5 3.08v.1H7.2v-.14c0-1.23-.6-2.34-1.53-3.07a4.32 4.32 0 0 1-1.64-3.94ZM10 18a1 1 0 0 0 0-2H7a1 1 0 1 0 0 2h3Z&quot;&gt;&lt;/path&gt;
     &lt;/svg&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 상태로는 이 질문은 우리의 Q&amp;amp;A 형식에 맞지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실, 참고 자료 또는 전문 지식에 의해 답변이 뒷받침되기를 기대하지만, 이 질문은 토론, 주장, 여론 조사 또는 토론을 요청할 가능성이 높습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 이 질문이 개선되고 다시 열릴 수 있다고 생각한다면,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;/help/reopen-questions&quot; papago-id=&quot;1-1&quot;&gt;안내&lt;/a&gt;를 받기 위해 헬프 &lt;a href=&quot;/help/reopen-questions&quot; papago-id=&quot;1-1&quot;&gt;센터를 방문&lt;/a&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;닫힘&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;2-1&quot; title=&quot;2012-04-18 16:07:40Z&quot; papago-attr-id=&quot;1&quot;&gt;11년 전&lt;/span&gt;에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;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;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;저는 C#를 사용하고 있으며 2008년 익스프레스 서버에 접속하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 유형의 데이터를 저장하는 가장 좋은 방법이 무엇인지 (가능한 많은 예를 들어) 제안해 줄 수 있는 사람이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추신: 정당한 이유가 제공될 수 있다면 이 정보는 데이터베이스에 저장되지 않는다는 의견에 열려 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호를 일반 텍스트 필드에 저장하는 것은 &lt;em papago-id=&quot;7-1&quot;&gt;끔찍한&lt;/em&gt; 생각이라는 당신의 말이 맞습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 &lt;em papago-id=&quot;7-3&quot;&gt;위치에 관한&lt;/em&gt; 한 암호 표현을 &lt;em papago-id=&quot;7-5&quot;&gt;데이터베이스&lt;/em&gt;에 저장하는 것은 대부분의 경우(그리고 솔직히 반대 사례는 생각할 수 없습니다) 적절한 작업입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;표현하면 salt(사용자마다 달라야 함)와 보안 1방향 알고리즘을 사용하여 암호를 해시하고 원래 암호를 버리고 저장하려는 &lt;em papago-id=&quot;7-7&quot;&gt;것&lt;/em&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 암호를 확인하려는 경우 동일한 해싱 알고리즘과 salt를 사용하여 값을 해쉬하고 데이터베이스의 해쉬 값과 비교합니다.&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;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/947618/how-to-best-store-user-information-and-user-login-and-password&quot; papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 정보와 사용자 로그인 및 비밀번호를 가장 잘 저장하는 방법&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/258299/best-practices-for-storing-database-passwords&quot; papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스 암호 저장 모범 사례&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/674904/salting-your-password-best-practices&quot; papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비밀번호 솔팅: 모범 사례?&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/568657/is-it-ever-ok-to-store-password-in-plain-text-in-a-php-variable-or-php-constant&quot; papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;pp 변수 또는 pp 상수에 암호를 평문으로 저장해도 괜찮습니까?&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;솔팅 비트에 대해 좀 더 명확히 설명하자면, 단순히 암호를 해싱하고 저장하는 것만으로 위험한 것은 침입자가 데이터베이스를 손에 넣더라도 (적어도 무지개 테이블에 나타나는) 여전히 무지개 &lt;a href=&quot;http://en.wikipedia.org/wiki/Rainbow_table&quot; rel=&quot;noreferrer&quot; papago-id=&quot;13-1&quot;&gt;테이블이라고 알려진&lt;/a&gt; 것을 사용하여 암호를 &quot;해독&quot;할 수 있다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결하기 위해 개발자들은 적절하게 실행되었을 때 무지개 공격을 단순히 실행할 수 없게 만드는 비밀번호에 &lt;a href=&quot;http://en.wikipedia.org/wiki/Salt_(cryptography)&quot; rel=&quot;noreferrer&quot; papago-id=&quot;13-3&quot;&gt;소금&lt;/a&gt;을 첨가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적인 오해는 모든 암호에 동일한 고유하고 긴 문자열을 단순히 추가하는 것입니다. 이는 &lt;em papago-id=&quot;13-5&quot;&gt;끔찍하지&lt;/em&gt;는 않지만, 모든 암호에 고유한 염을 추가하는 것이 가장 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/420843/need-some-help-understanding-password-salt&quot; papago-id=&quot;13-7&quot;&gt;자세한 내용은 이 글을 읽어보세요.&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;14-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;/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-0&quot;&gt;해시 잇 &lt;/strong&gt;: 강력한 해시 함수를 통해 사용자 비밀번호를 해시(단방향 암호화) 저장합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;c#암호화 비밀번호&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;a href=&quot;http://sha1-hash-online.waraxe.us/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;16-1&quot;&gt;온라인 SHA1 해시 생성기&lt;/a&gt;를 참조하십시오(그러나 SHA1을 해시 함수로 사용하지 말고 SHA256과 같은 더 강력한 것을 사용하십시오).&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;strong papago-id=&quot;18-0&quot;&gt;사용 방법:&lt;/strong&gt; 데이터베이스에 저장된 이 매쉬업 암호를 어떻게 사용해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 로그인하면 사용자 이름과 암호(원문 텍스트)를 제공합니다. 저장된 버전을 얻기 위해 입력된 암호를 해시하는 데 동일한 해시 코드를 사용하면 됩니다.&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;따라서 해시된 두 개의 암호(사용자 이름에 대한 데이터베이스 해시와 입력된 &amp;amp; 해시된 암호)를 비교합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해시를 비교하면 &quot;입력한 내용&quot;이 &quot;원래 사용자가 암호로 입력한 내용&quot;과 일치하는지 알 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가 크레딧:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;22-0&quot;&gt;질문:&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 데이터베이스를 가지고 있다면, 나는 그냥 존 더 리퍼 같은 크래커를 가지고 당신이 저장하고 있는 해시 암호와 일치하는 것을 찾을 때까지 해시를 만들기 시작할 수 없을까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(어쨌든 사용자가 짧은 사전 단어를 선택하기 때문에...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;쉬워야 함)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;23-0&quot;&gt;답변:&lt;/em&gt; 예...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;네, 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 당신은 비밀번호를 '솔트' 해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Salt_(cryptography)&quot; rel=&quot;noreferrer&quot; papago-id=&quot;24-1&quot;&gt;소금에 관한 위키피디아 기사&lt;/a&gt; 보기&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://web.archive.org/web/20190319133731/http://www.obviex.com:80/Samples/Hash.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;25-1&quot;&gt;&quot;소금으로 데이터를 해시하는 방법&quot; C# 예제&lt;/a&gt;(보관) 참조&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sha-512와 같은 안전한 알고리즘을 사용하여 키를 강화한 solted hash.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 좋은 보안 방법은 암호를 전혀 저장하지 않고(암호화되지도 않음), 암호화된 암호의 소금에 절인 해시(암호당 고유한 소금 포함)를 저장하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 일반 텍스트 암호를 검색하는 것이 사실상 불가능합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'&lt;a href=&quot;http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html&quot; papago-id=&quot;29-1&quot; rel=&quot;noreferrer&quot;&gt;무지개 테이블로 충분&lt;/a&gt;해'라는 기사를 읽는 것을 전적으로 권장합니다&lt;a href=&quot;http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html&quot; papago-id=&quot;29-1&quot; rel=&quot;noreferrer&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html&quot; papago-id=&quot;29-1&quot; rel=&quot;noreferrer&quot;&gt; 보안 암호 체계에 대해 알아야&lt;/a&gt; 할 &lt;a href=&quot;http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html&quot; papago-id=&quot;29-1&quot; rel=&quot;noreferrer&quot;&gt;사항&lt;/a&gt; [dead link, copy &lt;a href=&quot;http://web.archive.org/web/20120114184424/http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;29-3&quot;&gt;at the Internet Archive&lt;/a&gt;] 및 &lt;a href=&quot;http://codahale.com/how-to-safely-store-a-password/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;29-5&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;애석하게도 우리 대부분은 그렇지 않습니다.&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;/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;그러면 기술을 제대로 이해하고 있고 사용자가 이미 가지고 있는 자격 증명을 사용할 수 있으므로 응용 프로그램에 특정한 새 ID를 생성할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제가 된 애플리케이션이 순수하게 내부용인 경우에는 적합하지 않을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://rpxnow.com/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;34-0&quot;&gt;RPX&lt;/a&gt;는 Open을 쉽게 통합할 수 있는 좋은 방법을 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;응용프로그램에 ID를 지원합니다.&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;시나리오에서는 asp.net 구성원 자격을 확인할 수 있습니다. 사용자의 암호를 해시 문자열로 데이터베이스에 저장하는 것이 좋습니다.&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;모든 것이 이 목적을 위해 만들어졌습니다. asp.net &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms998347.aspx&quot; rel=&quot;nofollow noreferrer&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;해시를 되돌릴 필요가 없다면 저는 MD5/SHA1 비밀번호를 알려드리겠습니다.&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;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/1054022/best-way-to-store-password-in-database&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>database</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/763</guid>
      <comments>https://megabox.tistory.com/763#entry763comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:56:54 +0900</pubDate>
    </item>
    <item>
      <title>pHPUnit에서 clover.xml을 생성할 때 상대 경로를 정의하시겠습니까?</title>
      <link>https://megabox.tistory.com/762</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;pHPUnit에서 clover.xml을 생성할 때 상대 경로를 정의하시겠습니까?&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;PHPUnit로 WordPress 플러그인에 통합 테스트를 실행하고 있으며 커버리지를 생성할 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;clover.xml&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;clover.xml&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 class=&quot;lang-xml prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;file name=&quot;/Users/denis/vagrant-local/www/project/public_html/wp-content/plguins/my-plugin/file-that-is-tested.php&quot;&amp;gt;
&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;이 파일을 SonarQuebe로 보내야 하기 때문에 SonarQuebe로 보낼 때마다 이 파일을 수정하여 상대 경로만 가질 수 있도록 해야 합니다(시작).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wp-config&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 class=&quot;lang-xml prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;file name=&quot;wp-content/plguins/my-plugin/file-that-is-tested.php&quot;&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;첫 번째 버전을 보내면 SonarQube가 코드 커버리지를 0.0%로 보고하고 나머지 버전을 보내면 일부 커버리지가 표시됩니다(PHPU nit에서 생성하는 것과 다르지만 중요하지 않습니다).&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;PHPUnit 구성에서 이 파일 이름 속성을 지정할 수 있는 방법이 있습니까? 아니면 테스트를 실행할 때마다 bash 스크립트를 실행하여 이 추가 부분을 삭제해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집&lt;/font&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&gt;&lt;/font&gt;&lt;code&gt;phpunit.xml.dist&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 class=&quot;lang-xml prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;phpunit
  backupGlobals=&quot;false&quot;
  backupStaticAttributes=&quot;false&quot;
  beStrictAboutCoversAnnotation=&quot;true&quot;
  bootstrap=&quot;tests/bootstrap.php&quot;
  colors=&quot;true&quot;
  convertErrorsToExceptions=&quot;true&quot;
  convertNoticesToExceptions=&quot;true&quot;
  convertWarningsToExceptions=&quot;true&quot;
  printerClass=&quot;Codedungeon\PHPUnitPrettyResultPrinter\Printer&quot;
  stopOnError=&quot;false&quot;
  stopOnFailure=&quot;false&quot;
  stopOnIncomplete=&quot;false&quot;
  stopOnSkipped=&quot;false&quot;
  verbose=&quot;true&quot;
  &amp;gt;
  &amp;lt;testsuites&amp;gt;
    &amp;lt;testsuite name=&quot;integration&quot;&amp;gt;
      &amp;lt;directory prefix=&quot;test-&quot; suffix=&quot;.php&quot;&amp;gt;./tests/integration/&amp;lt;/directory&amp;gt;
    &amp;lt;/testsuite&amp;gt;
  &amp;lt;/testsuites&amp;gt;
  &amp;lt;filter&amp;gt;
    &amp;lt;whitelist&amp;gt;
      &amp;lt;directory&amp;gt;./&amp;lt;/directory&amp;gt;
      &amp;lt;exclude&amp;gt;
        &amp;lt;directory&amp;gt;./node_modules&amp;lt;/directory&amp;gt;
        &amp;lt;directory&amp;gt;./vendor&amp;lt;/directory&amp;gt;
        &amp;lt;directory&amp;gt;./tests&amp;lt;/directory&amp;gt;
        &amp;lt;directory suffix=&quot;.php&quot;&amp;gt;./src/old&amp;lt;/directory&amp;gt;
      &amp;lt;/exclude&amp;gt;
    &amp;lt;/whitelist&amp;gt;
  &amp;lt;/filter&amp;gt;
  &amp;lt;logging&amp;gt;
    &amp;lt;log type=&quot;coverage-html&quot; target=&quot;tests/_reports/coverage&quot; lowUpperBound=&quot;35&quot; highLowerBound=&quot;80&quot; /&amp;gt;
    &amp;lt;log type=&quot;coverage-clover&quot; target=&quot;tests/_reports/clover.xml&quot;/&amp;gt;
    &amp;lt;log type=&quot;coverage-php&quot; target=&quot;tests/_reports/logs/coverage.cov&quot;/&amp;gt;
    &amp;lt;log type=&quot;junit&quot; target=&quot;tests/_reports/logs/logfile.xml&quot;/&amp;gt;
  &amp;lt;/logging&amp;gt;
&amp;lt;/phpunit&amp;gt;
&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;기본적으로 절대 경로의 일부를 검색하고 제거하는 Symfony 명령을 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/dingo-d/woo-solo-api/tree/develop/bin&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/dingo-d/woo-solo-api/tree/develop/bin&lt;/font&gt;&lt;/a&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 class=&quot;lang-json prettyprint-override&quot;&gt;&lt;code&gt;    &quot;scripts&quot;: {
        &quot;test:coverage&quot;: [
            &quot;@php ./vendor/bin/codecept run Integration --coverage --coverage-xml --coverage-html --ansi&quot;,
            &quot;@php bin/console clean-coverage /Users/denis.zoljom/Sites/personal/plugins-testing/ --ansi&quot;
        ]
    },
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 어떤 스위트룸을 사용하던지.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;두번째 명령은 경로의 절대적인 부분을 제거합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;coverage.serialized&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;coverage.xml&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서류철&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/58765505/define-the-relative-path-when-clover-xml-is-generated-in-phpunit&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/762</guid>
      <comments>https://megabox.tistory.com/762#entry762comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:56:48 +0900</pubDate>
    </item>
    <item>
      <title>MariaDB Galera 클러스터가 동기화되고 있지 않습니다.</title>
      <link>https://megabox.tistory.com/761</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MariaDB Galera 클러스터가 동기화되고 있지 않습니다.&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;이전에 MariaDB Cluster를 배포한 적이 있는데, 이 문제는 최근에 와서야 나타납니다(이전에는 이 문제가 없었고 이유도 모르겠습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버 1,2,3이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버 3에서 INSERT 명령을 실행했지만 서버 1과 2의 테이블은 변경되지 않습니다.&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;3대의 서버가 세계 각지에 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;After the INSERT command, the state uuid remains the same&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&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버 1의 상태는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;code&gt; MariaDB [mysql]&amp;gt; show status like 'wsrep_%'; +------------------------------+----------------------------------------------------------+ | Variable_name | Value | +------------------------------+----------------------------------------------------------+ | wsrep_local_state_uuid | c4f9e2e2-fee1-11e5-8648-a22b867b5a6e | | wsrep_protocol_version | 7 | | wsrep_last_committed | 205 | | wsrep_replicated | 170 | | wsrep_replicated_bytes | 160481 | | wsrep_repl_keys | 664 | | wsrep_repl_keys_bytes | 9222 | | wsrep_repl_data_bytes | 140379 | | wsrep_repl_other_bytes | 0 | | wsrep_received | 46 | | wsrep_received_bytes | 26150 | | wsrep_local_commits | 170 | | wsrep_local_cert_failures | 0 | | wsrep_local_replays | 1 | | wsrep_local_send_queue | 0 | | wsrep_local_send_queue_max | 1 | | wsrep_local_send_queue_min | 0 | | wsrep_local_send_queue_avg | 0.000000 | | wsrep_local_recv_queue | 0 | | wsrep_local_recv_queue_max | 1 | | wsrep_local_recv_queue_min | 0 | | wsrep_local_recv_queue_avg | 0.000000 | | wsrep_local_cached_downto | 1 | | wsrep_flow_control_paused_ns | 0 | | wsrep_flow_control_paused | 0.000000 | | wsrep_flow_control_sent | 0 | | wsrep_flow_control_recv | 0 | | wsrep_cert_deps_distance | 7.482927 | | wsrep_apply_oooe | 0.009756 | | wsrep_apply_oool | 0.000000 | | wsrep_apply_window | 1.009756 | | wsrep_commit_oooe | 0.000000 | | wsrep_commit_oool | 0.000000 | | wsrep_commit_window | 1.000000 | | wsrep_local_state | 4 | | wsrep_local_state_comment | Synced | | wsrep_cert_index_size | 28 | | wsrep_causal_reads | 0 | | wsrep_cert_interval | 0.009756 | | wsrep_incoming_addresses | server1:3306,server2:3306,server3:3306 | | wsrep_evs_delayed | | | wsrep_evs_evict_list | | | wsrep_evs_repl_latency | 0.200155/0.201113/0.201752/0.000614937/4 | | wsrep_evs_state | OPERATIONAL | | wsrep_gcomm_uuid | c4f91b4f-fee1-11e5-8c4f-6e451c332f79 | | wsrep_cluster_conf_id | 3 | | wsrep_cluster_size | 3 | | wsrep_cluster_state_uuid | c4f9e2e2-fee1-11e5-8648-a22b867b5a6e | | wsrep_cluster_status | Primary | | wsrep_connected | ON | | wsrep_local_bf_aborts | 6 | | wsrep_local_index | 0 | | wsrep_provider_name | Galera | | wsrep_provider_vendor | Codership Oy &amp;lt;info@codership.com&amp;gt; | | wsrep_provider_version | 25.3.14(r3560) | | wsrep_ready | ON | | wsrep_thread_count | 2 | +------------------------------+----------------------------------------------------------+ &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;서버 2의 상태:&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;code&gt; MariaDB [(none)]&amp;gt; show status like 'wsrep_%'; +------------------------------+----------------------------------------------------------+ | Variable_name | Value | +------------------------------+----------------------------------------------------------+ | wsrep_local_state_uuid | c4f9e2e2-fee1-11e5-8648-a22b867b5a6e | | wsrep_protocol_version | 7 | | wsrep_last_committed | 225 | | wsrep_replicated | 35 | | wsrep_replicated_bytes | 25700 | | wsrep_repl_keys | 119 | | wsrep_repl_keys_bytes | 1757 | | wsrep_repl_data_bytes | 21703 | | wsrep_repl_other_bytes | 0 | | wsrep_received | 187 | | wsrep_received_bytes | 177793 | | wsrep_local_commits | 35 | | wsrep_local_cert_failures | 0 | | wsrep_local_replays | 1 | | wsrep_local_send_queue | 0 | | wsrep_local_send_queue_max | 1 | | wsrep_local_send_queue_min | 0 | | wsrep_local_send_queue_avg | 0.000000 | | wsrep_local_recv_queue | 0 | | wsrep_local_recv_queue_max | 4 | | wsrep_local_recv_queue_min | 0 | | wsrep_local_recv_queue_avg | 0.032086 | | wsrep_local_cached_downto | 9 | | wsrep_flow_control_paused_ns | 0 | | wsrep_flow_control_paused | 0.000000 | | wsrep_flow_control_sent | 0 | | wsrep_flow_control_recv | 0 | | wsrep_cert_deps_distance | 7.193548 | | wsrep_apply_oooe | 0.004630 | | wsrep_apply_oool | 0.000000 | | wsrep_apply_window | 1.004630 | | wsrep_commit_oooe | 0.000000 | | wsrep_commit_oool | 0.000000 | | wsrep_commit_window | 1.000000 | | wsrep_local_state | 4 | | wsrep_local_state_comment | Synced | | wsrep_cert_index_size | 28 | | wsrep_causal_reads | 0 | | wsrep_cert_interval | 0.009217 | | wsrep_incoming_addresses | server1:3306,server2:3306,server3:3306 | | wsrep_evs_delayed | | | wsrep_evs_evict_list | | | wsrep_evs_repl_latency | 0.200138/0.201917/0.203696/0.00177914/2 | | wsrep_evs_state | OPERATIONAL | | wsrep_gcomm_uuid | d562e272-fee1-11e5-b2a2-d3a6b5579aab | | wsrep_cluster_conf_id | 3 | | wsrep_cluster_size | 3 | | wsrep_cluster_state_uuid | c4f9e2e2-fee1-11e5-8648-a22b867b5a6e | | wsrep_cluster_status | Primary | | wsrep_connected | ON | | wsrep_local_bf_aborts | 0 | | wsrep_local_index | 1 | | wsrep_provider_name | Galera | | wsrep_provider_vendor | Codership Oy &amp;lt;info@codership.com&amp;gt; | | wsrep_provider_version | 25.3.14(r3560) | | wsrep_ready | ON | | wsrep_thread_count | 2 | +------------------------------+----------------------------------------------------------+ 57 rows in set (0.01 sec) &lt;/code&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;서버 상태3 (보시는 것처럼 대기 시간이 모두 0으로 표시되는데 왜 그런지 모르겠습니다)&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;code&gt; MariaDB [(none)]&amp;gt; show status like 'wsrep_%'; +------------------------------+----------------------------------------------------------+ | Variable_name | Value | +------------------------------+----------------------------------------------------------+ | wsrep_local_state_uuid | c4f9e2e2-fee1-11e5-8648-a22b867b5a6e | | wsrep_protocol_version | 7 | | wsrep_last_committed | 245 | | wsrep_replicated | 5 | | wsrep_replicated_bytes | 4350 | | wsrep_repl_keys | 11 | | wsrep_repl_keys_bytes | 203 | | wsrep_repl_data_bytes | 3827 | | wsrep_repl_other_bytes | 0 | | wsrep_received | 226 | | wsrep_received_bytes | 208559 | | wsrep_local_commits | 1 | | wsrep_local_cert_failures | 0 | | wsrep_local_replays | 0 | | wsrep_local_send_queue | 0 | | wsrep_local_send_queue_max | 1 | | wsrep_local_send_queue_min | 0 | | wsrep_local_send_queue_avg | 0.000000 | | wsrep_local_recv_queue | 0 | | wsrep_local_recv_queue_max | 1 | | wsrep_local_recv_queue_min | 0 | | wsrep_local_recv_queue_avg | 0.000000 | | wsrep_local_cached_downto | 19 | | wsrep_flow_control_paused_ns | 0 | | wsrep_flow_control_paused | 0.000000 | | wsrep_flow_control_sent | 0 | | wsrep_flow_control_recv | 0 | | wsrep_cert_deps_distance | 7.022026 | | wsrep_apply_oooe | 0.000000 | | wsrep_apply_oool | 0.000000 | | wsrep_apply_window | 1.000000 | | wsrep_commit_oooe | 0.000000 | | wsrep_commit_oool | 0.000000 | | wsrep_commit_window | 1.000000 | | wsrep_local_state | 4 | | wsrep_local_state_comment | Synced | | wsrep_cert_index_size | 28 | | wsrep_causal_reads | 0 | | wsrep_cert_interval | 0.008811 | | wsrep_incoming_addresses | server1:3306,server2:3306,server3:3306 | | wsrep_evs_delayed | | | wsrep_evs_evict_list | | | wsrep_evs_repl_latency | 0/0/0/0/0 | | wsrep_evs_state | OPERATIONAL | | wsrep_gcomm_uuid | fd022144-fee1-11e5-a7a3-f23274fef9c3 | | wsrep_cluster_conf_id | 3 | | wsrep_cluster_size | 3 | | wsrep_cluster_state_uuid | c4f9e2e2-fee1-11e5-8648-a22b867b5a6e | | wsrep_cluster_status | Primary | | wsrep_connected | ON | | wsrep_local_bf_aborts | 0 | | wsrep_local_index | 2 | | wsrep_provider_name | Galera | | wsrep_provider_vendor | Codership Oy &amp;lt;info@codership.com&amp;gt; | | wsrep_provider_version | 25.3.14(r3560) | | wsrep_ready | ON | | wsrep_thread_count | 2 | +------------------------------+----------------------------------------------------------+ 57 rows in set (0.00 sec) &lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 입력 및 출력 트래픽을 허용하도록 세 서버의 ipt 테이블이 설정되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로그에는 모든 서버가 클러스터에 가입 및 동기화되었음이 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 그런지 아는 사람?&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;MyISAM을 스토리지 엔진으로 사용하는 앱의 문제가 오류를 유발한다는 것을 알게 되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;InnoDB로 다시 변경 후 오류가 발생하지 않습니다.&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;테이블 엔진을 확인하는 것을 제안합니다, 왜냐하면 Galera 클러스터는 MyISAM이 아닌 InnoDB 엔진을 지원하기 때문입니다.&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;MyISAM 테이블을 사용하여 Mysql 데이터베이스를 Galera 및 InnoDB로 마이그레이션하는 쉬운 방법은 다음과 같습니다.&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;db 스키마에 InnoDB 엔진이 지원하지 않는 FULLTEXT 인덱스나 다른 구성이 포함되어 있지 않은지 확인합니다.&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 papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;덤프 문자열 &quot;MYISAM&quot;을 &quot;INNODB&quot;로 바꿉니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 덤프&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Galera Cluster에서 db 사용자 준비(mysql.user 테이블은 클러스터 간에 복제되지 않으므로 각 mariadb 서버에 db 사용자를 삽입해야 함)&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;스키마 가져오기(nodb 엔진 포함)&lt;/font&gt;&lt;/li&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;/ol&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://support.qualityunit.com/718375-Migrate-MySQL-Database-with-Myisam-engine-to-MariaDB-Galera-Cluster 에서 보내준 감사합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/36526633/mariadb-galera-cluster-is-not-syncing&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/761</guid>
      <comments>https://megabox.tistory.com/761#entry761comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:56:41 +0900</pubDate>
    </item>
    <item>
      <title>매개 변수가 포함된 Swift GET 요청</title>
      <link>https://megabox.tistory.com/760</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개 변수가 포함된 Swift GET 요청&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;저는 swift가 처음이라 아마 제 코드에 많은 결함이 있을 것입니다. 하지만 제가 이루고자 하는 것은 a를 보내는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GET&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개 변수가 있는 로컬 호스트 서버로 요청합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 나는 내 함수가 두 개의 매개변수를 갖는 것을 고려하여 그것을 달성하려고 노력하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;baseURL:string,params:NSDictionary&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 실제 URL 요청에 이 두 가지를 결합하는 방법을 잘 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 지금까지 시도한 것은 이렇습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    func sendRequest(url:String,params:NSDictionary){
       let urls: NSURL! = NSURL(string:url)
       var request = NSMutableURLRequest(URL:urls)
       request.HTTPMethod = &quot;GET&quot;
       var data:NSData! =  NSKeyedArchiver.archivedDataWithRootObject(params)
       request.HTTPBody = data
       println(request)
       var session = NSURLSession.sharedSession()
       var task = session.dataTaskWithRequest(request, completionHandler:loadedData)
       task.resume()

    }

}

func loadedData(data:NSData!,response:NSURLResponse!,err:NSError!){
    if(err != nil){
        println(err?.description)
    }else{
        var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
        println(jsonResult)

    }

}
&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;A를 만들때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GET&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;request, request에 대한 body는 없고 오히려 모든 것이 URL로 넘어갑니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL을 구축하려면(그리고 적절한 비율로 탈출하려면)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;URLComponents&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;var url = URLComponents(string: &quot;https://www.google.com/search/&quot;)!

url.queryItems = [
    URLQueryItem(name: &quot;q&quot;, value: &quot;War &amp;amp; Peace&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&gt;&lt;/font&gt;&lt;code&gt;+&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자 백분율이 탈출했습니다(명세에 따라 지정된 &lt;a href=&quot;https://www.w3.org/MarkUp/html-spec/html-spec_8.html#SEC8.2.1&quot; papago-id=&quot;8-1&quot; rel=&quot;noreferrer&quot;&gt;공백&lt;/a&gt; 문자로 해석하기 때문입니다). 하지만&lt;/font&gt;&lt;/font&gt;&lt;code&gt;URLComponents&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;+&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 class=&quot;papago-parent&quot;&gt;기술적으로, 그것이 URI의 쿼리에서 허용된다는 것은 옳지만, 그것은 특별한 의미를 가지고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;application/x-www-form-urlencoded&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요청사항을 전달할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;애플은 우리가 탈출해야 한다는 것을 인정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;+&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;pre&gt;&lt;code&gt;var url = URLComponents(string: &quot;https://www.wolframalpha.com/input/&quot;)!

url.queryItems = [
    URLQueryItem(name: &quot;i&quot;, value: &quot;1+2&quot;)
]

url.percentEncodedQuery = url.percentEncodedQuery?.replacingOccurrences(of: &quot;+&quot;, with: &quot;%2B&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 우둔한 해결책이지만, 효과가 있으며, 만약 당신의 질의에 다음과 같은 정보가 포함될 수 있다면 애플이 조언하는 것입니다.&lt;/font&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&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;sendRequest&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일상적으로, 결국 다음과 같은 일이 생깁니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;func sendRequest(_ url: String, parameters: [String: String], completion: @escaping ([String: Any]?, Error?) -&amp;gt; Void) {
    var components = URLComponents(string: url)!
    components.queryItems = parameters.map { (key, value) in 
        URLQueryItem(name: key, value: value) 
    }
    components.percentEncodedQuery = components.percentEncodedQuery?.replacingOccurrences(of: &quot;+&quot;, with: &quot;%2B&quot;)
    let request = URLRequest(url: components.url!)
    
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        guard
            let data = data,                              // is there data
            let response = response as? HTTPURLResponse,  // is there HTTP response
            200 ..&amp;lt; 300 ~= response.statusCode,           // is statusCode 2XX
            error == nil                                  // was there no error
        else {
            completion(nil, error)
            return
        }
        
        let responseObject = (try? JSONSerialization.jsonObject(with: data)) as? [String: Any]
        completion(responseObject, nil)
    }
    task.resume()
}
&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;sendRequest(&quot;someurl&quot;, parameters: [&quot;foo&quot;: &quot;bar&quot;]) { responseObject, error in
    guard let responseObject = responseObject, error == nil else {
        print(error ?? &quot;Unknown error&quot;)
        return
    }

    // use `responseObject` here
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 개인적으로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JSONDecoder&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;struct&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;이것이 GET 요청의 URL에 매개 변수를 백분율로 인코딩하는 방법에 대한 기본 아이디어를 보여주기를 바랍니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Swift 2 및 수동 탈출 실행에 대해서는 이 &lt;a href=&quot;https://stackoverflow.com/revisions/27724627/13&quot; papago-id=&quot;22-1&quot;&gt;답변의 이전 개정판&lt;/a&gt;을 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NSURL 구성요소를 사용하여 다음과 같이 NSURL을 구축합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var urlComponents = NSURLComponents(string: &quot;https://www.google.de/maps/&quot;)!

urlComponents.queryItems = [
  NSURLQueryItem(name: &quot;q&quot;, value: String(51.500833)+&quot;,&quot;+String(-0.141944)),
  NSURLQueryItem(name: &quot;z&quot;, value: String(6))
]
urlComponents.URL // returns https://www.google.de/maps/?q=51.500833,-0.141944&amp;amp;z=6
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출처 : https://www.ralfebert.de/snippets/ios/encoding-nsurl-get-parameters/&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이걸 쓰고 있어요, 놀이터에서 써보세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 URL을 Structin Constants로 정의&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;struct Constants {

    struct APIDetails {
        static let APIScheme = &quot;https&quot;
        static let APIHost = &quot;restcountries.eu&quot;
        static let APIPath = &quot;/rest/v1/alpha/&quot;
    }
}

private func createURLFromParameters(parameters: [String:Any], pathparam: String?) -&amp;gt; URL {

    var components = URLComponents()
    components.scheme = Constants.APIDetails.APIScheme
    components.host   = Constants.APIDetails.APIHost
    components.path   = Constants.APIDetails.APIPath
    if let paramPath = pathparam {
        components.path = Constants.APIDetails.APIPath + &quot;\(paramPath)&quot;
    }
    if !parameters.isEmpty {
        components.queryItems = [URLQueryItem]()
        for (key, value) in parameters {
            let queryItem = URLQueryItem(name: key, value: &quot;\(value)&quot;)
            components.queryItems!.append(queryItem)
        }
    }

    return components.url!
}

let url = createURLFromParameters(parameters: [&quot;fullText&quot; : &quot;true&quot;], pathparam: &quot;IN&quot;)

//Result url= https://restcountries.eu/rest/v1/alpha/IN?fullText=true
&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-0&quot;&gt;스위프트 3&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;extension URL {
    func getQueryItemValueForKey(key: String) -&amp;gt; String? {
        guard let components = NSURLComponents(url: self, resolvingAgainstBaseURL: false) else {
              return nil
        }

        guard let queryItems = components.queryItems else { return nil }
     return queryItems.filter {
                 $0.name.lowercased() == key.lowercased()
                 }.first?.value
    }
}
&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&gt;&lt;/font&gt;&lt;code&gt;UIImagePickerController&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;func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])&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;var originalFilename = &quot;&quot;
if let url = info[UIImagePickerControllerReferenceURL] as? URL, let imageIdentifier = url.getQueryItemValueForKey(key: &quot;id&quot;) {
    originalFilename = imageIdentifier + &quot;.png&quot;
    print(&quot;file name : \(originalFilename)&quot;)
}
&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;Dictionary&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;stringFromHttpParameter&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;CustomStringConvertable&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;extension Dictionary where Key : CustomStringConvertible, Value : CustomStringConvertible {
  func stringFromHttpParameters() -&amp;gt; String {
    var parametersString = &quot;&quot;
    for (key, value) in self {
      parametersString += key.description + &quot;=&quot; + value.description + &quot;&amp;amp;&quot;
    }
    return parametersString
  }
}
&lt;/code&gt;&lt;/pre&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;stringFromHttpParameters&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 방법을 부를 일이 없는 사전에.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Rob이 제안한 이 확장은 Swift 3.0.1에 적용됩니다.&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;Xcode 8.1(8B62)로 그의 게시물에 포함된 버전을 컴파일할 수 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;extension Dictionary {

    /// Build string representation of HTTP parameter dictionary of keys and objects
    ///
    /// :returns: String representation in the form of key1=value1&amp;amp;key2=value2 where the keys and values are percent escaped

    func stringFromHttpParameters() -&amp;gt; String {

        var parametersString = &quot;&quot;
        for (key, value) in self {
            if let key = key as? String,
               let value = value as? String {
                parametersString = parametersString + key + &quot;=&quot; + value + &quot;&amp;amp;&quot;
            }
        }
        parametersString = parametersString.substring(to: parametersString.index(before: parametersString.endIndex))
        return parametersString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
    }

}
&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;let dictionary = [&quot;method&quot;:&quot;login_user&quot;,
                  &quot;cel&quot;:mobile.text!
                  &quot;password&quot;:password.text!] as  Dictionary&amp;lt;String,String&amp;gt;

for (key, value) in dictionary {
    data=data+&quot;&amp;amp;&quot;+key+&quot;=&quot;+value
    }

request.HTTPBody = data.dataUsingEncoding(NSUTF8StringEncoding);
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/27723912/swift-get-request-with-parameters&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>SWIFT</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/760</guid>
      <comments>https://megabox.tistory.com/760#entry760comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:56:34 +0900</pubDate>
    </item>
    <item>
      <title>파일을 잠그는 응용 프로그램을 확인하는 PowerShell 스크립트?</title>
      <link>https://megabox.tistory.com/759</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 잠그는 응용 프로그램을 확인하는 PowerShell 스크립트?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell에서 응용 프로그램이 파일을 잠그고 있는지 확인하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 닫을 수 있도록 어떤 프로세스/어플리케이션이 사용되고 있는지 확인하고 싶습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;a href=&quot;https://learn.microsoft.com/en-us/sysinternals/downloads/handle&quot; papago-id=&quot;3-1&quot; rel=&quot;noreferrer&quot;&gt;작업은 SysInternals tool&lt;/a&gt; handle&lt;a href=&quot;https://learn.microsoft.com/en-us/sysinternals/downloads/handle&quot; papago-id=&quot;3-1&quot; rel=&quot;noreferrer&quot;&gt;.exe&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;PS&amp;gt; $handleOut = handle
PS&amp;gt; foreach ($line in $handleOut) { 
        if ($line -match '\S+\spid:') {
            $exe = $line
        } 
        elseif ($line -match 'C:\\Windows\\Fonts\\segoeui\.ttf')  { 
            &quot;$exe - $line&quot;
        }
     }
MSASCui.exe pid: 5608 ACME\hillr -   568: File  (---)   C:\Windows\Fonts\segoeui.ttf
...
&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;a href=&quot;http://beamusupscotty.wordpress.com/2012/11/14/use-powershell-to-find-out-which-process-locks-a-file/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;PowerShell을 사용하여 파일을 잠그는 프로세스&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;각 프로세스의 ProcessModule Collection Modules 속성과 잠금 파일의 파일 경로를 찾습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$lockedFile=&quot;C:\Windows\System32\wshtcpip.dll&quot;
Get-Process | foreach{$processVar = $_;$_.Modules | foreach{if($_.FileName -eq $lockedFile){$processVar.Name + &quot; PID:&quot; + $processVar.id}}}
&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;일반 명령줄 또는 PowerShell에서 &lt;a href=&quot;http://technet.microsoft.com/en-us/library/cc732490(WS.10).aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;openfiles 명령&lt;/a&gt;을 사용할 수 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열린 파일 내장 도구는 파일 공유 또는 로컬 파일에 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬 파일의 경우 도구를 켜고 기계를 다시 시작해야 합니다(처음 사용하는 경우에만 해당).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능을 켜는 명령은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;openfiles /local on
&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;예를 들어(Windows Vista x64에서 작동):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;openfiles /query | find &quot;chrome.exe&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;Chrome과 관련된 파일 핸들을 성공적으로 반환합니다.&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;a href=&quot;https://en.wikipedia.org/wiki/Sysinternals&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;9-1&quot;&gt;Sysinternal&lt;/a&gt;의 &lt;em papago-id=&quot;9-3&quot;&gt;&lt;a href=&quot;http://jdhitsolutions.com/blog/powershell/3744/friday-fun-find-file-locking-process-with-powershell/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;9-3-0&quot;&gt;Handle&lt;/a&gt;&lt;/em&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;PowerShell 2.0에서 작동하려면 코드를 약간 수정해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#/* http://jdhitsolutions.com/blog/powershell/3744/friday-fun-find-file-locking-process-with-powershell/ */
Function Get-LockingProcess {

    [cmdletbinding()]
    Param(
        [Parameter(Position=0, Mandatory=$True,
        HelpMessage=&quot;What is the path or filename? You can enter a partial name without wildcards&quot;)]
        [Alias(&quot;name&quot;)]
        [ValidateNotNullorEmpty()]
        [string]$Path
    )

    # Define the path to Handle.exe
    # //$Handle = &quot;G:\Sysinternals\handle.exe&quot;
    $Handle = &quot;C:\tmp\handle.exe&quot;

    # //[regex]$matchPattern = &quot;(?&amp;lt;Name&amp;gt;\w+\.\w+)\s+pid:\s+(?&amp;lt;PID&amp;gt;\b(\d+)\b)\s+type:\s+(?&amp;lt;Type&amp;gt;\w+)\s+\w+:\s+(?&amp;lt;Path&amp;gt;.*)&quot;
    # //[regex]$matchPattern = &quot;(?&amp;lt;Name&amp;gt;\w+\.\w+)\s+pid:\s+(?&amp;lt;PID&amp;gt;\d+)\s+type:\s+(?&amp;lt;Type&amp;gt;\w+)\s+\w+:\s+(?&amp;lt;Path&amp;gt;.*)&quot;
    # (?m) for multiline matching.
    # It must be . (not \.) for user group.
    [regex]$matchPattern = &quot;(?m)^(?&amp;lt;Name&amp;gt;\w+\.\w+)\s+pid:\s+(?&amp;lt;PID&amp;gt;\d+)\s+type:\s+(?&amp;lt;Type&amp;gt;\w+)\s+(?&amp;lt;User&amp;gt;.+)\s+\w+:\s+(?&amp;lt;Path&amp;gt;.*)$&quot;

    # skip processing banner
    $data = &amp;amp;$handle -u $path -nobanner
    # join output for multi-line matching
    $data = $data -join &quot;`n&quot;
    $MyMatches = $matchPattern.Matches( $data )

    # //if ($MyMatches.value) {
    if ($MyMatches.count) {

        $MyMatches | foreach {
            [pscustomobject]@{
                FullName = $_.groups[&quot;Name&quot;].value
                Name = $_.groups[&quot;Name&quot;].value.split(&quot;.&quot;)[0]
                ID = $_.groups[&quot;PID&quot;].value
                Type = $_.groups[&quot;Type&quot;].value
                User = $_.groups[&quot;User&quot;].value.trim()
                Path = $_.groups[&quot;Path&quot;].value
                toString = &quot;pid: $($_.groups[&quot;PID&quot;].value), user: $($_.groups[&quot;User&quot;].value), image: $($_.groups[&quot;Name&quot;].value)&quot;
            } #hashtable
        } #foreach
    } #if data
    else {
        Write-Warning &quot;No matching handles found&quot;
    }
} #end function
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;PS C:\tmp&amp;gt; . .\Get-LockingProcess.ps1
PS C:\tmp&amp;gt; Get-LockingProcess C:\tmp\foo.txt

Name                           Value
----                           -----
ID                             2140
FullName                       WINWORD.EXE
toString                       pid: 2140, user: J17\Administrator, image: WINWORD.EXE
Path                           C:\tmp\foo.txt
Type                           File
User                           J17\Administrator
Name                           WINWORD

PS C:\tmp&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;저도 해결책을 찾고 있었는데 딸꾹질을 좀 했어요.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 앱을 사용하고 싶지 않음&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Open Files(열린 파일)에는 로컬 ON 특성이 필요한데, 이는 실행 전에 시스템이 이 특성을 사용하도록 구성해야 함을 의미합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&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;a href=&quot;https://github.com/pldmgg/misc-powershell/blob/master/MyFunctions/PowerShellCore_Compatible/Get-FileLockProcess.ps1&quot; rel=&quot;noreferrer&quot; papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/pldmgg/misc-powershell/blob/master/MyFunctions/PowerShellCore_Compatible/Get-FileLockProcess.ps1&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;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 순수한 파워셸과 .net / C#인 것 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;handle.exe에서 경로를 찾을 수 있습니다.&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;PowerShell을 사용해 보았지만 다른 명령줄 도구를 사용할 수 있습니다.&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;handle.exe -a | Select-String &quot;&amp;lt;INSERT_PATH_PART&amp;gt;&quot; -context 0,100
&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;행을 따라 &quot;Thread:...&quot;를 검색하면 경로를 사용하는 프로세스의 이름이 표시됩니다.&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;PsGallery에 PowerShell 모듈을 게시하여 파일 또는 폴더에 대한 핸들이 열려 있는 프로세스를 검색 및 삭제했습니다.&lt;/font&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 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;br&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;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;em&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; 프로세스 - 기-스-로 $Env:&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬 앱 데이터&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 프로세스 - 기-스-로 $Env:&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TA | Get-Process&lt;/font&gt;&lt;/font&gt;&lt;/font&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;br&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;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;em papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Stop-Locking Process -Path $Home\&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서 .&lt;/font&gt;&lt;/font&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PsGallery Link: https://www.powershellgallery.com/packages/LockingProcessKiller 설치하려면 다음을 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설치-모듈 - 이름 잠금 프로세스 킬러&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 SysInternals에 의존하고 싶지 않았기 때문에 이 문제에 부딪혀 완전히 자기 자신을 포함한 스크립트를 작성했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트는 전체 재귀 복사본을 만들기 전에 파일을 잠그는 프로세스를 식별하고 삭제합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/Tikinsin/ForceCopy.ps1/blob/main/ForceCopy.ps1&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/Tikinsin/ForceCopy.ps1/blob/main/ForceCopy.ps1&lt;/font&gt;&lt;/a&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;이는 Zachery Fischer와 Paul DiMagio의 Github 솔루션의 답변을 활용합니다.&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;명령 프롬프트(CMD)가 있는 것이 마음에 들고 파워셸에서도 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;tasklist /m &amp;lt;dllName&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DLL 파일의 전체 경로를 입력할 수는 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름만으로도 충분합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell 과만 사용하는 &lt;em papago-id=&quot;38-1&quot;&gt;&lt;a href=&quot;http://mspowershell.blogspot.com.es/2008/07/locked-file-detection.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;38-1-0&quot;&gt;Locked file detection&lt;/a&gt;&lt;/em&gt;에서 멋진 솔루션을 본 적이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET 프레임워크 클래스:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function TestFileLock {
    ## Attempts to open a file and trap the resulting error if the file is already open/locked
    param ([string]$filePath )
    $filelocked = $false
    $fileInfo = New-Object System.IO.FileInfo $filePath
    trap {
        Set-Variable -name filelocked -value $true -scope 1
        continue
    }
    $fileStream = $fileInfo.Open( [System.IO.FileMode]::OpenOrCreate,[System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None )
    if ($fileStream) {
        $fileStream.Close()
    }
    $obj = New-Object Object
    $obj | Add-Member Noteproperty FilePath -value $filePath
    $obj | Add-Member Noteproperty IsLocked -value $filelocked
    $obj
}
&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;아래와 같이 위 기능을 약간 수정하면 True 또는 False가 반환됩니다(전체 관리 권한으로 실행해야 함). 예:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PS&amp;gt; 파일잠금 테스트 &quot;c:\pagefile.sys&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;function TestFileLock {
    ## Attempts to open a file and trap the resulting error if the file is already open/locked
    param ([string]$filePath )
    $filelocked = $false
    $fileInfo = New-Object System.IO.FileInfo $filePath
    trap {
        Set-Variable -name Filelocked -value $true -scope 1
        continue
    }
    $fileStream = $fileInfo.Open( [System.IO.FileMode]::OpenOrCreate, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None )
    if ($fileStream) {
        $fileStream.Close()
    }
    $filelocked
}
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/958123/powershell-script-to-check-an-application-thats-locking-a-file&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PowerShell</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/759</guid>
      <comments>https://megabox.tistory.com/759#entry759comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:56:24 +0900</pubDate>
    </item>
    <item>
      <title>드롭 테이블도 제약 조건을 드롭합니까?</title>
      <link>https://megabox.tistory.com/758</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;내가.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;drop&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;font class=&quot;papago-parent&quot;&gt;인덱스, 무결성 제약 조건 및 트리거가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; desc t69
 Name               Null?    Type
 ------------------ -------- ----------------------------
 ID                 NOT NULL NUMBER

SQL&amp;gt; select index_name from user_indexes  where table_name = 'T69';

INDEX_NAME
------------------------------
SYS_C0034158

SQL&amp;gt; select constraint_name, constraint_type from user_constraints where table_name = 'T69';

CONSTRAINT_NAME                C
------------------------------ -
SYS_C0034157                   C
SYS_C0034158                   P

SQL&amp;gt; select trigger_name from user_triggers where table_name = 'T69';

TRIGGER_NAME
------------------------------
TRG69

SQL&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;font class=&quot;papago-parent&quot;&gt;할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; drop table t69;

Table dropped.

SQL&amp;gt; select constraint_name, constraint_type from user_constraints where table_name = 'T69';

no rows selected

SQL&amp;gt; select trigger_name from user_triggers where table_name = 'T69';

no rows selected

SQL&amp;gt; 
SQL&amp;gt; select index_name from user_indexes  where table_name = 'T69';

no rows selected

SQL&amp;gt; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아무것도 남지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 개체가 테이블을 참조할 때는 다릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 테이블인 P23이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;외국 키에 의해 참조되어 뷰에서 사용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; create table c23 (id number, p_id number);

Table created.

SQL&amp;gt; alter table c23 add foreign key (p_id) references p23;

Table altered.

SQL&amp;gt; create view v23 as select * from p23;

View created.

SQL&amp;gt; 
&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;SQL&amp;gt; drop table p23 ;
drop table p23
           *
ERROR at line 1:
ORA-02449: unique/primary keys in table referenced by foreign keys


SQL&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;안돼요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;부수적으로 RESTRICT 구문과 관련하여 Oracle에서는 지원되지 않습니다.&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;SQL&amp;gt; drop table p23 cascade constraints;

Table dropped.

SQL&amp;gt; desc t23
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COLA                                               NUMBER
 COLB                                               NUMBER
 COLC                                               NUMBER
 GENDER                                             VARCHAR2(1)
 ID                                                 NUMBER

SQL&amp;gt; select * from v23
  2  /
select * from v23
              *
ERROR at line 1:
ORA-04063: view &quot;FOX.V23&quot; has errors


SQL&amp;gt; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CASCADE CONSTRANTES 절은 테이블과 이를 참조하는 모든 외부 키를 삭제합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 하위 테이블은 그대로 유지됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블을 참조하는 보기(및 PL/SQL)는 그대로 남아 있지만 잘못된 상태입니다.&lt;/font&gt;&lt;/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/43488105/does-a-drop-table-also-drop-the-constraints&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/758</guid>
      <comments>https://megabox.tistory.com/758#entry758comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:56:16 +0900</pubDate>
    </item>
    <item>
      <title>중복된 기본 키에서 Pandas to_sql이 실패함</title>
      <link>https://megabox.tistory.com/757</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중복된 기본 키에서 Pandas to_sql이 실패함&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;df.to_sql()&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;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;if_exists='append'&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;insert ignore&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;append&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 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;안타깝게도 &quot;INSERT GRANGE&quot;를 지정할 수 있는 옵션이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 해서 중복되지 않는 행을 데이터베이스에 삽입할 수 있게 되었습니다(데이터프레임 이름은 df).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for i in range(len(df)):
    try:
        df.iloc[i:i+1].to_sql(name=&quot;Table_Name&quot;,if_exists='append',con = Engine)
    except IntegrityError:
        pass #or any other action
&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;method&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;to_sql&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 class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;from sqlalchemy.dialects.mysql import insert

def insert_on_duplicate(table, conn, keys, data_iter):
    insert_stmt = insert(table.table).values(list(data_iter))
    on_duplicate_key_stmt = insert_stmt.on_duplicate_key_update(insert_stmt.inserted)
    conn.execute(on_duplicate_key_stmt)

df.to_sql('trades', dbConnection, if_exists='append', chunksize=4096, method=insert_on_duplicate)
&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;이전 버전의 sqalchemy의 경우, 당신은 a를 통과해야 합니다.&lt;/font&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 class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;on_duplicate_key_update&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;on_duplicate_key_stmt = insert_stmt.on_duplicate_key_update(dict(insert_stmt.inserted))&lt;/code&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;&quot;if_exists='append'&quot;&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;strong papago-id=&quot;17-1&quot;&gt;표&lt;/strong&gt;가 존재하지 않을 경우 수행할 작업과 관련됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;if_exists는 테이블의 내용과 관련이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에서 문서를 참조하십시오. https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_sql.html&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;if_exists: {'fail', 'replace', 'append', 기본 'fail' 실패:&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;테이블이 존재하는 경우 해당 테이블을 떨어뜨리고 재생성한 후 데이터를 삽입합니다. append:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;표가 존재하는 경우 데이터를 삽입합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;존재하지 않는 경우 작성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;팬더는 현재로서는 선택의 여지가 없지만, 여기에 &lt;a href=&quot;https://github.com/pandas-dev/pandas/issues/15988&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19-1&quot;&gt;Github 문제&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;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 for loop 방법은 상황을 상당히 느리게 만듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;sql 쿼리에 대한 사용자 지정을 위해 panda.to _sql에 전달할 수 있는 메서드 매개 변수가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_sql.html#pandas.DataFrame.to_sql&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_sql.html#pandas.DataFrame.to_sql&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;아래 코드는 postgres에 대해 작동해야 하며 기본 키 &quot;unique_code&quot;와 충돌이 발생할 경우 아무것도 수행하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;db의 삽입 방언을 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def insert_do_nothing_on_conflicts(sqltable, conn, keys, data_iter):
    &quot;&quot;&quot;
    Execute SQL statement inserting data

    Parameters
    ----------
    sqltable : pandas.io.sql.SQLTable
    conn : sqlalchemy.engine.Engine or sqlalchemy.engine.Connection
    keys : list of str
        Column names
    data_iter : Iterable that iterates the values to be inserted
    &quot;&quot;&quot;
    from sqlalchemy.dialects.postgresql import insert
    from sqlalchemy import table, column
    columns=[]
    for c in keys:
        columns.append(column(c))

    if sqltable.schema:
        table_name = '{}.{}'.format(sqltable.schema, sqltable.name)
    else:
        table_name = sqltable.name

    mytable = table(table_name, *columns)

    insert_stmt = insert(mytable).values(list(data_iter))
    do_nothing_stmt = insert_stmt.on_conflict_do_nothing(index_elements=['unique_code'])

    conn.execute(do_nothing_stmt)

pd.to_sql('mytable', con=sql_engine, method=insert_do_nothing_on_conflicts)
&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Pandas는 .to_sql 메서드의 실제 SQL 구문 편집을 지원하지 않으므로 운이 없을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 가지 실험적인 프로그래밍 방식의 해결 방법이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 예를 들어 데이터프레임을 다음과 같이 SQLLchemy 객체로 읽어 보십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CALCHIPAN&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;트랜잭션에 대해서는 SQLLchemy를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 하지만 데이터프레임을 CSV에 기록하고 명시적인 MySQL 함수를 로드하면 더 나은 서비스를 제공받을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CALCHIPAN repo: https://bitbucket.org/zzzeek/calchipan/&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;for i, row in df.iterrows():
    sql = &quot;SELECT * FROM `Table_Name` WHERE `key` = '{}'&quot;.format(row.Key)
    found = pd.read_sql(sql, con=Engine)
    if len(found) == 0:
        df.iloc[i:i+1].to_sql(name=&quot;Table_Name&quot;,if_exists='append',con = Engine)
&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;제 경우에는 빈 테이블에 새 데이터를 넣으려고 했지만, 일부 행이 중복되어 있고, 여기서도 거의 동일한 문제가 있습니다. 기존 데이터를 가져와 새로 얻은 데이터와 병합하여 처리하는 것을 &quot;생각할 수도 있지만&quot; 이는 최적이 아니며, 큰 테이블이 아니라 작은 데이터에만 작동할 수도 있습니다.&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;.to_sql&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 오류가 발생할 경우 데이터에 대한 자세한 정보를 제공하고 현재 상황을 파악할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import pandas as pd


def write_to_table(table_name, data):
    df = pd.DataFrame(data)
    # Sort by price, so we remove the duplicates after keeping the lowest only
    data.sort(key=lambda row: row['price'])
    df.drop_duplicates(subset=['id_key'], keep='first', inplace=True)
    #
    df.to_sql(table_name, engine, index=False, if_exists='append', schema='public')
&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;그래서 제 경우에는 가장 낮은 가격의 행을 유지하고 싶었습니다(btw 저는 여러 개의 행을 통과했습니다).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dict&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;data&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;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 저의 상황과 거의 비슷한 사람에게 도움이 되었으면 좋겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL Server를 사용할 때 기본 키 제약 조건이 있는 테이블에 중복 값을 입력하면 SQL 오류가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블을 변경하여 수정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE TABLE [dbo].[DeleteMe](
[id] [uniqueidentifier] NOT NULL,
[Value] [varchar](max) NULL,
CONSTRAINT [PK_DeleteMe] 
PRIMARY KEY ([id] ASC) 
WITH (IGNORE_DUP_KEY = ON)); &amp;lt;-- add
&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;https://dba.stackexchange.com/a/111771 에서 가져온 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 당신의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df.to_sql()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 작동해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/users/192798/jayen&quot; papago-id=&quot;39-1&quot;&gt;Jayen&lt;/a&gt;과 &lt;a href=&quot;https://stackoverflow.com/users/5642133/huy-tran&quot; papago-id=&quot;39-3&quot;&gt;Huy Tran&lt;/a&gt;의 해결책들은 저에게 많은 도움을 주었지만, 그것들은 바로 실행되지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 Jayen 코드에 직면한 문제는 DataFrame 열이 데이터베이스의 열과 정확히 일치해야 한다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스에 기록하지 않을 DataFrame 열이 일부 있었기 때문에 제 경우에는 그렇지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;from sqlalchemy.dialects.mysql import insert
import itertools

def insertWithConflicts(sqltable, conn, keys, data_iter):
    &quot;&quot;&quot;
    Execute SQL statement inserting data, whilst taking care of conflicts
    Used to handle duplicate key errors during database population
    This is my modification of the code snippet 
    from https://stackoverflow.com/questions/30337394/pandas-to-sql-fails-on-duplicate-primary-key

    The help page from https://docs.sqlalchemy.org/en/14/core/dml.html#sqlalchemy.sql.expression.Insert.values
    proved useful.
    
    Parameters
    ----------
    sqltable : pandas.io.sql.SQLTable
    conn : sqlalchemy.engine.Engine or sqlalchemy.engine.Connection
    keys : list of str
        Column names
    data_iter : Iterable that iterates the values to be inserted. It is a zip object.
                The length of it is equal to the chunck size passed in df_to_sql()
    &quot;&quot;&quot;
    vals = [dict(zip(z[0],z[1])) for z in zip(itertools.cycle([keys]),data_iter)] 
    insertStmt = insert(sqltable.table).values(vals)
    doNothingStmt = insertStmt.on_duplicate_key_update(dict(insertStmt.inserted))
    conn.execute(doNothingStmt)
&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;저는 같은 문제에 직면했고 제 테이블에 스키마가 생기기 시작할 때까지 @Huy Trans에서 제공하는 솔루션을 한동안 채택했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그의 답변을 좀 개선해야 했고 이것이 최종 결과입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def do_nothing_on_conflicts(sql_table, conn, keys, data_iter):
&quot;&quot;&quot;
Execute SQL statement inserting data

Parameters
----------
sql_table : pandas.io.sql.SQLTable
conn : sqlalchemy.engine.Engine or sqlalchemy.engine.Connection
keys : list of str
    Column names
data_iter : Iterable that iterates the values to be inserted
&quot;&quot;&quot;
columns = []
for c in keys:
    columns.append(column(c))

if sql_table.schema:
    my_table = table(sql_table.name, *columns, schema=sql_table.schema)
    # table_name = '{}.{}'.format(sql_table.schema, sql_table.name)
else:
    my_table = table(sql_table.name, *columns)
    # table_name = sql_table.name

# my_table = table(table_name, *columns)

insert_stmt = insert(my_table).values(list(data_iter))
do_nothing_stmt = insert_stmt.on_conflict_do_nothing()

conn.execute(do_nothing_stmt)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;history.to_sql('history', schema=schema, con=engine, method=do_nothing_on_conflicts)
&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;이 아이디어는 @Nfern과 동일하지만 재귀 함수를 사용하여 각 반복에서 df를 절반으로 분할하여 무결성 위반을 일으키는 행/행을 건너뜁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        def insert(df):

          try:
             # inserting into backup table
             df.to_sql(&quot;table&quot;,con=engine, if_exists='append',index=False,schema='schema') 
         except:
            rows = df.shape[0]
            if rows&amp;gt;1:
                df1 = df.iloc[:int(rows/2),:]
                df2 = df.iloc[int(rows/2):,:]
                insert(df1)
                insert(df2)
            else:
                print(f&quot;{df} not inserted. Integrity violation, duplicate primary key/s&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;@Jayen과 동일하지만 postgresql의 경우이며 충돌 논리에 대해 아무것도 수행하지 않습니다(&lt;a href=&quot;https://docs.sqlalchemy.org/en/20/dialects/postgresql.html#sqlalchemy.dialects.postgresql.Insert.on_conflict_do_nothing&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;44-1&quot;&gt;sqalchemy 문서 참조&lt;/a&gt;).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from sqlalchemy.dialects.postgresql import insert

def insert_or_do_nothing_on_conflict(table, conn, keys, data_iter):
        insert_stmt = insert(table.table).values(list(data_iter))
        # you need to specify column(s) name(s) used to infer unique index
        on_duplicate_key_stmt = insert_stmt.on_conflict_do_nothing(index_elements=['column_index1', 'column_index2'])
        conn.execute(on_duplicate_key_stmt)


df.to_sql(
    name=&quot;table_name&quot;,
    schema=&quot;schema_name&quot;,
    con=engine,
    if_exists=&quot;append&quot;,
    index=False,
    method=insert_or_do_nothing_on_conflict
)
&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;저는 이미 존재하는 ID를 명시적으로 검색하여 각각을 별도의 함수로 업데이트하거나 T2 테이블의 모든 데이터를 포함하는 하나의 데이터 프레임과 T1 테이블의 모든 데이터를 포함하는 다른 테이블을 얻을 수 있습니다. 그리고 당신은 당신의 일치하는 열이 같지 않을 때 ID에 가입하고 당신의 업데이트 문을 수행합니다.&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/30337394/pandas-to-sql-fails-on-duplicate-primary-key&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/757</guid>
      <comments>https://megabox.tistory.com/757#entry757comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:56:08 +0900</pubDate>
    </item>
    <item>
      <title>파워셸의 목록에서 마지막 항목 선택</title>
      <link>https://megabox.tistory.com/756</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;d에서 z까지 사용 가능한 드라이브 목록을 제공하는 이 코드 라인을 사용하여 드라이브 문자를 매핑하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ls function:[d-z]: -n | ? { !(test-path $_) }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 목록에서 무작위가 아닌 마지막 편지를 뽑고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 그걸 어떻게 해야 하죠?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파워셸은 처음입니다. 도와주셔서 감사합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&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;Select-Object -Last 1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 파이프라인의 끝에.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록의 맨 뒤에서 시작해서 올라가시면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막 항목:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$array[-1]&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;$array[-2]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;등등.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 훨씬 더 장황하지만 (내 생각에는) 읽을 수 있게 개선된 버전을 찾는다면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# Get all drives which are used (unavailable)
# Filter for the &quot;Name&quot; property ==&amp;gt; Drive letter
$Drives = (Get-PSDrive -PSProvider FileSystem).Name

# Create an array of D to Z
# Haven't found a more elegant version...
$Letters = [char[]]([char]'D'..[char]'Z')

# Filter out, which $Letters are not in $Drives (&amp;lt;=)
# Again, filter for their letter
$Available = (Compare-Object -ReferenceObject $Letters -DifferenceObject $Drives | Where {$_.SideIndicator -eq &quot;&amp;lt;=&quot;}).InputObject

# Get the last letter
$LastLetter = $Available[-1]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도해 보기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ls function:[d-z]: -n|?{!(test-path $_)} | Select-Object -Last 1
&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;D-Z의 모든 경로를 시도할 필요가 없는 또 다른 옵션은 파싱하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Get-Psdrive&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;pre&gt;&lt;code&gt;$lettersInUse = Get-Psdrive | ? { $_.Name.Length -eq 1 } | % { $_.Name }
$lastDriveLetter = [Char]'Z'
while ($lettersInUse -contains $lastDriveLetter) {
  $lastDriveLetter = [Char]($lastDriveLetter - 1)
}
$lastDriveLetter
&lt;/code&gt;&lt;/pre&gt;&lt;ol&gt; 
 &lt;li&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;$newArray = @(git tag --list)
$lastmember = $newArray[$newArray.Count – 1]
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&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;$newArray | Select-Object -Last 1
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ol&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/18018892/pick-last-item-from-list-in-powershell&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PowerShell</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/756</guid>
      <comments>https://megabox.tistory.com/756#entry756comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:55:59 +0900</pubDate>
    </item>
    <item>
      <title>WooCommerce 체크아웃 사용자 정의 텍스트 필드에서 Datepicker 사용</title>
      <link>https://megabox.tistory.com/755</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WooCommerce 체크아웃 사용자 정의 텍스트 필드에서 Datepicker 사용&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에서 내 테마(Storefront) 기능 PHP에서 다음을 사용하여 WooCommerce 카트 페이지에 필드를 연결하고 OK(확인)로 표시할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?
            // ADD Custom Fields to Checkout Page
            /**
             * Add the field to the checkout
             **/

            add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');

            function my_custom_checkout_field( $checkout ) {

                date_default_timezone_set('America/Los_Angeles');
                $mydateoptions = array('' =&amp;gt; __('Select PickupDate', 'woocommerce' )); 

                echo '&amp;lt;div id=&quot;my_custom_checkout_field&quot;&amp;gt;&amp;lt;h3&amp;gt;'.__('Delivery Info').'&amp;lt;/h3&amp;gt;';

               woocommerce_form_field( 'order_pickup_date', array(
                    'type'          =&amp;gt; 'text',
                    'class'         =&amp;gt; array('my-field-class form-row-wide'),
                    'id'            =&amp;gt; 'datepicker',
                    'required'      =&amp;gt; true,
                    'label'         =&amp;gt; __('Delivery Date'),
                    'placeholder'       =&amp;gt; __('Select Date'),
                    'options'     =&amp;gt;   $mydateoptions
                    ),$checkout-&amp;gt;get_value( 'order_pickup_date' ));

                echo '&amp;lt;/div&amp;gt;';
            }

            /**
             * Process the checkout
             **/
            add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

            function my_custom_checkout_field_process() {
                global $woocommerce;

                // Check if set, if its not set add an error.
                if (!$_POST['order_pickup_date'])
                     wc_add_notice( '&amp;lt;strong&amp;gt;PickupDate&amp;lt;/strong&amp;gt; ' . __( 'is a required field.', 'woocommerce' ), 'error' );
            }

            /**
             * Update the order meta with field value
             **/
            add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta');

            function my_custom_checkout_field_update_order_meta( $order_id ) {
                if ($_POST['order_pickup_date']) update_post_meta( $order_id, 'PickupDate', esc_attr($_POST['order_pickup_date']));
            }
            ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 필드를 클릭하면 날짜 선택 위젯이 시작되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JQuery가 작동하려면 헤더에 다음과 같은 코드가 필요하다는 것을 알고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
$( function() {
$( &quot;#datepicker&quot; ).datepicker(); } );
&amp;lt;/script&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;이것은 저에게 효과가 없어서 Storefront 테마의 checkout.js 파일에 이 기능을 넣으려고 했는데 추가된 필드에 캘린더 위젯 기능이 없었습니다.&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;.js&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;ul&gt; 
 &lt;li papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;enqueu 메인 jquery-ui datepicker 스크립트&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 지정 스크립트를 다음과 같이 변경합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jQuery(function($){&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;$(function(){&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;…&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 지정 텍스트 필드를 활성화하기 위해 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Register main datepicker jQuery plugin script
add_action( 'wp_enqueue_scripts', 'enabling_date_picker' );
function enabling_date_picker() {

    // Only on front-end and checkout page
    if( is_admin() || ! is_checkout() ) return;

    // Load the datepicker jQuery-ui plugin script
    wp_enqueue_script( 'jquery-ui-datepicker' );
}

// Call datepicker functionality in your custom text field
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field', 10, 1);
function my_custom_checkout_field( $checkout ) {

    date_default_timezone_set('America/Los_Angeles');
    $mydateoptions = array('' =&amp;gt; __('Select PickupDate', 'woocommerce' ));

    echo '&amp;lt;div id=&quot;my_custom_checkout_field&quot;&amp;gt;
    &amp;lt;h3&amp;gt;'.__('Delivery Info').'&amp;lt;/h3&amp;gt;';

    // YOUR SCRIPT HERE BELOW 
    echo '
    &amp;lt;script&amp;gt;
        jQuery(function($){
            $(&quot;#datepicker&quot;).datepicker();
        });
    &amp;lt;/script&amp;gt;';

   woocommerce_form_field( 'order_pickup_date', array(
        'type'          =&amp;gt; 'text',
        'class'         =&amp;gt; array('my-field-class form-row-wide'),
        'id'            =&amp;gt; 'datepicker',
        'required'      =&amp;gt; true,
        'label'         =&amp;gt; __('Delivery Date'),
        'placeholder'       =&amp;gt; __('Select Date'),
        'options'     =&amp;gt;   $mydateoptions
        ),$checkout-&amp;gt;get_value( 'order_pickup_date' ));

    echo '&amp;lt;/div&amp;gt;';
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em 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;활성 하위 테마(또는 테마)의 php 파일 또는 플러그인 파일에 있습니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트를 거쳐 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스토어프론트 테마에서는 다음과 같은 것을 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/54Tkk.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/54Tkk.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&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;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 더 이상 필요하지 않다는 업데이트일 뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Woocommerce를 사용하면 스타일을 '데이트'로 간단히 변경할 수 있고, 나머지는 Yahoo!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/47045814/enable-datepicker-in-a-woocommerce-checkout-custom-text-field&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/755</guid>
      <comments>https://megabox.tistory.com/755#entry755comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:55:52 +0900</pubDate>
    </item>
    <item>
      <title>컴팩트한 쓰기 방식 (a + b == c 또는 a + c == b 또는 b + c == a)</title>
      <link>https://megabox.tistory.com/754</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴팩트한 쓰기 방식 (a + b == c 또는 a + c == b 또는 b + c == a)&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;a + b == c or a + c == b or b + c == a
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;생각해 냈습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a + b + c in (2*a, 2*b, 2*c)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 그건 좀 이상합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리가 파이썬의 선을 본다면, 나의 강조점은:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&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;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;br&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;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 것이 복잡한 것보다 낫습니다.&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;복잡한 것보다는 복잡한 것이 낫습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;평평한 것이 중첩된 것보다 낫습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&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;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가독성이 중요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;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;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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명시적으로 침묵하지 않는 한.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;애매모호한 상황에서 추측하고 싶은 유혹을 거절합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 할 수 있는 확실한 방법이 하나 있어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그리고 가급적이면 단 하나의 방법이 있어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비록 네덜란드인이 아니라면 처음에는 그 방법이 명백하지 않을 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비록 결코 &lt;em papago-id=&quot;21-1&quot;&gt;지금&lt;/em&gt;보다 나아지지는 않지만 말입니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시행이 설명하기 어렵다면 좋지 않은 생각입니다.&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구현이 설명하기 쉽다면 좋은 생각일 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&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;/blockquote&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 명확하고 단순하며 설명하기 쉬운 것은 가장 피톤적인 해결책입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a + b == c or a + c == b or b + c == a
&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;&lt;em papago-id=&quot;26-1&quot;&gt;그렇게&lt;/em&gt; 쉬워요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 최선의 해결책입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 건 지적 자위권입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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&gt;&lt;/font&gt;&lt;code&gt;a + b == c&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 한 번의 덧셈과 비교만 수행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;a에 대한 세 가지 동등성 해결:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a in (b+c, b-c, c-b)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파이썬은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;any&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;or&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수열의 모든 요소에 적용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;any((a + b == c, a + c == b, b + c == a))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;or&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&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;a, b, c = sorted((a, b, c))
if a + b == c:
    do_stuff()
&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;em papago-id=&quot;36-1&quot;&gt;안다면&lt;/em&gt;, 이것은 함수가 아닌 직접 코드에서조차 매우 읽기 쉬운 해결책입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;약간의 반복 계산을 수행할 수도 있지만 성능을 목표로 지정하지는 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from itertools import permutations

if any(x + y == z for x, y, z in permutations((a, b, c), 3)):
    do_stuff()
&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 class=&quot;papago-parent&quot;&gt;아니면 없는.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;permutations()&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&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if any(x + y == z for x, y, z in [(a, b, c), (a, c, b), (b, c, a)]:
    do_stuff()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 아마도 이것이나 다른 해결책을 함수에 넣을 것입니다.&lt;/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;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;def two_add_to_third(a, b, c):
    return a + b == c or a + c == b or b + c == a

if two_add_to_third(a, b, c):
    do_stuff()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 꽤 피토닉적이고, 그것을 수행하는 가장 효율적인 방법일 수도 있습니다. 비록 실제로 문제를 일으키는 것이 아니라면 성능에 대해 너무 많이 걱정할 필요는 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;세 개의 변수만 사용할 경우 초기 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a + b == c or a + c == b or b + c == a
&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;a + b + c in (2*a, 2*b, 2*c)
&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;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매우 똑똑하지만 그 이유를 생각해봅시다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;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;pre&gt;&lt;code&gt;a + b = c
c = c
a + b + c == c + c == 2*c
a + b + c == 2*c
&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;그리고 이것은 a,b,c 중 하나에 대해서 성립해야 할 것이고, 이는 예가 동일할 것이라는 것을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;2*a&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;2*b&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;2*c&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이는 변수의 수에 관계없이 적용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 변수 목록을 가지고 두 배 값의 목록과 비교하여 변수의 합계를 확인하는 것이 이를 신속하게 작성하는 좋은 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;values = [a,b,c,d,e,...]
any(sum(values) in [2*x for x in values])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 식으로 더 많은 변수를 수식에 추가하려면 n개의 새로운 변수로 값 목록을 편집하기만 하면 됩니다. n개의 방정식을 쓰지 마십시오.&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;pre&gt;&lt;code&gt; l = [a,b,c]
 any(sum(l)-e == e for e in l)
&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;font class=&quot;papago-parent&quot;&gt;대신, 함수로 수행할 작업의 &lt;em papago-id=&quot;55-1&quot;&gt;이름&lt;/em&gt;을 지정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def any_two_sum_to_third(a, b, c):
  return a + b == c or a + c == b or b + c == a

if any_two_sum_to_third(foo, bar, baz):
  ...
&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;이 상태를 &quot;똑똑한&quot; 것으로 대체하면 더 짧아질 수는 있지만, 더 가독성이 높아지지는 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이 상태를 그대로 두는 것은 매우 가독성이 떨어집니다. 이 세 가지 조건을 한 눈에 확인하는 &lt;em papago-id=&quot;56-1&quot;&gt;이유&lt;/em&gt;를 알기가 어렵기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 당신이 무엇을 확인하고 있는지 확실하게 알려줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;그리고 항상 측정해야 합니다. 어떤 영리한 구현은 상황에 따라 기능 호출을 최적화하고 인라인화할 수 있기 때문입니다.&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;파이썬 3:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(a+b+c)/2 in (a,b,c)
(a+b+c+d)/2 in (a,b,c,d)
...
&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;arr = [a,b,c,d,...]
sum(arr)/2 in arr
&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;그러나 일반적으로 변수가 3개 이상이 아닌 이상 원본이 더 읽기 쉽다는 것에 동의합니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;(a+b-c)*(a+c-b)*(b+c-a) == 0
&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;두 항의 합이 세 번째 항과 같으면 요인 중 하나가 0이 되어 전체 제품이 0이 됩니다.&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;a == b + c or abs(a) == abs(b - c)
&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;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(적어도 x86 플랫폼에서는) 코드 최적화의 관점에서 이것이 가장 효율적인 해결책인 것 같습니다.&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;a href=&quot;http://www.strchr.com/optimized_abs_function&quot; rel=&quot;nofollow&quot; papago-id=&quot;65-1&quot;&gt;CDQ, XOR, SUB 명령어의 영리한 시퀀스&lt;/a&gt;를 사용함으로써 abs() 함수 호출 모두를 인라인화하고 부호 테스트와 그 이후의 조건부 분기를 피할 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 위의 높은 수준의 코드는 낮은 지연 시간, 높은 처리량의 ALU 명령과 단 두 가지 조건만으로 표현됩니다.&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;Alex Varga가 제공한 솔루션 &quot;ain (b+c, b-c, c-b)&quot;은 컴팩트하고 수학적으로 아름답지만, 다음 개발자가 코드의 목적을 즉시 이해하지 못할 것이기 때문에 실제로 그렇게 코드를 작성하지는 않을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마크 랜섬의 해결책은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;any((a + b == c, a + c == b, b + c == a))
&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;a + b == c or a + c == b or b + c == a
&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;font class=&quot;papago-parent&quot;&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;/p&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;import functools, itertools
f = functools.partial(itertools.permutations, r = 3)
def g(x,y,z):
    return x + y == z
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;72&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;any(g(*args) for args in f((a,b,c)))
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&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;assert any(g(*args) for args in f((a,b,c))) == (a + b == c or a + c == b or b + c == a)
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&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;h = functools.partial(itertools.starmap, g)
&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;any(h(f((a,b,c))))
&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;em papago-id=&quot;76-1&quot;&gt;피톤적인&lt;/em&gt; 대답을 제시하고자 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;def one_number_is_the_sum_of_the_others(a, b, c):
    return any((a == b + c, b == a + c, c == a + b))
&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;def one_number_is_the_sum_of_the_others(numbers):
    for idx in range(len(numbers)):
        remaining_numbers = numbers[:]
        sum_candidate = remaining_numbers.pop(idx)
        if sum_candidate == sum(remaining_numbers):
            return True
    return False 
&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;파이썬의 선에 관해서는 다른 답변보다 강조된 진술이 더 뒤따른다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;팀 피터스 지음, 파이썬의 선&lt;/font&gt;&lt;/p&gt; 
 &lt;p&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;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명시적인 것이 암묵적인 것보다 낫습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&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;/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&gt;&lt;/font&gt;&lt;br&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;br&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&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong 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;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가독성이 중요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특별한 경우는 규칙을 어길 만큼 특별하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&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;br&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 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;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&gt;&lt;br&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&gt;&lt;br&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;br&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 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;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&gt;&lt;br&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;br&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;br&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 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;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&gt;&lt;/p&gt; 
&lt;/blockquote&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;a == b+c or b == a+c or c == a+b
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플러스&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;((a == b+c) or (b == a+c) or (c == a+b))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 다중 회선을 사용하는 것도 이와 같이 더 많은 의미를 가질 수 있다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;((a == b+c) or 
 (b == a+c) or 
 (c == a+b))
&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;일반적으로 말하면,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;m = a+b-c;
if (m == 0 || m == 2*a || m == 2*b) do_stuff ();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;104&quot; papago-translate=&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+b-c;
if (c==0 || c == 2*a || c == 2*b) do_stuff ();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;105&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비트 해킹을 사용하여 악용하려면 &quot;!&quot;, &quot;&amp;gt;&quot; 1&quot; 및 &quot;&amp;lt; 1&quot;을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&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;font class=&quot;papago-parent&quot;&gt;그러나 오버플로 여부를 확인합니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;def any_sum_of_others (*nums):
    num_elements = len(nums)
    for i in range(num_elements):
        discriminating_map = map(lambda j: -1 if j == i else 1, range(num_elements))
        if sum(n * u for n, u in zip(nums, discriminating_map)) == 0:
            return True
    return False

print(any_sum_of_others(0, 0, 0)) # True
print(any_sum_of_others(1, 2, 3)) # True
print(any_sum_of_others(7, 12, 5)) # True
print(any_sum_of_others(4, 2, 2)) # True
print(any_sum_of_others(1, -1, 0)) # True
print(any_sum_of_others(9, 8, -4)) # False
print(any_sum_of_others(4, 3, 2)) # False
print(any_sum_of_others(1, 1, 1, 1, 4)) # True
print(any_sum_of_others(0)) # True
print(any_sum_of_others(1)) # False
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 작은 표현으로 얻을 수 있는 것은 거의 없지만, 합과 비교를 반복하지 않아도 되는 함수를 사용하는 것이 하나의 선택이 될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작동 방식을 다음과 같이 변경하고자 할 때 좀 더 유지보수가 가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a + b == c * 2&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;def equals_sum(a, b, c):
    return a + b == c

if (equals_sum(a, b, c)
or equals_sum(a, c, b)
or equals_sum(b, c, a)):
    ...
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/32085675/compact-way-of-writing-a-b-c-or-a-c-b-or-b-c-a&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PYTHON</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/754</guid>
      <comments>https://megabox.tistory.com/754#entry754comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:55:44 +0900</pubDate>
    </item>
    <item>
      <title>python에서 목록 이해 또는 생성자 표현식에 대한 줄 연속</title>
      <link>https://megabox.tistory.com/753</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;python에서 목록 이해 또는 생성자 표현식에 대한 줄 연속&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 아주 긴 이해력을 분해할 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 또한 '\'을 사용하여 줄을 끊는 것을 싫어하지만, 그 이유를 전혀 이해하지 못하는 사람들을 어디선가 본 적이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것의 배후에 있는 이유는 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;[x
 for
 x
 in
 (1,2,3)
]
&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; [something_that_is_pretty_long
  for something_that_is_pretty_long
  in somethings_that_are_pretty_long]
&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;\&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선의 끝 &lt;em papago-id=&quot;1-1&quot;&gt;부분&lt;/em&gt;에 눈에 띄지 않거나 추가 패딩이 필요하여 선 길이가 변할 때 고정해야 한다는 점은 그다지 인정받지 못합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;x = very_long_term                     \
  + even_longer_term_than_the_previous \
  + a_third_term
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 부모를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;x = (very_long_term
     + even_longer_term_than_the_previous
     + a_third_term)
&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;new_list = [
    {
        'attribute 1': a_very_long_item.attribute1,
        'attribute 2': a_very_long_item.attribute2,
        'list_attribute': [
            {
                'dict_key_1': attribute_item.attribute2,
                'dict_key_2': attribute_item.attribute2
            }
            for attribute_item
            in a_very_long_item.list_of_items
         ]
    }
    for a_very_long_item
    in a_very_long_list
    if a_very_long_item not in [some_other_long_item
        for some_other_long_item 
        in some_other_long_list
    ]
]
&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;if 문을 사용하여 다른 목록을 필터링하는 방법도 주목합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;if 문을 자신의 행으로 드롭하는 것도 유용합니다.&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;variable = [something_that_is_pretty_long
            for something_that_is_pretty_long
            in somethings_that_are_pretty_long]
&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;\&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우에는&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 사람들은 피한다고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;\&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;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&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 당신이 이 경우에 목록 이해를 사용해서는 안되고 대신에 a를 사용해야 한다고 주장하고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;for&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루프:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;result = []
for something_that_is_pretty_long in somethings_that_are_pretty_long:
    result.append(something_that_is_pretty_long)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록 이해를 사용해야 하는 한 가지 이유&lt;/font&gt;&lt;/font&gt;&lt;code&gt;for&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;.append()&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;for&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;loop. 그러나 목록 이해가 여러 줄로 나누어져야 할 때, 그 간결함은 표현을 읽기 매우 어렵게 만들 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PEP8이 여러 줄의 목록 이해를 명시적으로 금지하지는 않지만 &lt;a href=&quot;https://google.github.io/styleguide/pyguide.html#274-decision&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;21-1&quot;&gt;Google Python Style Guide&lt;/a&gt;에서는 목록 이해의 각 부분이 한 줄에 맞도록 요구합니다(강조 표시).&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&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;2.7 이해 및 생성자 표현&lt;/font&gt;&lt;/strong&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;em papago-id=&quot;23-1&quot;&gt;&lt;strong papago-id=&quot;23-1-0&quot;&gt;부분&lt;/strong&gt;&lt;/em&gt;은 매핑 식, 절의 경우 필터 식과 &lt;em papago-id=&quot;23-1&quot;&gt;&lt;strong papago-id=&quot;23-1-0&quot;&gt;같은&lt;/strong&gt;&lt;/em&gt; 한 &lt;em papago-id=&quot;23-1&quot;&gt;&lt;strong papago-id=&quot;23-1-0&quot;&gt;줄&lt;/strong&gt;&lt;/em&gt;에 &lt;em papago-id=&quot;23-1&quot;&gt;&lt;strong papago-id=&quot;23-1-0&quot;&gt;맞아야&lt;/strong&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;em papago-id=&quot;23-3&quot;&gt;&lt;strong papago-id=&quot;23-3-0&quot;&gt;일이 복잡해지면 대신 루프를 사용하세요.&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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/5809059/line-continuation-for-list-comprehensions-or-generator-expressions-in-python&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PYTHON</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/753</guid>
      <comments>https://megabox.tistory.com/753#entry753comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:55:34 +0900</pubDate>
    </item>
    <item>
      <title>지정된 인증서를 사용한 Java MySQL SSL 연결</title>
      <link>https://megabox.tistory.com/752</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지정된 인증서를 사용한 Java MySQL SSL 연결&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;저는 jdbc(Connector/J)를 사용하여 SSL 암호화를 사용하여 mariadb 데이터베이스에 연결하는 자바 어플리케이션을 만들려고 합니다.&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;트러스트스토어를 수정하거나 응용 프로그램에 다른 트러스트스토어를 사용하고 싶기 때문에 jdbc만 신뢰할 수 있는 방법을 검색하여 &quot;https://mariadb.com/kb/en/library/using-tlsssl-with-mariadb-connectorj/ 인증서 직접 제공&quot;을 찾았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 연결을 시도하면 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DriverManager.getConnection(&quot;jdbc:mysql://&amp;lt;hostname&amp;gt;:3306/&amp;lt;database&amp;gt;?useSSL=true&amp;amp;requireSSL=true&amp;amp;serverSslCert=/tmp/ssl/server-cert.pem&quot;, &quot;&amp;lt;username&amp;gt;&quot;, &quot;&amp;lt;password&amp;gt;&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;serverSlCert 매개 변수를 다시 사용하지 않기 전에 이미 받은 예외가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Exception in thread &quot;main&quot; 

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 136 milliseconds ago.  The last packet sent successfully to the server was 129 milliseconds ago.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:990)
    at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:203)
    at com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:4901)
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1659)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1226)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2188)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2219)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2014)
    at com.mysql.jdbc.ConnectionImpl.&amp;lt;init&amp;gt;(ConnectionImpl.java:776)
    at com.mysql.jdbc.JDBC4Connection.&amp;lt;init&amp;gt;(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:386)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
    at gymcash.server.mysql.DriverWrapper.connect(DriverWrapper.java:22)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at gymcash.server.mysql.MySQL.connect(MySQL.java:48)
    at gymcash.server.mysql.MySQL.connect(MySQL.java:52)
    at gymcash.server.main.Main.main(Main.java:25)
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1964)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:328)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:322)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1614)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1052)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:987)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1072)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1397)
    at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:188)
    ... 21 more
Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
    at com.mysql.jdbc.ExportControlled$X509TrustManagerWrapper.checkServerTrusted(ExportControlled.java:304)
    at 

sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:992)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1596)
    ... 29 more
Caused by: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
    at sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIXCertPathValidator.java:154)
    at sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(PKIXCertPathValidator.java:80)
    at java.security.cert.CertPathValidator.validate(CertPathValidator.java:292)
    at com.mysql.jdbc.ExportControlled$X509TrustManagerWrapper.checkServerTrusted(ExportControlled.java:297)
    ... 31 more
&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;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Java 8, mysql-connector-java-5.1.45를 사용하고 있습니다.&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;본인이 서명한 인증서 또는 인증서에 서명하는 데 사용한 인증 기관을 연결하는 데 사용하는 JVM에서 사용하는 기본 자바 키 저장소에 입력합니다.&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;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 키 툴이 어떻게 작동하는지 이해해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[자바 키 도구 명령][1]https://www.sslshopper.com/article-most-common-java-keytool-keystore-commands.html&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 기본 키 저장소에 액세스할 수 없고 사용 중인 인증서 형식을 허용하지 않을 수 있다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자격증을 변환하고 지원되는 암호 알고리즘과 일치시키기 위해 일부 체육관 작업이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 기업을 관리하지 않는 한 단순한 작업을 수행하는 것이 더 낫습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;11&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;12&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;13&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;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 시 -D 옵션을 사용하여 키 저장소를 프로그램에 전달합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보통 DB에 연결하기 전에 코드에 이것을 추가하고 속성을 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (DB_SSL || SSL) {
            System.setProperty(&quot;javax.net.ssl.keyStore&quot;, KEYSTORE);
            System.setProperty(&quot;javax.net.ssl.keyStorePassword&quot;, KEYSTORE_PASS);
            System.setProperty(&quot;javax.net.ssl.trustStore&quot;, KEYSTORE);
            System.setProperty(&quot;javax.net.ssl.trustStorePassword&quot;, KEYSTORE_PASS);
        if (DEBUG_OPTION) {
            System.setProperty(&quot;javax.net.debug&quot;, &quot;true&quot;);
        }
    }

private static String KEYSTORE = &quot;/home/me/.keystore&quot;;
private static String KEYSTORE_PASS = &quot;changeit&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/52244946/java-mysql-ssl-connection-with-specified-cert&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/752</guid>
      <comments>https://megabox.tistory.com/752#entry752comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:55:27 +0900</pubDate>
    </item>
    <item>
      <title>C에서 명시적 폴스루를 하는 방법</title>
      <link>https://megabox.tistory.com/751</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C에서 명시적 폴스루를 하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 버전의 gcc는 다음을 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Wimplicit-fallthrough&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&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;Wno-implicit-fallthrough&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 파일에 대해서는&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 컴파일러 스위치나 프래그마를 통해 경고를 끄지 않고 (가능하다면) 명시적으로 폴을 수행할 수 있는 방법을 찾고 있습니다.&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;switch (condition) {
    case 1:
        printf(&quot;1 &quot;);
        __attribute__ ((fallthrough));
    case 2:
        printf(&quot;2 &quot;);
        __attribute__ ((fallthrough));
    case 3:
        printf(&quot;3\n&quot;);
        break;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GCC는 마법 댓글을 통해 추락합니다.&lt;/font&gt;&lt;/strong&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;int main(int argc, char **argv) {
    (void)argv;
    switch (argc) {
        case 0:
            argc = 1;
            // fall through
        case 1:
            argc = 2;
    };
}
&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;는 다음을 사용하여 GCC 7.4.0에 대한 경고를 방지합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;gcc -Wall -Wextra main.c
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;man gcc&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;-Wimplicit-fallthrough=n
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C++17&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[[fallthrough]]&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;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C++17은 이에 &lt;a href=&quot;https://stackoverflow.com/questions/45129741/gcc-7-wimplicit-fallthrough-warnings-and-portable-way-to-clear-them/52707279#52707279&quot; papago-id=&quot;13-1&quot;&gt;대한&lt;/a&gt; 표준화된 구문을 얻었습니다. &lt;a href=&quot;https://stackoverflow.com/questions/45129741/gcc-7-wimplicit-fallthrough-warnings-and-portable-way-to-clear-them/52707279#52707279&quot; papago-id=&quot;13-1&quot;&gt;GCC&lt;/a&gt; 7, -Wimplicit-fallthrough &lt;a href=&quot;https://stackoverflow.com/questions/45129741/gcc-7-wimplicit-fallthrough-warnings-and-portable-way-to-clear-them/52707279#52707279&quot; papago-id=&quot;13-1&quot;&gt;warning, and portable to clearing?&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;14-1&quot;&gt;GCC 진단 프래그마스&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;#pragma GCC diagnostic ignored &quot;-Wimplicit-fallthrough&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/44511436/how-to-do-an-explicit-fall-through-in-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/751</guid>
      <comments>https://megabox.tistory.com/751#entry751comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:19:05 +0900</pubDate>
    </item>
    <item>
      <title>구글 플레이 스토어는 AV 에뮬레이터에서 지원됩니까?</title>
      <link>https://megabox.tistory.com/750</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구글 플레이 스토어는 AV 에뮬레이터에서 지원됩니까?&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;구글 플레이 스토어는 AV 에뮬레이터에서 공식적으로 지원하고 있습니까?&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;저는 avd 안드로이드 버전 4.4.3 (api 19) 구글 앱을 사용하고 있습니다. 거기에는 구글 플레이 스토어 앱이 보이지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 기대해야 하는 건가요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 avd에 공식적으로 설치할 수 있는 구글 플레이 스토어 공식 apk가 있습니까?&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;Android Studio 2.4의 최신 버전을 실행하고 있는지 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android Studio AVD Manager에서 Google Play 스토어 아이콘이 옆에 있는 가상 장치 구성을 선택한 다음 &quot;Google Play&quot; 레이블이 있는 시스템 이미지 중 하나를 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 릴리스 노트 참조: https://androidstudio.googleblog.com/2017/04/android-studio-24-preview-4-is-now.html&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/u14Xf.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/u14Xf.png&quot; alt=&quot;Android Studio AVD Manager with Google Play Store support&quot;&gt;&lt;/a&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;strong papago-id=&quot;4-0&quot;&gt;쉬운 방법:&lt;/strong&gt; 새 에뮬레이터를 만들고 처음 열기 전에 다음과 같은 간단한 단계를 따릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&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;예를 들어 Windows에서 &lt;strong papago-id=&quot;5-1&quot;&gt;&quot;%userprofile%&quot;&lt;/strong&gt;로 이동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;5-1&quot;&gt;Android\avd&quot;&lt;/strong&gt;를 클릭하고 가상 장치 폴더를 엽니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&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-1&quot;&gt;구성&lt;/strong&gt;을 엽니다&lt;strong papago-id=&quot;6-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모장 같은 텍스트 편집기와 &lt;strong papago-id=&quot;6-1&quot;&gt;함께&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;7-1&quot;&gt;PlayStore.enabled&lt;/strong&gt; 키를 찾아 값을 true로 변경합니다.&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;PlayStore.enabled = true&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;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;9-1&quot;&gt;이미지&lt;/strong&gt;를 찾습니다&lt;strong papago-id=&quot;9-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;9-1&quot;&gt;sysdir.1&lt;/strong&gt; 입력 및 변경:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;google_apis =&amp;gt; google_apis_playstore&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;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;image.sysdir.1 = 시스템- images\android-30\google_apis\x86\&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로.&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;image.sysdir.1 = 시스템- images\android-30\google_apis_playstore\x86\&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android Studio 2.3.2부터는 Play Store가 미리 설치된 AVD를 만들 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 AVD가 실행 중인 상태에서 지원됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Nexus 5 또는 5X 폰 또는 Android Wear의 장치 정의&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android 7.0(API 24) 이후의 시스템 이미지&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;a href=&quot;https://androidstudio.googleblog.com/2017/04/google-play-system-images-android.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17&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;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 에뮬레이터의 경우 이 &lt;a href=&quot;https://stackoverflow.com/a/34581874/m&quot; papago-id=&quot;18-1&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;AVD를 생성할 때,&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;/ol&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3bV1M.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3bV1M.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 API 레벨의 이미지의 Google Play 버전을 선택합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1Uiqp.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1Uiqp.jpg&quot; alt=&quot;enter image description here&quot;&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;이제 AVD를 만든 후에는 구글 플레이 아이콘이 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Qz62E.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Qz62E.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예, AVD(Android Emulator)에서 Play Store(Play Store on Android Emulator)를 활성화/사용할 수 있습니다. 그 전에 몇 가지 전제 조건을 설정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li 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;Android SDK Manager&lt;/strong&gt;를 시작하고 필요한 Android 버전(예: &lt;em papago-id=&quot;24-7&quot;&gt;Android 7.1.1&lt;/em&gt; 또는 &lt;em papago-id=&quot;24-7&quot;&gt;API 25&lt;/em&gt;)의 &lt;strong papago-id=&quot;24-3&quot;&gt;Google Play Intel x86 Atom System Image&lt;/strong&gt;(추천: 비교적 &lt;em papago-id=&quot;24-5&quot;&gt;빨리 작동&lt;/em&gt;하므로)를 선택합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[참고: 처음 &lt;em papago-id=&quot;25-1&quot;&gt;설치하실 경우에는 다른&lt;/em&gt; 모든 &lt;em papago-id=&quot;25-1&quot;&gt;것은 그대로 두시기 바랍니다.]&lt;/em&gt; 또는 아래 이미지 그대로 설치하기:&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다운로드 완료 후 &lt;strong papago-id=&quot;26-1&quot;&gt;도구&lt;/strong&gt;로 이동 -&amp;gt;&lt;strong papago-id=&quot;26-3&quot;&gt;AVD 관리...-&amp;gt;&lt;/strong&gt;Android SDK Manager에서 &lt;strong papago-id=&quot;26-5&quot;&gt;만들기&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6ArmF.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6ArmF.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&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;내부 및 SD 카드 스토리지에 대해서는 확실하지 않습니다.&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;ol start=&quot;4&quot;&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 CPU/ABI에서 &lt;strong papago-id=&quot;28-1&quot;&gt;Google Play Intel Atom(x86)&lt;/strong&gt;이 제공되는지 확인합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&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;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 Android Emulator를 &lt;strong papago-id=&quot;30-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;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android Studio에서 가상 장치를 만들 때 장치 테이블의 재생 저장소 열에 주목합니다.&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;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;❗ ️ &lt;em papago-id=&quot;32-1&quot;&gt;Google play root과 함께 제공&lt;/em&gt;되는 시스템 &lt;em papago-id=&quot;32-1&quot;&gt;이미지&lt;/em&gt;는 제공되지 않습니다&lt;em papago-id=&quot;32-1&quot;&gt;.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gmRzX.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gmRzX.png&quot; alt=&quot;android studio images with playstore &quot;&gt;&lt;/a&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;AVD를 만들고 나면 Android Studio AVD Manager에서 Google Play가 설치된 이미지를 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gdM5P.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gdM5P.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Select a Device&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;google play icon&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;Google play&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;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dmhla.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dmhla.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AV 에뮬레이터에는 구글 플레이 스토어가 없습니다.&lt;/font&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;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Google APIs System Image를 설치하면 Google 서비스가 이미 제공됩니다(Play Store 없이).&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Google API 이미지를 기반으로 AVD 만들기&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://opengapps.org/ 에서 가장 작은 아카이브를 다운로드하고 거기에서 Phonesky.apk를 추출합니다.&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;Phonesky.apk를 avd에서 /system/priv-app/로 누릅니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;avd를 다시 시작합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;구글 플레이가 있어야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최근에 나는 그냥 혼자 하려고 노력했고 당신은 내 블로그에서 자세한 튜토리얼을 찾을 수 있습니다. http://linuxoidchannel.blogspot.com/2017/01/how-to-install-google-play-store-on.html&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;sdkmanager --list | grep &quot;playstore&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설치가 완료되면 해당 패키지를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;avdmanager create avd --force --name testAVD --abi google_apis_playstore/x86_64 --package &quot;system-images;android-28;google_apis_playstore;x86_64&quot; -d 19
&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;google_apis_playstore;x86_64&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;del papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아직 공식적으로 지원되지 않습니다.&lt;/font&gt;&lt;/del&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;strong papago-id=&quot;50-0&quot;&gt;편집:&lt;/strong&gt; Android Studio의 최신 버전, 적어도 일부 플랫폼에서는 지원됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;51&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;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Google Play Store를 지원하지 않는 이전 버전의 Android Studio를 사용하고 있지만 업그레이드를 거부하는 경우 다음 두 가지 해결 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋아하는 앱의 관리자에게 앱의 복사본을 &lt;a href=&quot;http://en.wikipedia.org/wiki/Amazon_Appstore&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;53-1&quot;&gt;Amazon 앱스토어&lt;/a&gt;에 업로드하도록 요청합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음으로 Android 기기에 Appstore를 설치합니다.&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&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는: 웹 검색을 통해 원하는 소프트웨어의 .apk 파일을 찾습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 Android 에뮬레이터에 SleepBot을 설치하려면 Google 웹 검색에서 [&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SleepBot apk&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;adb install&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.apk 파일을 설치합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&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/38593738/is-google-play-store-supported-in-avd-emulators&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Android</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/750</guid>
      <comments>https://megabox.tistory.com/750#entry750comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:18:59 +0900</pubDate>
    </item>
    <item>
      <title>AngularJS에서 CSS 스타일을 변경할 수 없습니다.</title>
      <link>https://megabox.tistory.com/749</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AngularJS에서 CSS 스타일을 변경할 수 없습니다.&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;angular.element(&quot;#element&quot;).style.height = 100px;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 확신합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;angular.element(&quot;#element&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;DOM 요소를 반환하기 때문에 작동합니다.&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;angular.element(&quot;#element&quot;).addClass('something');
&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;(내가 찾은 모든 것은 ngStyle에 관한 것인데 내가 찾는 것은 아닌 것 같습니다?)&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;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 그렇다면 : 뭐? 왜?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.style.something&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안 되나요?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-1&quot;&gt;&lt;a href=&quot;https://docs.angularjs.org/api/ng/function/angular.element&quot; papago-id=&quot;8-1-0&quot;&gt;문서&lt;/a&gt;&lt;/strong&gt;에 따르면:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;em papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: Angular의 모든 요소 참조는 항상 jQuery 또는 jqLite로 감싸집니다. 이는 원시 DOM 참조가 아닙니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;/blockquote&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;.style&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;hr&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;ivarni의 접근 방식을 사용하여 HTML 요소를 파악할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;angular.element(...)[0].style...&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 또는 jQuery's/jqLite's를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.css()&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;angular.element('#element').css('height', '100px');
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앵귤러스&lt;/font&gt;&lt;/font&gt;&lt;code&gt;element&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DOM 요소 자체가 아닌 DOM 요소를 랩하는 것을 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JQuery Selector와 마찬가지로 기본 요소에 액세스할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;angular.element(&quot;#element&quot;)[0].style.height = 100px;
&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;물론, ID를 사용할 때 일치하는 항목이 한 개 있다고 가정합니다.&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 없이 Angular를 실행하는 경우 다음과 같이 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;angular.element(document.querySelector(&quot;#element&quot;))[0].style.height = &quot;100px&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;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/24365428/cant-change-css-style-in-angularjs&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/749</guid>
      <comments>https://megabox.tistory.com/749#entry749comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:18:48 +0900</pubDate>
    </item>
    <item>
      <title>get_page_children () 일부 하위 페이지를 반환하지 않음</title>
      <link>https://megabox.tistory.com/748</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;get_page_children () 일부 하위 페이지를 반환하지 않음&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;&amp;lt;?php 
                $my_wp_query = new WP_Query();
                $all_wp_pages = $my_wp_query-&amp;gt;query(array('post_type' =&amp;gt; 'page'));

                $staff = get_page_children(8, $all_wp_pages);

                foreach($staff as $s){
                    $page = $s-&amp;gt;ID;
                    $page_data = get_page($page);
                    $content = $page_data-&amp;gt;post_content;
                    $content = apply_filters('the_content',$content);
                    $content = str_replace(']]&amp;gt;', ']]&amp;gt;', $content);
                    echo '&amp;lt;div class=&quot;row-fluid&quot;&amp;gt;&amp;lt;span class=&quot;span4&quot;&amp;gt;'; 
                    echo get_the_post_thumbnail( $page ); 
                    echo '&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;span8&quot;&amp;gt;'.$content.'&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;';
                } 
        ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이 페이지가 5개나 있는데 3개만 돌아옵니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;$staff에 print_r을 사용하여 다른 페이지가 배열되어 있는지 확인했지만 그렇지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;무엇이 문제인지 잘 모르겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아무 문제 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;get_page_children()&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;new WP_Query()&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;WP_Query&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;x&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;WP_Query&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;get_page_children()&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;WP_Query&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;WordPress &lt;a href=&quot;http://codex.wordpress.org/Function_Reference/get_page_children&quot; papago-id=&quot;10-1&quot;&gt;Codex&lt;/a&gt;: get_page_children에 따르면 &quot;... 자식을 가져오기 위해 SQL 쿼리를 만들지 않습니다.&quot;&lt;/font&gt;&lt;/font&gt;&lt;/p&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;    $query = new WP_Query( 'posts_per_page=-1' );
&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;    &amp;lt;?php 
    $my_wp_query = new WP_Query();
    $all_wp_pages = $my_wp_query-&amp;gt;query(array('post_type' =&amp;gt; 'page', 'posts_per_page' =&amp;gt; -1));

    $staff = get_page_children(8, $all_wp_pages);

    foreach($staff as $s){
        $page = $s-&amp;gt;ID;
        $page_data = get_page($page);
        $content = $page_data-&amp;gt;post_content;
        $content = apply_filters('the_content',$content);
        $content = str_replace(']]&amp;gt;', ']]&amp;gt;', $content);
        echo '&amp;lt;div class=&quot;row-fluid&quot;&amp;gt;&amp;lt;span class=&quot;span4&quot;&amp;gt;'; 
        echo get_the_post_thumbnail( $page ); 
        echo '&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;span8&quot;&amp;gt;'.$content.'&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;';
    } 
    ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;13&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_get_page_children( $page_id, $post_type = 'page' ) {
        // Set up the objects needed
        $custom_wp_query = new WP_Query();
        $all_wp_pages    = $custom_wp_query-&amp;gt;query( array( 'post_type' =&amp;gt; $post_type, 'posts_per_page' =&amp;gt; -1 ) );

        // Filter through all pages and find specified page's children
        $page_children = get_page_children( $page_id, $all_wp_pages );

        return $page_children;
    }
&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;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    foreach(my_get_page_children(8) as $s){
        $page = $s-&amp;gt;ID;
        $page_data = get_page($page);
        $content = $page_data-&amp;gt;post_content;
        $content = apply_filters('the_content',$content);
        $content = str_replace(']]&amp;gt;', ']]&amp;gt;', $content);
        echo '&amp;lt;div class=&quot;row-fluid&quot;&amp;gt;&amp;lt;span class=&quot;span4&quot;&amp;gt;'; 
        echo get_the_post_thumbnail( $page ); 
        echo '&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;span8&quot;&amp;gt;'.$content.'&amp;lt;/span&amp;gt;&amp;lt;/div&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;저도 비슷한 문제가 있었어요 - get_page_children들이 이상하게 행동하는 것 같아요...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(제 경우에는 3명의 자녀가 있는 한 페이지에 대해서는 3명을, 4명이 있는 다른 페이지에 대해서는 0명을 반환했습니다! - 해결할 수 없습니다..&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;$params = array(
'post_type'=&amp;gt;'page',
'post_parent'=&amp;gt; 8,
);
$staff = query_posts($params);
&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;유사한 내용: http://www.sanraul.com/2010/08/28/get-page-children/&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;wp_reset_query();&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;query_posts()&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;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 도움이 되길! - A&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$curID = get_the_ID();

query_posts(
    array(
        'post_type'=&amp;gt;'page',
        'post_parent'=&amp;gt;$curID,
        'orderby' =&amp;gt; 'menu_order',
        'order' =&amp;gt; 'ASC'
    )
);

echo '&amp;lt;ul&amp;gt;';
while ( have_posts() ) : the_post();
    echo '&amp;lt;li&amp;gt;&amp;lt;a href=&quot;'.get_permalink().'&quot;&amp;gt;'.get_the_title().'&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;';
endwhile;
echo '&amp;lt;/ul&amp;gt;';

wp_reset_query();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 편집 참조&lt;/font&gt;&lt;/strong&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;원래는 새로운 WP_Query를 사용하여 모든 페이지를 잡은 다음 쿼리 결과를 get_page_children()에 입력했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$all_pages = new WP_Query( array( 'post_type' =&amp;gt; 'page' ) );
wp_reset_postdata();
$page_id = get_the_ID();

// pass $all_pages as the second parameter
$page_children = get_page_children( $page_id, $all_pages );

foreach ( $page_children as $childObj ) {
    echo '&amp;lt;a href=&quot;' . $childObj-&amp;gt;guid . '&quot;&amp;gt;' . $childObj-&amp;gt;post_title . '&amp;lt;/a&amp;gt;'
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 이유에서건 위 코드는 저에게 통하지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 다음과 같이 $all_pages의 'posts' 개체를 두 번째 매개 변수로 전달했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$all_pages = new WP_Query( array( 'post_type' =&amp;gt; 'page' ) );
wp_reset_postdata();
$page_id = get_the_ID();

// pass the posts object of $all_pages as the second parameter
$page_children = get_page_children( $page_id, $all_pages-&amp;gt;posts );

foreach ( $page_children as $childObj ) {
    echo '&amp;lt;a href=&quot;' . $childObj-&amp;gt;guid . '&quot;&amp;gt;' . $childObj-&amp;gt;post_title . '&amp;lt;/a&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;/font&gt;&lt;/p&gt; 
&lt;hr&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-0&quot;&gt;편집:&lt;/strong&gt; get_page_children() 함수에 더 많은 문제가 발생한 후, 저는 동일한 최종 결과를 얻기 위해 지속적으로 작동해 온 다른 경로를 선택합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$page = get_queried_object();
$children = get_pages( 'child_of=' . $page-&amp;gt;ID . '&amp;amp;parents=' . $page-&amp;gt;ID );

// loop through the child page links
foreach ( $children as $child ) {
    echo '&amp;lt;a href=&quot;' . get_permalink( $child-&amp;gt;ID ) . '&quot;&amp;gt;' . get_the_title( $child-&amp;gt;ID ) . '&amp;lt;/a&amp;gt;';
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단히 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$args = array(
        'post_parent' =&amp;gt; $parent_id ,
        'post_type'   =&amp;gt; 'page', 
        'numberposts' =&amp;gt; -1,
        'post_status' =&amp;gt; 'publish' 
    );
    $children = get_children( $args );
&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;$children 변수는 부모 ID의 모든 자식 페이지에 제공됩니다. WP_Query를 사용하는 경우 자세한 정보를 보려면 코드별로 쿼리를 재설정해야 합니다. https://developer.wordpress.org/reference/functions/get_page_children/&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;php 파일 및 부모 페이지 ID의 호출 함수&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    function load_clildren( $parent_id=null ){
    $parent_id  =   ( $parent_id ) ? $parent_id : $post-&amp;gt;ID;

    $args = array(
        'post_parent' =&amp;gt; $parent_id ,
        'post_type'   =&amp;gt; 'page', 
        'numberposts' =&amp;gt; -1,
        'post_status' =&amp;gt; 'publish' 
    );
    $children = get_children( $args );
    return $children;
}
&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;$ch_pages   =   load_clildren( $parent_id );
&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;$ch_pages   =   load_clildren();
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/14224089/get-page-children-not-returning-all-child-pages&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/748</guid>
      <comments>https://megabox.tistory.com/748#entry748comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:18:42 +0900</pubDate>
    </item>
    <item>
      <title>웹 서버가 VMware보다 WSL에서 2-3배 느린 이유는 무엇입니까?(동일한 도커 스택)</title>
      <link>https://megabox.tistory.com/747</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 서버가 VMware보다 WSL에서 2-3배 느린 이유는 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(동일한 도커 스택)&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음으로 구성된 도커 구성 설정이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스: php8.1&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;mariadb:&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;traefik:v2.7&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 네트워킹 차이를 배제하기 위해 내부에서 실행되는 벤치마크는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;curl --resolve example.com:443:172.18.0.3 --write-out '%{time_total}\n' --output /dev/null https://example.com
&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;example.com 이 사용자 지정 도메인인 경우 IP는 traefik 컨테이너의 현재 IP입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SSH를 VMware에 입력하고 PowerShell에서 입력하는 명령을 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wsl&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;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-0&quot;&gt;지속적으로 VMware 지원 인스턴스의 경우 ~0.2초를 반환하고 WSL의 경우 0.4~0.6초를 반환합니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;performant WP 사이트의 HTML 소스를 포함하는 index.php 자체의 로드를 나타냅니다. plugin 없이 핸드코드된 테마를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지역적으로, 정적 버전은 두 시스템 모두에서 10ms 미만의 측정 가능한 차이 또는 매우 미미한 차이가 없는 것으로 보입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나머지 구성:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 1122H2 22610.1, WSL 2, VMware 16.1.0 build-17198959, &lt;a href=&quot;https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-1&quot;&gt;Docker는 동일한 방식&lt;/a&gt;으로 설치하고 Docker Desktop은 설치하지 않았습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UFW 꺼짐.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;vmdk 및 vhdx 파일이 동일한 SSD에 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 시스템 간에 /mnt 파일을 사용하지 않음: 모든 것이 각각 각 시스템의 홈 폴더 아래에 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OS는 WSL에서는 Ubuntu 20.04.4 LTS, VMware에서는 Ubuntu 21.10입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;WSL과 WM웨어에서도 우분투 22.04 LTS를 사용해 보았습니다. 같은 번호입니다.&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;WSL에서는 Nginx + PHP-FPM 변형 WP를 사용해 보았고 VMware에서는 OpenLiteSpeed를 사용해 보았지만 수치를 변경하는 것은 없었습니다.&lt;/font&gt;&lt;/li&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;내가 아는 &lt;strong papago-id=&quot;16-0&quot;&gt;유일한 차이점&lt;/strong&gt;은 내가 해야만 했다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo update-alternatives --config iptables&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;/usr/sbin/iptables-legacy&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;도커를 WSL에서 작동시키기 위해 WM웨어에서는 할 필요가 없었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 대답에 대한 몇 가지 주의 사항:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;20-1&quot;&gt;당신&lt;/em&gt;에게 해결책이 있었으면 좋겠지만, 당신의 주된 &lt;em papago-id=&quot;20-3&quot;&gt;질문&lt;/em&gt;은 왜 그러냐는 것이고, 이것은 답이 되어야 합니다.&lt;/font&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;font class=&quot;papago-parent&quot;&gt;WSL2 공연이 &quot;원주민에 가깝다&quot;는 일화는 항상 들어왔습니다.&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;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇기는 하지만, 제가 조사하면서 생각해낸 자료를 보고하도록 하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단히 요약하면 -- 제가 벤치마킹한 결과 Hyper-V와 VMWare 사이에 상당한 디스크 IO와 메모리 성능 델타가 나타나 WordPress 결과를 설명할 수 있을 것 같습니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;h4 papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 및 연구 지원&lt;/font&gt;&lt;/h4&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 당신의 것과 비슷한 테스트 시나리오로 시작했지만, 가능한 한 &lt;a href=&quot;https://stackoverflow.com/help/minimal-reproducible-example&quot; papago-id=&quot;25-1&quot;&gt;많은&lt;/a&gt; MRE로 줄이려고 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h5 papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열&lt;/font&gt;&lt;/h5&gt; 
&lt;p&gt;&lt;em papago-id=&quot;27&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;ul&gt; 
 &lt;li papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;i9500&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;RAM 16GB&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SSD&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WSL2를 사용하도록 설정한 Windows 11 Pro의 최신/최근 설치&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;VMware Workstation 16 Player 새로 설치&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;em papago-id=&quot;33&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;ul&gt; 
 &lt;li papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 VMWare 설정(CPU 2개, RAM 4GB)&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;WSL2 기본 설정(CPU 6개, RAM 8GB)&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;em papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WSL2 및 VMWare 모두에서 다음을 수행합니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ubuntu Server 20.04 게스트/배포&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Docker가 둘 다에 설치됨(Docker Desktop이 아닌 공식 레포에서)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;ubuntu:latest&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;(22.04)&lt;/font&gt;&lt;/font&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;Ubuntu 22.04 Docker 컨테이너에 설치된 MySQL 서버(MariaDB) 및 Sysbench&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;아래 벤치마킹의 경우 다음과 같습니다.&lt;/font&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;WSL2를 테스트할 때 VMWare를 닫았고, 그 반대의 경우도 마찬가지입니다.&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;테스트 사이에 Windows 호스트를 &lt;em papago-id=&quot;43-1&quot;&gt;재부팅하지 않았습니다&lt;/em&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이러한 테스트 중 일부는 VMWare와 WSL2/Hyper-V 모두에서 결과에 큰 차이가 없이 여러 번 실행되었기 때문에 재부팅해도 결과가 크게 달라지지는 않았을 것입니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h5 papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;벤치마킹&lt;/font&gt;&lt;/h5&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CPU와 메모리의 기본적인 Sysbench 테스트부터 시작했습니다.&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;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;sysbench cpu --time=300 run&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;div class=&quot;s-table-container&quot;&gt; 
   &lt;table class=&quot;s-table&quot;&gt; 
    &lt;thead&gt; 
     &lt;tr&gt; 
      &lt;th&gt;&lt;/th&gt; 
      &lt;th style=&quot;text-align: right;&quot; papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;VM웨어&lt;/font&gt;&lt;/th&gt; 
      &lt;th style=&quot;text-align: right;&quot; papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WSL2&lt;/font&gt;&lt;/th&gt; 
     &lt;/tr&gt; 
    &lt;/thead&gt; 
    &lt;tbody&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트/초&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1,250.97&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1,252.89&lt;/font&gt;&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;# 사건들&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;375,294.00&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;375,869.00&lt;/font&gt;&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레이턴시&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 민&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0.77&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0.77&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 평균&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0.80&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0.80&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 맥스&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;31.40&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;4.07&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 95백분위수&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0.87&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0.86&lt;/td&gt; 
     &lt;/tr&gt; 
    &lt;/tbody&gt; 
   &lt;/table&gt; 
  &lt;/div&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;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;code&gt;sysbench memory run&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
  &lt;div class=&quot;s-table-container&quot;&gt; 
   &lt;table class=&quot;s-table&quot;&gt; 
    &lt;thead&gt; 
     &lt;tr&gt; 
      &lt;th&gt;&lt;/th&gt; 
      &lt;th style=&quot;text-align: right;&quot; papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;VM웨어&lt;/font&gt;&lt;/th&gt; 
      &lt;th style=&quot;text-align: right;&quot; papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WSL2&lt;/font&gt;&lt;/th&gt; 
     &lt;/tr&gt; 
    &lt;/thead&gt; 
    &lt;tbody&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;총작업량&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;64,449,416.00&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;6,456,274.00&lt;/font&gt;&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MiB 전송됨&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;62,938.88&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;6,304.96&lt;/font&gt;&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레이턴시&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 민&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0.00&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0.00&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 평균&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0.00&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0.00&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 맥스&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;23.63&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0.12&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 95백분위수&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0.00&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0.00&lt;/td&gt; 
     &lt;/tr&gt; 
    &lt;/tbody&gt; 
   &lt;/table&gt; 
  &lt;/div&gt; &lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아야 - WSL2의 도커 이미지는 VMWare의 메모리 대역폭의 약 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;/li&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;저는 Sysbench를 사용하는 MySQL 테스트를 생략하기로 결정했습니다. 이 테스트는 WordPress 사용률과 가장 일치할 수 있기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업이 수행되었습니다(해당 작업 후).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;prepare&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 포함:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;sysbench oltp_read_write.lua --mysql-user=root --time=300 --tables=10 --table-size=1000000 --range_selects=off --report-interval=1 --histogram run
&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;div class=&quot;s-table-container&quot;&gt; 
   &lt;table class=&quot;s-table&quot;&gt; 
    &lt;thead&gt; 
     &lt;tr&gt; 
      &lt;th&gt;&lt;/th&gt; 
      &lt;th style=&quot;text-align: right;&quot; papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;VM웨어&lt;/font&gt;&lt;/th&gt; 
      &lt;th style=&quot;text-align: right;&quot; papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WSL2&lt;/font&gt;&lt;/th&gt; 
     &lt;/tr&gt; 
    &lt;/thead&gt; 
    &lt;tbody&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수행된 쿼리&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 읽기&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;583,220&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;85&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;66,910&lt;/font&gt;&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 쓰기&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;233,288&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;88&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;26,764&lt;/font&gt;&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 기타&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;90&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;116,644&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;91&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;13,382&lt;/font&gt;&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;92&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 토탈&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;93&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;933,152&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;107,056&lt;/font&gt;&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;95&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;거래&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;96&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;58,322&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;97&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;6,691&lt;/font&gt;&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;무시된 오류&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;99&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 연결&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;100&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레이턴시&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 민&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;2.08&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;14.54&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 평균&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;5.14&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;44.83&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;103&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 맥스&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;71.67&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;193.75&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;104&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 95번째 백분위수&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;11.65&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;81.48&lt;/td&gt; 
     &lt;/tr&gt; 
    &lt;/tbody&gt; 
   &lt;/table&gt; 
  &lt;/div&gt; &lt;p papago-id=&quot;105&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WSL2의 MySQL 성능(적어도 Docker는)은 VMware의 약 10분의 1 수준으로 벤치마킹하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;관측된 성능 차이의 대부분이 이러한 결과에 나타나는 것일 수 있습니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;106&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 시점에서 WSL2와 도커를 완전히 무시한 채 하이퍼바이저 수준에서 좀 더 일반적인(IO) 방식으로 문제를 재현할 수 있다는 의구심이 들기 시작했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 WSL2는 Hyper-V로 지원되는 VM(사용자에게 숨겨진) 내부에서 실행됩니다. Hyper-V 관리자가 필요하지는 않지만 말입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;107&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Hyper-V를 활성화하고 Ubuntu 20.04 게스트를 추가로 설치했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 VMware 및 Hyper-V 게스트 Ubuntu OS에 Sysbench를 설치했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;108&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 디스크 IO를 다음과 비교했습니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;sysbench fileio --file-total-size=15G prepare
sysbench fileio --file-total-size=15G --file-test-mode=rndrw --time=300 --max-requests=0 --histogram run
&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;div class=&quot;s-table-container&quot;&gt; 
   &lt;table class=&quot;s-table&quot;&gt; 
    &lt;thead&gt; 
     &lt;tr&gt; 
      &lt;th&gt;&lt;/th&gt; 
      &lt;th style=&quot;text-align: right;&quot; papago-id=&quot;110&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;VMware Ubuntu 게스트&lt;/font&gt;&lt;/th&gt; 
      &lt;th style=&quot;text-align: right;&quot; papago-id=&quot;111&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Hyper-V Ubuntu 게스트&lt;/font&gt;&lt;/th&gt; 
     &lt;/tr&gt; 
    &lt;/thead&gt; 
    &lt;tbody&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;112&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일작업&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;113&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 읽기/초&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;114&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2,847.07&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;258.37&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;115&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 초당 쓰기 수&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;116&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1,898.05&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;172.25&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;117&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ fsyncs/sec&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot; papago-id=&quot;118&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;6,074.06&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;551.20&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;119&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;처리량&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;120&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 초당 MiB 읽기&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;44.49&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;4.04&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;121&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ MiB/sec 쓰기&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;29.66&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;2.69&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;122&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레이턴시&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;123&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 민&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0.00&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0.00&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;124&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 평균&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0.09&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;1.02&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;125&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 맥스&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;329.88&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;82.77&lt;/td&gt; 
     &lt;/tr&gt; 
     &lt;tr&gt; 
      &lt;td papago-id=&quot;126&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;↪ 95번째 백분위수&lt;/font&gt;&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;0.32&lt;/td&gt; 
      &lt;td style=&quot;text-align: right;&quot;&gt;4.10&lt;/td&gt; 
     &lt;/tr&gt; 
    &lt;/tbody&gt; 
   &lt;/table&gt; 
  &lt;/div&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;prepare&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Hyper-V에서 Sysbench의 작동 &lt;em papago-id=&quot;12-1&quot;&gt;속도&lt;/em&gt;가 약 30% 빨라졌습니다(IIRC).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 그 이후로 결과를 포착하지 못했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;prepare&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;em papago-id=&quot;13-1&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;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;unzip&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WSL2가 빠를수록 연관성이 있는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;VMware와 Hyper-V/WSL2 모두 동적으로 크기가 조정된 가상 Disk를 사용합니다(&quot;희소&quot;라고 부르기도 함).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;호스트 OS의 가상 디스크 크기는 기본적으로 0바이트에 가까운 파일로 시작하여 필요에 따라 최대 크기까지 &lt;em papago-id=&quot;15-1&quot;&gt;증가&lt;/em&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;132&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 중 하나일 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li papago-id=&quot;133&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Hyper-V는 가상 디스크를 키울 때 성능 면에서 유리합니다.&lt;/font&gt;&lt;/li&gt; 
   &lt;li papago-id=&quot;134&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 테스트에서 VMW는 이러한 작업을 위해 Disk를 확장해야 하지만 Hyper-V/WSL2 Disk에는 이미 사용 가능한 여유 공간(이전에 삭제된 파일에서)이 초과되어 있었습니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;p papago-id=&quot;135&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 순서로 작업을 했는지 확실히 말할 수는 없으며, 확실히 알 수 있는 유일한 방법은 가상 디스크를 &quot;축소/압축&quot;한 후 다시 시도하는 것입니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h5 papago-id=&quot;136&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요약&lt;/font&gt;&lt;/h5&gt; 
&lt;p papago-id=&quot;137&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 보기에, 그리고 적어도 Windows의 &quot;Pro&quot; 수준에서는 Hyper-V가 VMWare와 비교할 때 성능에 심각한 제한이 있는 것으로 보입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h5 papago-id=&quot;138&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조정 시도 및 기타 비교&lt;/font&gt;&lt;/h5&gt; 
&lt;p papago-id=&quot;139&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Hyper-V 시스템을 좀 조정해 보았지만, 그 부분에 대해서는 전문가가 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼에도 불구하고 사용자로서는 Hyper-V 튜닝을 WSL2로 확장하기 위해 할 수 있는 일이 많지 않습니다. Microsoft는 이러한 변경 사항을 대부분 변경해야 할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;140&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동적 VHDX를 고정형으로 변환하여 IO를 증가시킬 수 있기를 바라며 시도해 보았지만 큰 변화는 없었습니다.&lt;/font&gt;&lt;/p&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;ul&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;142&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WSL2에서 스왑 비활성화&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;143&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 많은 스레드로 Sysbench 테스트 실행&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;144&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WSL2의 고정 12GB RAM 크기 설정&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;145&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 시스템의 SSD에 비해 메모리와 NVMe 드라이브가 빠른 WSL2에서 sysbench를 실행합니다.&lt;/font&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li papago-id=&quot;146&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모리 속도가 크게 향상되었습니다. – 애플 투 오렌지(Apple-to-Orange)지만 데스크톱의 메모리 수는 로우엔드 테스트 시스템에서 실행되는 VMware와 맞먹었습니다.&lt;/font&gt;&lt;/li&gt; 
   &lt;li papago-id=&quot;147&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이는 디스크 IO 숫자에 아무런 차이가 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들은 여전히 시험 시스템과 같은 범위에 있었습니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h5 papago-id=&quot;148&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 단계&lt;/font&gt;&lt;/h5&gt; 
&lt;p papago-id=&quot;149&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WordPress 인스턴스와는 별도로 유사한 벤치마킹을 실행할 수 있다면 좋을 것입니다. 이미 두 환경이 설정되어 있기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 우리가 데이터를 확증할 수 있다면, 적어도 WSL 팀에는 보고해야 할 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;WSL2를 VMware와 거의 동등한 수준으로 조정하는 방법에 대한 지침을 제공하거나 Hyper-V 팀과 협력할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;150&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Hyper-V와 VMWare의 차이가 너무 크다는 사실이 놀랍습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 아직도 벤치마킹에서 제 자신이 뭔가 잘못하고 있는 것이 아니라고 믿으려고 애를 씁니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세히 들여다본 후에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wsl&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 고전적인 VM과 약간의 기억력을 새롭게 하기 위해 이론에 도달했지만 증명할 수 &lt;em papago-id=&quot;17-1&quot;&gt;없습니다&lt;/em&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;153&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 답변이 어쨌든 도움이 되거나 이 질문에 대한 직접적인 지식을 가진 사람을 끌어들이기를 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;154&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;155&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Hyper-V가 VMWare보다 '원시 전력'을 훨씬 적게 사용하도록 구성되어 있는 것이 가능합니까? (즉, Microsoft는 WSL에 거의 모든 가용 리소스를 사용하는 것에 비해 우선 순위를 많이 부여하지 않습니다.) 아니면 Hyper-V 성능(코딩 등)에 더 본질적인 문제입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;156&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 WSL이 웹 페이지를 호스팅하는 것과 같은 리소스 집약적인(네트워크 속도를 포함한) 작업이 아니라 윈도우에서 리눅스 제품에 액세스하기 위한 것으로 보인다는 제 자신의 이해에서 비롯됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;WSL의 통합 방식 때문에 일반 VM보다 더 빨리 실행될 것이라고 생각하는 것은 직관적인 것 같지만 VM은 완전히 구성 가능하므로 리소스에 대한 전체 액세스 권한을 거의 부여할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;157&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://superuser.com/questions/1675401/difference-between-wsl-with-gui-and-hyper-v-virtual-machine&quot; papago-id=&quot;157-1&quot;&gt;이러한&lt;/a&gt; 답변을 살펴보면 VM 자체를 대체하기 위한 것은 아닌 것으로 보입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;158&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 WSL은 이러한 종류의 작업에 대해 구성되어 있지 않을 수도 있으며, 이를 변경할 수 있을 만큼 충분히 구성할 수 있는 것도 아니라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;159&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마이크로소프트가 WSL에 목표로 삼은 주요 용도는 Windows 사용자에게 Windows와 Linux 제품 간에 전환할 수 있는 Dinamic 워크플로우를 제공하는 것이었습니다(IMHO, Linux가 Windows보다 콘솔 제품이 훨씬 낫기 때문에). WSL을 모든 특성을 갖춘 본격적인 VM으로 만드는 것은 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 사용하지 않는 윈도우 환경과 리소스를 공유해야 하는 부담이 있고 '메인'인 리눅스 환경에서 웹페이지를 만들고 호스팅하려는 이유도 일리가 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;160&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WSL2에는 알려진 네트워킹 병목 현상이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;161&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잠재적인 해결 방법은 이 GitHub 문제를 참조하십시오. https://github.com/microsoft/WSL/issues/4901&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;162&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://github.com/microsoft/WSL/issues/4901#issuecomment-664735137&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;163&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/microsoft/WSL/issues/4901#issuecomment-664735137&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/microsoft/WSL/issues/4901#issuecomment-909723742&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;164&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/microsoft/WSL/issues/4901#issuecomment-909723742&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/microsoft/WSL/issues/4901#issuecomment-957851617&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;165&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/microsoft/WSL/issues/4901#issuecomment-957851617&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;166&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/72377252/why-is-a-web-server-2-3x-slower-in-wsl-than-in-vmware-same-docker-stack&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>megabox</author>
      <guid isPermaLink="true">https://megabox.tistory.com/747</guid>
      <comments>https://megabox.tistory.com/747#entry747comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:18:33 +0900</pubDate>
    </item>
  </channel>
</rss>