<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>bestsource</title>
    <link>https://bestsource.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Sat, 11 Apr 2026 01:12:37 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>bestsource</managingEditor>
    <item>
      <title>워드프레스 &amp;quot;알림:Linux에서 로컬로 실행되는 초기 설정 후 정의되지 않은 인덱스: host&amp;quot;</title>
      <link>https://bestsource.tistory.com/781</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;워드프레스 &quot;알림:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Linux에서 로컬로 실행되는 초기 설정 후 정의되지 않은 인덱스: host&quot;&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;칼리 리눅스를 실행하는 노트북에 워드프레스를 설치하려고 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;워드프레스와 제가 사용하고 있는 테마를 설치하기 전까지는 모든 것이 작동합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 암반에 뿌리 세이지를 사용하려고 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 설치 절차를 마치면 관리자에게 다음과 같은 알림이 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Notice: Undefined index: host in /var/www/html/site/web/wp/wp-includes/theme.php on line 2937
Notice: Undefined index: host in /var/www/html/site/web/wp/wp-includes/theme.php on line 2937
Notice: Undefined index: host in /var/www/html/site/web/wp/wp-includes/theme.php on line 2999
Notice: Undefined index: host in /var/www/html/site/web/wp/wp-includes/theme.php on line 2999
&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;Notice: Undefined index: host in /var/www/html/site/web/wp/wp-includes/theme.php on line 2999
Notice: Undefined index: host in /var/www/html/site/web/wp/wp-includes/theme.php on line 2999
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 왜 이런 안내문을 받는지 설명해주실 분 계신가요?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 뭔가 놓쳤나 봐요. 그런데 설명서를 몇 번이나 살펴봤는데 아이디어가 없네요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WP_HOME &amp;amp; WP_SITEURL은 wp-config.php에서 정의할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;define('WP_HOME','http://localhost/project_folder_name');
define('WP_SITEURL','http://localhost/project_folder_name');
&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;siteurl&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;home&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;옵션의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wp_options&lt;/code&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;URL에 호스트도 있는지 확인하고,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;http://example.com&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;뿐만 아니라.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;example.com&lt;/code&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;방금 이 사실을 알게 되었고 PHP 8.x.x에서 PHP 7.x.x로 다시 전환하면 문제가 해결되었습니다.&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/41307076/wordpress-notice-undefined-index-host-after-initial-setup-running-locally-on&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>Wordpress</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/781</guid>
      <comments>https://bestsource.tistory.com/781#entry781comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:51:11 +0900</pubDate>
    </item>
    <item>
      <title>C에서 순환 리스트(ring buffer)를 어떻게 구현합니까?</title>
      <link>https://bestsource.tistory.com/780</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C에서 순환 리스트(ring buffer)를 어떻게 구현합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가장 오래된 항목이 가득 찼을 때 덮어쓰는 순환 목록을 구현하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;약간의 배경을 위해 GWT 내의 순환 리스트를 사용하고 싶기 때문에 서드파티 lib를 사용하는 것은 제가 원하는 것이 &lt;strong&gt;아닙니다&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C로 표현되는 매우 간단한 구현.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원형 버퍼 스타일 FIFO 큐를 구현합니다.&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;또한 2의 거듭제곱을 사용하고 코드를 추가로 사용자 지정하면 속도를 높일 수 있지만, 이것은 어떤 크기의 대기열도 허용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/* Very simple queue
 * These are FIFO queues which discard the new data when full.
 *
 * Queue is empty when in == out.
 * If in != out, then 
 *  - items are placed into in before incrementing in
 *  - items are removed from out before incrementing out
 * Queue is full when in == (out-1 + QUEUE_SIZE) % QUEUE_SIZE;
 *
 * The queue will hold QUEUE_ELEMENTS number of items before the
 * calls to QueuePut fail.
 */

/* Queue structure */
#define QUEUE_ELEMENTS 100
#define QUEUE_SIZE (QUEUE_ELEMENTS + 1)
int Queue[QUEUE_SIZE];
int QueueIn, QueueOut;

void QueueInit(void)
{
    QueueIn = QueueOut = 0;
}

int QueuePut(int new)
{
    if(QueueIn == (( QueueOut - 1 + QUEUE_SIZE) % QUEUE_SIZE))
    {
        return -1; /* Queue Full*/
    }

    Queue[QueueIn] = new;

    QueueIn = (QueueIn + 1) % QUEUE_SIZE;

    return 0; // No errors
}

int QueueGet(int *old)
{
    if(QueueIn == QueueOut)
    {
        return -1; /* Queue Empty - nothing to get*/
    }

    *old = Queue[QueueOut];

    QueueOut = (QueueOut + 1) % QUEUE_SIZE;

    return 0; // No errors
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연결된 목록을 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;머리와 꼬리에 대한 별도의 포인터를 유지합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;목록의 맨 위에서 튀어나와 꼬리를 밀어 넣습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원형을 원하신다면 새 꼬리가 항상 머리를 가리켜야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;링크드 리스트를 사용하여 FIFO를 구현하려는 이유는 이해할 수 있지만 순환 리스트로 만드는 이유는 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;고정 길이 원형 리스트를 원하시는 경우.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(동적) 배열을 사용할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하우스키핑에는 두 개의 변수를 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하나는 다음 요소의 위치에 사용하고, 하나는 요소의 개수를 세는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Put : 요소를 자유로운 곳에 놓습니다. 위치 이동(modulo length)&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;카운트가 목록의 길이와 일치하지 않는 한 카운트에 1을 더합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Get: only if count &amp;gt; 0. 위치를 왼쪽(modulo length)으로 이동합니다.&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;배열을 사용하고 변수 P를 처음 사용 가능한 위치에 유지합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 원소를 추가할 때마다 P를 늘립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열에서 P의 등가 인덱스를 알아보려면 (P % n)(여기서 n은 배열의 크기입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마이크로컨트롤러에 사용하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드 간소화를 위해 1바이트가 채워지지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일명 size - 1은 실제로 전체 용량입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;fifo_t* createFifoToHeap(size_t size)
{
    byte_t* buffer = (byte_t*)malloc(size);

    if (buffer == NULL)
        return NULL;

    fifo_t* fifo = (fifo_t*)malloc(sizeof(fifo_t));

    if (fifo == NULL)
    {
       free(buffer);
       return NULL;
    }

    fifo-&amp;gt;buffer = buffer;
    fifo-&amp;gt;head = 0;
    fifo-&amp;gt;tail = 0;
    fifo-&amp;gt;size = size;

    return fifo;
}

#define CHECK_FIFO_NULL(fifo) MAC_FUNC(if (fifo == NULL) return 0;)

size_t fifoPushByte(fifo_t* fifo, byte_t byte)
{
    CHECK_FIFO_NULL(fifo);

    if (fifoIsFull(fifo) == true)
       return 0;

    fifo-&amp;gt;buffer[fifo-&amp;gt;head] = byte;

    fifo-&amp;gt;head++;
    if (fifo-&amp;gt;head == fifo-&amp;gt;size)
       fifo-&amp;gt;head = 0;

    return 1;
}

size_t fifoPushBytes(fifo_t* fifo, byte_t* bytes, size_t count)
{
    CHECK_FIFO_NULL(fifo);

    for (uint32_t i = 0; i &amp;lt; count; i++)
    {
        if (fifoPushByte(fifo, bytes[i]) == 0)
            return i;
    }

    return count;
}

size_t fifoPopByte(fifo_t* fifo, byte_t* byte)
{
    CHECK_FIFO_NULL(fifo);

    if (fifoIsEmpty(fifo) == true)
        return 0;

    *byte = fifo-&amp;gt;buffer[fifo-&amp;gt;tail];

    fifo-&amp;gt;tail++;
    if (fifo-&amp;gt;tail == fifo-&amp;gt;size)
        fifo-&amp;gt;tail = 0;

    return 1;
}

size_t fifoPopBytes(fifo_t* fifo, byte_t* bytes, size_t count)
{
    CHECK_FIFO_NULL(fifo);

    for (uint32_t i = 0; i &amp;lt; count; i++)
    {
        if (fifoPopByte(fifo, bytes + i) == 0)
            return i;
    }

    return count;
}

bool fifoIsFull(fifo_t* fifo)
{
    if ((fifo-&amp;gt;head == (fifo-&amp;gt;size - 1) &amp;amp;&amp;amp; fifo-&amp;gt;tail == 0) || (fifo-&amp;gt;head == (fifo-&amp;gt;tail - 1)))
        return true;
    else
        return false;
}

bool fifoIsEmpty(fifo_t* fifo)
{
    if (fifo-&amp;gt;head == fifo-&amp;gt;tail)
        return true;
    else
        return false;
}

size_t fifoBytesFilled(fifo_t* fifo)
{
    if (fifo-&amp;gt;head == fifo-&amp;gt;tail)
        return 0;
    else if ((fifo-&amp;gt;head == (fifo-&amp;gt;size - 1) &amp;amp;&amp;amp; fifo-&amp;gt;tail == 0) || (fifo-&amp;gt;head == (fifo-&amp;gt;tail - 1)))
        return fifo-&amp;gt;size;
    else if (fifo-&amp;gt;head &amp;lt; fifo-&amp;gt;tail)
        return (fifo-&amp;gt;head) + (fifo-&amp;gt;size - fifo-&amp;gt;tail);
    else
        return fifo-&amp;gt;head - fifo-&amp;gt;tail; 
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 대기열이 캐시를 만드는 가장 좋은 방법이라고 생각하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 당신의 캐시가 되기를 원합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;캐시가 매우 작거나 메모리가 매우 제한되지 않는 한 대기열을 선형 스캔하는 것은 바람직한 방법이 아닙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;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;액세스의 경우 직접 가져오거나 O(1)의 캐시에 있는지 확인할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소를 제거하는 것도 O(1)이고 목록을 업데이트하는 것도 마찬가지입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 자바의 LinkedHashMap을 살펴봅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html&quot; rel=&quot;nofollow&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 원형 버퍼(FIFO)를 위한 간단한 템플릿 솔루션이 있습니다.&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;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;string&amp;gt;

using namespace std;

class E: public std::exception {

    const char *_msg;
    E(){}; //no default constructor

public:

    explicit E(const char *msg) throw(): _msg(msg) {};
    const char * what() const throw() {return(_msg);};

};

const int min_size = 2;
const int max_size = 1000;

template&amp;lt;typename T&amp;gt;
class Fifo{

    int _head;
    int _tail;
    int _size;

    T* _storage;

public:

    explicit Fifo(int size = min_size);
    ~Fifo(){ delete [] _storage;};

    bool is_full() const{
        return(((_head+1)%_size) == _tail);
    };
    bool is_empty() const{
        return(_head == _tail);
    };

    void add_item(const T&amp;amp; item);
    const T&amp;amp; get_item();

};

template&amp;lt;typename T&amp;gt;
Fifo&amp;lt;T&amp;gt;::Fifo(int size): _size(size){
    
    if (size &amp;lt; min_size) throw E(&quot;Cannot create Fifo less than 2\n&quot;);

    _head = _tail = 0;

    try{

        _storage = new T[_size];
    }
    catch (std::bad_alloc &amp;amp;ba)
    {
        char e_string[500];
        sprintf(e_string, &quot;Cannot allocate memory (%s)\n&quot;, ba.what());
        throw E(e_string);
    }

    printf(&quot;Constructing Fifo of size %d\n&quot;, _size);

}

template &amp;lt;typename T&amp;gt;
void Fifo&amp;lt;T&amp;gt;::add_item(const T&amp;amp; item)
{
    if (this-&amp;gt;is_full()) throw E(&quot;Fifo is full.\n&quot;);

    _storage[_head] = item;

    _head = (_head + 1)%_size;
}

template &amp;lt;typename T&amp;gt;
const T&amp;amp; Fifo&amp;lt;T&amp;gt;::get_item()
{
    if (this-&amp;gt;is_empty()) throw E(&quot;Fifo is empty.\n&quot;);

    int temp = _tail; //save the current tail

    _tail = (_tail+1)%_size; //update tail

    return(_storage[temp]);
}

int main()
{
    Fifo&amp;lt;int&amp;gt; my_fifo(3);

    for (int i = 1, item; i &amp;lt; 50; i++)
    {
        my_fifo.add_item(i);
        my_fifo.add_item(i*10);
        item = my_fifo.get_item();
        printf(&quot;Item: %d\n&quot;, item);
        item = my_fifo.get_item();
        printf(&quot;Item: %d\n&quot;, item);
    }


    return 0;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;&lt;em&gt;자바&lt;/em&gt;&lt;/strong&gt;를 사용하여 &lt;strong&gt;동적으로 증가/감소하는 순환&lt;/strong&gt; 큐를 만드는 &lt;strong&gt;우아한&lt;/strong&gt; 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드의 대부분을 쉽고 빠르게 이해할 수 있도록 코멘트를 달았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도움이 되길 바랍니다 :)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    public class CircularQueueDemo {
    public static void main(String[] args) throws Exception {

        CircularQueue queue = new CircularQueue(2);
        /* dynamically increasing/decreasing circular queue */
        System.out.println(&quot;--dynamic circular queue--&quot;);
        queue.enQueue(1);
        queue.display();
        queue.enQueue(2);
        queue.display();
        queue.enQueue(3);
        queue.display();
        queue.enQueue(4);
        queue.display();
        queue.deQueue();
        queue.deQueue();
        queue.enQueue(5);
        queue.deQueue();    
        queue.display();

    }
}

class CircularQueue {
    private int[] queue;
    public int front;
    public int rear;
    private int capacity;

    public CircularQueue(int cap) {
        front = -1;
        rear = -1;
        capacity = cap;
        queue = new int[capacity];
    }

    public boolean isEmpty() {
        return (rear == -1);
    }

    public boolean isFull() {
        if ((front == 0 &amp;amp;&amp;amp; rear == capacity - 1) || (front == rear + 1))
            return true;
        else
            return false;
    }

    public void enQueue(int data) { 
        if (isFull()) {            //if queue is full then expand it dynamically   
            reSize();                    
            enQueue(data);
        } else {                                 //else add the data to the queue
            if (rear == -1)                      //if queue is empty
                rear = front = 0;
            else if (rear == capacity)          //else if rear reached the end of array then place rear to start (circular array)
                rear = 0;
            else
                rear++;                         //else just incement the rear 
            queue[rear] = data;                 //add the data to rear position
        }
    }

    public void reSize() {
        int new_capacity = 2 * capacity;                  //create new array of double the prev size
        int[] new_array = new int[new_capacity];          

        int prev_size = getSize();                        //get prev no of elements present
        int i = 0;                                        //place index to starting of new array

        while (prev_size &amp;gt;= 0) {                          //while elements are present in prev queue
            if (i == 0) {                                 //if i==0 place the first element to the array
                new_array[i] = queue[front++];
            } else if (front == capacity) {               //else if front reached the end of array then place rear to start (circular array) 
                front = 0;
                new_array[i] = queue[front++];
            } else                                        //else just increment the array
                new_array[i] = queue[front++];
            prev_size--;                                  //keep decreasing no of element as you add the elements to the new array
            i++;                                          //increase the index of new array
        }
        front = 0;                                        //assign front to 0
        rear = i-1;                                       //assign rear to the last index of added element
        capacity=new_capacity;                            //assign the new capacity
        queue=new_array;                                  //now queue will point to new array (bigger circular array)
    }

    public int getSize() {
        return (capacity - front + rear) % capacity;                  //formula to get no of elements present in circular queue
    }

    public int deQueue() throws Exception {
        if (isEmpty())                                       //if queue is empty
            throw new Exception(&quot;Queue is empty&quot;);
        else {
            int item = queue[front];                        //get item from front
            if (front == rear)                              //if only one element
                front = rear = -1;
            else if (front == capacity)                     //front reached the end of array then place rear to start (circular array)
                front = 0;
            else
                front++;                                    //increment front by one
            decreaseSize();                                 //check if size of the queue can be reduced to half
            return item;                                    //return item from front
        }

    }

    public void decreaseSize(){                           //function to decrement size of circular array dynamically
        int prev_size = getSize();
        if(prev_size&amp;lt;capacity/2){                         //if size is less than half of the capacity
            int[] new_array=new int[capacity/2];          //create new array of half of its size
            int index=front;                              //get front index
            int i=0;                                      //place an index to starting of new array (half the size)
            while(prev_size&amp;gt;=0){                          //while no of elements are present in the queue
                if(i==0)                                  //if index==0 place the first element
                    new_array[i]=queue[front++];
                else if(front==capacity){                 //front reached the end of array then place rear to start (circular array)      
                    front=0;
                    new_array[i]=queue[front++];
                }
                else
                    new_array[i]=queue[front++];         //else just add the element present in index of front
                prev_size--;                             //decrease the no of elements after putting to new array 
                i++;                                     //increase the index of i
            }
            front=0;                                     //assign front to 0
            rear=i-1;                                    //assign rear to index of last element present in new array(queue)
            capacity=capacity/2;                         //assign new capacity (half the size of prev)
            queue=new_array;                             //now queue will point to new array (or new queue)
        }
    }

    public void display() {                           //function to display queue
        int size = getSize();
        int index = front;

        while (size &amp;gt;= 0) {
            if (isEmpty())
                System.out.println(&quot;Empty queue&quot;);
            else if (index == capacity)
                index = 0;
            System.out.print(queue[index++] + &quot;=&amp;gt;&quot;);
            size--;
        }
        System.out.println(&quot;  Capacity: &quot;+capacity);

    }

}
&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;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1=&amp;gt; 용량 : 2&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1=&amp;gt;2=&amp;gt; 용량 : 2&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1=&amp;gt;2=&amp;gt;3=&amp;gt; 용량 : 4&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1=&amp;gt;2=&amp;gt;3=&amp;gt;4=&amp;gt; 용량: 4&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;4=&amp;gt;5=&amp;gt; 용량 : 2&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/215557/how-do-i-implement-a-circular-list-ring-buffer-in-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>c</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/780</guid>
      <comments>https://bestsource.tistory.com/780#entry780comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:51:05 +0900</pubDate>
    </item>
    <item>
      <title>보안 향상을 위해 로컬 호스트에서 MySQL 연결 제한</title>
      <link>https://bestsource.tistory.com/779</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보안 향상을 위해 로컬 호스트에서 MySQL 연결 제한&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 사용자 이름과 비밀번호를 아는 사람이라면 누구나 접근할 수 있다고 들었습니다. 로컬 &lt;em&gt;호스트&lt;/em&gt;만 듣고 있어도 말입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 정보를 가정하면 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;USER: root
PASS: 123456
Host: LOCALHOST (only)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떻게 그곳(현지)에 있는 모든 사람들이 그것에 접근할 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원격 호스트에서 사용자 이름 및 암호로 액세스를 제한하면 누군가가 외부에서 데이터베이스에 액세스할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로컬 호스트 시스템에서 3306(MySQL Default Port)으로만 트래픽을 허용하도록 방화벽을 구성할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;갱신하다&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자가 LOCALHOST를 통해서만 액세스할 수 있도록 설정하려면 다음을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;GRANT ALL PRIVILEGES ON *.* TO db_user @'localhost' IDENTIFIED BY 'db_passwd';
GRANT ALL PRIVILEGES ON *.* TO db_user @'127.0.0.1' IDENTIFIED BY 'db_passwd';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 MySQL 서버를 로컬 주소에 바인딩합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 작업은 다음을 편집하여 수행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[mysqld]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;부분의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;my.cnf&lt;/code&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;[mysqld]
bind-address = 127.0.0.1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;방화벽이나 MySQL 자체 내에서 MySQL에 대한 직접적인 액세스를 차단할 수 있지만, 해킹을 당할 가능성이 가장 높은 방법은 안전하지 않은 웹 응용 프로그램을 통해 공격자가 데이터베이스 로그인을 읽고 서버에서 연결할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 애플리케이션을 안전하게 유지하십시오. 모든 것을 업데이트하고, 파일 업로드를 허용하지 않으며, 계정이 여러 개인 경우 suPHP를 사용하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;mysql 응용 프로그램을 제한하는 경우 다음 단계를 따릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1. 3306번 포트를 막으시면 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사이트가 동일한 서버에 있는 경우에도 localhost를 호스트 이름으로 사용하여 데이터베이스에 액세스할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2.my.cnf 파일의 &quot;[mysqld]&quot; 섹션에 &quot;bind-address = 127.0.0.1&quot;을 추가하면 로컬 호스트에만 액세스할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대부분의 사람들은 이런 종류의 제한을 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 내가 우연히 발견한 오래된 질문이지만, Darkeden에 phpMyAdmin 또는 유사한 기능이 실행되고 있다면 누구나 유효한 MySQL 자격 증명을 사용하여 로그인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;손상된 경우 연결 제한 외에 모든 암호를 변경합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;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;strong&gt;제한한 경우&lt;/strong&gt;(netstat -an | egrep 3306을 사용하여 확인하려면 0.0.0이 아닌 127.0.0.1을 듣고 있는지 확인), &lt;strong&gt;로컬&lt;/strong&gt; 호스트에서 연결을 시작하는 방법만이 액세스할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수행할 초기 단계:&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아마도 교체 시스템을 처음부터 다시 구축하고 공개적으로 접근하기 전에 강화할 것입니다(예: 가능한 것을 사용하여 반복 가능한 조리법을 사용하면 몇 번의 반복 작업을 거쳐야 할 수 있으므로 도움이 될 것입니다.) 평판이 좋은 보안 스캐너로 명백한 구멍이 무엇인지 확인하십시오.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보안 전문가의 도움 받기(달러 또는 시간을 들여서 해결하고 싶은 경우에 따라 다름)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보안 패치 적용,&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필요 없는 서비스를 제거하고,&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터베이스 액세스를 필요한 프로그램에만 제한합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 비밀번호를 다시 설정하고,&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;설치된 루트 키트 및 기타 바이러스를 확인합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만일 당신의 사무실에서 당신의 서버를 보호하고 사회 공학을 다루는 직원을 훈련한다면,&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;들어오는 요청을 모니터링 및 필터링하고 직접 액세스를 거부하는 서비스 사용(예: 클라우드 플레어를 저렴한 시작점으로 사용)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서버에 액세스하는 데 사용되는 모든 컴퓨터에서 키보드 로거(물리적, 소프트웨어 및 기타 바이러스)를 확인합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서버에 액세스할 때 키 입력을 기록하는 물리적인 방법(예: atm에서 사용되는 웹캠 스타일)을 확인하면 소리가 더 이국적입니다(https://en.wikipedia.org/wiki/Acoustic_cryptanalysis), &lt;a href=&quot;https://www.schneier.com/blog/archives/2016/08/keystroke_recog.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;근처&lt;/a&gt;의 wifi 액세스 포인트로 타이핑하면 더 이국적입니다(예:&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;감사 추적을 추가하고 데이터베이스 활동을 모니터링하여 그가 어떻게 통과하고 있는지 파악합니다. 하지만 그렇지 않으면 보안 구멍에서 다른 보안 구멍으로 옮겨갈 것이기 때문에 최소한 모든 명백한 보안 작업을 먼저 수행해야 합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그는 또한 다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;외부에서 액세스할 수 있고 기존 데이터베이스 연결을 통해 임의의 sql 명령을 실행할 수 있는 보안 구멍이 있는 사용자가 실행 중인 일부 프로그램(예: 웹 서버)을 통해 액세스합니다. https://www.w3schools.com/sql/sql_injection.asp 을 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;외부에서 액세스할 수 있는 일부 프로그램을 속여서 localhost:3306(예: 컴퓨터의 잘못 구성된 네트워크 방화벽을 통해)에 대한 연결을 프록시합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로컬 프로그램(bash.mysql 등)을 실행하기 위해 일부 프로그램을 속이고 데이터베이스에 대한 접근 권한을 얻는 것 - 버퍼 오버플로 및 기타 특수하게 조작된 데이터는 임의 코드를 실행하는 데 일반적인 문제입니다.&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;외부에서 자동으로 또는 수동으로 데이터를 처리하는 프로그램의 버그(예: e-메일, postscript/pdf/스크립팅 처리가 포함된 문서) - 텍스트 파일을 보는 것조차 위험할 수 있음 - https://www.proteansec.com/linux/blast-past-executing-code-terminal-emulators-via-escape-sequences/ 참조&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;액세스 권한이 있는 컴퓨터에 하드웨어 장치를 연결하는 데 성공했습니다(작업 주차장에 놓여 있는 &quot;메모리 스틱&quot;을 집어 들고 &quot;프로그래밍 가능한 키보드&quot; 대신 확인하고 모든 컴퓨터가 키보드를 신뢰합니다!).&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 제가 모르는 다른 방법들도 더 많지만, 관련된 방법들은...&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실질적인 보안이 필요하다는 것만 기억하세요. xkcd가 딱 맞는 말이라고 생각합니다. https://xkcd.com/538/&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/13208614/restricting-mysql-connections-from-localhost-to-improve-security&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>mysql</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/779</guid>
      <comments>https://bestsource.tistory.com/779#entry779comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:50:41 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트로 로컬 파일 접근</title>
      <link>https://bestsource.tistory.com/778</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바스크립트로 로컬 파일 접근&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바스크립트로 진행된 로컬 파일 조작이 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Adobe_Integrated_Runtime&quot; rel=&quot;noreferrer&quot;&gt;Adobe AIR&lt;/a&gt;을 필요로 하는 것처럼 설치 공간 없이 달성할 수 있는 솔루션을 찾고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구체적으로는 파일에서 내용을 읽고 그 내용을 다른 파일에 쓰고 싶습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 시점에서 저는 권한을 얻는 것에 대해 걱정하지 않고 이 파일들에 대한 전체 권한을 이미 가지고 있다고 가정하고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML5 기능의 업데이트는 http://www.html5rocks.com/en/tutorials/file/dndfiles/ 에 있습니다.&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;a href=&quot;http://www.html5rocks.com/en/tutorials/file/dndfiles/&quot; rel=&quot;noreferrer&quot;&gt;'로컬' 파일 시스템에서 파일에 접근&lt;/a&gt;하기 위한 몇 가지 인터페이스를 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일 - 개별 파일. 이름, 파일 크기, MIME 유형 및 파일 핸들에 대한 참조와 같은 읽기 전용 정보를 제공합니다.&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;FileList - 파일 개체의 배열과 유사한 시퀀스입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(생각하기)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;input type=&quot;file&quot; multiple&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데스크톱에서 파일 디렉토리를 끌어오기도 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Blob - 파일을 바이트 범위로 자를 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;폴 D를 만나보세요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이하 Wait의 코멘트.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자가 다음을 통해 파일을 선택하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;input type=&quot;file&quot;&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, &lt;a href=&quot;https://www.w3.org/TR/FileAPI/&quot; rel=&quot;noreferrer&quot;&gt;파일 API&lt;/a&gt;를 사용하여 해당 파일을 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications&quot; rel=&quot;noreferrer&quot;&gt;읽고&lt;/a&gt; &lt;a href=&quot;http://www.html5rocks.com/en/tutorials/file/dndfiles/&quot; rel=&quot;noreferrer&quot;&gt;처리&lt;/a&gt;할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&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://en.wikipedia.org/wiki/JavaScript#Security&quot; rel=&quot;noreferrer&quot;&gt;위키백과&lt;/a&gt; -&amp;gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/JavaScript#Security&quot; rel=&quot;noreferrer&quot;&gt; 자바스크립트&lt;/a&gt; -&amp;gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/JavaScript#Security&quot; rel=&quot;noreferrer&quot;&gt; 보안&lt;/a&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JavaScript 및 DOM은 악의적인 작성자가 웹을 통해 클라이언트 컴퓨터에서 실행할 스크립트를 전달할 수 있는 가능성을 제공합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;브라우저 작성자는 두 가지 제한을 사용하여 이 위험을 포함합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫째, 스크립트는 &lt;strong&gt;파일 생성&lt;/strong&gt;과 같은 범용 프로그래밍 작업이 아닌 웹 관련 작업만 수행할 수 있는 샌드박스에서 실행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2016 &lt;strong&gt;업데이트&lt;/strong&gt;: 파일 시스템 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/File_System_API&quot; rel=&quot;noreferrer&quot;&gt;API&lt;/a&gt;를 통해 파일 시스템에 직접 액세스할 수 있습니다. 파일 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/File_System_API&quot; rel=&quot;noreferrer&quot;&gt;시스템&lt;/a&gt; API는 &lt;a href=&quot;http://caniuse.com/#feat=filesystem&quot; rel=&quot;noreferrer&quot;&gt;Chrome과 Opera에서만 지원&lt;/a&gt;되며 &lt;a href=&quot;http://www.html5rocks.com/en/tutorials/file/filesystem/&quot; rel=&quot;noreferrer&quot;&gt;다른 브라우저&lt;/a&gt;(&lt;a href=&quot;https://developer.microsoft.com/en-us/microsoft-edge/platform/status/filewriter/&quot; rel=&quot;noreferrer&quot;&gt;Edge 제외&lt;/a&gt;)에서는&lt;a href=&quot;http://www.html5rocks.com/en/tutorials/file/filesystem/&quot; rel=&quot;noreferrer&quot;&gt; 구현&lt;/a&gt;되지 않을 수 &lt;a href=&quot;http://www.html5rocks.com/en/tutorials/file/filesystem/&quot; rel=&quot;noreferrer&quot;&gt;있습니다&lt;/a&gt;.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자세한 내용은 &lt;a href=&quot;https://stackoverflow.com/questions/371875/local-file-access-with-javascript/38254151#38254151&quot;&gt;케빈의 답변&lt;/a&gt;을 참고하세요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;업데이트&lt;/strong&gt; 이 기능은 Firefox 17 이후로 제거되었습니다(&lt;strong&gt;https://bugzilla.mozilla.org/show_bug.cgi?id=546848)&lt;/strong&gt; 참조).&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파이어폭스에서 당신(프로그래머)은 자바스크립트 파일 내에서 다음과 같은 작업을 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;netscape.security.PrivilegeManager.enablePrivilege(&quot;UniversalBrowserRead&quot;);
netscape.security.PrivilegeManager.enablePrivilege(&quot;UniversalBrowserWrite&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자(브라우저 사용자)에게 액세스를 허용하라는 메시지가 나타납니다. (Firefox의 경우 브라우저를 시작할 때마다 한 번만 이 작업을 수행하면 됩니다.)&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://www.w3.org/TR/FileAPI/&quot;&gt;FileSystem&lt;/a&gt; 및 &lt;a href=&quot;https://www.w3.org/TR/2012/WD-file-system-api-20120417/&quot;&gt;File&lt;/a&gt; API와 &lt;a href=&quot;https://www.w3.org/TR/2012/WD-file-writer-api-20120417/&quot;&gt;FileWriter&lt;/a&gt; API를 사용하여 브라우저 탭/윈도우의 컨텍스트에서 클라이언트 시스템으로 파일을 읽고 쓸 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;FileSystem 및 FileWriter API와 관련된 몇 가지 사항이 있으며, 그 중 일부는 언급되었지만 반복할 가치가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;API의 구현은 현재 Chrome 기반 브라우저(Chrome &amp;amp; Opera)에만 존재합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 API 모두 2014년 4월 24일 W3C 표준 트랙에서 삭제되었으며, 현재 소유하고 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;향후 브라우저 구현에서 (현재 독점적인) API를 제거할 가능성이 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;sandbox&lt;/strong&gt;(파일이 아무런 영향을 미치지 않는 디스크 외부의 위치)는 API로 작성된 파일을 저장하는 데 사용됩니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가상 &lt;strong&gt;파일 시스템&lt;/strong&gt;(브라우저 내에서 액세스할 때와 동일한 형태로 디스크에 반드시 존재하지 않는 디렉토리 구조)이 API로 작성된 파일을 나타냅니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 API가 직간접적으로 어떻게 사용되는지를 보여주는 간단한 예입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;베이크드 &lt;a href=&quot;https://github.com/klawson88/Baked-Goods&quot;&gt;굿즈&lt;/a&gt;*&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일 쓰기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bakedGoods.set({
    data: [{key: &quot;testFile&quot;, value: &quot;Hello world!&quot;, dataFormat: &quot;text/plain&quot;}],
    storageTypes: [&quot;fileSystem&quot;],
    options: {fileSystem:{storageType: Window.PERSISTENT}},
    complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
&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;bakedGoods.get({
        data: [&quot;testFile&quot;],
        storageTypes: [&quot;fileSystem&quot;],
        options: {fileSystem:{storageType: Window.PERSISTENT}},
        complete: function(resultDataObj, byStorageTypeErrorObj){}
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원시 파일, FileWriter 및 FileSystem API 사용&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일 쓰기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function onQuotaRequestSuccess(grantedQuota)
{

    function saveFile(directoryEntry)
    {

        function createFileWriter(fileEntry)
        {

            function write(fileWriter)
            {
                var dataBlob = new Blob([&quot;Hello world!&quot;], {type: &quot;text/plain&quot;});
                fileWriter.write(dataBlob);              
            }

            fileEntry.createWriter(write);
        }

        directoryEntry.getFile(
            &quot;testFile&quot;, 
            {create: true, exclusive: true},
            createFileWriter
        );
    }

    requestFileSystem(Window.PERSISTENT, grantedQuota, saveFile);
}

var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
&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 onQuotaRequestSuccess(grantedQuota)
{

    function getfile(directoryEntry)
    {

        function readFile(fileEntry)
        {

            function read(file)
            {
                var fileReader = new FileReader();

                fileReader.onload = function(){var fileData = fileReader.result};
                fileReader.readAsText(file);             
            }

            fileEntry.file(read);
        }

        directoryEntry.getFile(
            &quot;testFile&quot;, 
            {create: false},
            readFile
        );
    }

    requestFileSystem(Window.PERSISTENT, grantedQuota, getFile);
}

var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;FileSystem과 FileWriter API는 더 이상 표준 트랙에 있지 않지만, 다음과 같은 이유로 사용이 정당화될 수 있다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구현되지 않은 브라우저 공급업체의 관심이 다시 고조되면 바로 이를 활용할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구현(Chromium 기반) 브라우저의 시장 보급률이 높음&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Google(Chrome의 주요 기여자)은 API에 대한 수명 종료 날짜를 지정하지 않았습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 &quot;일부 경우&quot;가 자신의 경우를 포함하는지 여부는 당신이 결정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;*Baked Goods는 바로 여기 있는 이 남자가 유지합니다 :)&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NW.js를 사용하면 일반적으로 브라우저에 있는 모든 보안 제한 없이 자바스크립트를 사용하여 데스크톱 애플리케이션을 만들 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수로 실행 파일을 실행하거나, 파일을 생성/편집/읽기/쓰기/삭제할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 CPU 사용량이나 총 램 사용량 등 하드웨어에 접근할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;설치할 필요가 없는 윈도우, 리눅스 또는 맥 데스크톱 응용프로그램을 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://nwjs.io&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://nwjs.io&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Windows에서 배포하는 경우 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/9bbdkx3k.aspx&quot; rel=&quot;noreferrer&quot;&gt;Windows Script Host&lt;/a&gt;는 파일 시스템 및 기타 로컬 리소스에 매우 유용한 JScript API를 제공합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 WSH 스크립트를 로컬 웹 응용 프로그램에 통합하는 것은 원하는 만큼 우아하지 않을 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같은 입력 필드가 있는 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;file&quot; id=&quot;file&quot; name=&quot;file&quot; onchange=&quot;add(event)&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컨텐츠를 BLOB 형식으로 파일할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function add(event){
  var userFile = document.getElementById('file');
  userFile.src = URL.createObjectURL(event.target.files[0]);
  var data = userFile.src;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://fsojs.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;FSO.js&lt;/a&gt;는 W3C에 의해 표준화되고 있는 새로운 HTML5 FileSystem API를 랩핑하고 로컬 샌드박스된 파일 시스템에서 읽거나, 쓰거나, 이동하는 &lt;em&gt;매우 쉬운&lt;/em&gt; 방법을 제공합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비동기식이므로 파일 I/O가 사용자 경험에 방해가 되지 않습니다.&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;클라이언트의 전체 파일 시스템에 대한 접근, 파일 읽기/쓰기, 폴더의 변경사항 보기, 응용프로그램 시작, 문서 암호화 또는 서명 등이 필요한 경우 JSFS를 살펴보시기 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;AcitveX나 Java 애플릿과 같은 브라우저 플러그인 기술을 사용하지 않고 웹 페이지에서 클라이언트의 컴퓨터 리소스로 안전하고 무제한으로 액세스할 수 있습니다.&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;JSFS를 사용하기 위해서는 Java 및 Java EE 개발(Servlets)에 대한 기본적인 지식이 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JSFS는 여기 https://github.com/jsfsproject/jsfs 에서 찾아주세요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GPL에 따라 무료로 라이센스가 부여됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클라이언트 컴퓨터에서 전체 파일 시스템을 읽고 쓰는 데 사용할 수 있는 (상업용) 제품인 &quot;localFS&quot;가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작은 Windows 앱이 설치되어 있고 페이지에 작은 .js 파일이 포함되어 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보안 기능으로 파일 시스템 액세스는 하나의 폴더로 제한될 수 있으며 비밀 키를 사용하여 보호할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.fathsoft.com/localfs&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://www.fathsoft.com/localfs&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바스크립트 코드가 필요할 수 있는 모든 파일은 사용자가 직접 허용해야 한다고 가정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유명한 브라우저의 제작자들은 일반적으로 자바스크립트가 파일에 접근하지 못하게 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해결책의 주요 아이디어는 자바스크립트 코드가 로컬 URL을 가지고 파일에 접근할 수 없다는 것입니다. 그러나 데이터를 가지고 파일을 사용할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL: 따라서 사용자가 파일을 검색하여 열면, 자바스크립트는 &quot;URL&quot;을 얻는 대신 HTML에서 &quot;DataURL&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;readAsData를 사용하여 파일에 URL 입력&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL 함수 및 FileReader 개체입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출처 및 보다 완벽한 안내서와 좋은 예는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/FileReader?redirectlocale=en-US&amp;amp;redirectslug=DOM%2FFileReader&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://developer.mozilla.org/en-US/docs/Web/API/FileReader?redirectlocale=en-US&amp;amp;redirectslug=DOM%2FFileReader&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아무도 이것에 대해 언급하지 않았기 때문에 나는 이것에 대해 언급하고 있을 뿐입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 파일 시스템을 조작할 수 있는 프로그래밍 언어가 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 프로그래밍 언어는 이러한 작업을 실제로 수행하기 위해 OS 인터럽트에 의존합니다.&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;자바스크립트를 이용하여 파일 시스템에 접근할 수 있는 확실한 방법은 Node.js를 사용하는 것인데, Node.js는 기본 OS와 직접 상호 작용할 수 있는 기능을 가지고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바스크립트에서 새로운 파일시스템 API로 작업해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;window.showSaveFilePicker&lt;/strong&gt; - 사용자 컴퓨터에 파일을 저장할 수 있습니다. 그러면 파일을 읽고 쓸 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;window.showOpenFilePicker&lt;/strong&gt; - 사용자 컴퓨터에서 기존 파일을 열 수 있으며 이 파일을 읽고 쓸 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;window.showDirectoryPicker&lt;/strong&gt; - 디렉토리에 대한 액세스 권한을 제공하고, 디렉토리에 읽고 쓸 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://fjolt.com/article/javascript-new-file-system-api 에서 튜토리얼을 확인합니다.&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;angularjs &amp;amp; aspnet/mvc를 사용하는 경우 json 파일을 검색하려면 웹 구성에서 mime type을 허용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;staticContent&amp;gt;
    &amp;lt;remove fileExtension=&quot;.json&quot; /&amp;gt;
    &amp;lt;mimeMap fileExtension=&quot;.json&quot; mimeType=&quot;application/json&quot; /&amp;gt;
  &amp;lt;/staticContent&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/371875/local-file-access-with-javascript&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>Javascript</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/778</guid>
      <comments>https://bestsource.tistory.com/778#entry778comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:50:34 +0900</pubDate>
    </item>
    <item>
      <title>EVOPdf, WebAPI 및 AngularJS를 사용하여 PDF 생성</title>
      <link>https://bestsource.tistory.com/777</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;EVOPdf, WebAPI 및 AngularJS를 사용하여 PDF 생성&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;WebAPI 컨트롤러&lt;/strong&gt;의 &lt;strong&gt;EVOPdf&lt;/strong&gt;를 사용하여 PDF를 &lt;strong&gt;Angular&lt;/strong&gt;로 렌더링하는 데 문제가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;JS&lt;/strong&gt; app.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지금까지 제 암호입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각도 호출:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var url = 'api/form/build/' + id;

$http.get(url, null, { responseType: 'arraybuffer' })
.success(function (data) {
    var file = new Blob([data], { type: 'application/pdf' });

    if (window.navigator &amp;amp;&amp;amp; window.navigator.msSaveOrOpenBlob) {
        window.navigator.msSaveOrOpenBlob(file);
    }
    else {
        var objectUrl = URL.createObjectURL(file);
    window.open(objectUrl);
    }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;APIC 컨트롤러 방법:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var url = &quot;http://localhost/index.html#/form/build/&quot; + id;

#region PDF Document Setup
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();

htmlToPdfConverter.LicenseKey = &quot;4W9+bn19bn5ue2B+bn1/YH98YHd3d3c=&quot;;
//htmlToPdfConverter.HtmlViewerWidth = 1024; //default
htmlToPdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
htmlToPdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait;
htmlToPdfConverter.ConversionDelay = 3;
htmlToPdfConverter.MediaType = &quot;print&quot;;

htmlToPdfConverter.PdfDocumentOptions.LeftMargin = 10;
htmlToPdfConverter.PdfDocumentOptions.RightMargin = 10;
htmlToPdfConverter.PdfDocumentOptions.TopMargin = 10;
htmlToPdfConverter.PdfDocumentOptions.BottomMargin = 10;
htmlToPdfConverter.PdfDocumentOptions.TopSpacing = 10;
htmlToPdfConverter.PdfDocumentOptions.BottomSpacing = 10;
htmlToPdfConverter.PdfDocumentOptions.ColorSpace = ColorSpace.RGB;

// Set HTML content destination in PDF page
htmlToPdfConverter.PdfDocumentOptions.Width = 640;

htmlToPdfConverter.PdfDocumentOptions.FitWidth = true;
htmlToPdfConverter.PdfDocumentOptions.StretchToFit = true; 
#endregion

byte[] outPdfBuffer = htmlToPdfConverter.ConvertUrl(url);

string outPdfFile = @&quot;c:\temp\forms\&quot; + id + &quot;.pdf&quot;;
System.IO.File.WriteAllBytes(outPdfFile, outPdfBuffer);


HttpResponseMessage result = null;
result = Request.CreateResponse(HttpStatusCode.OK);
result.Content = new ByteArrayContent(outPdfBuffer.ToArray());
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue(&quot;attachment&quot;);
result.Content.Headers.ContentDisposition.FileName = &quot;filename.pdf&quot;;
result.Content.Headers.ContentType = new MediaTypeHeaderValue(&quot;application/pdf&quot;);

return result;
&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;내가 작성한 PDF를 확인할 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WriteAllBytes&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 완벽하게 렌더링되지만 Angular call을 통해 반환되고 Adobe Reader에서 열리면 &lt;em&gt;&quot;Invalid Color Space&quot;&lt;/em&gt; 오류 메시지가 몇 번이나 뜨지만 문서가 열리지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GrayScale로 색공간을 변경하면 PDF가 열리지만 비어있습니다.&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;ByteArrayContent&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변환이 문제를 일으키고 있습니다. PDF를 실제 생성하고 Angular call로 다시 전송하는 사이에 발생하는 유일한 일이지만, 벽에 부딪혀 문제가 무엇인지 알 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 이 문제를 거의 해결하고 있고 전화를 받고 돌아올 때 제대로 &quot;변환&quot;할 수 있는 문서가 필요하기 때문에 여러분이 어떤 도움이라도 주시면 정말 감사하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;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;다음을 사용하여 puppeteer-core npm 패키지 cmd 설치&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm i puppeteer-core&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;yarn add puppeteer-core&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;example.js&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시작하는&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;const puppeteer = require('puppeteer');
(async () =&amp;gt; {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://example.com');
    await page.screenshot({ path: 'example.png' });
          
    await browser.close();
})();
&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;node example.js&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Puppeteer는 초기 페이지 크기를 스크린샷 크기를 정의하는 800x600px로 설정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;페이지 크기는 페이지로 사용자 정의 할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Viewport()를 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예제 - PDF를 만들고 파일을 hn.js로 저장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;const puppeteer = require('puppeteer');
     
(async () =&amp;gt; {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://news.ycombinator.com', {
        waitUntil: 'networkidle2',
    });
    await page.pdf({ path: 'hn.pdf', format: 'a4' });  
    await browser.close();
})();
&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;node hn.js&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;pdffs 생성에 대한 자세한 내용은 페이지.pdf()를 참조하십시오.&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일을 다음으로 저장&lt;/font&gt;&lt;/font&gt;&lt;code&gt;get-dimensions.js&lt;/code&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;const puppeteer = require('puppeteer');
 
(async () =&amp;gt; {
   const browser = await puppeteer.launch();
   const page = await browser.newPage();
   await page.goto('https://example.com');
 
   // Get the &quot;viewport&quot; of the page, as reported by the page.
   const dimensions = await page.evaluate(() =&amp;gt; {
   return {
       width: document.documentElement.clientWidth,
       height: document.documentElement.clientHeight,
       deviceScaleFactor: window.devicePixelRatio,
       };
   });
   console.log('Dimensions:', dimensions);
     
   await browser.close();
})();
&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;node get-dimensions.js&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;봐&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Page.evaluate()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;평가 및 OnNew Document 평가 및 함수 노출과 같은 관련 방법에 대한 자세한 내용을 보려면 를 참조하십시오.&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;a href=&quot;https://stackoverflow.com/questions/51981473/downloaded-pdf-looks-empty-although-it-contains-some-data&quot;&gt;SO 질문&lt;/a&gt;입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://developers.google.com/web/updates/2017/04/headless-chrome&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://semaphoreci.com/blog/2018/03/27/phantomjs-is-dead-use-chrome-headless-in-continuous-integration.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;여기&lt;/a&gt; 이 주제에 대한 좋은 기사가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 위해 https://github.com/puppeteer/puppeteer 을 사용하고 있었는데 쉽게 통합된 솔루션이었습니다.&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/31934297/generate-pdf-using-evopdf-webapi-and-angularjs&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>AngularJS</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/777</guid>
      <comments>https://bestsource.tistory.com/777#entry777comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:50:25 +0900</pubDate>
    </item>
    <item>
      <title>Mysql 8 원격 액세스</title>
      <link>https://bestsource.tistory.com/776</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Mysql 8 원격 액세스&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 보통 원격 접근을 위해 MySQL을 올바르게 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 저는 현재 MySQL 8에 갇혀있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫번째는 mysql.conf.d/mysqld.cnf 상에서 bind-address line이 없어서 손으로 추가(bind-address 0.0.0)하여 '%'에서 사용자에게 접근 권한을 부여했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연결했을 때 &quot;Authentication failed&quot;(인증 실패)라는 메시지가 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 로컬 호스트/커맨드 라인에서는 잘 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;삭제 또는 주석 달기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;bind_address&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매개 변수 from the&lt;/font&gt;&lt;/font&gt;&lt;code&gt;my.ini&lt;/code&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;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(파일명은 OS에 따라 다릅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Linux에서 my.ini는 실제로 /etc/mysql/ 디렉토리에 있는 my.cnf입니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서비스를 다시 시작합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작성.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;root&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자(&lt;strong&gt;예:&lt;/strong&gt; 'root@localhost'(로컬 액세스 전용)이므로 새 &lt;strong&gt;사용자&lt;/strong&gt;):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;CREATE USER 'root'@'%' IDENTIFIED BY '123';&lt;/code&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;p&gt;&lt;code&gt;GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';&lt;/code&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;DBA&lt;/em&gt; 사용자의 경우 추가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WITH GRANT OPTION&lt;/code&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;CREATE USER 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;&lt;/code&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;GRANT와 함께&lt;/strong&gt; CREATE가 작동하지 않기 때문에?&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;MySQL 8&lt;/em&gt;은 더 이상 사용자를 생성할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GRANT&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그래서 에 오류가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;IDENTIFIED BY '123'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 당신이 그것을 사용하려고 한다면.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GRANT&lt;/code&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;MySQL 8의 원격 액세스:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1) 모든 호스트에서 액세스 허용&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address            = 0.0.0.0
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2) 사용자가 어디서나 액세스할 수 있도록 허용:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
UPDATE mysql.user SET host='%' WHERE user='root';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;3) 인증을 암호로 변경&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'ThePassword';
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동일한 문제가 발생하여 MySQL Workbench에 연결하고 User 권한을 업데이트했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 버전 : 8.0.20 커뮤니티&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;OS : 윈도우 10.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL Workbench 열기 --&amp;gt; 서버 --&amp;gt; 사용자 및 권한&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자선택&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;호스트에서 액세스할 때 일치하는 호스트로 제한을 &quot;%&quot;로 변경합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변경사항을적용합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필요한 경우 MySQL 서비스를 다시 시작합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다시 시작하지 않아도 효과가 있었습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스크린샷,&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 8의 경우 mysqld.cnf 파일을 엽니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;bind-address&lt;/strong&gt; 옵션을 수정하거나 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[mysqld]
bind-address = 0.0.0.0
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;mysql&lt;/strong&gt; 서버를 다시 시작합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo service mysql restart
&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/50570592/mysql-8-remote-access&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>mysql</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/776</guid>
      <comments>https://bestsource.tistory.com/776#entry776comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:50:17 +0900</pubDate>
    </item>
    <item>
      <title>scanf를 사용하여 std:: 문자열로 읽습니다.</title>
      <link>https://bestsource.tistory.com/775</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;scanf를 사용하여 std:: 문자열로 읽습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제목 그대로 스캔프로 C++ 문자열을 읽을 수 있는 방법이 있는지 궁금합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 문자를 읽고 해당 문자열에 삽입할 수 있다는 것을 알고 있지만 다음과 같은 것을 원합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string a;
scanf(&quot;%SOMETHING&quot;, &amp;amp;a);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;gets()&lt;/code&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;pre&gt;&lt;code&gt;char tmp[101];
scanf(&quot;%100s&quot;, tmp);
string a = tmp;
&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;gets()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용됩니다!&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하는 것은 &lt;strong&gt;항상&lt;/strong&gt; 잘못된 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gets()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 C11로부터 제거되고 C++14로부터 제거됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;scanf()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C++ 클래스를 지원하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 결과를 저장할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scanf()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::string&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편집자 참고 사항:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/20165954/read-c-string-with-scanf#comment61590562_20166048&quot;&gt;아래&lt;/a&gt; 코드는 댓글로 설명한 것과 같이 잘못된 코드입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정확한 접근 방법은 &lt;a href=&quot;https://stackoverflow.com/questions/20165954/read-c-string-with-scanf#20166003&quot;&gt;파타토&lt;/a&gt;, 톰, &lt;a href=&quot;https://stackoverflow.com/questions/20165954/read-c-string-with-scanf#62504517&quot;&gt;다니엘 트러그먼&lt;/a&gt;의 답변을 참조하십시오.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;std::string str(100, ' ');
if (1 == scanf(&quot;%*s&quot;, &amp;amp;str[0], str.size())) {
    // ...
}
&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;scanf()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 매개변수들이 어떤 순서로 가느냐에 따라 ( 매개변수들이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;str[0]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str.size()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다시 돌려야 하는데 제가 놓쳤을 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.&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;std::string&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;물론이죠, 저는 그냥.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if (std::cin &amp;gt;&amp;gt; str) { ... }&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 그건 다른 질문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제 설명:&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의 기본 버퍼를 채울 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::string&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scanf&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 하지만(!) 관리자가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::string&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;개체는 변경 내용을 인식하지 못합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const char *line=&quot;Daniel 1337&quot;; // The line we're gonna parse

std::string token;
token.reserve(64); // You should always make sure the buffer is big enough

sscanf(line, &quot;%s %*u&quot;, token.data());
std::cout &amp;lt;&amp;lt; &quot;Managed string: '&quot; &amp;lt;&amp;lt; token
          &amp;lt;&amp;lt; &quot; (size = &quot; &amp;lt;&amp;lt; token.size() &amp;lt;&amp;lt; &quot;)&quot; &amp;lt;&amp;lt; std::endl;
std::cout &amp;lt;&amp;lt; &quot;Underlying buffer: &quot; &amp;lt;&amp;lt; token.data()
          &amp;lt;&amp;lt; &quot; (size = &quot; &amp;lt;&amp;lt; strlen(token.data()) &amp;lt;&amp;lt; &quot;)&quot; &amp;lt;&amp;lt; std::endl;
&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;Managed string:  (size = 0)
Underlying buffer: Daniel (size = 6)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 무슨 일이 있었던 거지?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;내보낸 공식 API를 통해 수행되지 않은 변경 사항을 개체가 인식하지 못합니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 버퍼를 통해 개체에 쓸 때 데이터가 변하지만 문자열 개체는 이를 인식하지 못합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원래 호출을 대체할 경우:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;token.reseve(64)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;token.resize(64)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 관리되는 문자열의 크기를 변경하는 호출의 결과는 달라졌을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const char *line=&quot;Daniel 1337&quot;; // The line we're gonna parse

std::string token;
token.resize(64); // You should always make sure the buffer is big enough

sscanf(line, &quot;%s %*u&quot;, token.data());
std::cout &amp;lt;&amp;lt; &quot;Managed string: &quot; &amp;lt;&amp;lt; token
          &amp;lt;&amp;lt; &quot; (size = &quot; &amp;lt;&amp;lt; token.size() &amp;lt;&amp;lt; &quot;)&quot; &amp;lt;&amp;lt; std::endl;
std::cout &amp;lt;&amp;lt; &quot;Underlying buffer: &quot; &amp;lt;&amp;lt; token.data()
          &amp;lt;&amp;lt; &quot; (size = &quot; &amp;lt;&amp;lt; strlen(token.data()) &amp;lt;&amp;lt; &quot;)&quot; &amp;lt;&amp;lt; std::endl;
&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;Managed string: Daniel (size = 64)
Underlying buffer: Daniel (size = 6)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다시 한 번 말하지만 결과는 차선입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출력은 맞지만 사이즈는 맞지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;불러&lt;/font&gt;&lt;/font&gt;&lt;code&gt;resize&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;#define&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최대 길이(이유는 2단계 참조):&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code&gt;std::string buffer;
buffer.resize(MAX_TOKEN_LENGTH);
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;2&quot;&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;scanf&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;width modifier&quot;를 사용하여 스캔한 문자열의 크기를 제한하고 반환 값(반환 값은 스캔한 토큰의 수)을 확인하는 동안:&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code&gt;#define XSTR(__x) STR(__x)
#define STR(__x) #x
...
int rv = scanf(&quot;%&quot; XSTR(MAX_TOKEN_LENGTH) &quot;s&quot;, &amp;amp;buffer[0]);
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안전한 방법으로 관리되는 문자열 크기를 실제 크기로 재설정합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code&gt;buffer.resize(strnlen(buffer.data(), MAX_TOKEN_LENGTH));
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래 토막글이 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string s(100, '\0');
scanf(&quot;%s&quot;, s.c_str());
&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;std::string read_string() {
  std::string s; unsigned int uc; int c;
  // ASCII code of space is 32, and all code less or equal than 32 are invisible.
  // For EOF, a negative, will be large than 32 after unsigned conversion
  while ((uc = (unsigned int)getchar()) &amp;lt;= 32u);
  if (uc &amp;lt; 256u) s.push_back((char)uc);
  while ((c = getchar()) &amp;gt; 32) s.push_back((char)c);
  return s;
}
&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;getchar&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보다 확실히 더 빠릅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scanf&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, &lt;a href=&quot;http://www.cplusplus.com/reference/string/string/reserve/&quot; rel=&quot;nofollow noreferrer&quot;&gt;그리고 std::string::&lt;/a&gt;reserve는 버퍼를 미리 allocate하여 잦은 재할당을 방지할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;적절한 크기의 std:: 문자열을 구성하고 기본 문자 저장소로 읽을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;std::string str(100, ' ');
scanf(&quot;%100s&quot;, &amp;amp;str[0]);
str.resize(strlen(str.c_str()));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;str.resize()에 대한 호출이 중요합니다. 그렇지 않으면 std::string 개체의 길이가 업데이트되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것을 지적해주신 &lt;a href=&quot;https://stackoverflow.com/questions/20165954/read-c-string-with-scanf#62504517&quot;&gt;다니엘 트러그먼씨&lt;/a&gt;께 감사드립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;sup&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(문자열에 예약된 크기와 전달된 너비 간의 순서대로 오류는 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scanf&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 왜냐하면 C++11이기 때문에 std::string의 문자 데이터에 null 터미네이터가 뒤따르는 것이 보장되므로 크기+1 문자를 사용할 수 있습니다.)&lt;/font&gt;&lt;/font&gt;&lt;/sup&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;int n=15; // you are going to scan no more than n symbols
std::string str(n+1); //you can't scan more than string contains minus 1
scanf(&quot;%s&quot;,str.begin()); // scanf only changes content of string like it's array
str=str.c_str() //make string normal, you'll have lots of problems without this string
&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/20165954/read-into-stdstring-using-scanf&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>c</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/775</guid>
      <comments>https://bestsource.tistory.com/775#entry775comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:50:10 +0900</pubDate>
    </item>
    <item>
      <title>C# 기본적으로 1장으로 Excel 워크북 만들기</title>
      <link>https://bestsource.tistory.com/774</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C# 기본적으로 1장으로 Excel 워크북 만들기&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C# COM interop으로 엑셀 파일을 만들려고 하는데 기본적으로 비어있거나 한 장만 있는 대신 3장으로 만드는 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비어있거나 하나만 사용하여 작성하는 데 필요한 내용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Excel.Application xl = null;
Excel._Workbook wb = null;

// Create a new instance of Excel from scratch
xl = new Excel.Application();
xl.Visible = true;     
wb = (Excel._Workbook)(xl.Workbooks.Add(Missing.Value));

wb.SaveAs(@&quot;C:\a.xls&quot;, Excel.XlFileFormat.xlWorkbookNormal,
 null, null, false, false, Excel.XlSaveAsAccessMode.xlShared,
 false, false, null, null, null);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MSDN의 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbooks.add.aspx&quot; rel=&quot;noreferrer&quot;&gt;워크북&lt;/a&gt;에 대한 설명을 살펴보시기 바랍니다&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbooks.add.aspx&quot; rel=&quot;noreferrer&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbooks.add.aspx&quot; rel=&quot;noreferrer&quot;&gt;메서드 추가&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해라&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Workbooks.Add(XlWBATemplate.xlWBATWorksheet)&lt;/code&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;xl.SheetsInNewWorkbook&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;속성을 0 또는 1로 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 이것을 확인했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;using Microsoft.Office.Interop.Excel;
using System.Reflection;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Application xl = null;
            _Workbook wb = null;

            // Option 1
            xl = new Application();
            xl.Visible = true;
            wb = (_Workbook)(xl.Workbooks.Add(XlWBATemplate.xlWBATWorksheet));

            // Option 2
            xl = new Application();
            xl.SheetsInNewWorkbook = 1;
            xl.Visible = true;
            wb = (_Workbook)(xl.Workbooks.Add(Missing.Value));

        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;Excel.Application xl = null;
Excel._Workbook wb = null;

xl = new Excel.Application();
xl.SheetsInNewWorkbook = 1;
xl.Visible = true;

wb = (_Workbook)(xl.Workbooks.Add(Missing.Value));
&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/8066189/c-sharp-create-excel-workbook-with-1-sheet-by-default&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>excel</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/774</guid>
      <comments>https://bestsource.tistory.com/774#entry774comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:50:03 +0900</pubDate>
    </item>
    <item>
      <title>Woocommerce에서 후크를 통해 루프 제품 이미지 사용자 정의</title>
      <link>https://bestsource.tistory.com/773</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Woocommerce에서 후크를 통해 루프 제품 이미지 사용자 정의&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;썸네일 이미지를 루프에 호출/포함하기 위해 이 후크(hook)라고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php do_action('woocommerce_before_shop_loop_item_title'); ?&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;&amp;lt;img src&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 papago-translate=&quot;translated&quot;&gt;그 코드는 어떻게 편집합니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;갈고리&lt;/font&gt;&lt;/font&gt;&lt;code&gt;woocommerce_before_shop_loop_item_title&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 &lt;a href=&quot;https://docs.woocommerce.com/wc-apidocs/source-function-woocommerce_template_loop_product_thumbnail.html#885-893&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;기능 코드&lt;/strong&gt;&lt;/a&gt;에서 이미지를 로드합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if ( ! function_exists( 'woocommerce_template_loop_product_thumbnail' ) ) {

    /**
     * Get the product thumbnail for the loop.
     */
    function woocommerce_template_loop_product_thumbnail() {
        echo woocommerce_get_product_thumbnail(); // WPCS: XSS ok.
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보다시피 &lt;a href=&quot;https://docs.woocommerce.com/wc-apidocs/source-function-woocommerce_template_loop_product_thumbnail.html#922-939&quot; rel=&quot;nofollow noreferrer&quot;&gt;기능&lt;/a&gt;을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if ( ! function_exists( 'woocommerce_get_product_thumbnail' ) ) {

    /**
     * Get the product thumbnail, or the placeholder if not set.
     *
     * @param string $size (default: 'woocommerce_thumbnail').
     * @param int    $deprecated1 Deprecated since WooCommerce 2.0 (default: 0).
     * @param int    $deprecated2 Deprecated since WooCommerce 2.0 (default: 0).
     * @return string
     */
    function woocommerce_get_product_thumbnail( $size = 'woocommerce_thumbnail', $deprecated1 = 0, $deprecated2 = 0 ) {
        global $product;

        $image_size = apply_filters( 'single_product_archive_thumbnail_size', $size );

        return $product ? $product-&amp;gt;get_image( $image_size ) : '';
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 당신의 질문에 답하고 당신의 혼란을 없애주기를 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;루프 제품 이미지 사용자 정의&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 이 기본 기능을 후크에서 제거하여 다음을 사용하여 사용자 정의 기능을 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
add_action( 'woocommerce_before_shop_loop_item_title', 'custom_loop_product_thumbnail', 10 );
function custom_loop_product_thumbnail() {
    global $product;
    $size = 'woocommerce_thumbnail';

    $image_size = apply_filters( 'single_product_archive_thumbnail_size', $size );

    echo $product ? $product-&amp;gt;get_image( $image_size ) : '';
}
&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;활성 하위 테마(또는 활성 테마)의 php 파일입니다.&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;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Loic The Aztec의 답변은 매우 훌륭하지만, 작지만 중대한 오류가 하나 포함되어 있다고 생각합니다.&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;// there is
return $product ? $product-&amp;gt;get_image( $image_size ) : '';
// should be
echo $product ? $product-&amp;gt;get_image( $image_size ) : '';
&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/50773845/customizing-loop-product-image-via-a-hook-in-woocommerce&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>Wordpress</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/773</guid>
      <comments>https://bestsource.tistory.com/773#entry773comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:49:56 +0900</pubDate>
    </item>
    <item>
      <title>소켓 옵션이 리스닝 소켓에서 수락()을 통해 상속됩니까?</title>
      <link>https://bestsource.tistory.com/772</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;소켓 옵션이 리스닝 소켓에서 수락()을 통해 상속됩니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;청취 소켓이 다음과 같이 전달되었다고 가정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;accept&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본값이 아닌 옵션이 설정되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setsockopt&lt;/code&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;대부분의 소켓 옵션은 setsockopt를 사용하여 설정할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참조:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;man setsockopt&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 당신은 어떤 Linux 상에서도 POSIX만을 언급하고 있기 때문에, 일반적으로 당신의 범위로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;accept()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(참조:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;man accept&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;)은 어떤 소켓 옵션을 이어받아야 하는지, 리스닝 fd로부터 어떤 옵션을 거부해야 하는지에 대해 어느 정도의 재량을 가지고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;accept ()는 인수로 전달된 원래 소켓을 수정하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;accept()에서 반환된 새 소켓은 수신 소켓에서 O_NONBLOCK,O_ASYNC와 같은 파일 상태 플래그를 상속하지 않습니다.&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;(Best Practice)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;man page와 기계의 구현 코드가 () 허용 동작과 가장 관련성이 높은 사양이 될 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리눅스의 여러 변종에 공통 사양이나 표준 사양이 존재하지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니요, 꼭 유전되는 것은 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수신 버퍼 크기()를 설정하는 이 샘플을 사용해 보십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SO_RCVBUF&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;TCP 포트 12345에서 수신하는 이 코드를 실행한 다음 다른 프로그램에서 연결합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;errno.h&amp;gt;
#include &amp;lt;netinet/in.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;lt;sys/socket.h&amp;gt;

void die(const char *f)
{
  printf(&quot;%s: %s\n&quot;, f, strerror(errno));
  exit(1);
}

int main(void)
{
  int s = socket(AF_INET, SOCK_STREAM, 0);
  if(s &amp;lt; 0)
    die(&quot;socket&quot;);

  int rcvbuf;
  socklen_t optlen = sizeof(rcvbuf);
  if(getsockopt(s, SOL_SOCKET, SO_RCVBUF, &amp;amp;rcvbuf, &amp;amp;optlen) &amp;lt; 0)
    die(&quot;getsockopt (1)&quot;);
  printf(&quot;initial rcvbuf: %d\n&quot;, rcvbuf);
  rcvbuf *= 2;
  if(setsockopt(s, SOL_SOCKET, SO_RCVBUF, &amp;amp;rcvbuf, sizeof(rcvbuf)) &amp;lt; 0)
    die(&quot;setsockopt&quot;);
  printf(&quot;set rcvbuf to %d\n&quot;, rcvbuf);

  struct sockaddr_in sin;
  memset(&amp;amp;sin, 0, sizeof(sin));
  sin.sin_family = AF_INET;
  sin.sin_port = htons(12345);
  sin.sin_addr.s_addr = INADDR_ANY;
  if(bind(s, (struct sockaddr *)&amp;amp;sin, sizeof(sin)) &amp;lt; 0)
    die(&quot;bind&quot;);

  if(listen(s, 10) &amp;lt; 0)
    die(&quot;listen&quot;);

  struct sockaddr_in client_addr;
  socklen_t addr_len = sizeof(client_addr);
  int s2 = accept(s, (struct sockaddr *)&amp;amp;client_addr, &amp;amp;addr_len);
  if(s2 &amp;lt; 0)
    die(&quot;accept&quot;);
  printf(&quot;accepted connection\n&quot;);
  optlen = sizeof(rcvbuf);
  if(getsockopt(s2, SOL_SOCKET, SO_RCVBUF, &amp;amp;rcvbuf, &amp;amp;optlen) &amp;lt; 0)
    die(&quot;getsockopt (2)&quot;);

  printf(&quot;new rcvbuf: %d\n&quot;, rcvbuf);

  return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Linux 3.0.0-21-generic을 실행하는 시스템의 결과:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;initial rcvbuf: 87380
set rcvbuf to 174760
accepted connection
new rcvbuf: 262142
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;소켓 옵션은 다른 곳에 맞지 않는 것들이 가는 곳입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 소켓 옵션마다 상속 동작이 다를 것으로 예상됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;소켓 옵션 상속 여부는 케이스별로 결정됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 읽은 바로는 POSIX를 준수하는 구현에 대한 답은 아니오입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;POSIX-2017 사양에서 승인():&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;accept() 함수는 보류 중인 연결 대기열에서 첫 번째 연결을 추출하고 지정된 소켓과 동일한 소켓 유형 프로토콜 및 주소 패밀리로 새 소켓을 생성하며 해당 소켓에 대한 새 파일 설명자를 할당합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;명시적으로 &quot;새 소켓&quot;이지 &quot;대기열이 해제된 소켓의 전체 또는 부분 복사본&quot;이 아니므로 해당 소켓 유형 및 주소 패밀리의 기본값과 다른 옵션이 없어야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;복사 동작이 바람직할 수도 있지만, 이는 플랫폼이 가질 수 있는 확장 인터페이스로 남겨집니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 어떤 플랫폼에서도 하나를 구현하는 것을 보지 못했기 때문에 표준에 추가될 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 데이터를 보내거나 받기 위해 해당 소켓을 사용하기 전에 getsockopt()/setsockopt()를 사용하여 인터페이스의 책임이 아닌 큐 소켓에서 반환된 소켓으로 기본값과 다른 속성을 복사할 수 있습니다.&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/5968132/are-socket-options-inherited-across-accept-from-the-listening-socket&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>c</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/772</guid>
      <comments>https://bestsource.tistory.com/772#entry772comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:49:49 +0900</pubDate>
    </item>
    <item>
      <title>VBA 코드 벤치마킹</title>
      <link>https://bestsource.tistory.com/771</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;VBA 코드 벤치마킹&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;VBA 코드를 벤치마킹하는 가장 정확한 방법은 무엇입니까(제 경우 엑셀에서 코드를 테스트하고 있습니다)?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래 2가지 이외에 코드를 벤치마킹하는 다른 기법이 있습니까? 만약 그렇다면 그 방법의 장단점은 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기에 대중적인 두 가지 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫번째: &lt;strong&gt;타이머&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-vb prettyprint-override&quot;&gt;&lt;code&gt;Sub TimerBenchmark()

Dim benchmark As Double
benchmark = Timer

'Do your code here

MsgBox Timer - benchmark

End Sub
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 &lt;strong&gt;Tick&lt;/strong&gt;(가장 정확하다고 주장하는):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Option Explicit
Private Declare Function GetTickCount Lib &quot;kernel32&quot; () As Long

Sub TickBenchmark()

Dim Start As Long
Dim Finish As Long

Start = GetTickCount()

'Do your code here

Finish = GetTickCount()
MsgBox CStr((Finish - Start) / 1000)

End Sub
&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;이것은 http://msdn.microsoft.com/en-us/library/aa730921.aspx#Office2007excelPerf_MakingWorkbooksCalculateFaster 에서 가져온 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;같은 페이지에 Excel 2007의 성능 향상을 위한 몇 가지 유용한 팁도 포함되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Private Declare Function getFrequency Lib &quot;kernel32&quot; _
Alias &quot;QueryPerformanceFrequency&quot; (cyFrequency As Currency) As Long
Private Declare Function getTickCount Lib &quot;kernel32&quot; _
Alias &quot;QueryPerformanceCounter&quot; (cyTickCount As Currency) As Long

Function MicroTimer() As Double

  'Returns seconds.

  Dim cyTicks1 As Currency
  Static cyFrequency As Currency
  MicroTimer = 0

  ' Get frequency.
  If cyFrequency = 0 Then getFrequency cyFrequency

  ' Get ticks.
  getTickCount cyTicks1                            

  ' Seconds
  If cyFrequency Then MicroTimer = cyTicks1 / cyFrequency 
End Function
&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;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;Option Explicit
Public Time As Double
Sub Chrono()
If Time = 0 Then
    Time = Now()
Else
    MsgBox &quot;Total time :&quot; &amp;amp; Application.Text(Now() - _
        Time, &quot;mm:ss&quot;) &amp;amp; &quot;.&quot;  'or whatever if not a msgbox
    Time = 0
End If
End Sub
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 원하는 곳에 코드를 넣을 수 있고 두 번만 호출하면 됩니다(예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;If C_DEBUG Then Call Chrono
&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;하지만 컴퓨터에서 실행 중인 것에 따라서도 달라지기 때문에 진짜 &quot;정확한&quot; 방법은 없다고 생각합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 방법들은 어떤 코드가 다른 코드보다 더 &lt;em&gt;나은지&lt;/em&gt; 알려주는 데 대부분 도움이 될 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 측정값은 잡음이 발생하므로 정밀도를 원하는 경우 측정을 여러 번 반복하고 결과를 평균합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://www.amazon.co.uk/Professional-Excel-Development-Applications-Addison-Wesley/dp/0321508793&quot; rel=&quot;nofollow&quot;&gt;Professional Excel Development&lt;/a&gt;에는 dll 유틸리티가 포함되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PerfMon&lt;/code&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;Ronnie Dickson이 답한 것처럼 쿼리 성능 카운터 기능은 (brettdj가 제안한 것처럼 dll을 사용하고 싶지 않을 때) VBA 코드를 벤치링하는 가장 정확한 방법입니다.&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;Sub TimerBenchmark()

Dim bm As New cBenchmark

'Some code here
bm.Wait 0.0001
bm.TrackByName &quot;Some code&quot;

'Some more (time consuming) code here
bm.Wait 0.04
bm.TrackByName &quot;Bottleneck code&quot;

End Sub
&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;IDnr  Name             Count  Sum of tics  Percentage  Time sum
0     Fast code            1       25.136       5,91%   2,51 ms
1     Bottleneck code      1      400.316      94,09%     40 ms
      TOTAL                2      425.452     100,00%     43 ms

Total time recorded:             43 ms
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클래스는 a를 포함합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Application과 동일한 Wait 기능.&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;a href=&quot;https://github.com/jonadv/VBA-Benchmark&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://github.com/jonadv/VBA-Benchmark&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/7103552/benchmarking-vba-code&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>excel</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/771</guid>
      <comments>https://bestsource.tistory.com/771#entry771comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:49:41 +0900</pubDate>
    </item>
    <item>
      <title>사용자 기본값에 대한 NS코딩으로 사용자 지정 Swift 클래스 저장</title>
      <link>https://bestsource.tistory.com/770</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자 기본값에 대한 NS코딩으로 사용자 지정 Swift 클래스 저장&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 NSUserDefaults에 사용자 지정 Swift 클래스를 저장하려고 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 플레이그라운드의 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import Foundation

class Blog : NSObject, NSCoding {

    var blogName: String?

    override init() {}

    required init(coder aDecoder: NSCoder) {
        if let blogName = aDecoder.decodeObjectForKey(&quot;blogName&quot;) as? String {
            self.blogName = blogName
        }
    }

    func encodeWithCoder(aCoder: NSCoder) {
        if let blogName = self.blogName {
            aCoder.encodeObject(blogName, forKey: &quot;blogName&quot;)
        }
    }

}

var blog = Blog()
blog.blogName = &quot;My Blog&quot;

let ud = NSUserDefaults.standardUserDefaults()    
ud.setObject(blog, forKey: &quot;blog&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;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행이 중단되었습니다. 이유: 신호 SIGABT.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;맨 끝줄에 (&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ud.setObject&lt;/code&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;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;속성 목록의 형식이 잘못되었습니다. 200(속성 목록에는 'CFtype' 유형의 개체를 포함할 수 없습니다.)&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;누가 도와줄 수 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 매버릭에서 Xcode 6.0.1을 사용하고 있습니다.&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;Swift 4 이상에서는 Codable을 사용합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 경우 다음 코드를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class Blog: Codable {
   var blogName: String?
}
&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;var blog = Blog()
blog.blogName = &quot;My Blog&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;if let encoded = try? JSONEncoder().encode(blog) {
    UserDefaults.standard.set(encoded, forKey: &quot;blog&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;if let blogData = UserDefaults.standard.data(forKey: &quot;blog&quot;),
    let blog = try? JSONDecoder().decode(Blog.self, from: blogData) {
}
&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;@objc(Blog)
class Blog : NSObject, NSCoding {
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 개체를 사용자 기본값에 저장하기 전에 개체를 NSData로 인코딩해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ud.setObject(NSKeyedArchiver.archivedDataWithRootObject(blog), forKey: &quot;blog&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;if let data = ud.objectForKey(&quot;blog&quot;) as? NSData {
    let unarc = NSKeyedUnarchiver(forReadingWithData: data)
    unarc.setClass(Blog.self, forClassName: &quot;Blog&quot;)
    let blog = unarc.decodeObjectForKey(&quot;root&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;if let data = ud.objectForKey(&quot;blog&quot;) as? NSData {
    let blog = NSKeyedUnarchiver.unarchiveObjectWithData(data)
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;@dan-beaulieu가 제안한 것처럼, 나는 나 자신의 질문에 답합니다.&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;참고: Playgrounds에서 코드가 작동하는 데 클래스 이름을 디매그링할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import Foundation

class Blog : NSObject, NSCoding {

    var blogName: String?

    override init() {}

    required init(coder aDecoder: NSCoder) {
        if let blogName = aDecoder.decodeObjectForKey(&quot;blogName&quot;) as? String {
            self.blogName = blogName
        }
    }

    func encodeWithCoder(aCoder: NSCoder) {
        if let blogName = self.blogName {
            aCoder.encodeObject(blogName, forKey: &quot;blogName&quot;)
        }
    }

}

let ud = NSUserDefaults.standardUserDefaults()

var blog = Blog()
blog.blogName = &quot;My Blog&quot;

ud.setObject(NSKeyedArchiver.archivedDataWithRootObject(blog), forKey: &quot;blog&quot;)

if let data = ud.objectForKey(&quot;blog&quot;) as? NSData {
    let unarc = NSKeyedUnarchiver(forReadingWithData: data)
    let newBlog = unarc.decodeObjectForKey(&quot;root&quot;) as Blog
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 &lt;strong&gt;Swift&lt;/strong&gt; 4 &amp;amp; &lt;strong&gt;5&lt;/strong&gt;의 완벽한 솔루션이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫째, 헬퍼 메소드를 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UserDefaults&lt;/code&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-swift prettyprint-override&quot;&gt;&lt;code&gt;extension UserDefaults {

    func set&amp;lt;T: Encodable&amp;gt;(encodable: T, forKey key: String) {
        if let data = try? JSONEncoder().encode(encodable) {
            set(data, forKey: key)
        }
    }

    func value&amp;lt;T: Decodable&amp;gt;(_ type: T.Type, forKey key: String) -&amp;gt; T? {
        if let data = object(forKey: key) as? Data,
            let value = try? JSONDecoder().decode(type, from: data) {
            return value
        }
        return nil
    }
}
&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;Dummy&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 개의 기본 필드가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Dummy&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;준수해야 함&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Codable&lt;/code&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-swift prettyprint-override&quot;&gt;&lt;code&gt;struct Dummy: Codable {
    let value1 = &quot;V1&quot;
    let value2 = &quot;V2&quot;
}

// Save
UserDefaults.standard.set(encodable: Dummy(), forKey: &quot;K1&quot;)

// Load
let dummy = UserDefaults.standard.value(Dummy.self, forKey: &quot;K1&quot;)

&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;Swift 2.1&lt;/strong&gt; 및 Xcode 7.1.1로 테스트됨&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;blogName이 선택 사항이 될 필요가 없다면 약간 다른 구현을 권장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class Blog : NSObject, NSCoding {

    var blogName: String

    // designated initializer
    //
    // ensures you'll never create a Blog object without giving it a name
    // unless you would need that for some reason?
    //
    // also : I would not override the init method of NSObject

    init(blogName: String) {
        self.blogName = blogName

        super.init()        // call NSObject's init method
    }

    func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(blogName, forKey: &quot;blogName&quot;)
    }

    required convenience init?(coder aDecoder: NSCoder) {
        // decoding could fail, for example when no Blog was saved before calling decode
        guard let unarchivedBlogName = aDecoder.decodeObjectForKey(&quot;blogName&quot;) as? String
            else {
                // option 1 : return an default Blog
                self.init(blogName: &quot;unnamed&quot;)
                return

                // option 2 : return nil, and handle the error at higher level
        }

        // convenience init must call the designated init
        self.init(blogName: unarchivedBlogName)
    }
}
&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 blog = Blog(blogName: &quot;My Blog&quot;)

    // save
    let ud = NSUserDefaults.standardUserDefaults()
    ud.setObject(NSKeyedArchiver.archivedDataWithRootObject(blog), forKey: &quot;blog&quot;)
    ud.synchronize()

    // restore
    guard let decodedNSData = ud.objectForKey(&quot;blog&quot;) as? NSData,
    let someBlog = NSKeyedUnarchiver.unarchiveObjectWithData(decodedNSData) as? Blog
        else {
            print(&quot;Failed&quot;)
            return
    }

    print(&quot;loaded blog with name : \(someBlog.blogName)&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마지막으로 NSUserDefaults를 사용하는 대신 NSKeyedArchiver를 사용하고 사용자 지정 개체 배열을 파일에 직접 저장하는 것이 더 쉽다는 점을 지적하고자 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그들의 차이점에 대해서는 여기 &lt;a href=&quot;https://stackoverflow.com/a/34710045/1869369&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;Swift 4에는 NS 코딩 프로토콜을 대체하는 새로운 프로토콜이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;라고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Codable&lt;/code&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;struct CustomStruct: Codable {
    let name: String
    let isActive: Bool
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스위프트 3 버전:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class CustomClass: NSObject, NSCoding {

    let name: String
    let isActive: Bool

    init(name: String, isActive: Bool) {
        self.name = name
        self.isActive = isActive
    }

    // MARK: NSCoding

    required convenience init?(coder decoder: NSCoder) {
        guard let name = decoder.decodeObject(forKey: &quot;name&quot;) as? String,
            let isActive = decoder.decodeObject(forKey: &quot;isActive&quot;) as? Bool
            else { return nil }

        self.init(name: name, isActive: isActive)
    }

    func encode(with coder: NSCoder) {
        coder.encode(self.name, forKey: &quot;name&quot;)
        coder.encode(self.isActive, forKey: &quot;isActive&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;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;struct UserDefaults {
    private static let kUserInfo = &quot;kUserInformation&quot;

    var UserInformation: DataUserInformation? {
        get {
            guard let user = NSUserDefaults.standardUserDefaults().objectForKey(UserDefaults.kUserInfo) as? DataUserInformation else {
                return nil
            }
            return user
        }
        set {

            NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: UserDefaults.kUserInfo)
        }
    }
}
&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 userinfo = UserDefaults.UserInformation
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;UserDefaults에 &lt;strong&gt;Custom Objects&lt;/strong&gt;를 저장하는 간단한 예는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GREAT 'CODABLE'의 도움으로 개체를 저장/검색하는 보일러 플레이트 코드를 더 이상 작성할 필요가 없습니다. 이것이 짜증나는 수동 인코딩/디코딩으로부터 보호할 수 있는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 이미 NS Coding을 사용하고 있는 경우 코드에서 아래의 두 가지 방법을 제거하고 Codable(암호화 + 복호화의 결합) 프로토콜로 전환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;required init(coder decoder: NSCoder) // NOT REQUIRED ANY MORE, DECODABLE TAKES CARE OF IT

func encode(with coder: NSCoder) // NOT REQUIRED ANY MORE, ENCODABLE TAKES CARE OF IT
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 Codable의 단순성부터 시작해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;UserDefaults에 저장할 사용자 정의 &lt;strong&gt;클래스&lt;/strong&gt; 또는 &lt;strong&gt;구조물&lt;/strong&gt; 만들기&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-swift prettyprint-override&quot;&gt;&lt;code&gt;struct Person : Codable {
    var name:String
}

OR

class Person : Codable {

    var name:String

    init(name:String) {
        self.name = name
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;개체를 아래와 같이 UserDefaults에 저장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-swift prettyprint-override&quot;&gt;&lt;code&gt; if let encoded = try? JSONEncoder().encode(Person(name: &quot;Dhaval&quot;)) {
     UserDefaults.standard.set(encoded, forKey: &quot;kSavedPerson&quot;)
 }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래와 같이 UserDefaults에서 개체 로드&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-swift prettyprint-override&quot;&gt;&lt;code&gt;guard let savedPersonData = UserDefaults.standard.object(forKey: &quot;kSavedPerson&quot;) as? Data else { return }
guard let savedPerson = try? JSONDecoder().decode(Person.self, from: savedPersonData) else { return }

print(&quot;\n Saved person name : \(savedPerson.name)&quot;)

&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;바로 그겁니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 질문이 오래된 질문이라는 것을 알고 있지만 도움이 될 만한 작은 &lt;a href=&quot;https://github.com/pikaboo/Pref&quot; rel=&quot;nofollow noreferrer&quot;&gt;도서관&lt;/a&gt;을 썼습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;개체를 다음과 같은 방식으로 저장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class MyObject: NSObject, Codable {

var name:String!
var lastName:String!

enum CodingKeys: String, CodingKey {
    case name
    case lastName = &quot;last_name&quot;
   }
}

self.myStoredPref = Pref&amp;lt;MyObject&amp;gt;(prefs:UserDefaults.standard,key:&quot;MyObjectKey&quot;)
let myObject = MyObject()
//... set the object values
self.myStoredPref.set(myObject)
&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 myStoredValue: MyObject = self.myStoredPref.get()
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클래스에 Codable 프로토콜을 구현한 후 PropertyListEncoder를 사용하여 사용자 지정 개체를 UserDefaults에 저장할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자 지정 클래스를 사용자로 설정&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class User: NSObject, Codable {

  var id: Int?
  var name: String?
  var address: String?
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Codable은 Decodable과 Encodable 프로토콜을 모두 구현한다는 것을 의미합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이름에서 알 수 있듯이, Encodable 및 Decodable을 구현함으로써 JSON 또는 Property List와 같은 외부 표현으로 인코딩 및 디코딩할 수 있는 클래스 기능을 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 모델을 속성 목록으로 변환하여 저장할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if let encodedData = try? PropertyListEncoder().encode(userModel){
  UserDefaults.standard.set(encodedData, forKey:&quot;YOUR_KEY&quot;)
  UserDefaults.standard.synchronize();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 PropertyListDecoder를 사용하여 모델을 검색할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 그것을 속성 목록으로 인코딩했기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if let data = UserDefaults.standard.value(forKey:&quot;YOUR_KEY&quot;) as? Data {
     return try? PropertyListDecoder().decode(User.self, from:data)
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;속성 목록에 개체를 직접 저장할 수 없으며 개별 Strings 또는 기타 기본 유형(정수 등)만 저장할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 다음과 같은 개별 문자열로 저장해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   override init() {
   }

   required public init(coder decoder: NSCoder) {
      func decode(obj:AnyObject) -&amp;gt; AnyObject? {
         return decoder.decodeObjectForKey(String(obj))
      }

      self.login = decode(login) as! String
      self.password = decode(password) as! String
      self.firstname = decode(firstname) as! String
      self.surname = decode(surname) as! String
      self.icon = decode(icon) as! UIImage
   }

   public func encodeWithCoder(coder: NSCoder) {
      func encode(obj:AnyObject) {
         coder.encodeObject(obj, forKey:String(obj))
      }

      encode(login)
      encode(password)
      encode(firstname)
      encode(surname)
      encode(icon)
   }
&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/26469457/saving-custom-swift-class-with-nscoding-to-userdefaults&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>swift</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/770</guid>
      <comments>https://bestsource.tistory.com/770#entry770comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:49:33 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 워크벤치와 MAMP PRO를 연결하는 방법은?</title>
      <link>https://bestsource.tistory.com/769</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 워크벤치와 MAMP PRO를 연결하는 방법은?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/MySQL_Workbench&quot; rel=&quot;noreferrer&quot;&gt;MySQL Workbench&lt;/a&gt; 도구를 &lt;a href=&quot;http://en.wikipedia.org/wiki/MAMP&quot; rel=&quot;noreferrer&quot;&gt;MAMP PRO&lt;/a&gt; MySQL 데이터베이스와 연결하기 위한 수정 사항은 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연결 유형을 다음에서 변경합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TCP/IP&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Local&lt;/code&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;/Applications/MAMP/tmp/mysql/mysql.sock&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자 이름과 pw는 root/root일 가능성이 높습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/4256144/407456&quot;&gt;Mike&lt;/a&gt;가 말한 대로 Local 옵션을 사용하여 소켓을 가리킬 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/Applications/MAMP/tmp/mysql/mysql.sock
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 (단말기에서) mysql 소켓에 대한 심볼릭 링크를 생성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 &lt;strong&gt;변경 사항이 영구적&lt;/strong&gt;으로 유지되고 사용자는 mysql에 연결할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysqlcli&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 외부 도구를 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;소켓을 가리키면서 http://www.sequelpro.com/ 을 작동시킬 수 있었습니다. /Applications/MAMP/tmp/mysql/mysql.sock&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;그러나 MySQL 탭에 들어가서 확인하는 것도 발견했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Allow network access to MySQL&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 선택하는 것.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;only from this Mac&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;라디오 버튼 MAMP Pro로 업그레이드하기 전에 표준 MAMP와 함께 사용하던 MySQL Workbench에 저장된 연결을 사용하여 연결할 수 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oCQ8v.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oCQ8v.png&quot; alt=&quot;MAMP Pro MySQL settings for allowing local network access&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 MAMP에서 MAMP Pro로 이동하고 MySQL Workbench에서 이미 연결을 설정한 사람들에게 이 옵션은 Unix 소켓을 사용하여 새 연결을 설정하는 것보다 더 빠릅니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동일한 문제가 발생하여 서버-&amp;gt;MySQL 탭에서 &quot;로컬 액세스만 허용&quot; 확인란을 선택 취소하여 수정했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QuUDX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QuUDX.png&quot; alt=&quot;CONNECTION TO DB with MAMP&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MAMP를 사용하여 DB에 연결합니다. 로컬 연결을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 경우에는 항구가 문제였습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://www.andrewcbancroft.com/2015/01/19/fix-mamp-mysql-workbench-failed-connect-mysql/&quot; rel=&quot;nofollow noreferrer&quot;&gt;여기&lt;/a&gt;서도 잘 설명했지만 MAMP의 기본 mysql 포트는 3306이 아니라 8889입니다. 그러나 MAMP 로컬 호스트 웹 사이트에서는 3306에서 실행 중이라고 표시되어 있습니다.&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;/Applications/MAMP/tmp/mysql/mysql.sock&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 &quot;Apache/MySQL을 사용자로 실행&quot;을 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;www/mysql&lt;/code&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;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/4256144/407456&quot;&gt;Mike의 답변&lt;/a&gt;에 따라 다음과 같은 답변을 받은 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Operation failed: /usr/local/mysql/support-files/mysql.server start is invalid
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/10685584&quot;&gt;여기&lt;/a&gt; 지침을 따릅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 다음 필드에서 &lt;em&gt;/usr/&lt;/em&gt;local/&lt;em&gt;mysql&lt;/em&gt;을&lt;em&gt; /Application/MAMP/Library&lt;/em&gt;로 대체해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 시작:&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 중지:&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 상태 확인:&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 이 연결을 해야 할 때, 나는 위의 Mike가 제안하는 대로 TCP/IP 연결을 소켓과 UN/pw 둘 다 루팅으로 설정했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 workbench는 여전히 이 위치(/etc/my.cnf)에서 cnf 파일을 찾고 있다고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MAMP cnf 파일에서 Workbench가 찾고 있는 위치로 symlink를 만들었습니다. (sudo ln -s/Applications/MAMP/Library/support-files/my.cnf /etc/my.cnf)&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;MySQL이 Apache 또는 nginx 외에 &quot;on&quot;으로 설정되어 있는지 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Servers&lt;/code&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;저 같은 경우는 Apache만 실행 중이었습니다 :)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MAMP 서버는 일반적으로 3306 대신 8889 포트를 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MAMP/SQL 섹션에서 확인하실 수 있습니다.&lt;a href=&quot;https://i.stack.imgur.com/klr8O.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img alt=&quot;enter image description here&quot; src=&quot;https://i.stack.imgur.com/klr8O.png&quot;&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/1391182/how-to-connect-mysql-workbench-with-mamp-pro&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>mysql</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/769</guid>
      <comments>https://bestsource.tistory.com/769#entry769comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:49:21 +0900</pubDate>
    </item>
    <item>
      <title>mariadb REGEXP_INSTR은 괄호를 사용할 때 0 또는 1을 반환합니다.</title>
      <link>https://bestsource.tistory.com/768</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;mariadb REGEXP_INSTR은 괄호를 사용할 때 0 또는 1을 반환합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MariaDB Documentation은 REGEXP_INSTR에 대해 말합니다. 문자열 제목에서 정규식 패턴이 처음 발생한 위치를 반환하거나 패턴을 찾을 수 없는 경우 0을 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 과제는 (간소화) o 뒤에 쌍자음을 찾는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT REGEXP_INSTR('a_kollision', 'o([lm])\\1'); # -&amp;gt; expected 4 got 1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반품은 1번이지만 ol의 위치는 4번으로 예상했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;교체 작업에서도 동일한 작업 수행:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# replace works as expected
SELECT REGEXP_REPLACE('a_kollision', 'o([lm])\\1', '???'); # -&amp;gt; a_k???ision -- OK
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;REGEXP_INSTR에서 브래킷을 사용할 때 문제가 시작되는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT REGEXP_REPLACE('a_kollision', 'oll', '???'); # -&amp;gt; a_k???ision  -- OK
SELECT REGEXP_REPLACE('a_kollision', '(oll)', '???'); # -&amp;gt; a_k???ision  -- OK
SELECT REGEXP_INSTR('a_kollision', 'oll'); # -&amp;gt; 4  -- OK
SELECT REGEXP_INSTR('a_kollision', '(oll)'); # -&amp;gt; 1  -- why?
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일치하는 것이 없으면 REGEXP_INSTR은 예상대로 0을 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용 db : 10.1.13&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최신 안정 버전으로 확인 : 10.2.6 차이 없음&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/44229219/mariadb-regexp-instr-returns-0-or-1-when-using-brackets&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>MariaDB</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/768</guid>
      <comments>https://bestsource.tistory.com/768#entry768comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:49:13 +0900</pubDate>
    </item>
    <item>
      <title>argv 포인터를 글로벌하게 사용해도 안전합니까?</title>
      <link>https://bestsource.tistory.com/767</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;argv 포인터를 글로벌하게 사용해도 안전합니까?&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;argv&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전세계 포인터?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면 무효가 될 수 있는 사정이 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 이 코드는 안전합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char **largs;
void function_1()
{
    printf(&quot;Argument 1: %s\r\n&quot;,largs[1]);
}
int main(int argc,char **argv)
{
    largs = argv;
    function_1();
    return 1;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네, 안전하게 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;argv&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전세계적으로; 당신은 당신이 사용하는 것처럼 그것을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char**&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 프로그램에서.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C99 표준은 다음과 같이 규정하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매개변수들은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;argc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;argv&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 그들이 가리키는 끈들은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;argv&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열은 프로그램에 의해 수정 가능해야 하며, 프로그램 시작과 프로그램 종료 사이에 최종 stored 값을 유지해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C++ 표준에는 유사한 단락이 없지만, 반대되는 규칙이 없는 암묵적인 단락도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C++와 C는 서로 다른 언어이므로 질문할 언어를 선택해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 안전할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수가 종료되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음에 일어날 수 있는 일들의 몇 가지 예.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출구는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전역 변수와 정적 변수의 소멸자&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행 중인 스레드 수가 다음보다 길음&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main()&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저장된&lt;/font&gt;&lt;/font&gt;&lt;code&gt;argv&lt;/code&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;a href=&quot;http://en.cppreference.com/w/cpp/language/main_function&quot; rel=&quot;nofollow noreferrer&quot;&gt;그&lt;/a&gt; 언급은 논쟁의 수명이 다음과 같이 될 것이라고 추측할 이유를 제공하는 어떤 것도 말하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수는 함수 인수의 수명에 대한 일반 규칙과 다릅니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;argv&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;포인터 자체는 유효하며, C/C++ 런타임은 이 포인터가 가리키는 컨텐츠가 유효한지(물론 메모리를 손상시키지 않는 한) 보장해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 포인터와 컨텐츠를 그렇게 길게 사용하는 것이 안전할 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;끝나고&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;를 반환합니다. C/C++ 런타임에서도 콘텐츠를 유효하게 유지할 이유가 없습니다.&lt;/font&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;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;argv 포인터를 전역적으로 사용해도 안전한가요?&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 위해서는 좀 더 명확한 설명이 필요합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;처럼&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C11&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스펙은 §5.1.2.2.1 장에서 &lt;em&gt;프로그램&lt;/em&gt; 시작을 말합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;[......]... 두 개의 매개 변수(여기까지 referred:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;argc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;argv&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 어떤 이름이라도 사용할 수 있지만, 이 이름들은 선언된 함수에 로컬이기 때문입니다.)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 변수 자체의 &lt;strong&gt;범위&lt;/strong&gt;는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 그들은 그 자체로 &lt;em&gt;글로벌하지&lt;/em&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;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매개변수들은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;argc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;argv&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;argv 배열에 의해 지시된 문자열은 프로그램에 의해 수정 가능해야 하며, 프로그램 시작과 프로그램 종료 사이에 마지막 stored 값을 유지해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 이 변수들의 &lt;strong&gt;수명은&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행을 마칩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 전역 변수를 사용하여 다음 값을 유지하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 다른 함수에서 동일한 글로벌에 안전하게 액세스할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;comp.lang.c.moderated newsgroup에 &lt;a href=&quot;https://groups.google.com/d/msg/comp.lang.c.moderated/9SKuNy-PY-4/lOog2mA0L4EJ&quot; rel=&quot;noreferrer&quot;&gt;있는&lt;/a&gt; 이 스레드는 (주소를 취한 경우 argv 포인터 자체가 아닌) argv 배열의 내용을 보여주는 인용문을 포함하여 C 표준 관점에서 이 문제를 자세히 설명합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;argv&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(프로그램 종료)까지 지속되며, atexit-registered functions가 실행되는 동안 프로그램 종료가 아직 이와 관련된 방식으로 발생하지 않은 것은 &quot;obvious&quot;라는 주장이 저장되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출구 등록 기능 처리 중 프로그램이 종료되지 않았습니다.&lt;/font&gt;&lt;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;(나는 더글라스 A가 누군지 확실하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그윈은 그렇지만, &quot;우리&quot;가 C 표준 위원회를 의미하는 것처럼 들립니까?)&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;argv[0]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(프로그램 이름).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;관련된 C 표준 텍스트는 5.1.2.2.1입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매개 변수 argc 및 argv와 argv 배열이 가리키는 문자열은 프로그램에 의해 수정 가능해야 하며, 프로그램 시작과 프로그램 종료 사이에 마지막으로 저장된 값을 유지해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론 C++는 C가 아니며, C++는 이 문제에 대해 기준이 미묘하게 다를 수도 있고, 이 문제를 해결하지 못할 수도 있습니다.&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;global variables&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 당신이 돌아오지 않는 한&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 그것들을 처리하려고 노력합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;atexit&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전역 범위에서 핸들러 또는 변수의 파괴자는 여전히 존재하며 어떤 범위에서든 액세스할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네, 메인이 끝난 후에 스레드가 없기 때문에 에테르 C 또는 C++에 안전합니다.&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/31605132/is-it-safe-to-use-the-argv-pointer-globally&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>c</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/767</guid>
      <comments>https://bestsource.tistory.com/767#entry767comment</comments>
      <pubDate>Sun, 5 Nov 2023 14:49:07 +0900</pubDate>
    </item>
    <item>
      <title>Woocommerce 3 전용 주문 제작 후크</title>
      <link>https://bestsource.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;Woocommerce 3 전용 주문 제작 후크&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;새로운 WooCommerce 주문이 성공적으로 작성되고 '프로세싱'으로 설정된 시점을 감지해야 합니다. 이는 추가 기능 등을 추가하기 위함입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;WooCommerce를 통해 주문이 생성될 때 쉽게 연결할 수 있으므로 프론트엔드에서 이 작업을 수행하는 것이 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;woocommerce_thankyou&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;woocommerce_order_status_processing&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;갈고리에 갈고리&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 &lt;strong papago-id=&quot;4-1&quot;&gt;웹사이트 백엔드를 통해 수동&lt;/strong&gt;으로 새로운 &lt;strong papago-id=&quot;4-1&quot;&gt;주문을 작성할 때도 이것이 작동하기를 원한다는&lt;/strong&gt; 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;주문을 생성할 때 주문을 조작하기 위해 사용하는 수동으로 주문을 추가할 때 몇 가지 사용자 정의 필드를 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;불행하게도, 비록&lt;/font&gt;&lt;/font&gt;&lt;code&gt;woocommerce_order_status_processing&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;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결하기 위해, 저는 &lt;a href=&quot;https://stackoverflow.com/questions/44522910/woocommerce-hook-for-order-creation-from-admin&quot; papago-id=&quot;6-1&quot;&gt;관리자로부터의 주문 작성을 위한 WooCommerce hook&lt;/a&gt; 또는 WordPress hook을 사용하는 이 &lt;a href=&quot;https://github.com/woocommerce/woocommerce/issues/11967#issuecomment-249811534&quot; papago-id=&quot;6-3&quot; rel=&quot;noreferrer&quot;&gt;GitHub&lt;/a&gt; 스레드에 대한 제안을 시도했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wp_insert_post&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;save_post_shop_order&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;save_post_{$post-&amp;gt;post_type}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;). 이것은 주문 메타가 저장된 후에 트리거 되는 것처럼 보이기 때문에 내 주문 메타 문제를 해결하는 데 도움이 됩니다.&lt;/font&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;em papago-id=&quot;10-0&quot;&gt;그러나&lt;/em&gt; — 업데이트 또는 새 게시물이 있을 &lt;strong papago-id=&quot;10-2&quot;&gt;때&lt;/strong&gt;마다 트리거되므로 새 게시물인지 여부를 탐지할 수 있는 방법을 찾아야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$update&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;em papago-id=&quot;11-1&quot;&gt;'기존 게시물이 업데이트되고 있는지 여부'&lt;/em&gt;를 표시하기 위한 것이지만, 어떤 이유로 인해 새로운 게시/주문인 경우에도 항상 true로 설정되는 것으로 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요약하자면:&lt;/font&gt;&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;13&quot; papago-translate=&quot;translated&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;/li&gt; 
&lt;/ul&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://wordpress.stackexchange.com/a/177670/63134&quot; papago-id=&quot;14-1&quot;&gt;제안&lt;/a&gt;에 따라 하는 것이지만 나는 단지 이것을 하는 더 나은 방법이 있을 것이라고 생각했습니다!&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;15&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_order_created ( $post_id, $post, $update ) {

    // Don’t run if $post_id doesn’t exist OR post type is not order OR update is true
    if ( ! $post_id || get_post_type( $post_id ) != 'shop_order' || $update == 1 ) {
        return;
    }

    $order = wc_get_order( $post_id );

    if ( $order &amp;amp;&amp;amp; $order-&amp;gt;has_status( 'processing' ) ){

        // Do something

    }    

}

add_action( 'wp_insert_post', 'my_order_created', 10, 3 );
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용가능&lt;/font&gt;&lt;/font&gt;&lt;code&gt;woocommerce_new_order&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;add_action('woocommerce_new_order', function ($order_id) {
     // your code
}, 10, 1);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트 2023&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/woocommerce/woocommerce/wiki/CRUD-Objects-in-3.0&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;19-1&quot;&gt;CRUD 메소드와 데이터 스토어&lt;/a&gt;를 구현한 WooCommerce 3이므로 &lt;strong papago-id=&quot;19-7&quot;&gt;주문 작성&lt;/strong&gt;에 &lt;strong papago-id=&quot;19-5&quot;&gt;특별히&lt;/strong&gt; 사용할 수 있는 &lt;strong papago-id=&quot;19-3&quot;&gt;전용 후크&lt;/strong&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;woocommerce_new_order&lt;/code&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(메소드에&lt;a href=&quot;https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/includes/data-stores/class-wc-order-data-store-cpt.php#L93-L171&quot; papago-id=&quot;21-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code papago-id=&quot;21-2-2&quot;&gt;create()&lt;/code&gt;&lt;/a&gt; 위치한) 주문 작성 시 사용자 지정 코드를 트리거할 수 있는 &lt;strong papago-id=&quot;21-0&quot;&gt;액션 후크&lt;/strong&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_action('woocommerce_new_order', 'action_woocommerce_new_order', 10, 2);
function action_woocommerce_new_order( $order_id, $order ) {
     // Here your custom action code
} 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;woocommerce_new_order_data&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;strong papago-id=&quot;23-2&quot;&gt;필터링할&lt;/strong&gt; 수 있는 &lt;strong papago-id=&quot;23-0&quot;&gt;필터 후크&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wp_insert_post()&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;a href=&quot;https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/includes/data-stores/abstract-wc-order-data-store-cpt.php#L69-L107&quot; papago-id=&quot;24-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code papago-id=&quot;24-1-2&quot;&gt;create()&lt;/code&gt;&lt;/a&gt; 위치)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_filter('woocommerce_new_order_data', 'action_woocommerce_new_order_data', 10, 2);
function action_woocommerce_new_order( $data_arr, $wp_error ) {
     // Here your custom code to filter data

     // Always return the main argument
     return $data_arr;
} 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 단지 &lt;strong papago-id=&quot;25-3&quot;&gt;우커머스&lt;/strong&gt; 주문 제작을 위한 &lt;strong papago-id=&quot;25-3&quot;&gt;것&lt;/strong&gt;이기 때문에 훨씬 더 &lt;strong papago-id=&quot;25-1&quot;&gt;나은&lt;/strong&gt; 옵션입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/52094274/hooks-for-order-creation-exclusively-in-woocommerce-3&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>Wordpress</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/766</guid>
      <comments>https://bestsource.tistory.com/766#entry766comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:27:36 +0900</pubDate>
    </item>
    <item>
      <title>웹 브라우저 제어 기능이 있는 Excel 사용자 지정 작업 창 - 키보드/초점 문제</title>
      <link>https://bestsource.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;웹 브라우저 제어 기능이 있는 Excel 사용자 지정 작업 창 - 키보드/초점 문제&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 정확한 문제를 가지고 있습니다 https://social.msdn.microsoft.com/Forums/vstudio/en-US/e417e686-032c-4324-b778-fef66c7687cd/excel-customtaskpane-with-webbrowser-control-keyboardfocus-issues?forum=vsto .&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;여기 https://connect.microsoft.com/VisualStudio/feedback/details/521465/the-focus-issue-between-excel-cells-and-excel-customtaskpane-with-webbrowser-control 에도 언급됩니다.&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;Visual Studio Professional 2013을 사용하여 Excel 2010 플러그인을 작성하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템으로 간단한 사용자 지정 작업 창을 만들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;창문들.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;양식. 웹브라우저 자식이 파일을 작성하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;플러그인은 정상적으로 작동하고 나는 클릭하여 체크박스의 상태를 변경함으로써 웹 브라우저 내부를 탐색할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/P2VmV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 텍스트 상자를 클릭하면 포커스가 표시되고 커서가 깜박이지만 입력을 시작하면 텍스트가 Excel로 전송되어 브라우저 내 텍스트 상자 대신 셀에 기록됩니다.&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;private void Ribbon_Load(object sender, RibbonUIEventArgs e)
{
  TaskPaneView taskPaneView = new TaskPaneView();
  Microsoft.Office.Tools.CustomTaskPane myTaskPane = Globals.ThisAddIn.CustomTaskPanes.Add(taskPaneView, &quot;Title&quot;);
  myTaskPane.Visible = true;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 상자를 클릭하면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;F6&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;올바르게 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 지정 작업영역 헤더가 약간 어두워지고 텍스트가 텍스트 상자에 캡처됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 텍스트 상자를 클릭하면 엑셀 대신 텍스트가 상자에 들어가도록 하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;9-0&quot;&gt;편집: 네, 테스트를 좀 더 해봤습니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마우스를 추적하기 위해 TaskPaneView(태스크 창 보기)에 이벤트를 추가하면 를 입력하고 클릭하지만 웹 브라우저 자식을 제거하는 경우에만 작동합니다.&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;포커스 방법을 웹 브라우저에서 직접 호출하면 TaskPaneView는 포커스가 있고 모든 것이 완벽하게 작동한다는 것을 이해합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 문제는 키보드에 있는 것이 아니라 브라우저를 클릭하면 키 입력이 잘못된 영역으로 이동하도록 작업 창 보기에 포커스가 있다는 메시지가 표시되지 않는 문제가 분명합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;TaskPaneView(태스크 창 보기)에 초점을 맞출 수 있는 방법을 찾을 수 있다면 모든 작업에 초점을 맞출 수 있습니다.&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;protected override void WndProc(ref Message m)
{
  const int WM_PARENTNOTIFY = 528;
  if(m.Msg == WM_PARENTNOTIFY &amp;amp;&amp;amp; !this.Focused)
  {
    this.Focus();
  }
  base.WndProc(ref m);
}
&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;이 기능을 웹 브라우저 자식이 있는 사용자 제어 기능인 TaskPaneView에 추가했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이것이 왜 또는 어떻게 작동하는지에 대한 깊은 이해는 없지만, 기본적으로 나는 윈도우로 전송된 메시지를 처리하는 하위 기능인 WndProc를 가로채고 있다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메시지가 528인지 확인하기 위해 사용하는데, 이는 부모님께 알리라는 뜻인 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 정확히 어떤 메시지를 들어야 하는지는 모르겠지만, 효과가 있는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;올바른 메시지 메시지가 나타나면 작업 창 보기에 포커스가 있는지 확인하고 그렇지 않은 경우에는 포커스를 표시합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;focus()&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 class=&quot;papago-parent&quot;&gt;제가 아까 테스트를 해봤는데 수동으로 호출을 했는지 보여줬습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;focus&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업 창에서 모든 것이 정상적으로 작동했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 만약 내가 포커스가 없다면 수동으로 포커스를 요청하면 우리는 다 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 더 잘 이해할 수 있도록 이것이 작동하는 이유에 대해 누군가가 좀 더 자세한 설명을 해주면 고맙겠지만, 적어도 문제는 해결했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Jeremy Thompson&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;strong papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Q: 이 기능이 작동하는 이유에 대해 보다 자세히 설명하여 이해할 수 있도록 합니다.&lt;/font&gt;&lt;/strong&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;근본 원인 분석을 수행하려면 해당 528 메시지가 어디로 전송되는지 확인해야 하며 이를 위해 Microsoft Excel 소스 코드가 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제를 해결하거나 버그이기 때문에 왜 이런 일이 발생하는지 알아내는 데 더 이상 시간을 쓸 가치가 없다고 생각합니다. 마이크로소프트가 이 문제를 해결하는 데 도움이 되도록 커넥트 버그를 기록하는 것이 최선의 방법입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 그 문제를 해결할 수 밖에 없어요, 그들의 소스 코드에 문제가 있어요.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;VSTO에서 버그를 확인할 수 있는 시나리오를 찾을 수 있는 경우는 거의 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 사용자가 텍스트 입력을 Add-In 텍스트 상자에 입력하면 메시지가 워크시트의 셀에 흘러들어갑니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 상황에서; 메시지가 전송되지 않은 곳에서&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Calendars_SelectedChange()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트. 한스가 잘 설명하는 행동에 대한 약간의 주제가 여기서 형성되는 것을 볼 수 있습니다. (제&lt;em papago-id=&quot;21-1&quot;&gt; 코멘트에서 연결한 Q&amp;amp;A의 인용)&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제가 되지 않는 것은(흔히 문제가 될 수 있음) Excel의 메시지 펌프를 사용하여 Windows 메시지를 발송하는 것입니다. 이 메시지는 이러한 제어 장치가 입력에 응답하도록 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF에서도 WPF와 마찬가지로 잘못된 것입니다. WPF에도 메시지가 윈도우에 전달되기 전에 필터링하는 자체 디스패치 루프가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각자의 디스패처를 사용하지 않을 때 문제가 되는 핵심 사항은 &lt;strong papago-id=&quot;22-1&quot;&gt;바로 가기&lt;/strong&gt; 키 &lt;strong papago-id=&quot;22-1&quot;&gt;누르기와 같은 것들&lt;/strong&gt;입니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 엑셀이 메시지를 보내기 전에 자체 필터링을 함으로써 이런 문제가 발생할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;악성 소프트웨어 방지 기능을 생각해보면, 마이크로소프트는 오피스 앱을 엉망으로 만드는 프로그램에 대해 영원히 걱정하고 있을 것입니다.&lt;/font&gt;&lt;/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;a href=&quot;http://blogs.msdn.com/b/vsod/archive/2009/12/16/excel-2007-wpf-events-are-not-fired-for-items-that-overlap-excel-ui-for-wpf-context-menus.aspx&quot; papago-id=&quot;24-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;VSTO WPF Connect의 경우 메뉴가 클릭 이벤트를 수신&lt;/a&gt;하지 않는 &lt;a href=&quot;http://blogs.msdn.com/b/vsod/archive/2009/12/16/excel-2007-wpf-events-are-not-fired-for-items-that-overlap-excel-ui-for-wpf-context-menus.aspx&quot; papago-id=&quot;24-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;것&lt;/a&gt;을 잊지 마십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 해결 방법에는 DispatcherFrame을 사용하여 메시지를 펌핑하고 &lt;strong papago-id=&quot;24-3&quot;&gt;GotFocusEvent&lt;/strong&gt; 및 &lt;strong papago-id=&quot;24-3&quot;&gt;LostFocusEvent 메뉴&lt;/strong&gt;에 가입하는 방법이 포함되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 버그는 입력에 반응하는 제어 장치와 관련이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;void WndProc(ref Message m)&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;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/30948205/excel-customtaskpane-with-webbrowser-control-keyboard-focus-issues&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>excel</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/765</guid>
      <comments>https://bestsource.tistory.com/765#entry765comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:27:29 +0900</pubDate>
    </item>
    <item>
      <title>그래픽 드라이버 &amp;quot;헬로 월드&amp;quot; 예시?</title>
      <link>https://bestsource.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;그래픽 드라이버 &quot;헬로 월드&quot; 예시?&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;문&lt;/b&gt; 닫았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문은 더 많아야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;/help/closed-questions&quot; papago-id=&quot;1-3&quot;&gt;집중력&lt;/a&gt;이 있는&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 답변을 받지 않고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;hr class=&quot;my12 outline-none baw0 bb bc-powder-400&quot;&gt; 
  &lt;div class=&quot;fw-nowrap fc-black-600&quot;&gt; 
   &lt;div class=&quot;d-flex fd-column lh-md&quot;&gt; 
    &lt;div class=&quot;mb0 d-flex&quot;&gt; 
     &lt;div class=&quot;flex--item mr8&quot;&gt; 
      &lt;svg aria-hidden=&quot;true&quot; class=&quot;svg-icon iconLightbulb&quot; width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 18 18&quot;&gt;
       &lt;path d=&quot;M15 6.38A6.48 6.48 0 0 0 7.78.04h-.02A6.49 6.49 0 0 0 2.05 5.6a6.31 6.31 0 0 0 2.39 5.75c.49.39.76.93.76 1.5v.24c0 1.07.89 1.9 1.92 1.9h2.75c1.04 0 1.92-.83 1.92-1.9v-.2c0-.6.26-1.15.7-1.48A6.32 6.32 0 0 0 15 6.37ZM4.03 5.85A4.49 4.49 0 0 1 8 2.02a4.48 4.48 0 0 1 5 4.36 4.3 4.3 0 0 1-1.72 3.44c-.98.74-1.5 1.9-1.5 3.08v.1H7.2v-.14c0-1.23-.6-2.34-1.53-3.07a4.32 4.32 0 0 1-1.64-3.94ZM10 18a1 1 0 0 0 0-2H7a1 1 0 1 0 0 2h3Z&quot;&gt;&lt;/path&gt;
      &lt;/svg&gt; 
     &lt;/div&gt; 
     &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;2-0&quot;&gt;이 질문을 개선하고 싶으십니까?&lt;/b&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;/posts/27812098/edit&quot; papago-id=&quot;2-2&quot;&gt;이 게시물을 편집&lt;/a&gt;하여 한 가지 문제에만 초점을 맞추도록 질문을 업데이트합니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;mb0 mt6 d-flex&quot;&gt; 
     &lt;p class=&quot;ml24 pl2&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;3-1&quot; title=&quot;2015-02-25 14:51:48Z&quot; papago-attr-id=&quot;1&quot;&gt;8년 전&lt;/span&gt;에 문을 닫았습니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;ml24 pl2&quot;&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;mt24 d-flex gsx gs8&quot;&gt; 
   &lt;a class=&quot;s-btn s-btn__outlined flex--item js-post-notice-edit-post&quot; href=&quot;/posts/27812098/edit&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문을 개선합니다.&lt;/font&gt;&lt;/a&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디스플레이에서 픽셀을 렌더링하는 GPU 드라이버를 만드는 데 필요한 단계는 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 화면을 빨간색으로 만들거나 픽셀 하나만 보여주는 것과 같은 GPU 드라이버를 만드는 가장 간단한 &quot;헬로 월드&quot; 예입니다.&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;저는 C나 OpenGL 추상화나 그 어떤 것도 하지 않고 직접 GPU를 직접 해킹하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mac OSX를 사용하고 있는데 Intel HD i7 그래픽 카드가 있는 것 같아서 이 &lt;a href=&quot;http://renderingpipeline.com/graphics-literature/low-level-gpu-documentation/&quot; papago-id=&quot;6-1&quot;&gt;문서들&lt;/a&gt;이 잘 맞는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://files.renderingpipeline.com/gpudocs/intel/hd/IHD_OS_Vol1_Part1r2.pdf&quot; papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1권 1부: 그래픽스 코어&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://files.renderingpipeline.com/gpudocs/intel/hd/IHD_OS_Vol1_Part2r2.pdf&quot; papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1권 2부 그래픽스 코어 – MMIO, 미디어 레지스터 및 프로그래밍 환경&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://files.renderingpipeline.com/gpudocs/intel/hd/IHD_OS_Vol1_Part3r2.pdf&quot; papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Volume 1 Part 3: 그래픽스 코어 – 메모리 인터페이스 및 명령어 렌더 엔진&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://files.renderingpipeline.com/gpudocs/intel/hd/IHD_OS_Vol1_Part4r2.pdf&quot; papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1권 4부 그래픽스 코어 – 비디오 코덱 엔진&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://files.renderingpipeline.com/gpudocs/intel/hd/IHD_OS_Vol1_Part5r2.pdf&quot; papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1권 5부 그래픽스 코어 – 블리터 엔진&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://files.renderingpipeline.com/gpudocs/intel/hd/IHD_OS_Vol2_Part1r2.pdf&quot; papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2권 1부: 3D/미디어 – 3D 파이프라인&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://files.renderingpipeline.com/gpudocs/intel/hd/IHD_OS_Vol2_Part2r2.pdf&quot; papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2권 2부: 3D/미디어 – 미디어&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://files.renderingpipeline.com/gpudocs/intel/hd/IHD_OS_Vol3_Part1r2.pdf&quot; papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제3권 제1부 : 디스플레이 레지스터 – VGA 레지스터&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://files.renderingpipeline.com/gpudocs/intel/hd/IHD_OS_Vol3_Part2r2.pdf&quot; papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제3권 제2부: 디스플레이 레지스터 – CPU 레지스터&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://files.renderingpipeline.com/gpudocs/intel/hd/IHD_OS_Vol3_Part3r2.pdf&quot; papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제3권 제3부: PCH 디스플레이 레지스터&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://files.renderingpipeline.com/gpudocs/intel/hd/IHD_OS_Vol4_Part1r2.pdf&quot; papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;4권 1부: 서브시스템과 코어 – 공유 기능&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://files.renderingpipeline.com/gpudocs/intel/hd/IHD_OS_Vol4_Part2_July_28_10.pdf&quot; papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Volume 4 Part 2: 서브시스템과 코어 – Message Gateway, URB, Video Motion, IS&lt;/font&gt;&lt;/a&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;메사3D 프로젝트는 수많은 오픈소스 그래픽 드라이버가 있다고 말하고 위키피디아는 인텔이 이러한 문서를 제작하여 원하는 경우 오픈소스 드라이버를 작성할 수 있지만 방법에 대해서는 설명하지 않는다고 말합니다.&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;a href=&quot;https://github.com/jagregory/abrash-black-book&quot; papago-id=&quot;20-1&quot;&gt;마이클 에이브래쉬의 그래픽스 프로그래밍 블랙북&lt;/a&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;그리고 &quot;헬로 월드&quot; 프로젝트인 GPU 드라이버에 대한 해킹을 시작하는 방법에 대한 정보는 없는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어,&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조립을 배우려면, 당신은 단지&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;brew install nasm&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;, 일부 어셈블리를 작성하고 컴파일한 후 실행하여 &quot;hello world&quot;를 인쇄합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아두이노를 배우기 위해서는 USB 케이블을 통해 아두이노 보드를 컴퓨터에 꽂고 소프트웨어를 설치한 후 C 코드를 보드에 직접 업로드하여 실행하면 LED가 깜박입니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래픽 카드에 대해 어떻게 같은 종류의 일을 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;hello world의 예는 반드시 효과가 있을 필요는 없지만(효과가 있다면 멋지겠지요!), 높은 수준의/실무적인 의미에서 필요한 것을 간단히 설명하는 것도 도움이 될 것입니다.&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;/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;&lt;strong papago-id=&quot;28-0&quot;&gt;1단계&lt;/strong&gt;: 대상이 되는 특정 GPU(아키텍처, 레지스터 및 스트림 세부 정보)를 이해합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 GPU의 경우 이러한 세부 사항은 독점 사항일 수 있으며 이해하지 못할 수도 있습니다. (하지만 언급하신 대로 사양이 제공됩니다.)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;29-0&quot;&gt;2단계&lt;/strong&gt;: 드라이버에서 레지스터/세부 정보를 쿼리할 수 있는 일부 호출을 드라이버에 추가합니다.&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;&lt;strong papago-id=&quot;30-0&quot;&gt;3단계&lt;/strong&gt;: 드라이버에 일부 호출을 추가하여 레지스터를 수정합니다. (모드 변경 등)&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;&lt;strong papago-id=&quot;31-0&quot;&gt;4단계&lt;/strong&gt;: 일정한 색상으로 GPU에 삼각형/쿼드를 그리는 방법을 확인할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;화면의 큰 4각형 또는 2개의 삼각형 또는 1개의 차원의 2배의 삼각형을 그리거나 일부 명확한 명령을 전송하여 화면 클리어(&lt;em papago-id=&quot;31-2&quot;&gt;glClear&lt;/em&gt;와 유사한 기능)를 구현해 보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(GPU에서 지원하는 방식 중 어느 방식을 사용하든) 삼각형이나 쿼드를 그리는 경우 NDC(normalized device coordinate) 시스템을 사용하고 Raw windowing system 또는 NWS(Null windowing system)에서 작업하는 것을 선호합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;윈도우 설정 시스템은 합성 또는 일부 후처리 후 출력 프레임 버퍼를 표시하는 역할을 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Raw 또는 NWS는 프레임 버퍼를 화면에 직접 표시하는 것을 의미합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;32-0&quot;&gt;5단계(대부분의 항목이 선택 사항임):&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;복잡한 도면을 구현합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 픽셀, 선, 삼각 스트립, 삼각 팬 등과 같은 다른 드로잉 모드의 지원과 텍스처, 조명, 변환, 다른 윈도잉 시스템과의 상호 작용의 지원을 포함할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 단계에서는 조립에 대해 학습해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 이것은 x86이나 암(CPU) 어셈블리가 아니라 &lt;a href=&quot;http://en.wikipedia.org/wiki/SIMD&quot; rel=&quot;noreferrer&quot; papago-id=&quot;32-2&quot;&gt;SIMD&lt;/a&gt;를 다루는 데 특화된 GPU 어셈블리입니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;33-0&quot;&gt;6단계&lt;/strong&gt;: 스텐실 기능을 구현합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그램에 hello world의 스텐실을 준비합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컬러 1로 화면을 지웁니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스텐실을 바른 후 색상 2로 다시 화면을 클리어합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 색상 1을 배경으로 색상 2로 쓰여진 헬로 월드가 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 모든 것을 할 동기는 다음과 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 이것은 멋질 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위한 동기부여는 다음과 같습니다. GPU 사양의 가용성, GPU 어셈블리에 대한 학습 곡선, 그래픽의 복잡성.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 추천:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;GPU 사양(어셈블리와 함께)을 사용할 수 있다면, 예를 들어 사용 가능한 모든 API 세트(open vg 및 open GLES 1.1)의 서브셋을 구현할 것을 제안합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 API 세트에 대한 자세한 내용은 &lt;a href=&quot;https://www.khronos.org/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;36-1&quot;&gt;khronos&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;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/27812098/graphics-driver-hello-world-example&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>c</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/764</guid>
      <comments>https://bestsource.tistory.com/764#entry764comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:27:22 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 테이블에 열의 복사본을 빠르게 추가합니다.</title>
      <link>https://bestsource.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;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;테이블에 DATTIME 컬럼을 빠르게 복제해서 새로운 이름을 붙여야 합니다.&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;제 테이블에 myResults라는 이름의 열이 있습니다. 제 테이블에 myDate 열과 데이터가 정확히 같은 newDate라는 새로운 열을 만들기 위해 쿼리가 필요합니다.&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;새 열을 만들고 모든 데이터를 복사하는 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;명백한 해결책:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; ALTER TABLE `myResults` ADD `newDate` DATETIME;  
 UPDATE `myResults` SET `newDate` = `myDate`;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;UPDATE `table_name` SET `new_column` = `existing_column` WHERE `id`=`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;유감스럽게도 분명한 해결책이 유일한 해결책입니다.&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;pre&gt;&lt;code&gt;ALTER TABLE `myResults` ADD `newDate` DATETIME DEFAULT '2010-01-01';
&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;ALTER TABLE `myResults` ADD `newDate` DATETIME DEFAULT current_timestamp;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워크로드에서 다른 열 데이터를 복제하는 새로운 날짜 시간 열을 요구하는 이유는 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;끔찍한 연습처럼 들리는데요?&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;SELECT date1 AS date_old, date1 AS date_new FROM table;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-또는- &lt;em papago-id=&quot;10-1&quot;&gt;보기&lt;/em&gt;를 작성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE VIEW virtual_table AS
    SELECT date1 AS date_old, date1 AS date_new FROM table
;
SELECT * FROM virtual_table;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2185458/quickly-add-a-copy-of-a-column-to-a-mysql-table&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>mysql</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/763</guid>
      <comments>https://bestsource.tistory.com/763#entry763comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:27:15 +0900</pubDate>
    </item>
    <item>
      <title>터미널에서 데이터베이스의 sql 파일 실행</title>
      <link>https://bestsource.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;터미널에서 데이터베이스의 sql 파일 실행&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 서버가 있고 그 서버 안에 /var/www/ 디렉토리에 sql 스크립트가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 스크립트는 테이블과 데이터베이스를 만드는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버에 파일을 보관하면서 터미널이나 어떤 클라이언트에서 이 sql 스크립트를 실행하는 방법을 알아야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추신- 저는 이 주제에 대한 용어를 잘 몰라서 제 접근 방법에 대한 다른 제안들을 알아보겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 그것이 MYSQL이라고 추측합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유닉스/리눅스 환경에서 실행하려면 다음 작업을 수행해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ mysql -h &quot;server-name&quot; -u &quot;your_username&quot; -p &quot;your_password&quot; &quot;database-name&quot; &amp;lt; &quot;filename.sql&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql --host=localhost --user=your_username --password=your_password  -e &quot;filename.sql&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도해 보기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql -u your_username -p your_password

use db_name

source &amp;lt;path_to_sql_file&amp;gt;/file.sql
&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;특정 데이터베이스에 대해 SQL 파일을 실행하려면 먼저 데이터베이스를 선택합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql -u your_username -p your_password

use db_name

source &amp;lt;path_to_sql_file&amp;gt;/file.sql
&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;@Tomislav의 위 답변은 맞지만 명령줄 옵션으로 비밀번호를 쓰는 것을 좋아하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 데이터베이스를 생성하지 않은 경우, 를 사용하여 데이터베이스를 생성할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 파일은 다음 문장을 사용합니다.&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql -h {YOUR_&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;HOST} -u {USERNAME} -p &amp;lt; {FILname.sql}&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 MySQL CLI에서 비밀번호를 묻습니다(누구에게나 비밀번호를 방지하는 가장 좋은 방법).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호를 쓰고 Enter 키를 누릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스를 이미 작성한 경우 아래 명령을 사용합니다.&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql -h {YOUR_&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;호스트} -u {USERNAME} -p {DATABASE_NAME} &amp;lt; {FILENAME.sql}&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 MySQL CLI에서 비밀번호를 묻습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호를 쓰고 Enter 키를 누릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보통은.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 파일에 인쇄 문이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 MySQL CLI에 들어가서 확인해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/31820750/run-sql-file-in-database-from-terminal&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>mysql</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/762</guid>
      <comments>https://bestsource.tistory.com/762#entry762comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:27:09 +0900</pubDate>
    </item>
    <item>
      <title>줌라 - 500 - 오류가 발생했습니다.SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 설명서를 확인하십시오.</title>
      <link>https://bestsource.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;줌라 - 500 - 오류가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 설명서를 확인하십시오.&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;저는 joomla 2.5.28을 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기사를 저장할 때 항상 다음 오류 메시지가 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;500 - An error has occurred.

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 SQL=UPDATE `mquny_finder_taxonomy_map` SET `link_id`='1093',`node_id`='3' WHERE
&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;Components &amp;gt; Smart Search Indexed Content를 시도하여 비웁니다.&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;또는 수동으로 mquny_finder_taxonomy_map 테이블을 비우십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 중에 하나라도 효과가 있을거라 생각합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/35065351/joomla-500-an-error-has-occurred-you-have-an-error-in-your-sql-syntax-chec&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>MariaDB</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/761</guid>
      <comments>https://bestsource.tistory.com/761#entry761comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:27:03 +0900</pubDate>
    </item>
    <item>
      <title>처리되지 않은 예외가 발생했습니다. 정의되지 않은 '마이너스' 속성을 읽을 수 없습니다.</title>
      <link>https://bestsource.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;처리되지 않은 예외가 발생했습니다. 정의되지 않은 '마이너스' 속성을 읽을 수 없습니다.&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;명령을 사용하여 NPM을 제거하고 설치합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npm install
&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;npm audit fix --force
&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;An unhandled exception occurred: Cannot read property 'Minus' of undefined
See &quot;/private/var/folders/8n/6vsx9lx93lx9wrgxm1q_yv4c0000gn/T/ng-pMlA9a/angular-errors.log&quot; for further details.
npm ERR! Test failed. See above for more details.
&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;@angular/compiler-cli의 새로운 버전에서 버그입니다. 버전을 &quot;10.0.12&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;UPD. 새 버전 &quot;@angular/compiler&quot;에서 확인: &quot;~10.1.1&quot; - 정상 작동&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;ng update @angular/cli @angular/core --allow-dirty --force
&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;&quot;es5BrowserSupport&quot;: true
&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;angular.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;파일.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9fQob.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9fQob.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&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;ng update @angular/cli  
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;ng update @angular/core 
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;ng update rxjs
&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;이건 좀 이상한데, npm 설치 대신에 &lt;strong papago-id=&quot;11-1&quot;&gt;원사 설치&lt;/strong&gt;가 해줬어요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;package.json의 모든 종속성을 최신 버전으로 업데이트해 보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 같은 문제에 직면했고 2주 동안 올바른 해결책을 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ng 업데이트 하면 됩니다.&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;@angular/compiler&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npm install --save-dev  @angular/compiler
&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;예를 들어 이것은 제 소포입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;json&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;dependencies&quot;: {
  &quot;@angular/animations&quot;: &quot;10.0.5&quot;,
  &quot;@angular/bazel&quot;: &quot;10.0.5&quot;,
  &quot;@angular/cdk&quot;: &quot;10.1.0&quot;,
  &quot;@angular/common&quot;: &quot;10.0.5&quot;,
  &quot;@angular/compiler&quot;: &quot;10.0.5&quot;,
  &quot;@angular/core&quot;: &quot;10.0.5&quot;,
  &quot;@angular/forms&quot;: &quot;10.0.5&quot;,
  &quot;@angular/localize&quot;: &quot;10.0.5&quot;,
  &quot;@angular/platform-browser&quot;: &quot;10.0.5&quot;,
  &quot;@angular/platform-browser-dynamic&quot;: &quot;10.0.5&quot;,
  &quot;@angular/router&quot;: &quot;10.0.5&quot;,
  ......
},
&quot;devDependencies&quot;: {
  &quot;@angular-devkit/build-angular&quot;: &quot;0.1000.4&quot;,
  &quot;@angular-devkit/build-ng-packagr&quot;: &quot;0.1000.4&quot;,
  &quot;@angular/cli&quot;: &quot;10.0.4&quot;,
  &quot;@angular/compiler-cli&quot;: &quot;10.0.5&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/63764017/an-unhandled-exception-occurred-cannot-read-property-minus-of-undefined&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>AngularJS</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/760</guid>
      <comments>https://bestsource.tistory.com/760#entry760comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:26:57 +0900</pubDate>
    </item>
    <item>
      <title>지도의 NSRray 등가물</title>
      <link>https://bestsource.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;지도의 NSRray 등가물&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주어진&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSArray&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;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;객체(유사한 객체 및 키 포함) 지정된 키 배열에 맵을 수행할 수 있습니까?&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;array.map(&amp;amp;:name)
&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;몇 줄 밖에 저장되지 않지만 NSRray에서는 카테고리를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;블록이 영(0)으로 반환되지 않도록 해야 하지만, 그 외에는 다음과 같은 경우의 시간을 절약할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-[NSArray valueForKey:]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안 될 겁니다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@interface NSArray (Map)

- (NSArray *)mapObjectsUsingBlock:(id (^)(id obj, NSUInteger idx))block;

@end

@implementation NSArray (Map)

- (NSArray *)mapObjectsUsingBlock:(id (^)(id obj, NSUInteger idx))block {
    NSMutableArray *result = [NSMutableArray arrayWithCapacity:[self count]];
    [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        [result addObject:block(obj, idx)];
    }];
    return result;
}

@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용법은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-[NSArray enumerateObjectsWithBlock:]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;NSArray *people = @[
                     @{ @&quot;name&quot;: @&quot;Bob&quot;, @&quot;city&quot;: @&quot;Boston&quot; },
                     @{ @&quot;name&quot;: @&quot;Rob&quot;, @&quot;city&quot;: @&quot;Cambridge&quot; },
                     @{ @&quot;name&quot;: @&quot;Robert&quot;, @&quot;city&quot;: @&quot;Somerville&quot; }
                  ];
// per the original question
NSArray *names = [people mapObjectsUsingBlock:^(id obj, NSUInteger idx) {
    return obj[@&quot;name&quot;];
}];
// (Bob, Rob, Robert)

// you can do just about anything in a block
NSArray *fancyNames = [people mapObjectsUsingBlock:^(id obj, NSUInteger idx) {
    return [NSString stringWithFormat:@&quot;%@ of %@&quot;, obj[@&quot;name&quot;], obj[@&quot;city&quot;]];
}];
// (Bob of Boston, Rob of Cambridge, Robert of Somerville)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ruby의 기능이 무엇인지는 모르겠지만 NSray에서 &lt;a href=&quot;http://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSArray_Class/NSArray.html#//apple_ref/doc/uid/20000137-BBCIBCDJ&quot; papago-id=&quot;8-3&quot; rel=&quot;noreferrer&quot;&gt;구현&lt;/a&gt;한 -valueForKey&lt;a href=&quot;http://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSArray_Class/NSArray.html#//apple_ref/doc/uid/20000137-BBCIBCDJ&quot; papago-id=&quot;8-3&quot; rel=&quot;noreferrer&quot;&gt;:&lt;/a&gt;를 찾고 계신 것 &lt;em papago-id=&quot;8-1&quot;&gt;같습니다&lt;/em&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;전송합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-valueForKey:&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;수신 배열의 요소가 NSDictionary일 경우,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-valueForKey:&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;-objectForKey:&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;@&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 모든 답변을 요약하면 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루비(질문에서와 같이):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;array.map{|o| o.name}
&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;Obj-C(포함):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[array valueForKey:@&quot;name&quot;];
&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;Obj-C(포함)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;valueForKeyPath&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, &lt;a href=&quot;https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/KeyValueCoding/CollectionOperators.html#//apple_ref/doc/uid/20002176-SW7&quot; papago-id=&quot;16-1&quot; rel=&quot;noreferrer&quot;&gt;KVC 수집&lt;/a&gt; 연산자 &lt;a href=&quot;https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/KeyValueCoding/CollectionOperators.html#//apple_ref/doc/uid/20002176-SW7&quot; papago-id=&quot;16-1&quot; rel=&quot;noreferrer&quot;&gt;참조&lt;/a&gt;):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[array valueForKeyPath:@&quot;[collect].name&quot;];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Obj-C(포함):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;NSMutableArray *newArray = [NSMutableArray array];
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
     [newArray addObject:[obj name]];
}];
&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;a href=&quot;https://developer.apple.com/documentation/swift/array/3017522-map&quot; rel=&quot;noreferrer&quot; papago-id=&quot;18-1&quot;&gt;지도&lt;/a&gt; 포함, &lt;a href=&quot;https://docs.swift.org/swift-book/LanguageGuide/Closures.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;18-3&quot;&gt;폐쇄&lt;/a&gt; 참조)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;array.map { $0.name }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 보다 기능적인 방법으로 어레이를 처리할 수 있는 라이브러리가 몇 개 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 라이브러리를 설치하려면 &lt;a href=&quot;http://guides.cocoapods.org/using/index.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19-1&quot;&gt;코코아팟&lt;/a&gt;을 설치하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;20-0&quot;&gt;업데이트:&lt;/strong&gt; 스위프트를 사용하는 경우 &lt;a href=&quot;http://swiftdoc.org/v1.2/func/map/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;20-2&quot;&gt;지도&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://cocoadocs.org/docsets/BlocksKit/2.2.3/Categories/NSArray+BlocksKit.html#//api/name/bk_map:&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;21-0&quot;&gt;BlocksKit&lt;/a&gt;은 옵션입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;NSArray *new = [stringArray bk_map:^id(NSString *obj) { 
    return [obj stringByAppendingString:@&quot;.png&quot;]; 
}];
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&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;a href=&quot;https://github.com/robb/Underscore.m&quot; papago-id=&quot;22-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;밑줄&lt;/a&gt;은 또 다른 옵션입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;map&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;function, 여기 웹사이트의 예가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;NSArray *tweets = Underscore.array(results)
    // Let's make sure that we only operate on NSDictionaries, you never
    // know with these APIs ;-)
    .filter(Underscore.isDictionary)
    // Remove all tweets that are in English
    .reject(^BOOL (NSDictionary *tweet) {
        return [tweet[@&quot;iso_language_code&quot;] isEqualToString:@&quot;en&quot;];
    })
    // Create a simple string representation for every tweet
    .map(^NSString *(NSDictionary *tweet) {
        NSString *name = tweet[@&quot;from_user_name&quot;];
        NSString *text = tweet[@&quot;text&quot;];

        return [NSString stringWithFormat:@&quot;%@: %@&quot;, name, text];
    })
    .unwrap;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;valueForKeyPath는 좋은 선택이라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래에 앉아 있는 것은 아주 멋진 예들입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되기를 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://kickingbear.com/blog/archives/9&quot; rel=&quot;noreferrer&quot; papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://kickingbear.com/blog/archives/9&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 가지 예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;NSArray *names = [allEmployees valueForKeyPath: @&quot;[collect].{daysOff&amp;lt;10}.name&quot;];
NSArray *albumCovers = [records valueForKeyPath:@&quot;[collect].{artist like 'Bon Iver'}.&amp;lt;NSUnarchiveFromDataTransformerName&amp;gt;.albumCoverImageData&quot;];
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 Ruby 전문가가 아니기 때문에 100% 정확하게 대답할 자신이 없습니다. 하지만 'map'이 어레이의 모든 것에 어떤 작용을 하며 결과와 함께 새로운 어레이를 생성한다는 해석에 근거하여, 여러분이 원하는 것은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;NSMutableArray *replacementArray = [NSMutableArray array];

[existingArray enumerateObjectsUsingBlock:
    ^(NSDictionary *dictionary, NSUInteger idx, BOOL *stop)
    {
         NewObjectType *newObject = [something created from 'dictionary' somehow];
         [replacementArray addObject:newObject];
    }
];
&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;따라서 OS X 10.6/iOS 4.0의 '블록'(일반적으로 폐쇄)에 대한 새로운 지원을 사용하여 어레이의 모든 것에서 블록 내 작업을 수행하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업을 수행한 다음 결과를 별도의 배열에 추가하도록 선택합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;10.5 또는 iOS 3.x를 지원하는 경우 관련 코드를 개체에 넣고 makeObjectsPerformSelector: 또는 최악의 경우 를 사용하여 배열을 수동으로 반복하는 방법을 고려해 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;for(NSDictionary *dictionary in existingArray)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;@implementation NSArray (BlockRockinBeats)

- (NSArray*)mappedWithBlock:(id (^)(id obj, NSUInteger idx))block {
    NSMutableArray* result = [NSMutableArray arrayWithCapacity:self.count];
    [self enumerateObjectsUsingBlock:^(id currentObject, NSUInteger index, BOOL *stop) {
        id mappedCurrentObject = block(currentObject, index);
        if (mappedCurrentObject)
        {
            [result addObject:mappedCurrentObject];
        }
    }];
    return result;
}

@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;br&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;게시된 몇 개의 답변에 대한 약간의 개선.&lt;/font&gt;&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;0 확인—0을 사용하여 매핑할 때 개체를 제거할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메서드 이름은 메서드가 호출된 배열을 수정하지 않는다는 것을 더 잘 나타냅니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 더 스타일적인 것이지만 IMO는 블록의 인수 이름을 개선했습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;카운트에 대한 점 구문&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Objective-C의 경우, 다음 답변 목록에 ObjectiveSugar 라이브러리를 추가합니다. https://github.com/supermarin/ObjectiveSugar&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;게다가, 그것의 꼬리표는 &quot;인간을 위한 목적적인 C 추가&quot;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;OP에 잘 어울리는 루비 스타일 ;-)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 일반적인 사용 사례는 서버 호출에 의해 반환되는 사전을 간단한 개체의 배열에 매핑하는 것입니다. 예를 들어 NSDictionary 게시물에서 NSString ID의 NSray를 가져오는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;NSArray *postIds = [results map:^NSString*(NSDictionary* post) {
                       return [post objectForKey:@&quot;post_id&quot;];
                   }];
&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;Objective-C의 경우 다음 답변 목록에 Higher-Order-Functions를 추가합니다. https://github.com/fanpyi/Higher-Order-Functions;&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;JSON 배열 학생 J가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SONList는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[
    {&quot;number&quot;:&quot;100366&quot;,&quot;name&quot;:&quot;Alice&quot;,&quot;age&quot;:14,&quot;score&quot;:80,&quot;gender&quot;:&quot;female&quot;},
    {&quot;number&quot;:&quot;100368&quot;,&quot;name&quot;:&quot;Scarlett&quot;,&quot;age&quot;:15,&quot;score&quot;:90,&quot;gender&quot;:&quot;female&quot;},
    {&quot;number&quot;:&quot;100370&quot;,&quot;name&quot;:&quot;Morgan&quot;,&quot;age&quot;:16,&quot;score&quot;:69.5,&quot;gender&quot;:&quot;male&quot;},
    {&quot;number&quot;:&quot;100359&quot;,&quot;name&quot;:&quot;Taylor&quot;,&quot;age&quot;:14,&quot;score&quot;:86,&quot;gender&quot;:&quot;female&quot;},
    {&quot;number&quot;:&quot;100381&quot;,&quot;name&quot;:&quot;John&quot;,&quot;age&quot;:17,&quot;score&quot;:72,&quot;gender&quot;:&quot;male&quot;}
]
//studentJSONList map to NSArray&amp;lt;Student *&amp;gt;
NSArray *students = [studentJSONList map:^id(id obj) {
return [[Student alloc]initWithDictionary:obj];
}];

// use reduce to get average score
NSNumber *sum = [students reduce:@0 combine:^id(id accumulator, id item) {
Student *std = (Student *)item;
return @([accumulator floatValue] + std.score);
}];
float averageScore = sum.floatValue/students.count;

// use filter to find all student of score greater than 70
NSArray *greaterthan = [students filter:^BOOL(id obj) {
Student *std = (Student *)obj;
return std.score &amp;gt; 70;
}];

//use contains check students whether contain the student named 'Alice'
BOOL contains = [students contains:^BOOL(id obj) {
Student *std = (Student *)obj;
return [std.name isEqual:@&quot;Alice&quot;];
}];
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위한 특별한 키 경로 연산자가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@unionOfObjects&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;[collect]&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;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;Transaction&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;payee&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;NSArray *payees = [self.transactions valueForKeyPath:@&quot;@unionOfObjects.payee&quot;];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/KeyValueCoding/CollectionOperators.html#//apple_ref/doc/uid/20002176-SW7&quot; papago-id=&quot;48-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;배열 연산자&lt;/a&gt;에 대한 Apple 문서를 키 값 &lt;a href=&quot;https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/KeyValueCoding/CollectionOperators.html#//apple_ref/doc/uid/20002176-SW7&quot; papago-id=&quot;48-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;코딩으로 작성&lt;/a&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;strong papago-id=&quot;49-1&quot;&gt;지도&lt;/strong&gt; 기능을 선보입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;50-1&quot;&gt;다음은 설명서의 예&lt;/a&gt;입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let digitNames = [
    0: &quot;Zero&quot;, 1: &quot;One&quot;, 2: &quot;Two&quot;,   3: &quot;Three&quot;, 4: &quot;Four&quot;,
    5: &quot;Five&quot;, 6: &quot;Six&quot;, 7: &quot;Seven&quot;, 8: &quot;Eight&quot;, 9: &quot;Nine&quot;
]
let numbers = [16, 58, 510]

let strings = numbers.map {
    (var number) -&amp;gt; String in
    var output = &quot;&quot;
    while number &amp;gt; 0 {
        output = digitNames[number % 10]! + output
        number /= 10
    }
    return output
}
// strings is inferred to be of type String[]
// its value is [&quot;OneSix&quot;, &quot;FiveEight&quot;, &quot;FiveOneZero&quot;]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;맵 함수는 임의 유형의 값을 반환하고 배열의 기존 값을 이 새로운 유형의 인스턴스에 매핑하는 닫힘을 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/6127638/nsarray-equivalent-of-map&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>iPhone</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/759</guid>
      <comments>https://bestsource.tistory.com/759#entry759comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:26:50 +0900</pubDate>
    </item>
    <item>
      <title>모달 창 내 트위터 부트스트랩 데이트피커</title>
      <link>https://bestsource.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 papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 현재 트위터 부트스트랩 프레임워크를 사용하고 있으며, 모달 윈도우를 사용할 때 js 요소를 넘겨서 날짜 선택기나 검증과 같이 작동할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래에 있는 제 모달 창을 보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  &amp;lt;div class=&quot;modal hide in&quot; id=&quot;newMember&quot; style=&quot;display: block; &quot; aria-hidden=&quot;false&quot;&amp;gt;
        &amp;lt;div class=&quot;modal-header&quot;&amp;gt;
          &amp;lt;button class=&quot;close&quot; data-dismiss=&quot;modal&quot; type=&quot;button&quot;&amp;gt;×&amp;lt;/button&amp;gt;
          &amp;lt;h3&amp;gt;New Member Form&amp;lt;/h3&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;form accept-charset=&quot;UTF-8&quot; action=&quot;/players&quot; class=&quot;form-horizontal&quot; id=&quot;new_user&quot; method=&quot;post&quot;&amp;gt;&amp;lt;div style=&quot;margin:0;padding:0;display:inline&quot;&amp;gt;&amp;lt;input name=&quot;utf8&quot; type=&quot;hidden&quot; value=&quot;✓&quot;&amp;gt;&amp;lt;input name=&quot;authenticity_token&quot; type=&quot;hidden&quot; value=&quot;KdL6cc2Vb53qeMY+PpBUS70myT4HX1uWofMUBolLea8=&quot;&amp;gt;&amp;lt;/div&amp;gt;
          &amp;lt;div class=&quot;modal-body&quot;&amp;gt;
            &amp;lt;div class=&quot;widget-content nopadding&quot;&amp;gt;
              &amp;lt;div class=&quot;control-group&quot;&amp;gt;
                &amp;lt;label class=&quot;control-label&quot; for=&quot;user_role&quot;&amp;gt;Role&amp;lt;/label&amp;gt;
                &amp;lt;div class=&quot;controls&quot;&amp;gt;
                  &amp;lt;select id=&quot;user_role&quot; name=&quot;user[role]&quot; style=&quot;display: none; &quot; class=&quot;chzn-done&quot;&amp;gt;&amp;lt;option value=&quot;&quot;&amp;gt;Select member role&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;1&quot;&amp;gt;Player&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;2&quot;&amp;gt;Coach&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;3&quot;&amp;gt;Parent&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;4&quot;&amp;gt;Manager&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;5&quot;&amp;gt;Non-player&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;&amp;lt;div id=&quot;user_role_chzn&quot; class=&quot;chzn-container chzn-container-single&quot; style=&quot;width: 222px; &quot;&amp;gt;&amp;lt;a href=&quot;javascript:void(0)&quot; class=&quot;chzn-single&quot;&amp;gt;&amp;lt;span&amp;gt;Select member role&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;div class=&quot;chzn-drop&quot; style=&quot;left: -9000px; width: 220px; top: 0px; &quot;&amp;gt;&amp;lt;div class=&quot;chzn-search&quot; style=&quot;&quot;&amp;gt;&amp;lt;input type=&quot;text&quot; autocomplete=&quot;off&quot; style=&quot;width: 212px; &quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;ul class=&quot;chzn-results&quot;&amp;gt;&amp;lt;li id=&quot;user_role_chzn_o_0&quot; class=&quot;active-result result-selected&quot; style=&quot;&quot;&amp;gt;Select member role&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_role_chzn_o_1&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;Player&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_role_chzn_o_2&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;Coach&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_role_chzn_o_3&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;Parent&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_role_chzn_o_4&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;Manager&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_role_chzn_o_5&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;Non-player&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
              &amp;lt;/div&amp;gt;
              &amp;lt;div class=&quot;control-group&quot;&amp;gt;
                &amp;lt;label class=&quot;control-label&quot; for=&quot;user_full_name&quot;&amp;gt;Full name&amp;lt;/label&amp;gt;
                &amp;lt;div class=&quot;controls&quot;&amp;gt;
                  &amp;lt;input id=&quot;user_first_name&quot; name=&quot;user[first_name]&quot; placeholder=&quot;First Name&quot; size=&quot;30&quot; type=&quot;text&quot;&amp;gt;
                &amp;lt;/div&amp;gt;
              &amp;lt;/div&amp;gt;
              &amp;lt;div class=&quot;control-group&quot;&amp;gt;
                &amp;lt;label class=&quot;control-label&quot; for=&quot;user_last_name&quot;&amp;gt;Last name&amp;lt;/label&amp;gt;
                &amp;lt;div class=&quot;controls&quot;&amp;gt;
                  &amp;lt;input id=&quot;user_last_name&quot; name=&quot;user[last_name]&quot; placeholder=&quot;Last Name&quot; size=&quot;30&quot; type=&quot;text&quot;&amp;gt;
                &amp;lt;/div&amp;gt;
              &amp;lt;/div&amp;gt;
              &amp;lt;div class=&quot;control-group&quot;&amp;gt;
                &amp;lt;label class=&quot;control-label&quot; for=&quot;user_email&quot;&amp;gt;Email&amp;lt;/label&amp;gt;
                &amp;lt;div class=&quot;controls&quot;&amp;gt;
                  &amp;lt;input id=&quot;user_email&quot; name=&quot;user[email]&quot; placeholder=&quot;Email Address&quot; size=&quot;30&quot; type=&quot;text&quot;&amp;gt;
                &amp;lt;/div&amp;gt;
              &amp;lt;/div&amp;gt;
              &amp;lt;div class=&quot;control-group&quot;&amp;gt;
                &amp;lt;label class=&quot;control-label&quot; for=&quot;user_date_of_birth&quot;&amp;gt;Date of birth&amp;lt;/label&amp;gt;
                &amp;lt;div class=&quot;controls&quot;&amp;gt;
                  &amp;lt;input class=&quot;datepicker&quot; data-date-format=&quot;dd/mm/yyyy&quot; id=&quot;user_dob&quot; name=&quot;user[dob]&quot; placeholder=&quot;dd/mm/yyyy&quot; readonly=&quot;readonly&quot; size=&quot;30&quot; type=&quot;text&quot;&amp;gt;
                &amp;lt;/div&amp;gt;
              &amp;lt;/div&amp;gt;
              &amp;lt;div class=&quot;control-group&quot;&amp;gt;
                &amp;lt;label class=&quot;control-label&quot; for=&quot;user_gender&quot;&amp;gt;Gender&amp;lt;/label&amp;gt;
                &amp;lt;div class=&quot;controls&quot;&amp;gt;
                  &amp;lt;select id=&quot;user_gender&quot; name=&quot;user[gender]&quot; style=&quot;display: none; &quot; class=&quot;chzn-done&quot;&amp;gt;&amp;lt;option value=&quot;&quot;&amp;gt;Select gender&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;Male&quot;&amp;gt;Male&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;Female&quot;&amp;gt;Female&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;&amp;lt;div id=&quot;user_gender_chzn&quot; class=&quot;chzn-container chzn-container-single&quot; style=&quot;width: 222px; &quot;&amp;gt;&amp;lt;a href=&quot;javascript:void(0)&quot; class=&quot;chzn-single&quot;&amp;gt;&amp;lt;span&amp;gt;Select gender&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;div class=&quot;chzn-drop&quot; style=&quot;left: -9000px; width: 220px; top: 0px; &quot;&amp;gt;&amp;lt;div class=&quot;chzn-search&quot; style=&quot;&quot;&amp;gt;&amp;lt;input type=&quot;text&quot; autocomplete=&quot;off&quot; style=&quot;width: 212px; &quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;ul class=&quot;chzn-results&quot;&amp;gt;&amp;lt;li id=&quot;user_gender_chzn_o_0&quot; class=&quot;active-result result-selected&quot; style=&quot;&quot;&amp;gt;Select gender&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_gender_chzn_o_1&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;Male&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_gender_chzn_o_2&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;Female&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
              &amp;lt;/div&amp;gt;
              &amp;lt;div class=&quot;control-group&quot;&amp;gt;
                &amp;lt;label class=&quot;control-label&quot; for=&quot;user_team&quot;&amp;gt;Team&amp;lt;/label&amp;gt;
                &amp;lt;div class=&quot;controls&quot;&amp;gt;
                  &amp;lt;select id=&quot;user_team_id&quot; name=&quot;user[team_id]&quot; style=&quot;display: none; &quot; class=&quot;chzn-done&quot;&amp;gt;&amp;lt;option value=&quot;&quot;&amp;gt;None&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;4&quot;&amp;gt;Metro 3 East&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;1&quot;&amp;gt;State League 3&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;2&quot;&amp;gt;State League 4&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;3&quot;&amp;gt;Metro 3 South&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;5&quot;&amp;gt;Pennant E&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;6&quot;&amp;gt;Under 9 White&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;7&quot;&amp;gt;Under 9 Navy&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;8&quot;&amp;gt;Under 13 Pennant South East&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;9&quot;&amp;gt;Under 17 Pennant South East&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;10&quot;&amp;gt;Under 15 South (1)&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;11&quot;&amp;gt;Under 11 Pennant South East&amp;lt;/option&amp;gt;
                  &amp;lt;option value=&quot;12&quot;&amp;gt;Under 11 South&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;&amp;lt;div id=&quot;user_team_id_chzn&quot; class=&quot;chzn-container chzn-container-single&quot; style=&quot;width: 222px; &quot;&amp;gt;&amp;lt;a href=&quot;javascript:void(0)&quot; class=&quot;chzn-single&quot;&amp;gt;&amp;lt;span&amp;gt;None&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;div class=&quot;chzn-drop&quot; style=&quot;left: -9000px; width: 220px; top: 0px; &quot;&amp;gt;&amp;lt;div class=&quot;chzn-search&quot; style=&quot;&quot;&amp;gt;&amp;lt;input type=&quot;text&quot; autocomplete=&quot;off&quot; style=&quot;width: 212px; &quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;ul class=&quot;chzn-results&quot;&amp;gt;&amp;lt;li id=&quot;user_team_id_chzn_o_0&quot; class=&quot;active-result result-selected&quot; style=&quot;&quot;&amp;gt;None&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_team_id_chzn_o_1&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;Metro 3 East&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_team_id_chzn_o_2&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;State League 3&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_team_id_chzn_o_3&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;State League 4&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_team_id_chzn_o_4&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;Metro 3 South&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_team_id_chzn_o_5&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;Pennant E&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_team_id_chzn_o_6&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;Under 9 White&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_team_id_chzn_o_7&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;Under 9 Navy&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_team_id_chzn_o_8&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;Under 13 Pennant South East&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_team_id_chzn_o_9&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;Under 17 Pennant South East&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_team_id_chzn_o_10&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;Under 15 South (1)&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_team_id_chzn_o_11&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;Under 11 Pennant South East&amp;lt;/li&amp;gt;&amp;lt;li id=&quot;user_team_id_chzn_o_12&quot; class=&quot;active-result&quot; style=&quot;&quot;&amp;gt;Under 11 South&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
              &amp;lt;/div&amp;gt;
              &amp;lt;div class=&quot;control-group&quot;&amp;gt;
                &amp;lt;label class=&quot;control-label&quot; for=&quot;user_mobile&quot;&amp;gt;Mobile&amp;lt;/label&amp;gt;
                &amp;lt;div class=&quot;controls&quot;&amp;gt;
                  &amp;lt;input id=&quot;user_mobile&quot; maxlength=&quot;10&quot; name=&quot;user[mobile]&quot; placeholder=&quot;i.e 0421813529&quot; size=&quot;10&quot; type=&quot;tel&quot;&amp;gt;
                  &amp;lt;span class=&quot;help-block&quot;&amp;gt;
                    &amp;lt;input name=&quot;user[private_mobile]&quot; type=&quot;hidden&quot; value=&quot;0&quot;&amp;gt;&amp;lt;div class=&quot;checker&quot; id=&quot;uniform-user_private_mobile&quot;&amp;gt;&amp;lt;span&amp;gt;&amp;lt;div class=&quot;checker&quot; id=&quot;uniform-user_private_mobile&quot;&amp;gt;&amp;lt;span&amp;gt;&amp;lt;input id=&quot;user_private_mobile&quot; name=&quot;user[private_mobile]&quot; type=&quot;checkbox&quot; value=&quot;1&quot; style=&quot;opacity: 0; &quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
                    &amp;lt;a href=&quot;javascript:void(0)&quot; class=&quot;tip-bottom&quot; data-original-title=&quot;Normally, all members of the team can see this information. If you don't want teammates to see this information, just click this checkbox. (Note: Team managers will always see this information.)&quot;&amp;gt;Private&amp;lt;/a&amp;gt;
                  &amp;lt;/span&amp;gt;
                &amp;lt;/div&amp;gt;
              &amp;lt;/div&amp;gt;
              &amp;lt;div class=&quot;control-group&quot;&amp;gt;
                &amp;lt;label class=&quot;control-label&quot; for=&quot;user_manager_access&quot;&amp;gt;Manager access&amp;lt;/label&amp;gt;
                &amp;lt;div class=&quot;controls&quot;&amp;gt;
                  &amp;lt;input name=&quot;user[manager]&quot; type=&quot;hidden&quot; value=&quot;0&quot;&amp;gt;&amp;lt;div class=&quot;checker&quot; id=&quot;uniform-user_manager&quot;&amp;gt;&amp;lt;span&amp;gt;&amp;lt;div class=&quot;checker&quot; id=&quot;uniform-user_manager&quot;&amp;gt;&amp;lt;span&amp;gt;&amp;lt;input id=&quot;user_manager&quot; name=&quot;user[manager]&quot; type=&quot;checkbox&quot; value=&quot;1&quot; style=&quot;opacity: 0; &quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
              &amp;lt;/div&amp;gt;
              &amp;lt;div class=&quot;control-group&quot;&amp;gt;
                &amp;lt;label class=&quot;control-label&quot; for=&quot;user_admin_access&quot;&amp;gt;Admin access&amp;lt;/label&amp;gt;
                &amp;lt;div class=&quot;controls&quot;&amp;gt;
                  &amp;lt;input name=&quot;user[admin]&quot; type=&quot;hidden&quot; value=&quot;0&quot;&amp;gt;&amp;lt;div class=&quot;checker&quot; id=&quot;uniform-user_admin&quot;&amp;gt;&amp;lt;span&amp;gt;&amp;lt;div class=&quot;checker&quot; id=&quot;uniform-user_admin&quot;&amp;gt;&amp;lt;span&amp;gt;&amp;lt;input id=&quot;user_admin&quot; name=&quot;user[admin]&quot; type=&quot;checkbox&quot; value=&quot;1&quot; style=&quot;opacity: 0; &quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
              &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;div class=&quot;modal-footer&quot;&amp;gt;
            &amp;lt;div class=&quot;pull-right&quot;&amp;gt;
              &amp;lt;input class=&quot;btn btn-primary&quot; name=&quot;commit&quot; type=&quot;submit&quot; value=&quot;Create User&quot;&amp;gt;
              &amp;lt;a class=&quot;btn btn-danger&quot; data-dismiss=&quot;modal&quot; href=&quot;#&quot;&amp;gt;Cancel&amp;lt;/a&amp;gt;
            &amp;lt;/div&amp;gt;
          &amp;lt;/div&amp;gt;
        &amp;lt;/form&amp;gt;
      &amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스 날짜 선택기에서 1051 이상의 z-index 추가&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;페이지나 CSS에 이런 것을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
.datepicker{z-index:1151 !important;}
&amp;lt;/style&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;저는 CSS에서만 가능했어요!중요한&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.datepicker {z-index: 1151 !important;}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 용도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;body.modal-open .datepicker {
    z-index: 1200 !important;
}
&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;strong papago-id=&quot;6-1&quot;&gt;열리지&lt;/strong&gt; 않고 날짜 선택기를 일반 z 인덱스(z 인덱스가 1000인 메뉴 드롭다운 아래에 있어야 함)로 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모달이 &lt;strong papago-id=&quot;0-1&quot;&gt;열려&lt;/strong&gt; 있으면 날짜 선택기가 모달 z 인덱스(1040 또는 1050) 위에 있어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;body.modal-open&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;부트스트랩 3.1.1을 사용하고 있습니다.&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;http://www.daterangepicker.com/ (options)에 따르면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#dispatch_modal').on('shown.bs.modal', function() {
     $('input:text:visible:first').focus();
     // prepare datepicker
     $('.form_datepicker').daterangepicker({
          singleDatePicker: true,
          showDropdowns: true,
          parentEl: '#dispatch_modal'   
     });
});
&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;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;클래스 ui-date picker에 z-indez 추가&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .ui-datepicker{ z-index:1151 !important; }
&amp;lt;/style&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/users/1736297/mccannf&quot; papago-id=&quot;14-1&quot;&gt;mccannf&lt;/a&gt;가 &lt;a href=&quot;https://stackoverflow.com/questions/12978254/twitter-bootstrap-datepicker-within-modal-window/13009680#comment17631568_12978254&quot; papago-id=&quot;14-3&quot;&gt;그의 논평&lt;/a&gt;에서 말했듯이:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩 CSS와 JS를 보는 것을 추천합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모드가 매우 높은 z-index 값(99999)으로 설정되고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 나의 jsfiddle과 당신의 jsfiddle을 비교해보세요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드를 사용해 보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;.ui-datepicker{ z-index:1151 !important; }&lt;/code&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;strong papago-id=&quot;17-1&quot;&gt;부트스트랩 V3&lt;/strong&gt;을 사용하면 문제가 해결됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플러그인에서 논리 기능을 변경하는 것이 좋을 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;552열 주변에서 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;            var zIndex = parseInt(this.element.parents().filter(function(){
                return $(this).css('z-index') !== 'auto';
            }).first().css('z-index'))+10;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 항목으로 이동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;            var zIndex = parseInt(this.element.parents().filter(function(){
                return $(this).css('z-index') !== 'auto';
            }).first().css('z-index')) + 10 * 1000; //think is enought
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 아래로 스크롤을 해서 이런 오류가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜 선택기의 상단 위치가 고정되어 있지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금은 그냥 이렇게 써요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#myModal').on('show.bs.modal', function (e) {
            $(document).scrollTop(0);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 지금은 잘 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 css 파일을 변경할 수 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;bootstrap-timepicker/css/bootstrap-timepicker.css&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부터&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.bootstrap-timepicker-widget.dropdown-menu.open {
  display: inline-block;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.bootstrap-timepicker-widget.dropdown-menu.open {
  display: inline-block;
  z-index:1151;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩 V3를 사용하면 이렇게 해보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;
    .bootstrap-datetimepicker-widget 
    {
        z-index: 1200   !important;
    }
&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;부트스트랩 3.x 및 Ace 템플릿 &lt;a href=&quot;https://wrapbootstrap.com/theme/ace-responsive-admin-template-WB0B30DGR&quot; rel=&quot;nofollow&quot; papago-id=&quot;26-1&quot;&gt;랩부트스트랩&lt;/a&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;&amp;lt;style&amp;gt;
    body.modal-open .datepicker {
        z-index: 1050 !important;
    }
    body.modal-open .bootstrap-timepicker-widget {
        z-index: 1050 !important;
    }
&amp;lt;/style&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;$('#effective_to').datepicker({
    dateFormat: &quot;dd-mm-yyyy&quot;,
    changeMonth: true,
    changeYear: true,
    beforeShow: function() { 
        $('#ui-datepicker-div').addClass('datepicker');
    }
});
&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;CSS&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.datepicker {
    z-index: 100000 !important;
    display: block;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 저에게 효과가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아약스를 통해 모델에게 전화를 걸었지만,&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&gt;&lt;a href=&quot;http://jsfiddle.net/cmpgtuwy/654/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://jsfiddle.net/cmpgtuwy/654/&lt;/font&gt;&lt;/a&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;HTML&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;br/&amp;gt;
&amp;lt;div class=&quot;wrapper&quot;&amp;gt;
Some content goes here&amp;lt;br /&amp;gt;
Some more content.
&amp;lt;div class=&quot;row&quot;&amp;gt;
&amp;lt;div class=&quot;col-xs-4&quot;&amp;gt;

&amp;lt;!-- padding for jsfiddle --&amp;gt;
&amp;lt;div class=&quot;input-group date&quot; id=&quot;dtp&quot;&amp;gt;
&amp;lt;input type=&quot;text&quot; class=&quot;form-control&quot; /&amp;gt;  
&amp;lt;span class=&quot;input-group-addon&quot;&amp;gt;
  &amp;lt;span class=&quot;glyphicon-calendar glyphicon&quot;&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;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;$('#dtp').datetimepicker({
format: 'MMM D, YYYY',
widgetParent: 'body'});


$('#dtp').on('dp.show', function() {
      var datepicker = $('body').find('.bootstrap-datetimepicker-widget:last');
      if (datepicker.hasClass('bottom')) {
        var top = $(this).offset().top + $(this).outerHeight();
        var left = $(this).offset().left;
        datepicker.css({
          'top': top + 'px',
          'bottom': 'auto',
          'left': left + 'px'
        });
      }
      else if (datepicker.hasClass('top')) {
        var top = $(this).offset().top - datepicker.outerHeight();
        var left = $(this).offset().left;
        datepicker.css({
          'top': top + 'px',
          'bottom': 'auto',
          'left': left + 'px'
        });
      }
    });
&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;CSS&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.wrapper {
height: 100px;
overflow: auto;}
body {
position: relative;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;z-index 값 변경 시도:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.modal&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.modal-backdrop&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;.datepicker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;z 인덱스 값.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부츠트랩캘린더의 경우 이 제품을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;/&lt;em papago-id=&quot;40-1&quot;&gt;캘린더 인덱스 CSS&lt;/em&gt;/&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.bootstrap-datetimepicker-widget {
   z-index:99999 !important;
}
&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;이 코드를 사용해 보세요. 그런데 이 사이트 https://github.com/eternicode/bootstrap-datepicker/issues/464 에서 왔습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#datepicker').datepicker().on('show', function () {
                var modal = $('#datepicker').closest('.modal');
                var datePicker = $('body').find('.datepicker');
                if (!modal.length) {
                    $(datePicker).css('z-index', 'auto');
                    return;
                }
                var zIndexModal = $(modal).css('z-index');
                $(datePicker).css('z-index', zIndexModal + 1);
            });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;휴. 네크로. 하지만 여전히.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;code&gt;&amp;lt;link href=&quot;//cdnjs.cloudflare.com/ajax/libs/timepicker/1.3.5/jquery.timepicker.min.css&quot; rel=&quot;stylesheet&quot;&amp;gt;&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요했습니다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;style type=&quot;text/css&quot;&amp;gt;
.ui-timepicker-container {z-index: 1151 !important;}
&amp;lt;/style&amp;gt;    
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;재지정을 수용할 수 있는 의사의 머리에&lt;/font&gt;&lt;/p&gt; 
&lt;p 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;// re initialze datepicker
$(&quot;.bootstrap-datepicker&quot;).bsdatepicker({
    format: &quot;yyyy-mm-dd&quot;,
    autoclose: true,
}).on('changeDate', function (ev) {
    $(this).bsdatepicker('hide');
});
//
$(&quot;.dropdown-menu&quot;).css({'z-index':'1100'});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 먹어봐요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#ui-datepicker-div {
  z-index: 100000;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 도와 드리죠.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩.min을 업데이트할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스 드롭다운 메뉴에서 z-index 값을 2000으로 변경할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 데이트 픽커가 나타날 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p 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;function pageLoad() {}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/12978254/twitter-bootstrap-datepicker-within-modal-window&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>JQuery</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/758</guid>
      <comments>https://bestsource.tistory.com/758#entry758comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:26:41 +0900</pubDate>
    </item>
    <item>
      <title>Oracle: 스키마 간에 보기를 생성하고 있습니까?</title>
      <link>https://bestsource.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;Oracle: 스키마 간에 보기를 생성하고 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보기를 작성하려고 하는데 다른 스키마에서 테이블을 참조하는 보기를 작성할 수 없을 정도로 문제를 완화했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select count(*) from otherschema.othertable;
&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;create view foo as select count(*) as bar from oneofmytables;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 내가 노력한다면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;create view foo as select count(*) as bar from otherschema.othertable;
&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;&quot;권한 부족&quot; 오류가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가로 필요한 권한은 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사용자의 테이블에 대한 권한이 직접 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 역할을 통해서 인가요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 테이블을 참조하는 개체(뷰, 프로시저 등)를 생성하려면 직접 권한을 부여해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;빠른 테스트로 SQL*Plus에서&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; set role none;
SQL&amp;gt; select count(*) from otherschema.othertable;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실패할 경우 역할을 통해 테이블에 대한 권한을 부여받은 것이 문제입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각에 당신은 선택권을 받은 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;otherschema.othertable&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;role&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;grant&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 다음과 같이 연결해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;otheruser&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;grant select on othertable to &amp;lt;your-schema&amp;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;당신의 DBA가 당신에게 허락해 줄 필요가 있을 것이라 믿습니다.&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;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특권.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사이트의 보안 제한에 따라 허용할 수도 있고 허용하지 않을 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 일반적으로 그렇지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/4855412/oracle-creating-view-across-schemas&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>oracle</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/757</guid>
      <comments>https://bestsource.tistory.com/757#entry757comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:26:30 +0900</pubDate>
    </item>
    <item>
      <title>웹소켓:죽은 후 자동으로 다시 연결하는 방법</title>
      <link>https://bestsource.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;font class=&quot;papago-parent&quot;&gt;죽은 후 자동으로 다시 연결하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;var ws = new WebSocket('ws://localhost:8080');
ws.onopen = function () {
  ws.send(JSON.stringify({
      .... some message the I must send when I connect ....
  }));

};

ws.onmessage = function (e) {
  console.log('Got a message')
  console.log(e.data);
};

ws.onclose = function(e) {  
  console.log('socket closed try again'); 

}

ws.onerror = function(err) {
  console.error(err)
};
&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&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;onerror&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;onclose&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;'ws'&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;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문:.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;소켓이 닫히거나 오류가 발생할 때마다 10초 동안 기다렸다가 소켓 서버에 다시 연결할 수 있는 좋은 설계 패턴은 무엇입니까(그리고 처음 메시지를 서버에 다시 전송).&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;function connect() {
  var ws = new WebSocket('ws://localhost:8080');
  ws.onopen = function() {
    // subscribe to some channels
    ws.send(JSON.stringify({
        //.... some message the I must send when I connect ....
    }));
  };

  ws.onmessage = function(e) {
    console.log('Message:', e.data);
  };

  ws.onclose = function(e) {
    console.log('Socket is closed. Reconnect will be attempted in 1 second.', e.reason);
    setTimeout(function() {
      connect();
    }, 1000);
  };

  ws.onerror = function(err) {
    console.error('Socket encountered error: ', err.message, 'Closing socket');
    ws.close();
  };
}

connect();
&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;setInterval&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;ngOnInit(): void {
    if (window.location.protocol.includes('https')) {
        this.protocol = 'wss';
    }

    this.listenChanges();
}


listenChanges(): void {
    this.socket = new WebSocket(`${this.protocol}://${window.location.host}/v1.0/your/url`);

    this.socket.onmessage = (event): void =&amp;gt; {
        // your subscription stuff
        this.store.dispatch(someAction);
    };

    this.socket.onerror = (): void =&amp;gt; {
        this.socket.close();
    };


    this.socket.onopen = (): void =&amp;gt; {
        clearInterval(this.timerId);

        this.socket.onclose = (): void =&amp;gt; {
            this.timerId = setInterval(() =&amp;gt; {
                this.listenChanges();
            }, 10000);
        };
    };
}
&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;clearInterval&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소켓이 열렸을 때.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 명확하게 반응형 질문은 아니지만, 다음은 반응형 답변입니다.&lt;/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;strong papago-id=&quot;13-0&quot;&gt;TLDR:&lt;/strong&gt; 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setInterval&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹소켓 연결 상태를 주기적으로 확인하고 연결이 종료된 경우 재연결을 시도합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/readyState&quot; papago-id=&quot;14-1&quot; rel=&quot;noreferrer&quot;&gt;https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/readyState&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class TestComponent extends React.Component {
  constructor(props) {
    super(props);
    this.state = {};

    this.connect = this.connect.bind(this);
  }

  componentDidMount() {
    this.interval = setInterval(this.connect, 1000);
  }

  componentWillUnmount() {
    if (this.ws) this.ws.close();
    if (this.interval) clearInterval(this.interval);
  }

  connect() {
    // https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/readyState
    if (this.ws === undefined || (this.ws &amp;amp;&amp;amp; this.ws.readyState === 3)) {
      this.ws = new WebSocket(`ws://localhost:8080`);

      this.ws.onmessage = (e) =&amp;gt; {
        console.log(JSON.parse(e.data));
      };
    }
  }

  render() {
    return &amp;lt;div&amp;gt;Hey!&amp;lt;/div&amp;gt;;
  }
}
&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;저는 이 패키지 https://github.com/pladaria/reconnecting-websocket 가 웹소켓 연결에 대한 재연결 문제를 해결할 수 있다는 것을 알았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 설정 가능한 옵션 목록을 가지고 있는데, 그 중 하나는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;reconnectionDelayGrowFactor&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 재접속 지연이 얼마나 빨리 증가하는지를 결정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소켓이 닫히거나 서버에 오류가 발생한 경우 비동기식 await를 사용하여 클라이언트가 5초마다 자동으로 연결을 시도합니다. 내 &lt;a href=&quot;https://stackoverflow.com/a/67100406/10450803&quot; papago-id=&quot;17-1&quot;&gt;답변을 보십시오&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;&lt;h1 papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트된 답변:&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결국, (자바를 사용하지 않는 경우) 독자적인 &quot;ping/pong&quot; 전략을 구현하는 것이 좋다는 것을 알았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(java를 사용하는 경우 ping/pong &quot;action type&quot;을 확인하십시오. 기억이 잘 나지 않습니다...)&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;클라이언트가 5초마다 &quot;ping&quot;을 서버로 전송했습니다.&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;서버가 &quot;ping&quot;을 받으면 클라이언트에 &quot;pong&quot;를 반향해야 합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클라이언트가 5초 안에 &quot;pong&quot;를 수신하지 못하면 서버를 다시 연결해야 합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제삼자의 입에 의지하지 마세요.&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경고: 다음 도구를 사용하지 마십시오. (이유: 신뢰할 수 없고 안정적이지 않으며 매우 제한적으로 작동합니다.)&lt;/font&gt;&lt;/h1&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네트워크를 사용할 수 있는지 확인합니다. https://github.com/hubspot/offline&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 연결하려면: https://github.com/joewalnes/reconnecting-websocket&lt;/font&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;a href=&quot;https://github.com/getshippr/supersocket&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;27-1&quot;&gt;슈퍼소켓이라는 패키지&lt;/a&gt;를 만들기로 결정했습니다!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 네이티브 웹소켓을 대체하는 역할을 해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 찾은 기존 패키지는 유지보수되지 않은 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SuperSocket은 기존 WebSocket 구현의 맨 위에 있으며, 다른 기능들 중에서도 성공적으로 구현될 때까지 다시 연결해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 무한 루프 및 불필요한 CPU 로드를 피하기 위해 최대 재시도를 설정할 수 있습니다. :)&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;//native implementation
var ws = new WebSocket('ws://localhost:8080');

//drop in replacement, embedding reconnect strategies
var ws = new SuperSocket('ws://localhost:8080');
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/joewalnes/reconnecting-websocket&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;29-0&quot;&gt;웹소켓&lt;/a&gt; 재연결은 자동으로 재연결되는 API 호환 장식된 웹소켓 클래스를 제공하여 이 문제를 해결하는 작은 라이브러리입니다.&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;스크립트를 페이지에 추가합니다(예: a를 통해).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;tag) 및 위 링크된 README에 의해 설명된 바와 같이:&lt;/font&gt;&lt;/font&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;API 호환이 가능하므로 다음을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;var ws = new WebSocket('ws://....');
&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 class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;var ws = new ReconnectingWebSocket('ws://....');
&lt;/code&gt;&lt;/pre&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도해 보기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const observable = Observable.create(
  (obs: Observer&amp;lt;MessageEvent&amp;gt;) =&amp;gt; {
    this.ws.onmessage = obs.next.bind(obs);
    this.ws.onerror = obs.error.bind(obs);
    // this.ws.onclose = obs.complete.bind(obs);
    this.ws.onclose = function () {
      window.location.reload()
    }
    return this.ws.close.bind(this.ws);
  });

const observer = {
  next: (data: Object) =&amp;gt; {
    if (this.ws.readyState === WebSocket.OPEN) {
      this.ws.send(JSON.stringify(data));
    }
  }
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성요소&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;getDatas() {
let url = environment.apiwebsocket
this.webSocketService.connect(url)
  .subscribe(evt =&amp;gt; {
    let jsonObj = JSON.parse(evt.data)
  });}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전에 이걸 프로젝트 어딘가에 뒀었어요&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;let rc = new WebSocket(
    'ws://'
    + window.location.host
    + `/ws/chat/${window.seen.pk}/`
)
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&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 class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;// ws create the websocket and returns it
function autoReconnect(ws_create){
    let ws = ws_create();
    function startReconnecting(){
        let interval = setInterval(()=&amp;gt;{
            console.log('trying')
            ws = ws_create();
            ws.onopen = () =&amp;gt; {
                console.log('stop');
                ws.onclose = startReconnecting;
                clearInterval(interval);
            }
        }, 3000);
    }
    ws.onclose = startReconnecting;
}

let rc;
autoReconnect(()=&amp;gt;{
    rc = new WebSocket(
        'ws://'
        + window.location.host
        + `/ws/chat/${window.seen.pk}/`
    )
    return rc;
});
&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;실행 및 로컬 호스트 중지를 통해 테스트합니다. 잘 작동합니다. (btw 이 질문은 오랫동안 게시되었지만 짧고 우아한 해결책이 없습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 방법의 장점은 화살표 함수를 전달하여 외부 범위에 변수를 할당할 수 있다는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 제 프로젝트에서 사용하는 간단한 버전이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에는 재연결을 위한 증분 대기 타이머가 포함되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;//wsURL - the string URL of the websocket
//waitTimer - the incrementing clock to use if no connection made
//waitSeed - used to reset the waitTimer back to default on a successful connection
//multiplier - how quickly you want the timer to grow on each unsuccessful connection attempt

const openSocket = (wsURL, waitTimer, waitSeed, multiplier) =&amp;gt;{
  let ws = new WebSocket(wsURL);
  console.log(`trying to connect to: ${ws.url}`);

  ws.onopen = () =&amp;gt; {
      console.log(`connection open to: ${ws.url}`);
      waitTimer = waitSeed; //reset the waitTimer if the connection is made
      
      ws.onclose = () =&amp;gt; {
        console.log(`connection closed to: ${ws.url}`);
        openSocket(ws.url, waitTimer, waitSeed, multiplier);
      };
      
      ws.onmessage = (message) =&amp;gt; {
        //do something with messge...
      };
  };
  
  ws.onerror = () =&amp;gt; {
    //increaese the wait timer if not connected, but stop at a max of 2n-1 the check time
    if(waitTimer &amp;lt; 60000) waitTimer = waitTimer * multiplier; 
    console.log(`error opening connection ${ws.url}, next attemp in : ${waitTimer/1000} seconds`);
    setTimeout(()=&amp;gt;{openSocket(ws.url, waitTimer, waitSeed, multiplier)}, waitTimer);
  }
}

openSocket(`ws://localhost:3000`, 1000, 1000, 2)

&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/22431751/websocket-how-to-automatically-reconnect-after-it-dies&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>Javascript</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/756</guid>
      <comments>https://bestsource.tistory.com/756#entry756comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:26:23 +0900</pubDate>
    </item>
    <item>
      <title>Visual Studio Server Explorer는 사용자 지정 데이터베이스 공급자를 지원합니까?</title>
      <link>https://bestsource.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;Visual Studio Server Explorer는 사용자 지정 데이터베이스 공급자를 지원합니까?&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;일부 학습 프로젝트에서 서버 탐색기와 관련 도구를 Microsoft SQL Server와 함께 그래픽 데이터베이스 개발에 사용한 적이 있습니다. 좋은 경험이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 저는 직장에서 Oracle DB 및 SQLite를 다루며 취미 프로젝트는 MySQL을 사용합니다(Linux에서 호스팅되기 때문에).&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;Visual Studio의 데이터베이스 관련 도구를 다른 데이터베이스 공급업체와 함께 활용할 수 있는 방법이 있습니까?&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;다음은 Visual Studio에서 MySQL 데이터베이스에 연결하는 방법에 대한 지침입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&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;ul&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;우선 MyODBC 커넥터 3.51(또는 최신)을 개발기(NB)에 설치해야 합니다. 이것은 http://www.mysql.com/products/connector/odbc/ 에서 확인할 수 있습니다.&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;font class=&quot;papago-parent&quot;&gt;이 데이터 소스는 순수하게 Server Manager를 위해 사용되며 VS를 만들 때 클라이언트 PC에 동일한 데이터 소스를 만들 걱정은 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET application (원하지 않는 한) - 이 답변에서 너무 길게 다루고 싶지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 설명을 위해 저는 당신이 제 sql서버 'SERVER01'의 데이터베이스 'noddy'에 'AADSN'이라는 MyODBC 데이터 소스를 생성한 것처럼 하고 루트 비밀번호를 'fred'로 설정하겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버는 컴퓨터 이름(제어판/시스템/컴퓨터 이름)이거나 IP 주소일 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NB. 이 설명을 계속하기 전에 이 연결 상태를 테스트해야 합니다.&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;VS 열어보세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET프로젝트&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버 탐색기로 이동&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'Data Connections(데이터 연결)' 마우스 오른쪽 버튼 클릭&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'연결 추가'를 선택합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DataLink 속성에서 공급자 탭으로 이동하여 &quot;Microsoft OLE DB Provider For ODBC 드라이버&quot;를 선택합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 클릭합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&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;이전에 ODBC 데이터 원본을 생성한 경우 해당 데이터 원본을 선택할 수 있습니다.&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;/li&gt; 
 &lt;/ul&gt; 
 &lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DSN=AADSN;DESC=MySQL ODBC 3.51 드라이버 DSN;DATABase= noddy;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SERVER=SERVER01;UID=루트;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;비밀번호=fred;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PORT=3306;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;소켓=;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;OPTION=11;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;STMT=;&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;연결 문자열에서 암호를 생략하는 경우, 생성한 데이터 원본(AADSN)에 암호가 포함되어 있는지 확인해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것들이 무엇을 의미하는지는 설명하지 않겠습니다. 이에 대해서는 myodbc 설명서에서 확인할 수 있습니다. 데이터 소스를 테스트할 때 &quot;연결 성공&quot; 메시지가 표시되는지 확인하십시오.&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;Sqlite에 대한 조사를 하던 중에 발견했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 아직 사용할 기회가 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 당신에게 도움이 된다면 우리에게 알려주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://sqlite.phxsoftware.com/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://sqlite.phxsoftware.com/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;18-0&quot;&gt;시스템.데이터.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;18-0&quot;&gt;SQLite&lt;/strong&gt; 시스템.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Data.SQLite는 원래 SQLite 데이터베이스 엔진이며 완전한 ADO입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET 2.0 프로바이더는 모두 단일 혼합 모드 어셈블리로 롤업되었습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;...&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;strong papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Visual Studio 2005/2008 Design-Time 지원&lt;/font&gt;&lt;/strong&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;서버 탐색기에 SQLite 연결을 추가하고, 쿼리 설계자와 함께 쿼리를 만들고, 테이블을 Type Data Set에 드래그 앤 드롭하는 등의 작업을 수행할 수 있습니다.&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;SQLite의 디자이너는 VS2005 Express Edition을 비롯한 Visual Studio 2005/2008의 풀 에디션을 작업하고 있습니다.&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;NEW Visual Studio Server Explorer에서 대화형으로 보기, 테이블, 인덱스, 외부 키, 제약 조건 및 트리거를 생성/편집할 수 있습니다!&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;서버 탐색기는 ODBC 드라이버를 제공하는 모든 데이터베이스 시스템을 지원해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle의 경우 Visual Studio가 내장된 드라이버가 있습니다.&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;Add Connection Dialog(연결 추가) 대화상자에서 데이터 소스의 변경 버튼을 클릭한 다음 드라이버를 사용하는 공급자 목록을 가져옵니다.&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;Oracle에는 Visual Studio와 통합되는 일련의 도구가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 액세스 라이브러리와 함께 패키지로 구성되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.oracle.com/technology/software/tech/windows/odpnet/index.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.oracle.com/technology/software/tech/windows/odpnet/index.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/31885/does-visual-studio-server-explorer-support-custom-database-providers&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>oracle</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/755</guid>
      <comments>https://bestsource.tistory.com/755#entry755comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:26:13 +0900</pubDate>
    </item>
    <item>
      <title>AJAX, 하위 도메인 및 SSL</title>
      <link>https://bestsource.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;AJAX, 하위 도메인 및 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;foo.com 라는 사이트가 있는데 agax request to bar.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;foo.com .&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;또한 foo가 안전한 연결이라면 https, bar.foo.com 도 https가 되어야 합니까?&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;plean-http AJAX의 경우: 브라우저에서 허용되지 않는 교차 도메인 XMLHttpRequest를 수행하는 것을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;향후 안전한 방식으로 구현하기 위해 &lt;a href=&quot;https://wiki.mozilla.org/Cross_Site_XMLHttpRequest&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-1&quot;&gt;W3C 제안이 보류&lt;/a&gt; 중이지만(IE8, IIRC에서 부분적으로 구현), 현재로서는 확실히 불가능합니다.&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;a href=&quot;http://www2007.org/program/paper.php?id=801&quot; papago-id=&quot;4-1&quot; rel=&quot;noreferrer&quot;&gt;방법&lt;/a&gt;으로 서브스페이스(iframe 사용)라는 해결책이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;document.domain&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, &lt;a href=&quot;http://softwareas.com/cross-domain-communication-with-iframes&quot; papago-id=&quot;5-1&quot; rel=&quot;noreferrer&quot;&gt;fragment&lt;/a&gt; &lt;a href=&quot;http://www.sitepen.com/blog/2008/07/22/windowname-transport/&quot; papago-id=&quot;5-3&quot; rel=&quot;noreferrer&quot;&gt;identifier&lt;/a&gt; &lt;a href=&quot;http://softwareas.com/cross-domain-communication-with-iframes&quot; papago-id=&quot;5-1&quot; rel=&quot;noreferrer&quot;&gt;기법&lt;/a&gt; (다시, iframe을 사용) 및 기법 (다시, iframe!)&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;SSL에 관한 한 도메인과 하위 도메인에 대한 별도의 인증서를 구입하거나 이 두 가지를 모두 포함하는 단일 와일드카드(*.foo.com ) 인증서를 구입할 수 있습니다(naturally를 들어 와일드카드 인증서는 더 비쌀 것입니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 도메인에서 항목을 요청하는 HTTPS 페이지가 있다면 모든 것이 HTTPS인 이상 모든 것이 잘 될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, iframe 해결 방법 중 하나를 사용하는 경우에는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;https://&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;스킴 URL을(를) 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;src&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;iframe입니다의 입니다.&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;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;https://foo.com&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안전하지 않은 사람들에게 요청을 대행해 주는 거죠&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;http://bar.foo.com&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 문제도 해결하므로은 무시할 수 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; (이는 XHR 교차 도메인 문제도 해결하므로 다른 해결 방법은 무시할 수 있습니다.)&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 XHR 요청서를 보내신다는 뜻입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;https://foo.com/someurl&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;http://bar.foo.com/someurl&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;, 응답을 받은 후 브라우저로 다시 전송하므로 성능 측면에서 bar.foo.com 의 서버측 기능을 foo.com 로 옮기는 것이 훨씬 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 서버 스크립트를 이동할 수 없다면 프록시를 사용하는 것이 방법입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;15-0&quot;&gt;편집:&lt;/strong&gt; 몇 가지 추가 테스트를 수행하고 iframe AJAX 해결 방법(#fragment identifier 1)을 얻어 서로 다른 HTTPS 도메인에서 작동한 후 마지막 3개의 그래프를 변경했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;iframe을 사용하여 SSL 크로스 도메인 AJAX를 수행할 수 &lt;em papago-id=&quot;15-2&quot;&gt;있습니다&lt;/em&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;https&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;https&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;iframe에서 scheme이 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;src&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;ol&gt; 
 &lt;li papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단답: 아니오, 실제 교차 도메인 XHR은 허용되지 않습니다.&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;iframe을 사용한 해결 방법: 효율성 향상, SSL 인증 2개(또는 와일드카드 인증) 필요, 다소 복잡함&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;프록시를 사용한 해결 방법: 효율성이 떨어지며 1개 또는 2개의 SSL 인증서(1개는 backend request to bar)를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;http를 통한 foo.com ), 다소 복잡한.&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;대부분의 브라우저는 보안/개인 정보 보호 설정에 따라 외부 통화를 차단하고 동일한 도메인으로 AJAX 통화만 허용합니다.&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;간단히 말해, 동일한 도메인을 통해서만 AJAX 호출(아마도 페이지 호출, 다시 다른 도메인에서 다른 페이지 호출)을 수행하지 않으면 문제가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 사용 중인 SSL이나 동일한 SSL에 상관없이 SSL을 사용하더라도 통화가 차단된다는 SSL 질문에도 대답합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네, 두 도메인 모두 다른 인증을 받을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 모든 것은 사용자가 구성 방법이 달라집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;foo.com 에 대한 웹 서버를 구성할 수 있으며 비보안의 경우 포트 80을 열고 보안의 경우 포트 443을 열고 둘 다 사용할 수 있습니다.&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;bar.foo.com 에 대해 다른 웹 서버를 구성하고 동일한 포트 구성을 수행할 수 있습니다.&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;하나의 인증서를 다른 사이트에 복사하여 사용할 수 있는 *.foo.com 인증서를 구입할 수도 있습니다.&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;요청이 http://bar.foo.com 에 연결되더라도 안전하게 연결되지 않습니다.&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;웹 서버에 포트 443을 사용하도록 지시하고 인증서의 유효성을 확인하려면 http &quot;s&quot;가 있어야 합니다.&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;신뢰할 수 없고 http &quot;s&quot;를 사용하고 브라우저에 잠금이 있더라도 데이터는 암호화됩니다.&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;JavaScript TLS와 Flash를 결합하여 안전한 도메인 간 요청을 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 방문자가 https://foo.com 로 이동하고 https://bar.foo.com 으로 XmlHttp Requests를 &lt;a href=&quot;https://bar.foo.com&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;32-3&quot;&gt;할 &lt;/a&gt;수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반 http에서도 동일한 작업을 수행할 수 있습니다.&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;방문자의 브라우저에서 foo.com 에 대해 신뢰할 수 있는 SSL 인증서를 구입해야 하지만 bar.foo.com , bar2에 대해 고유한 SSL 인증서를 생성할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;foo.com 등&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;무료로 SSL 인증서를 생성하는 대신 더 비싼 대안은 *.foo.com 에 대한 와일드카드 SSL 인증서를 구입하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 foo.com 을 통해 해당 사이트에 도메인 간 요청만 하는 경우에는 추가 비용을 지출할 필요가 없습니다.&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;github에서 오픈소스 포지 프로젝트를 확인해보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://github.com/digitalbazaar/forge/blob/master/README&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://github.com/digitalbazaar/forge/blob/master/README&lt;/font&gt;&lt;/a&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 papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예, 크로스 도메인 아약스 제출을 가장 확실하게 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ssl.com &lt;a href=&quot;https://www.ssl.com/certificates/wildcard&quot; rel=&quot;nofollow&quot; papago-id=&quot;37-1&quot;&gt;와일드카드 인증&lt;/a&gt;을 사용하여 동일한 설정을 수행했지만 2개 사이트에서 2개의 표준 인증을 사용할 수 있습니다.&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;기본적으로 JSONP(yahoo, google, fb 등)를 사용하게 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;반환 값은 함수로 감싸져 있고 다음과 같이 보입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;someFunction(&quot;{...}&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/231478/ajax-subdomains-and-ssl&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>Ajax</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/754</guid>
      <comments>https://bestsource.tistory.com/754#entry754comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:26:07 +0900</pubDate>
    </item>
    <item>
      <title>객체 배열에서 속성이 검색과 일치하는 객체의 인덱스를 찾는 가장 빠른 방법</title>
      <link>https://bestsource.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;객체 배열에서 속성이 검색과 일치하는 객체의 인덱스를 찾는 가장 빠른 방법&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;array[i].id = some number;
array[i].name = some name;
&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;제가 하고 싶은 일은 id가 0,1,2,3 또는 4 중 하나와 같은 개체의 인덱스를 찾는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그저 다음과 같은 일을 할 수 있을 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var indexes = [];
for(i=0; i&amp;lt;array.length; i++) {
  (array[i].id === 0) ? { indexes[0] = i }
  (array[i].id === 1) ? { indexes[1] = i }
  (array[i].id === 2) ? { indexes[2] = i }
  (array[i].id === 3) ? { indexes[3] = i }
  (array[i].id === 4) ? { indexes[4] = i }
}
&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;이 방법은 효과가 있지만, 특히 array.length가 클 수 있는 경우에는 꽤 비싸고 느릴 것으로 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 좀 더 다듬을 수 있는 방법에 대한 아이디어가 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;array.indexOf를 사용해볼까 했는데 어떻게 하면 구문을 강제할 수 있을지 모르겠어요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;array.indexOf(this.id === 0);
&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;아마도 당신은 &quot;지도&quot;와 같은 고차 함수를 사용하고 싶을 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;'field' 속성으로 검색할 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var elementPos = array.map(function(x) {return x.id; }).indexOf(idYourAreLookingFor);
var objectFound = array[elementPos];
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열에서 요소 인덱스를 찾는 가장 간단하고 쉬운 방법.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ES5 구문:&lt;/font&gt;&lt;/strong&gt; &lt;code&gt;[{id:1},{id:2},{id:3},{id:4}].findIndex(function(obj){return obj.id == 3})&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ES6 구문:&lt;/font&gt;&lt;/strong&gt; &lt;code&gt;[{id:1},{id:2},{id:3},{id:4}].findIndex(obj =&amp;gt; obj.id == 3)&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 Array 메서드 &lt;a href=&quot;https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;.filter()&lt;/a&gt;가 이 작업에 적합합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var filteredArray = array.filter(function (element) { 
    return element.id === 0;
});
&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;jQuery는 &lt;a href=&quot;http://api.jquery.com/jQuery.grep/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-1&quot;&gt;.grep()&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;편집: 이 두 기능 모두 후드 아래에서 반복적으로 작동하는 기능이며, 필터 기능을 직접 굴리는 것과 성능 차이가 눈에 띄게 나지는 않지만 휠을 다시 invent해야 하는 이유가 무엇인지를 언급할 필요가 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성능에 관심이 있는 경우, 위에서 설명한 &lt;strong papago-id=&quot;12-1&quot;&gt;방법&lt;/strong&gt;을 &lt;strong papago-id=&quot;12-3&quot;&gt;찾거나&lt;/strong&gt; 필터링하거나 &lt;strong papago-id=&quot;12-5&quot;&gt;지도&lt;/strong&gt;를 사용하지 마십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 가장 빠른 방법을 보여주는 예입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 &lt;a href=&quot;http://jsben.ch/zikym&quot; rel=&quot;noreferrer&quot; papago-id=&quot;13-1&quot;&gt;실제&lt;/a&gt; 테스트 링크가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;셋업블럭&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var items = []

for(var i = 0; i &amp;lt; 1000; i++) {
    items.push({id: i + 1})
}

var find = 523
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 빠른 방법&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var index = -1
for(var i = 0; i &amp;lt; items.length; i++) {
    if(items[i].id === find) {
        index = i;
        break;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;느린 방법&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;items.findIndex(item =&amp;gt; item.id === find)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 느린 방법&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;items.map(item =&amp;gt; item.id).indexOf(find);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반 배열을 사용하면 답이 없기 때문에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;find&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/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 one = {id: 1, name: 'one'};
var two = {id: 2, name:'two'}
var arr = [one, two] 
     
var found = arr.find((a) =&amp;gt; a.id === 2) 

console.log(found === two) // true

console.log(arr.indexOf(found)) // 1&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;array.forEach(function (elem, i) {  // iterate over all elements of array
    indexes[elem.id] = i;           // take the found id as index for the
});                                 // indexes array and assign i
&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;결과는 ID에 대한 조회 목록입니다. 주어진 ID로 레코드의 인덱스를 얻습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;const index = array.findIndex(item =&amp;gt; item.id === 'your-id');&lt;/code&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;id === your-id로 정렬된 항목 인덱스를 얻을 수 있습니다.&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;array = [ {id:1}, {id:2} ];

const index = array.findIndex(item =&amp;gt; item.id === 2);

console.log(index);&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;var indices = [];
var IDs = [0, 1, 2, 3, 4];

for(var i = 0, len = array.length; i &amp;lt; len; i++) {
    for(var j = 0; j &amp;lt; IDs.length; j++) {
        if(array[i].id == ID) indices.push(i);
    }
}
&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;ES6를 사용하는 새로운 방법&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let picked_element = array.filter(element =&amp;gt; element.id === 0);
&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;ES6 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;map&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;pre&gt;&lt;code&gt;let idToFind = 3;
let index = someArray.map(obj =&amp;gt; obj.id).indexOf(idToFind);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@PirateBay에서 언급한 것처럼 때로는 옛날 방식이 가장 좋습니다.&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;ES 6/7을 사용하면 &quot;.find&quot;도 매우 빠르며 일치할 때 중지됩니다(.map 또는 .filter와 달리).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;items.find(e =&amp;gt; e.id === find)?.id
&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;이와 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function findElements(array, predicate)
{
    var matchingIndices = [];

    for(var j = 0; j &amp;lt; array.length; j++)
    {
        if(predicate(array[j]))
           matchingIndices.push(j);
    }

    return matchingIndices;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 다음과 같이 호출할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var someArray = [
     { id: 1, text: &quot;Hello&quot; },
     { id: 2, text: &quot;World&quot; },
     { id: 3, text: &quot;Sup&quot; },
     { id: 4, text: &quot;Dawg&quot; }
  ];

var matchingIndices = findElements(someArray, function(item)
   {
        return item.id % 2 == 0;
   });

// Should have an array of [1, 3] as the indexes that matched
&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;tejs의 답변을 mongoDB와 로보몽고에 맞게 수정한 것 I&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;matchingIndices.push(j);
&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;matchingIndices.push(NumberInt(j+1));
&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;ol&gt; 
 &lt;li papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 발생의 인덱스를 반환합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;true&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;const array = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 2 }];
const idYourAreLookingFor = 2;

//ES5 
//Output: 1
array.map(function (x) { return x.id; }).indexOf(idYourAreLookingFor);

//ES6 
//Output: 1
array.findIndex(obj =&amp;gt; obj.id === idYourAreLookingFor);&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;축소를 사용하여 모든 발생의 인덱스 배열을 반환합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;true&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;const array = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 2 }]
const idYourAreLookingFor = 2;

//ES5
//Output: [1, 4]
array.reduce(function (acc, obj, i) {
  if (obj.id === idYourAreLookingFor)
    acc.push(i);
  return acc;
}, []);

//ES6
//Output: [1, 4]
array.reduce((acc, obj, i) =&amp;gt; (obj.id === idYourAreLookingFor) ? acc.concat(i) : acc, [])&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;저는 O(1) 복잡도의 고유 식별자를 사용하여 배열의 항목에 액세스할 수 있는 &lt;a href=&quot;https://www.npmjs.com/package/super-array&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;34-1&quot;&gt;super-array&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;const SuperArray = require('super-array');

const myArray = new SuperArray([
  {id: 'ab1', name: 'John'},
  {id: 'ab2', name: 'Peter'},
]);

console.log(myArray.get('ab1')); // {id: 'ab1', name: 'John'}
console.log(myArray.get('ab2')); // {id: 'ab2', name: 'Peter'}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 일치를 기반으로 배열에서 개체 인덱스를 찾는 간단한 방법.&lt;/font&gt;&lt;/p&gt; 
&lt;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;//list of bookings
const bookings = [
        { status: &quot;accepted&quot;, _id: &quot;6055cadd062eb5153c089121&quot;, title: &quot;This is test               title&quot;, user: &quot;id&quot;, team: &quot;id&quot; },
        { status: &quot;pending&quot;, _id: &quot;6055cb33062eb5153c089122&quot;, title: &quot;title1&quot;,                   description: &quot;test description&quot;, user: &quot;id&quot;, team: &quot;id&quot; },
        { status: &quot;accepted&quot;, _id: &quot;6055cb3d062eb5153c089123&quot;, title: &quot;title2&quot;,                   description: &quot;test description&quot;, user: &quot;id&quot;, team: &quot;id&quot; }
        ]
    
//return index of the element if find else return -1 
const findIndex = (booking) =&amp;gt; bookings.findIndex((b, index) =&amp;gt; {
        if (b._id === booking._id) return true    
})
        
//test 1
let booking = { status: &quot;pending&quot;, _id: &quot;6055cb33062eb5153c089122&quot;, title: &quot;title2&quot;,             description: &quot;test description&quot;, user: &quot;id&quot;, team: &quot;id&quot; }
console.log(&quot;index &amp;gt;&amp;gt;&amp;gt; &quot;, findIndex(booking))
//output : 1
    
//test 2
booking = { status: &quot;rejected&quot;, _id: &quot;6055cb33062eb5153c089198&quot;, title: &quot;title3&quot;,                 description: &quot;test description&quot;, user: &quot;id&quot;, team: &quot;id&quot; }
console.log(&quot;index &amp;gt;&amp;gt;&amp;gt; &quot;, findIndex(booking))
//output : -1
    
//test 3
const id = '6055cb3d062eb5153c089123'
console.log(&quot;index &amp;gt;&amp;gt;&amp;gt; &quot;, findIndex({ _id: id }))
//output : 2&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;아직 언급할 수 없기 때문에 Umair Ahmed가 게시한 방법을 바탕으로 사용한 솔루션을 보여주고 싶지만 값이 아닌 키를 검색하고 싶을 때:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[{&quot;a&quot;:true}, {&quot;f&quot;:true}, {&quot;g&quot;:false}]
.findIndex(function(element){return Object.keys(element)[0] == &quot;g&quot;});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확장된 질문에 답하지 않는 것은 이해하지만, 제목에 각각의 대상에게 무엇을 원했는지 명시된 것은 아니기 때문에, 저는 이것을 겸손하게 공유하여 미래의 다른 사람들에게 두통을 덜어주고 싶지만, 그것이 가장 빠른 해결책은 아닐 수도 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;var test = [
  {id:1, test: 1},
  {id:2, test: 2},
  {id:2, test: 2}
];

var result = test.findIndex(findIndex, '2');

console.log(result);

function findIndex(object) {
  return object.id == this;
}
&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;인덱스 1을 반환합니다(ES 2016에서만 작동).&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 방법은 아무리 깊이 있게 중첩해도 객체의 어떤 값과도 비교하기가 쉬워 마음에 듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; while(i&amp;lt;myArray.length &amp;amp;&amp;amp; myArray[i].data.value!==value){
  i++; 
}
// i now hows the index value for the match. 
 console.log(&quot;Index -&amp;gt;&quot;,i );
&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;URL : https://stackoverflow.com/questions/10557486/in-an-array-of-objects-fastest-way-to-find-the-index-of-an-object-whose-attribu&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>Javascript</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/753</guid>
      <comments>https://bestsource.tistory.com/753#entry753comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:26:00 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트 폐쇄가 가비지 수집 방법</title>
      <link>https://bestsource.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;자바스크립트 폐쇄가 가비지 수집 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 &lt;a href=&quot;http://crbug.com/315190&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;Chrome 버그&lt;/a&gt;를 기록했습니다. 이로 인해 코드에 많은 심각하고 명확하지 않은 메모리 누수가 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(이러한 결과는 Chrome Dev Tools의 &lt;a href=&quot;https://developers.google.com/chrome-developer-tools/docs/heap-profiling&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-1&quot;&gt;메모리 프로파일러&lt;/a&gt;를 사용합니다. 이 프로파일러는 GC를 실행한 다음 가비지되지 않은 모든 것의 힙 스냅샷을 만듭니다.)&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;someClass&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;인스턴스(instance) 가비지 수집(good):&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var someClass = function() {};

function f() {
  var some = new someClass();
  return function() {};
}

window.f_ = f();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 이런 경우에는 쓰레기 수집이 되지 않습니다(나쁨).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var someClass = function() {};

function f() {
  var some = new someClass();
  function unreachable() { some; }
  return function() {};
}

window.f_ = f();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 그에 상응하는 스크린샷:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZSVf0.png&quot; alt=&quot;screenshot of Chromebug&quot;&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;function() {}&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;개체가 동일한 컨텍스트에서 다른 개체에 의해 참조되는 경우 해당 개체 자체에 도달할 수 있는지 여부와 상관없이 모든 개체 &quot;alive&quot;을 유지합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 질문은 다른 브라우저(IE 9+ 및 Firefox)에서 폐쇄의 가비지 컬렉션에 대한 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 자바스크립트 힙 프로파일러와 같은 웹킷의 도구는 잘 알고 있지만, 다른 브라우저의 도구는 거의 알지 못해서 이것을 테스트할 수 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IE9+와 Firefox 가비지가 수집하는 세 가지 경우 중 어느 것이&lt;/font&gt;&lt;/strong&gt; &lt;code&gt;someClass&lt;/code&gt; &lt;strong papago-id=&quot;11&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;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 알기로는 이건 버그가 아니라 예상되는 행동입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모질라의 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management&quot; papago-id=&quot;13-1&quot;&gt;메모리 관리 페이지&lt;/a&gt;에서: &quot;2012년 현재, 모든 최신 브라우저는 마크 앤 스위프 가비지 콜렉터를 제공합니다.&quot; &lt;strong papago-id=&quot;13-3&quot;&gt;&quot;제한:&lt;/strong&gt; &lt;strong papago-id=&quot;13-3&quot;&gt;&lt;em papago-id=&quot;13-3-1&quot;&gt;객체는 명시적으로 도달&lt;/em&gt;&lt;/strong&gt;할 수 없도록 &lt;strong papago-id=&quot;13-3&quot;&gt;&lt;em papago-id=&quot;13-3-1&quot;&gt;만들어야 합니다&lt;/em&gt;.&quot;&lt;/strong&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;some&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;폐쇄 상태에서 여전히 도달할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 두 가지 방법으로 연결이 안 되게 하고 둘 다 작동하도록 노력했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 중 하나를 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;some=null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 이상 필요 없을 때, 혹은 당신이 설정할 때&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;window.f_ = null;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사라질 겁니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;갱신하다&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;윈도우에서 크롬 30, FF25, 오페라 12, IE10에서 시도해 보았습니다.&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;a href=&quot;http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf&quot; papago-id=&quot;20-1&quot;&gt;표준&lt;/a&gt;은 쓰레기 수거에 대해 아무 말도 하지 않고, 어떤 일이 일어나야 하는지에 대한 단서를 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;섹션 13 기능 정의, 단계 4: &quot;닫힘이 13에 명시된 새로운 기능 객체를 생성한 결과라고 가정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;2&quot;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;섹션 13.2 &quot;범위로 명시된 어휘 환경&quot; (범위 = 폐쇄)&lt;/font&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;섹션 10.2 어휘 환경:&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&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;&quot;(내부) 렉시컬 환경의 외부 참조는 논리적으로 내부 렉시컬 환경을 둘러싸고 있는 렉시컬 환경에 대한 참조입니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 어휘 환경에는 당연히 자체적인 외부 어휘 환경이 있을 수 있습니다.&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;25-1&quot;&gt;함수 선언&lt;/em&gt;에 두 개의 중첩 &lt;em papago-id=&quot;25-3&quot;&gt;함수 선언&lt;/em&gt;이 포함되어 있는 경우, 각 중첩 함수의 어휘 환경은 외부 어휘 환경으로서 주변 함수의 현재 실행의 어휘 환경을 갖게 됩니다.&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 기능은 부모의 환경에 접근할 수 있습니다.&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;some&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;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 왜 항상 이용할 수 없는 겁니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;Chrome과 FF는 경우에 따라 변수를 제거할 수 있을 정도로 똑똑하지만, Opera와 IE 모두에서&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;some&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;변수는 폐쇄에서 사용할 수 있습니다(NB: 이 설정을 보려면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;return null&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;GC는 다음을 감지할 수 있도록 개선될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;some&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수에 사용되거나 사용되지 않지만 복잡해질 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;var someClass = function() {};

function f() {
  var some = new someClass();
  return function(code) {
    console.log(eval(code));
  };
}

window.f_ = f();
window.f_('some');
&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;예를 들어 위의 GC에는 변수가 사용되는지 여부를 알 수 있는 방법이 없습니다(Chrome30, FF25, Opera 12 및 IE10에서 코드 테스트 및 작동).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 값을 할당하여 개체에 대한 참조가 끊어지면 메모리가 해제됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;window.f_&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각에 이건 버그가 아닙니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IE9+와 Firefox에서 테스트했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function f() {
  var some = [];
  while(some.length &amp;lt; 1e6) {
    some.push(some.length);
  }
  function g() { some; } //removing this fixes a massive memory leak
  return function() {};   //or removing this
}

var a = [];
var interval = setInterval(function() {
  var len = a.push(f());
  if(len &amp;gt;= 500) {
    clearInterval(interval);
  }
}, 10);
&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;a href=&quot;https://s3.amazonaws.com/chromebugs/memory.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;41-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;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 500명의 사람들로 마무리하고 싶었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;function() {}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최소한의 메모리를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;불행하게도, 그것은 사실이 아니었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 빈 함수는 백만 개 숫자의 배열을 유지합니다(영원히 도달할 수 없지만 GC'ed는 아님).&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;크롬은 결국 중단되어 소멸되고, 파이어폭스는 거의 4GB의 RAM을 사용한 후 전체 작업을 완료하며, IE는 &quot;메모리 부족&quot;을 표시할 때까지 점진적으로 느려집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주석이 달린 줄 중 하나만 제거하면 모든 것이 해결됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 세 브라우저(Chrome, Firefox, IE) 모두 폐쇄가 아닌 컨텍스트별로 환경 기록을 유지하는 것으로 보입니다.&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&gt;&lt;code&gt;some&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(여기서 사용한 건 아니지만, 사용했다고 상상해보세요), 만약 대신에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function g() { some; }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var g = (function(some) { return function() { some; }; )(some);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 나의 다른 기능과 다른 맥락으로 닫힘으로써 기억 문제를 해결할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 제 삶을 훨씬 더 지루하게 만들 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추신. 호기심으로 자바에서 시도해 보았습니다. (기능 안에서 클래스를 정의하는 기능을 사용하여)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;GC는 원래 자바스크립트를 바라던 대로 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;휴리스틱은 다양하지만, 이와 같은 것을 구현하는 일반적인 방법은 각 호출에 대한 환경 레코드를 생성하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;f()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 경우에는, 그리고 오직 지역 주민들만 저장해두죠.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;f&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;em papago-id=&quot;23-1&quot;&gt;의해&lt;/em&gt;) 해당 환경 기록에 실제로 폐쇄된 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음으로 전화를 걸 때 어떤 폐쇄가 생겨났는지에 대해&lt;/font&gt;&lt;/font&gt;&lt;code&gt;f&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;환경 기록을 유지할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;적어도 파이어폭스가 폐쇄를 구현하는 방법은 이렇다고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 폐쇄형 변수에 빠르게 액세스할 수 있고 구현이 간단하다는 이점이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;관찰된 효과의 단점을 가지고 있는데, 어떤 변수에 대해 짧은 기간의 폐쇄로 인해 수명이 긴 폐쇄로 인해 수명이 유지된다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;ol&gt; 
 &lt;li papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 호출 간 상태 유지 함수 add()가 있고 여러 호출에서 전달된 모든 값을 추가하고 합계를 반환하려고 한다고 가정합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;add(5)와 같이; // returns 5&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;add(20); // 25(5+20)을 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;add(3); // 28(25 + 3)을 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 두 가지 방법은 &lt;strong papago-id=&quot;64-1&quot;&gt;정규 변수&lt;/strong&gt;를 정의하는 것입니다. 물론, 전체를 유지하기 위해 전역 변수를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 당신이 글로벌을 사용한다면 이 남자가 당신을 산 채로 잡아먹을 것임을 명심하세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;65-3&quot;&gt;글로벌 변수&lt;/strong&gt;를 정의하지 않고 &lt;strong papago-id=&quot;65-1&quot;&gt;클로징을 사용&lt;/strong&gt;하는 최신 방법&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;(function(){

  var addFn = function addFn(){

    var total = 0;
    return function(val){
      total += val;
      return total;
    }

  };

  var add = addFn();

  console.log(add(5));
  console.log(add(20));
  console.log(add(3));
  
}());&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 Country(){
    console.log(&quot;makesure country call&quot;);	
   return function State(){
   
    var totalstate = 0;	
	
	if(totalstate==0){	
	
	console.log(&quot;makesure statecall&quot;);	
	return function(val){
      totalstate += val;	 
      console.log(&quot;hello:&quot;+totalstate);
	   return totalstate;
    }	
	}else{
	 console.log(&quot;hey:&quot;+totalstate);
	}
	 
  };  
};

var CA=Country();
 
 var ST=CA();
 ST(5); //we have add 5 state
 ST(6); //after few year we requare  have add new 6 state so total now 11
 ST(4);  // 15
 
 var CB=Country();
 var STB=CB();
 STB(5); //5
 STB(8); //13
 STB(3);  //16

 var CX=Country;
 var d=Country();
 console.log(CX);  //store as copy of country in CA
 console.log(d);  //store as return in country function in d&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(){

   function addFn(){

    var total = 0;
	
	if(total==0){	
	return function(val){
      total += val;	 
      console.log(&quot;hello:&quot;+total);
	   return total+9;
    }	
	}else{
	 console.log(&quot;hey:&quot;+total);
	}
	 
  };

   var add = addFn();
   console.log(add);  
   

    var r= add(5);  //5
	console.log(&quot;r:&quot;+r); //14 
	var r= add(20);  //25
	console.log(&quot;r:&quot;+r); //34
	var r= add(10);  //35
	console.log(&quot;r:&quot;+r);  //44
	
	
var addB = addFn();
	 var r= addB(6);  //6
	 var r= addB(4);  //10
	  var r= addB(19);  //29
    
  
}());&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/19798803/how-javascript-closures-are-garbage-collected&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>Javascript</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/752</guid>
      <comments>https://bestsource.tistory.com/752#entry752comment</comments>
      <pubDate>Tue, 31 Oct 2023 22:25:51 +0900</pubDate>
    </item>
    <item>
      <title>환경의 현재 로케일을 가져오는 방법은 무엇입니까?</title>
      <link>https://bestsource.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;환경의 현재 로케일을 가져오는 방법은 무엇입니까?&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;Linux에서 코드를 따르려고 했지만 항상 'C'를 다른 코드로 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;LANG&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;pre&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;locale.h&amp;gt;
#include &amp;lt;locale&amp;gt;
using namespace std;

int main()
{
    cout&amp;lt;&amp;lt;&quot;locale 1: &quot;&amp;lt;&amp;lt;setlocale(LC_ALL, NULL)&amp;lt;&amp;lt;endl;
    cout&amp;lt;&amp;lt;&quot;locale 2: &quot;&amp;lt;&amp;lt;setlocale(LC_CTYPE, NULL)&amp;lt;&amp;lt;endl;

    locale l;
    cout&amp;lt;&amp;lt;&quot;locale 3: &quot;&amp;lt;&amp;lt;l.name()&amp;lt;&amp;lt;endl;
}

$ ./a.out
locale 1: C
locale 2: C
locale 3: C
$
$ export LANG=zh_CN.UTF-8
$ ./a.out
locale 1: C
locale 2: C
locale 3: 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;Linux(Ubuntu 등)에서 현재 로케일 설정을 가져오려면 어떻게 해야 합니까?&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;또 다른 질문은 Windows(윈도우)에서 로케일을 가져오는 방법이 동일한가 하는 것입니다.&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;man 3 setlocale&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(새로운 격언: &quot;의심스러울 때는 맨페이지 전체를 읽으십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로케일의 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 수정해야 할 로케일의 각 부분은 환경 변수에 따라 설정됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&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;setlocale&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;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;locale.h&amp;gt;
using namespace std;

int main()
{
    setlocale(LC_ALL, &quot;&quot;);
    cout &amp;lt;&amp;lt; &quot;LC_ALL: &quot; &amp;lt;&amp;lt; setlocale(LC_ALL, NULL) &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;LC_CTYPE: &quot; &amp;lt;&amp;lt; setlocale(LC_CTYPE, NULL) &amp;lt;&amp;lt; endl;
    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템이 지원하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;zh_CN&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 papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$ ./a. 밖으로&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LC_&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ALL: en_US.utf8&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LC_CTYPE : en_US.utf8&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;$ 내보내기 LANG=zh_CN.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;UTF-8&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;$ ./a. 밖으로&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LC_&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ALL: C&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LC_CTYPE: C&lt;/font&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;Windows:&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 로케일에 대해서는 전혀 모릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://social.msdn.microsoft.com/Search/en-US?query=locale&amp;amp;ac=8&quot; rel=&quot;noreferrer&quot; papago-id=&quot;14-2&quot;&gt;MSDN 검색&lt;/a&gt;부터 시작해서 질문이 있을 경우 &lt;em papago-id=&quot;14-4&quot;&gt;별도&lt;/em&gt;의 Stack Overflow 질문을 여는 것을 권장합니다.&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;방금 C++로 로케일을 가져오는 방법을 찾았습니다. std::locale을 구성하기 위해 빈 문자열 &quot;&quot;을 사용하면 setlocale(LC_ALL, &quot;)과 동일한 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;locale l(&quot;&quot;);
cout&amp;lt;&amp;lt;&quot;Locale by C++: &quot;&amp;lt;&amp;lt;l.name()&amp;lt;&amp;lt;endl;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;a href=&quot;http://stdcxx.apache.org/doc/stdlibug/24-3.html&quot; papago-id=&quot;16-1&quot;&gt;링크&lt;/a&gt;에서는 C 로케일과 C++ 로케일 간의 세부 정보 차이를 설명했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows의 경우 다음 코드를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;LCID lcid = GetThreadLocale();
wchar_t name[LOCALE_NAME_MAX_LENGTH];
if (LCIDToLocaleName(lcid, name, LOCALE_NAME_MAX_LENGTH, 0) == 0)
    error(GetLastError());
std::wcout &amp;lt;&amp;lt; L&quot;Locale name = &quot; &amp;lt;&amp;lt; name &amp;lt;&amp;lt; std::endl;
&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;en-US&quot;와 같은 것을 인쇄할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하위 언어 정보를 삭제하려면 다음을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;wchar_t parentLocateName[LOCALE_NAME_MAX_LENGTH];
if (GetLocaleInfoEx(name, LOCALE_SPARENT, parentLocateName, LOCALE_NAME_MAX_LENGTH) == 0)
    error(GetLastError());
std::wcout &amp;lt;&amp;lt; L&quot;parentLocateName = &quot; &amp;lt;&amp;lt; parentLocateName &amp;lt;&amp;lt; std::endl;
&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;이렇게 하면 그냥 &quot;en&quot;이 나옵니다.&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;std:: locale는 부스트:: 보다 신뢰할 수 있는 정보를 반환할 수 있는 locale을 고려하는 것이 좋습니다 - http://www.boost.org/doc/libs/1_52_0/libs/locale/doc/html/locale_information.html 를 참조하십시오.&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;boost::locale::info는 다음과 같은 멤버 기능을 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;std::string name() -- the full name of the locale, for example en_US.UTF-8
std::string language() -- the ISO-639 language code of the current locale, for example &quot;en&quot;.
std::string country() -- the ISO-3199 country code of the current locale, for example &quot;US&quot;.
std::string variant() -- the variant of current locale, for example &quot;euro&quot;.
std::string encoding() -- the encoding used for char based strings, for example &quot;UTF-8&quot;
bool utf8() -- a fast way to check whether the encoding is UTF-8.
&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;a href=&quot;https://en.cppreference.com/w/cpp/locale/locale/locale&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;10-1&quot;&gt;기본&lt;/a&gt; 생성자&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::locale&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 글로벌 C++ 로케일의 복사본을 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 로케일의 이름을 가져오려면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;std::cout &amp;lt;&amp;lt; std::locale().name() &amp;lt;&amp;lt; '\n';
&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/12170488/how-to-get-current-locale-of-my-environment&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>c</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/751</guid>
      <comments>https://bestsource.tistory.com/751#entry751comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:18:38 +0900</pubDate>
    </item>
    <item>
      <title>시작은 없고, 기능은 바둑에서 끝납니까?</title>
      <link>https://bestsource.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;시작은 없고, 기능은 바둑에서 끝납니까?&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;Go 프로그래밍 언어의 표준 라이브러리의 일부로 시작, 종료 등과 같은 표준 기능이 없는 이유는 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://golang.org/pkg/strings&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-1&quot;&gt;문자열&lt;/a&gt; 패키지에는 &lt;a href=&quot;http://golang.org/pkg/strings/#HasPrefix&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-3&quot;&gt;HasPrefix&lt;/a&gt; 및 &lt;a href=&quot;http://golang.org/pkg/strings/#HasSuffix&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-5&quot;&gt;HasSufix&lt;/a&gt;가 포함되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import &quot;strings&quot;

startsWith := strings.HasPrefix(&quot;prefix&quot;, &quot;pre&quot;) // true
endsWith := strings.HasSuffix(&quot;suffix&quot;, &quot;fix&quot;) // true
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://play.golang.org/p/c8TQuCk-U9&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;play.golang.org&lt;/font&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;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;package main

import (
   &quot;bytes&quot;
   &quot;fmt&quot;
)

func main() {
   fmt.Println(bytes.HasPrefix([]byte(&quot;Gopher&quot;), []byte(&quot;Go&quot;)))
   fmt.Println(bytes.HasPrefix([]byte(&quot;Gopher&quot;), []byte(&quot;C&quot;)))
   fmt.Println(bytes.HasPrefix([]byte(&quot;Gopher&quot;), []byte(&quot;&quot;)))
}
&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;HTTP 요청을 읽거나 로컬 파일을 읽을 때 유용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://golang.org/pkg/bytes#HasPrefix&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://golang.org/pkg/bytes#HasPrefix&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://golang.org/pkg/bytes#HasSuffix&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://golang.org/pkg/bytes#HasSuffix&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/13244048/no-startswith-endswith-functions-in-go&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>string</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/750</guid>
      <comments>https://bestsource.tistory.com/750#entry750comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:18:31 +0900</pubDate>
    </item>
    <item>
      <title>Google Maps V3 - 주어진 경계에 대한 줌 레벨을 계산하는 방법</title>
      <link>https://bestsource.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;Google Maps V3 - 주어진 경계에 대한 줌 레벨을 계산하는 방법&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;다음과 같이 Google Maps V3 API를 사용하여 주어진 경계에 대한 줌 레벨을 계산하는 방법을 찾고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getBoundsZoomLevel()&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;V2 API에 포함되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 하고 싶은 일은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;// These are exact bounds previously captured from the map object
var sw = new google.maps.LatLng(42.763479, -84.338918);
var ne = new google.maps.LatLng(42.679488, -84.524313);
var bounds = new google.maps.LatLngBounds(sw, ne);
var zoom = // do some magic to calculate the zoom level

// Set the map to these exact bounds
map.setCenter(bounds.getCenter());
map.setZoom(zoom);

// NOTE: fitBounds() will not work
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유감스럽게도 저는 사용할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fitBounds()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 특정한 사용 사례를 위한 방법.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지도에 마커를 맞추는 데는 잘 작동하지만 정확한 경계를 설정하는 데는 잘 작동하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 사용할 수 없는 이유에 대한 예가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fitBounds()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;map.fitBounds(map.getBounds()); // not what you expect
&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;font class=&quot;papago-parent&quot;&gt;완전한 솔루션은 위도에 필요한 확대/축소 수준과 경도에 필요한 확대/축소 수준을 계산한 다음 둘 중 작은 것(더 멀리)을 취해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위도와 경도를 모두 사용하는 함수는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function getBoundsZoomLevel(bounds, mapDim) {
    var WORLD_DIM = { height: 256, width: 256 };
    var ZOOM_MAX = 21;

    function latRad(lat) {
        var sin = Math.sin(lat * Math.PI / 180);
        var radX2 = Math.log((1 + sin) / (1 - sin)) / 2;
        return Math.max(Math.min(radX2, Math.PI), -Math.PI) / 2;
    }

    function zoom(mapPx, worldPx, fraction) {
        return Math.floor(Math.log(mapPx / worldPx / fraction) / Math.LN2);
    }

    var ne = bounds.getNorthEast();
    var sw = bounds.getSouthWest();

    var latFraction = (latRad(ne.lat()) - latRad(sw.lat())) / Math.PI;

    var lngDiff = ne.lng() - sw.lng();
    var lngFraction = ((lngDiff &amp;lt; 0) ? (lngDiff + 360) : lngDiff) / 360;

    var latZoom = zoom(mapDim.height, WORLD_DIM.height, latFraction);
    var lngZoom = zoom(mapDim.width, WORLD_DIM.width, lngFraction);

    return Math.min(latZoom, lngZoom, ZOOM_MAX);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;kbd&gt;&lt;a href=&quot;http://jsfiddle.net/john_s/BHHs8/6/&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;Demo on jsfiddle&lt;/strong&gt;&lt;/a&gt;&lt;/kbd&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개변수:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;bounds&quot; 매개 변수 값은 다음 값이어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;google.maps.LatLngBounds&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;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;mapDim&quot; 매개 변수 값은 맵을 표시하는 DOM 요소의 높이와 너비를 나타내는 &quot;높이&quot; 및 &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;/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;jQuery 라이브러리를 사용하는 경우,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mapDim&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값은 다음과 같이 구할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var $mapDiv = $('#mapElementId');
var mapDim = { height: $mapDiv.height(), width: $mapDiv.width() };
&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;프로토타입 라이브러리를 사용하는 경우 다음과 같이 mapDim 값을 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var mapDim = $('mapElementId').getDimensions();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반환 값:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반환 값은 전체 경계를 계속 표시하는 최대 줌 레벨입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 값은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 최대 줌 레벨을 포함합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최대 줌 레벨은 21 입니다. (Google Maps API v2의 경우 19개에 불과했던 것 같습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설명:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구글 지도는 Mercator 프로젝션을 사용합니다.&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;그러나 Google 지도에는 북위 약 85도 이상 또는 남위 약 -85도 이하의 위도가 표시되지 않습니다. (&lt;a href=&quot;https://developers.google.com/maps/documentation/javascript/maptypes#WorldCoordinates&quot; rel=&quot;noreferrer&quot; papago-id=&quot;21-1&quot;&gt;참조&lt;/a&gt;) (실제 컷오프는 +/-85.0511287980658도에서 계산합니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 경도보다 위도의 경우 경계에 대한 분수 계산이 더 복잡해집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 위도 분율을 계산하기 위해 &lt;a href=&quot;https://en.wikipedia.org/wiki/Mercator_projection&quot; rel=&quot;noreferrer&quot; papago-id=&quot;22-1&quot;&gt;위키피디아의 공식&lt;/a&gt;을 사용했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;구글 지도에서 사용하는 프로젝션과 일치한다고 가정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;결국 제가 위에 링크한 구글 지도 문서 페이지에는 같은 위키피디아 페이지로 연결되는 링크가 포함되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&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;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;줌 레벨의 범위는 0부터 최대 줌 레벨까지입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Zoom level 0은 지도가 완전히 축소된 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;레벨이 높을수록 지도를 더 확대합니다. (&lt;a href=&quot;https://developers.google.com/maps/documentation/javascript/tutorial#MapOptions&quot; rel=&quot;noreferrer&quot; papago-id=&quot;24-1&quot;&gt;참조&lt;/a&gt;)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;줌 레벨 0에서는 256 x 256 픽셀의 영역에 전 세계를 표시할 수 있습니다. (&lt;a href=&quot;https://developers.google.com/maps/documentation/javascript/maptypes#WorldCoordinates&quot; rel=&quot;noreferrer&quot; papago-id=&quot;25-1&quot;&gt;참조&lt;/a&gt;)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 더 높은 줌 레벨에 대해 동일한 영역을 표시하는 데 필요한 픽셀 수는 너비와 높이 모두에서 두 배로 증가합니다. (&lt;a href=&quot;https://developers.google.com/maps/documentation/javascript/maptypes#PixelCoordinates&quot; rel=&quot;noreferrer&quot; papago-id=&quot;26-1&quot;&gt;참조&lt;/a&gt;).&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지도는 세로 방향으로 감겨지지만, 세로 방향으로는 감겨지지 않습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구글 그룹에도 비슷한 질문이 올라왔습니다: http://groups.google.com/group/google-maps-js-api-v3/browse_thread/thread/e6448fc197c3c892&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확대/축소 수준은 개별적이며, 각 단계에서 스케일이 두 배로 증가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 일반적으로 특정 지도 크기에 대해 운이 좋은 경우가 아니라면 원하는 범위를 정확하게 맞출 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;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;Mercator 투영은 위도를 왜곡하지만 경도의 차이는 항상 지도 너비의 동일한 부분(도/360의 각도 차이)을 나타냅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;줌 제로에서는 전 세계 지도가 256x256 픽셀이며, 각 레벨을 줌으로 하면 너비와 높이가 두 배로 증가합니다.&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;var GLOBE_WIDTH = 256; // a constant in Google's map projection
var west = sw.lng();
var east = ne.lng();
var angle = east - west;
if (angle &amp;lt; 0) {
  angle += 360;
}
var zoom = Math.round(Math.log(pixelWidth * 360 / angle / GLOBE_WIDTH) / Math.LN2);
&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;API 버전 3의 경우 다음과 같이 간단하며 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var latlngList = [];
latlngList.push(new google.maps.LatLng(lat, lng));

var bounds = new google.maps.LatLngBounds();
latlngList.each(function(n) {
    bounds.extend(n);
});

map.setCenter(bounds.getCenter()); //or use custom center
map.fitBounds(bounds);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 몇 가지 선택적인 트릭:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//remove one zoom level to ensure no marker is on the edge.
map.setZoom(map.getZoom() - 1); 

// set a minimum zoom 
// if you got only 1 marker or all markers are on the same address map will be zoomed too much.
if(map.getZoom() &amp;gt; 15){
    map.setZoom(15);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다트 버전:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  double latRad(double lat) {
    final double sin = math.sin(lat * math.pi / 180);
    final double radX2 = math.log((1 + sin) / (1 - sin)) / 2;
    return math.max(math.min(radX2, math.pi), -math.pi) / 2;
  }

  double getMapBoundZoom(LatLngBounds bounds, double mapWidth, double mapHeight) {
    final LatLng northEast = bounds.northEast;
    final LatLng southWest = bounds.southWest;

    final double latFraction = (latRad(northEast.latitude) - latRad(southWest.latitude)) / math.pi;

    final double lngDiff = northEast.longitude - southWest.longitude;
    final double lngFraction = ((lngDiff &amp;lt; 0) ? (lngDiff + 360) : lngDiff) / 360;

    final double latZoom = (math.log(mapHeight / 256 / latFraction) / math.ln2).floorToDouble();
    final double lngZoom = (math.log(mapWidth / 256 / lngFraction) / math.ln2).floorToDouble();

    return math.min(latZoom, lngZoom);
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코틀린 버전의 함수는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;fun getBoundsZoomLevel(bounds: LatLngBounds, mapDim: Size): Double {
        val WORLD_DIM = Size(256, 256)
        val ZOOM_MAX = 21.toDouble();

        fun latRad(lat: Double): Double {
            val sin = Math.sin(lat * Math.PI / 180);
            val radX2 = Math.log((1 + sin) / (1 - sin)) / 2;
            return max(min(radX2, Math.PI), -Math.PI) /2
        }

        fun zoom(mapPx: Int, worldPx: Int, fraction: Double): Double {
            return floor(Math.log(mapPx / worldPx / fraction) / Math.log(2.0))
        }

        val ne = bounds.northeast;
        val sw = bounds.southwest;

        val latFraction = (latRad(ne.latitude) - latRad(sw.latitude)) / Math.PI;

        val lngDiff = ne.longitude - sw.longitude;
        val lngFraction = if (lngDiff &amp;lt; 0) { (lngDiff + 360) / 360 } else { (lngDiff / 360) }

        val latZoom = zoom(mapDim.height, WORLD_DIM.height, latFraction);
        val lngZoom = zoom(mapDim.width, WORLD_DIM.width, lngFraction);

        return minOf(latZoom, lngZoom, ZOOM_MAX)
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;높은 지지를 받은 어떤 답변도 제게 맞지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들은 정의되지 않은 다양한 오류를 던져 결국 각도에 대한 inf/n을 계산했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마도 LatLngBounds의 행동이 시간이 지남에 따라 변화한 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든 저는 이 코드가 제 요구에 맞는다는 것을 알게 되었습니다. 아마도 누군가에게 도움이 될 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function latRad(lat) {
  var sin = Math.sin(lat * Math.PI / 180);
  var radX2 = Math.log((1 + sin) / (1 - sin)) / 2;
  return Math.max(Math.min(radX2, Math.PI), -Math.PI) / 2;
}

function getZoom(lat_a, lng_a, lat_b, lng_b) {

      let latDif = Math.abs(latRad(lat_a) - latRad(lat_b))
      let lngDif = Math.abs(lng_a - lng_b)

      let latFrac = latDif / Math.PI 
      let lngFrac = lngDif / 360 

      let lngZoom = Math.log(1/latFrac) / Math.log(2)
      let latZoom = Math.log(1/lngFrac) / Math.log(2)

      return Math.min(lngZoom, latZoom)

}
&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;추적해야 할 점들 중에서 최대 및 최소 좌표를 찾고 경로가 매우 &quot;수직&quot;인 경우를 대비하여 몇 줄의 코드를 추가했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var GLOBE_WIDTH = 256; // a constant in Google's map projection
var west = &amp;lt;?php echo $minLng; ?&amp;gt;;
var east = &amp;lt;?php echo $maxLng; ?&amp;gt;;
*var north = &amp;lt;?php echo $maxLat; ?&amp;gt;;*
*var south = &amp;lt;?php echo $minLat; ?&amp;gt;;*
var angle = east - west;
if (angle &amp;lt; 0) {
    angle += 360;
}
*var angle2 = north - south;*
*if (angle2 &amp;gt; angle) angle = angle2;*
var zoomfactor = Math.round(Math.log(960 * 360 / angle / GLOBE_WIDTH) / Math.LN2);
&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;실제로 이상적인 줌 팩터는 줌 팩터-1입니다.&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;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 매우 유용한 자바스크립트 파일이 있었습니다: http://www.polyarc.us/adjust.js&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;var com = com || {};
com.local = com.local || {};
com.local.gmaps3 = com.local.gmaps3 || {};

com.local.gmaps3.CoordinateUtils = new function() {

   var OFFSET = 268435456;
   var RADIUS = OFFSET / Math.PI;

   /**
    * Gets the minimum zoom level that entirely contains the Lat/Lon bounding rectangle given.
    *
    * @param {google.maps.LatLngBounds} boundary the Lat/Lon bounding rectangle to be contained
    * @param {number} mapWidth the width of the map in pixels
    * @param {number} mapHeight the height of the map in pixels
    * @return {number} the minimum zoom level that entirely contains the given Lat/Lon rectangle boundary
    */
   this.getMinimumZoomLevelContainingBounds = function ( boundary, mapWidth, mapHeight ) {
      var zoomIndependentSouthWestPoint = latLonToZoomLevelIndependentPoint( boundary.getSouthWest() );
      var zoomIndependentNorthEastPoint = latLonToZoomLevelIndependentPoint( boundary.getNorthEast() );
      var zoomIndependentNorthWestPoint = { x: zoomIndependentSouthWestPoint.x, y: zoomIndependentNorthEastPoint.y };
      var zoomIndependentSouthEastPoint = { x: zoomIndependentNorthEastPoint.x, y: zoomIndependentSouthWestPoint.y };
      var zoomLevelDependentSouthEast, zoomLevelDependentNorthWest, zoomLevelWidth, zoomLevelHeight;
      for( var zoom = 21; zoom &amp;gt;= 0; --zoom ) {
         zoomLevelDependentSouthEast = zoomLevelIndependentPointToMapCanvasPoint( zoomIndependentSouthEastPoint, zoom );
         zoomLevelDependentNorthWest = zoomLevelIndependentPointToMapCanvasPoint( zoomIndependentNorthWestPoint, zoom );
         zoomLevelWidth = zoomLevelDependentSouthEast.x - zoomLevelDependentNorthWest.x;
         zoomLevelHeight = zoomLevelDependentSouthEast.y - zoomLevelDependentNorthWest.y;
         if( zoomLevelWidth &amp;lt;= mapWidth &amp;amp;&amp;amp; zoomLevelHeight &amp;lt;= mapHeight )
            return zoom;
      }
      return 0;
   };

   function latLonToZoomLevelIndependentPoint ( latLon ) {
      return { x: lonToX( latLon.lng() ), y: latToY( latLon.lat() ) };
   }

   function zoomLevelIndependentPointToMapCanvasPoint ( point, zoomLevel ) {
      return {
         x: zoomLevelIndependentCoordinateToMapCanvasCoordinate( point.x, zoomLevel ),
         y: zoomLevelIndependentCoordinateToMapCanvasCoordinate( point.y, zoomLevel )
      };
   }

   function zoomLevelIndependentCoordinateToMapCanvasCoordinate ( coordinate, zoomLevel ) {
      return coordinate &amp;gt;&amp;gt; ( 21 - zoomLevel );
   }

   function latToY ( lat ) {
      return OFFSET - RADIUS * Math.log( ( 1 + Math.sin( lat * Math.PI / 180 ) ) / ( 1 - Math.sin( lat * Math.PI / 180 ) ) ) / 2;
   }

   function lonToX ( lon ) {
      return OFFSET + RADIUS * lon * Math.PI / 180;
   }

};
&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;OFFSET가 어디에서 왔는지 궁금하다면, 분명히 268435456은 줌 레벨 21에서 픽셀 단위로 지구 둘레의 절반입니다(http://www.appelsiini.net/2008/11/introduction-to-marker-clustering-with-google-maps) 에 따르면).&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;발레리오의 해결책은 거의 맞지만 논리적인 실수가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 각도2가 각도보다 큰지 확인하고 음의 값으로 360을 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 당신은 항상 각도보다 더 큰 값을 가집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 올바른 솔루션은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var west = calculateMin(data.longitudes);
var east = calculateMax(data.longitudes);
var angle = east - west;
var north = calculateMax(data.latitudes);
var south = calculateMin(data.latitudes);
var angle2 = north - south;
var zoomfactor;
var delta = 0;
var horizontal = false;

if(angle2 &amp;gt; angle) {
    angle = angle2;
    delta = 3;
}

if (angle &amp;lt; 0) {
    angle += 360;
}

zoomfactor = Math.floor(Math.log(960 * 360 / angle / GLOBE_WIDTH) / Math.LN2) - 2 - delta;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;델타는 제가 키보다 큰 폭을 가지고 있기 때문에 거기에 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;map.getBounds()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;순간적인 동작이 아니기 때문에 유사한 경우의 이벤트 핸들러를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 커피 대본에 있는 제 예시가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@map.fitBounds(@bounds)
google.maps.event.addListenerOnce @map, 'bounds_changed', =&amp;gt;
  @map.setZoom(12) if @map.getZoom() &amp;gt; 12
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업 예제에서 반응-구글-맵을 사용하여 평균 기본 센터 찾기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ES6&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const bounds = new google.maps.LatLngBounds();
paths.map((latLng) =&amp;gt; bounds.extend(new google.maps.LatLng(latLng)));
const defaultCenter = bounds.getCenter();
&amp;lt;GoogleMap
 defaultZoom={paths.length ? 12 : 4}
 defaultCenter={defaultCenter}
&amp;gt;
 &amp;lt;Marker position={{ lat, lng }} /&amp;gt;
&amp;lt;/GoogleMap&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Giles Gardam의 경도에 대한 확대/축소 수준 계산은 저에게 적합합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위도에 대한 확대/축소 배율을 계산하려면 다음과 같은 방법을 사용하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;double minLat = ...;
double maxLat = ...;
double midAngle = (maxLat+minLat)/2;
//alpha is the non-negative angle distance of alpha and beta to midangle
double alpha  = maxLat-midAngle;
//Projection screen is orthogonal to vector with angle midAngle
//portion of horizontal scale:
double yPortion = Math.sin(alpha*Math.pi/180) / 2;
double latZoom = Math.log(mapSize.height / GLOBE_WIDTH / yPortion) / Math.ln2;

//return min (max zoom) of both zoom levels
double zoom = Math.min(lngZoom, latZoom);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;줌 레벨을 계산하여 영역의 두 개의 교차 모서리가 포함된 지도를 표시하고 특정 높이의 화면 부분에 지도를 표시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;56-0&quot;&gt;좌표&lt;/strong&gt; 두 개 최대 lat/long min lat/long&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;57-0&quot;&gt;픽셀 높이로 표시 영역&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;      double getZoomLevelNew(context, 
             double maxLat, double maxLong, 
             double minLat, double minLong, 
             double height){
  try {
    double _zoom;
    MediaQueryData queryData2;
    queryData2 = MediaQuery.of(context);
    double _zLat =
        Math.log(
            (globals.factor(height) / queryData2.devicePixelRatio / 256.0) *
                180 / (maxLat - minLat).abs()) / Math.log(2);
    double _zLong =
        Math.log((globals.factor(MediaQuery
            .of(context)
            .size
            .width) / queryData2.devicePixelRatio / 256.0) * 360 /
            (maxLong - minLong).abs()) / Math.log(2);
    _zoom = Math.min(_zLat, _zLong)*globals.zoomFactorNew;
    if (_zoom &amp;lt; 0) {
      _zoom = 0;
    }
    return _zoom;
  } catch(e){
    print(&quot;getZoomLevelNew - excep - &quot; + e.toString());
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;빠른 버전용&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;func getBoundsZoomLevel(bounds: GMSCoordinateBounds, mapDim: CGSize) -&amp;gt; Double {
        var bounds = bounds
        let WORLD_DIM = CGSize(width: 256, height: 256)
        let ZOOM_MAX: Double = 21.0
        func latRad(_ lat: Double) -&amp;gt; Double {
            let sin2 = sin(lat * .pi / 180)
            let radX2 = log10((1 + sin2) / (1 - sin2)) / 2
            return max(min(radX2, .pi), -.pi) / 2
        }
        func zoom(_ mapPx: CGFloat,_ worldPx: CGFloat,_ fraction: Double) -&amp;gt; Double {
            return floor(log10(Double(mapPx) / Double(worldPx) / fraction / log10(2.0)))
        }
        let ne = bounds.northEast
        let sw = bounds.southWest
        let latFraction = (latRad(ne.latitude) - latRad(sw.latitude)) / .pi
        let lngDiff = ne.longitude - sw.longitude
        let lngFraction = lngDiff &amp;lt; 0 ? (lngDiff + 360) : (lngDiff / 360)
        let latZoom = zoom(mapDim.height, WORLD_DIM.height, latFraction);
        let lngZoom = zoom(mapDim.width, WORLD_DIM.width, lngFraction);
        return min(latZoom, lngZoom, ZOOM_MAX)
    }
&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;URL : https://stackoverflow.com/questions/6048975/google-maps-v3-how-to-calculate-the-zoom-level-for-a-given-bounds&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>Javascript</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/749</guid>
      <comments>https://bestsource.tistory.com/749#entry749comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:18:24 +0900</pubDate>
    </item>
    <item>
      <title>SQL 서버 저장 프로시저에서 삭제된 행 수 계산</title>
      <link>https://bestsource.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;SQL 서버 저장 프로시저에서 삭제된 행 수 계산&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL Server 2005에서 행을 삭제하고 &lt;strong papago-id=&quot;1-1&quot;&gt;실제로&lt;/strong&gt; 삭제된 행이 몇 개인지 알려주는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;select count(*)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 조건이지만, 저는 이것이 완전히 신뢰할 수 있는 것이 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 첫 번째 추측은 그 다음에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@@ROWCOUNT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수 - 예를 들어 설정되어 있지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;delete 
from mytable 
where datefield = '5-Oct-2008' 

select @@ROWCOUNT 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;항상 0을 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MSDN은 예를 들어, 건설을 제안합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;delete from mytable 
where datefield = '5-Oct-2008' 
output datefield into #doomed

select count(*) 
from #doomed
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구문 오류로 인해 실제로 실패합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;무슨 생각 있어요?&lt;/font&gt;&lt;/p&gt;&lt;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;SET NOCOUNT OFF&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;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL2000에서 이와 같은 정확한 목적으로 @@ROWCOUNT를 문제없이 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이 카운트를 확인하기 전에 실수로 이 카운트를 재설정하지 않도록 해야 합니다(BOL: '이 변수는 IF 문과 같이 행을 반환하지 않는 문에 의해 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;그냥 이렇게 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SET NOCOUNT off ;
SELECT @p1 = @@ROWCOUNT
&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;여기서 p1은 저장 프로시저에서 설정한 출력 파라미터입니다.&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;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 예를 들어보면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@@ROWCOUNT&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;SET NOCOUNT ON&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;a href=&quot;http://msdn.microsoft.com/en-us/library/ms189837.aspx&quot; papago-id=&quot;17-1&quot; rel=&quot;noreferrer&quot;&gt;MSDN&lt;/a&gt; @@ROWCOUNT 기능은 SET NOCOUNT가 ON인 경우에도 업데이트됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SET NOCOUNT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 후에 받는 메시지에만 영향을 미칩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 만약 당신이 그 결과를 가지고 일을 하려고 한다면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@@ROWCOUNT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 ADO에서.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그때 NET&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SET NOCOUNT ON&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분명히 도움이 될 겁니다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 수 없는 케이스를 찾았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@@rowcount&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 예를 들어, 총 카운트 대신 삭제된 값의 고유 카운트를 알고 싶을 때.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 다음을 수행해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;delete from mytable 
where datefield = '5-Oct-2008' 
output deleted.datefield into #doomed

select count(distinct datefield)
from #doomed
&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;OP의 구문 오류는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;output&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포함하지 않음&lt;/font&gt;&lt;/font&gt;&lt;code&gt;deleted&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 전에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;datefield&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;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;저장 프로시저의 반환 값(이 경우 0)과 행 집합 결과(이 경우 열이 하나인 단일 행) 간에 차이가 있기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ADO에서.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 전자는 매개 변수에 의해 액세스되고 후자는 SqlDataReader를 통해 액세스됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;혹시 절차의 반환 값을 행 수로 잘못 알고 계신 것은 아닐까요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 열로 임시 테이블을 만듭니다. ID.&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;삭제할 ID를 선택하는 임시 테이블에 삽입합니다.&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;id가 있는 테이블에서 삭제(temp table에서 id 선택)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/174143/counting-the-number-of-deleted-rows-in-a-sql-server-stored-procedure&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>sql-server</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/748</guid>
      <comments>https://bestsource.tistory.com/748#entry748comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:18:12 +0900</pubDate>
    </item>
    <item>
      <title>이미지 또는 스팬 태그를 사용하지 않고 CSS를 통해 UL/LI HTML 목록에서 Bullet 색상을 설정하는 방법</title>
      <link>https://bestsource.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;이미지 또는 스팬 태그를 사용하지 않고 CSS를 통해 UL/LI HTML 목록에서 Bullet 색상을 설정하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b papago-id=&quot;1-1&quot;&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/1470214/change-bullets-color-of-an-html-list-without-using-span&quot; dir=&quot;ltr&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;span을 사용하지 않고 HTML 목록의 글머리표 색 변경&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(13개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;닫힘&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;4-1&quot; title=&quot;2015-11-2008:07:24Z&quot; papago-attr-id=&quot;1&quot;&gt;7년 전&lt;/span&gt;에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
   &lt;p class=&quot;mb0 mt12&quot; papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지역사회는 &lt;span class=&quot;relativetime&quot; papago-id=&quot;5-1&quot; title=&quot;2022-06-09 12:57:10Z&quot; papago-attr-id=&quot;2&quot;&gt;작년&lt;/span&gt;에 이 질문을 재개할 것인지 검토하고 그것을 비공개로 했습니다.&lt;/font&gt;&lt;/p&gt; 
   &lt;blockquote class=&quot;mb0 mt12&quot;&gt; 
    &lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원래 근접 사유가 해결되지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
   &lt;/blockquote&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&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;li&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물건들이요. 자, 저는 총알들을 사각형 모양으로 정의했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt; list-style:square;&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;&amp;lt;li&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 있는 항목&lt;/font&gt;&lt;/font&gt;&lt;code&gt;color: #F00;&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;em papago-id=&quot;11-1&quot;&gt;모든&lt;/em&gt; 것이 빨간색이 됩니다!&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 사각형 탄환의 색상만 설정하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS에서 탄환의 색을 &lt;strong papago-id=&quot;12-1&quot;&gt;정의&lt;/strong&gt;할 수 있는 &lt;strong papago-id=&quot;12-1&quot;&gt;우아한&lt;/strong&gt; 방법이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;h1&gt;&lt;em papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;...스프라이트 이미지나 스팬 태그를 사용하지 않아도 됩니다!&lt;/font&gt;&lt;/em&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Item 1&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Item 2&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Item 3&amp;lt;/li&amp;gt;
&amp;lt;ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;li{
   list-style:square;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 일반적인 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

li {
  padding-left: 1em; 
  text-indent: -.7em;
}

li::before {
  content: &quot;• &quot;;
  color: red; /* or whatever color you prefer */
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
  &amp;lt;li&amp;gt;Foo&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Bar&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&amp;lt;/li&amp;gt;
&amp;lt;/ul&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;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JSFiddle: http://jsfiddle.net/leaverou/ytH5P/&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;버전 8 이상의 IE를 포함한 모든 브라우저에서 작동합니다.&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;pre&gt;&lt;code&gt;li{
    list-style-image: url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAE0lEQVQIW2NkYGD4D8RwwEi6AACaVAQBULo4sgAAAABJRU5ErkJggg==&quot;);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어려울 것 같지만, &lt;strong papago-id=&quot;20-1&quot;&gt;&lt;a href=&quot;http://www.patternify.com/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;20-1-0&quot;&gt;여기&lt;/a&gt;&lt;/strong&gt;서 자신만의 png 이미지/pattern을 만든 다음, 코드를 복사/paste하고 총알을 사용자 정의할 수 있습니다 =) 여전히 우아한가요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 답변에서 @lea-verou의 생각을 따르고 외부 소스 향상이라는 철학을 적용하면 다음과 같은 또 다른 해결책을 얻게 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 폰트 아이콘 라이브러리의 스타일시트를 머릿속에 삽입합니다. 이 경우 Font Awesome:&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;code&gt;&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css&quot;&amp;gt;&lt;/code&gt;&lt;/p&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;FontAwesome &lt;a href=&quot;http://fontawesome.io/cheatsheet/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;24-1&quot;&gt;치트시트&lt;/a&gt;(또는 다른 웹 폰트 아이콘)에서 코드를 가져옵니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;pre&gt;&lt;code&gt;i.e.:
fa-angle-right [&amp;amp;#xf105;]
&lt;/code&gt;&lt;/pre&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막 부분을...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 같은 숫자가 뒤따르고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;font-family&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;li:before {
    content: &quot;\f105&quot;;
    font-family: FontAwesome;
    color: red; /* or whatever color you prefer */
    margin-right: 4px;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;끝! 이제 맞춤형 총알 팁도 있습니다 =)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/ytH5P/5721/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;28&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&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.w3.org/TR/css3-lists/#marker-pseudoelement&quot; papago-id=&quot;29-1&quot; rel=&quot;noreferrer&quot;&gt;CSS &lt;/a&gt;3&lt;a href=&quot;http://www.w3.org/TR/css3-lists/#marker-pseudoelement&quot; papago-id=&quot;29-1&quot; rel=&quot;noreferrer&quot;&gt; Lists&lt;/a&gt; 모듈의 현재 사양은 사용자가 원하는 대로 정확히 수행할 의사 &lt;a href=&quot;http://www.w3.org/TR/css3-lists/#marker-pseudo-element&quot; papago-id=&quot;29-3&quot; rel=&quot;noreferrer&quot;&gt;요소&lt;/a&gt;를 지정합니다. FF는 지원하지 않는 것으로 테스트되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;::marker&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;물론 IE는 이를 지원하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 지금 이 방법을 사용하는 유일한 방법은 이미지를 사용할 수 있는 유일한 방법은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;list-style-image&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;li&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;span&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 각각의 색깔을 정할 수도 있습니다만, 제가 보기엔 좀 어색한 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 브라우저에서 작동하는 이 문제를 간단히 해결하면 다음과 같습니다.&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-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;ul li {
  color: red
}

ul li span {
  color: blue;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;span&amp;gt;Foo&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;span&amp;gt;Bar&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;span&amp;gt;Bat&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&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; 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;li:before&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;content: &quot;&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 스타일링을 하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;inline-block&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작동 코드 조각은 다음과 같습니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;false&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;ul {
  list-style-type: none; /* no default bullets */
}

ul li { 
  font-family: Arial;
  font-size: 18px;
}

ul li:before { /* the custom styled bullets */
  background-color: #14CCBB;
  border-radius: 50%;
  content: &quot;&quot;;
  display: inline-block;
  margin-right: 10px;
  margin-bottom: 2px;
  height: 10px;
  width: 10px;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
  &amp;lt;li&amp;gt;Swollen joints&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Pain in hands and knees&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Redness around joints&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Constant fatigue&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Morning stiffness in joints&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;High fevers&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;Rheumatoid nodules, which develop around joints&amp;lt;/li&amp;gt;
&amp;lt;/ul&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; papago-id=&quot;18&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;:before&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 있는 유사 원소&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;border-radius: 50%&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; 8 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; IE 8 이상을 포함한 모든 브라우저에서 작동합니다.&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;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;em&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;unit은 폰트 사이즈 변경에 대한 응답성을 허용합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jsFiddle 창 크기를 조정하여 테스트할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ul {
    list-style: none;
    line-height: 1em;
    font-size: 3vw;
}

ul li:before {
    content: &quot;&quot;;
    line-height: 1em;
    width: .5em;
    height: .5em;
    background-color: red;
    float: left;
    margin: .25em .25em 0;
    border-radius: 50%;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/HS82t/224/&quot;&gt;&lt;strong papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jsFiddle&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 심지어 그것을 가지고 놀 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;box-shadow&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;멋진 그림자를 만들기 위해, 뭔가 어울리지 않을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;content: &quot;• &quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&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;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 해봤는데 일이 이상해졌어요. (css는 일을 그만뒀어요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;:after {content: &quot;&quot;;}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 자습서의 일부.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;총탄에 색을 입힐 수 있다는 걸 알았어요&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;color:#ddd;&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;li&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;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;55-1&quot;&gt;&lt;a href=&quot;http://jsfiddle.net/bGKYJ/2/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;55-1-0&quot;&gt;예&lt;/a&gt;&lt;/strong&gt;를 들어보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;li{
    color:#ff0000;    
    list-style:square;                
}
a {
    text-decoration: none;
    color:#00ff00;
}

a:hover {
    background-color: #ddd;
}
&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;이 경우 jQuery를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery('li').wrapInner('&amp;lt;span class=&quot;li_content&quot; /&amp;gt;');
&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;&amp;amp; 몇 가지 CSS와 함께:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;li { color: red; }
li span.li_content { color: black; }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CMS를 코드화하고 편집자에게 모든 목록 항목에 추가 범위를 추가하도록 요청하고 싶지 않을 경우에는 과도하게 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 그에게 다음을 주는 것을 추천합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;LI&lt;/code&gt;&lt;font papago-translate=&quot;splited&quot;&gt; a &lt;/font&gt;&lt;code&gt;background-image&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;padding-left&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;list-style-image&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;속성은 교차 browser 환경에서 플레이크하며 스판과 같은 추가 요소를 추가할 필요가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;li {
  background:url(../images/bullet.png) 0 0 no-repeat;
  list-style:none;
  padding-left:10px;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 할 수 있는 가장 쉬운 것은 그 내용을 포장하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일순간에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 동등한 값을 선택하면 색상을 독립적으로 설정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 원하는 블렛 컬러로 이미지를 만들어 설정할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;list-style-image&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소유물.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 다중 줄 항목에서 완벽한 들여쓰기를 가진 &lt;a href=&quot;https://stackoverflow.com/users/90826/lea-verou&quot; papago-id=&quot;68-1&quot;&gt;Lea Verou&lt;/a&gt; 솔루션의 변형이 있을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ul{
    list-style: none;
    position: relative;
    padding: 0;
    margin: 0;
}

li{
    padding-left: 1.5em; 
}

li:before {
    position: absolute;
    content: &quot;•&quot;;
    color: red;
    left: 0;
}
&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;/p&gt; 
&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ul {
    color: red;
}

li {
    color: black;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;총알 색상은 UL 태그에 정의되어 있고 그 다음에 우리는 리 색상을 다시 전환합니다.&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 papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지를 사용하고 싶지 않고 CSS에서 부정적인 값을 사용하면 validator에서 벌을 줄 것이기 때문에 다음과 같이 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ul          { list-style:none; padding:0; margin:0; }

li          { padding-left:0.75em; position:relative; }

li:before       { content:&quot;•&quot;; color:#e60000; position:absolute; left:0em; }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Lea의 데모를 참고하면, 국경을 가진 순서 없는 목록을 만드는 또 다른 방법이 있습니다. http://jsfiddle.net/vX4K8/7/&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;Foo&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;Bar&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.&amp;lt;/li&amp;gt;
        &amp;lt;ul&amp;gt;
        &amp;lt;li&amp;gt;Son&amp;lt;/li&amp;gt;
        &amp;lt;li&amp;gt;Of&amp;lt;/li&amp;gt;
            &amp;lt;ul&amp;gt;
            &amp;lt;li&amp;gt;Foo&amp;lt;/li&amp;gt;
            &amp;lt;li&amp;gt;Bar&amp;lt;/li&amp;gt;
            &amp;lt;li&amp;gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.&amp;lt;/li&amp;gt;
            &amp;lt;/ul&amp;gt;
        &amp;lt;/ul&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ul {
list-style: none;
margin: 0;
}

ul:first-child {
   padding: 0;
}

li {
    line-height: 180%;
    border-bottom: 1px dashed #CCC;
    margin-left: 14px;
    text-indent: -14px;
}

li:last-child {
    border: none;
}

li:before {
    content: &quot;&quot;;
    border-left: 4px solid #CCC;
    padding-left: 10px;
}
&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;Lea Verous 솔루션도 좋지만 총알의 위치를 좀 더 통제하고 싶었기 때문에 이것이 제 접근법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.entry ul {
    list-style: none;
    padding: 0;
    margin: 0;
    /* hide overflow in the case of floating elements around ... */
    overflow: hidden;
}
.entry li { 
    position: relative;
    padding-left: 24px;
}
.entry li:before {
    /* with absolute position you can move this around or make it bigger without getting unwanted scrollbars */
    position: absolute;
    content: &quot;• &quot;;
    color: #E94E24;
    font-size: 30px;
    left: 0;
    /* use fonts like &quot;arial&quot; or use &quot;sans-serif&quot; to make the dot perfect round */ 
    font-family: Arial, sans-serif;
}
&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;pre&gt;&lt;code&gt;li{
  color: #fff;
}
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/5306640/how-to-set-bullet-colors-in-ul-li-html-lists-via-css-without-using-any-images-or&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>CSS</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/747</guid>
      <comments>https://bestsource.tistory.com/747#entry747comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:18:05 +0900</pubDate>
    </item>
    <item>
      <title>CORS - httprequest를 '사전 비행'하려면 어떻게 해야 합니까?</title>
      <link>https://bestsource.tistory.com/746</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CORS - httprequest를 '사전 비행'하려면 어떻게 해야 합니까?&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;WCF 서비스(내가 소유하고 있는)에 교차 도메인 HTTP 요청을 하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 도메인 간 스크립팅 제한을 다루기 위한 몇 가지 기술을 읽었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;서비스가 GET 요청과 POST 요청을 모두 수용해야 하기 때문에 src가 GET 요청의 URL인 동적 스크립트 태그를 구현할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 서버에서 자유롭게 변경할 수 있기 때문에 &quot;Access-Control-Allow-Origin&quot; 헤더 및 OPTONS 요청을 포함한 '프리플라이트' 요청을 포함하도록 서버 응답을 구성하는 해결책을 구현하기 시작했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이 게시물에서 아이디어를 얻었습니다: &lt;a href=&quot;http://remysharp.com/2011/04/21/getting-cors-working/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;CORS 작동하기&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버 쪽에서 제 웹 방식은 HTTP 응답에 'Access-Control-Allow-Origin: *'을 추가하는 것입니다.&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;요청(OPTIONS)을 '프리플라이트'하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 jQuery.getJ를 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SON은 GET 요청을 수행하지만 브라우저는 악명 높은 요청을 즉시 취소합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오리진 &lt;a href=&quot;http://localhost&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-1&quot;&gt;http://localhost&lt;/a&gt;는 Access-Control-Allow-Origin에서 허용되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 CORS 기술을 잘 아는 사람이 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 요청을 사전에 전달하기 위해 고객이 어떤 변경을 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사합니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비행 전 요청 시 다음 두 개의 헤더가 표시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;액세스-제어-요청-방법 및 액세스-제어-요청-헤더.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 요청 헤더는 서버에 실제 요청을 할 수 있는 권한을 요청하는 것입니다.&lt;/font&gt;&lt;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;pre&gt;&lt;code&gt;Origin: http://yourdomain.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-Custom-Header
&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;Access-Control-Allow-Origin: http://yourdomain.com
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Headers: X-Custom-Header
&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;Access-Control-Allow-Headers 응답 헤더에 특히 주의를 기울여야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 헤더의 값은 Access-Control-Request-Headers 요청 헤더에서 동일한 헤더여야 하며 '*'이 될 수 없습니다.&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;CORS에 대한 자세한 내용은 여기 http://www.html5rocks.com/en/tutorials/cors/ 에서 확인할 수 있습니다.&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;이 스레드는 2014년까지 거슬러 올라가지만, 이 문제는 여전히 우리 중 많은 사람들에게 발생할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery 1.12 /PHP 5.6 컨텍스트에서 이 문제를 처리한 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery는 제한된 헤더만을 사용하여 XHR 요청을 전송했으며 'Origin'만 전송했습니다.&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;서버는 이러한 요청을 탐지하고 &quot;Access-Control-Allow-Origin: &quot; . $_SERVER['를 추가하기만 하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTTP_ORIGIN'] 헤더, 교차 오리진 XHR임을 감지한 후.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHP 코드 샘플:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (!empty($_SERVER['HTTP_ORIGIN'])) {
    // Uh oh, this XHR comes from outer space...
    // Use this opportunity to filter out referers that shouldn't be allowed to see this request
    if (!preg_match('@\.partner\.domain\.net$@'))
        die(&quot;End of the road if you're not my business partner.&quot;);

    // otherwise oblige
    header(&quot;Access-Control-Allow-Origin: &quot; . $_SERVER['HTTP_ORIGIN']);
}
else {
    // local request, no need to send a specific header for CORS
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특히, 추가하지 마십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;exit;&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;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 간단한 단계로 &lt;strong papago-id=&quot;18-1&quot;&gt;Node.js&lt;/strong&gt;에 사용자 지정 미들웨어를 작성하여 CORS 문제를 해결합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;don't need to set anything from the client, just a little change on the Node.js server will fix the problem.&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;미들웨어를 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// in middleware/corsResolver.js

function corsResolver(req, res, next) {
    // Website you wish to allow to connect
    // running front-end application on port 3000
    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000'); 
    // Request methods you wish to allow
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
    // Request headers you wish to allow
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type,Authorization');
    // Set to true if you need the website to include cookies in the requests sent
    // to the API (e.g. in case you use sessions)
    res.setHeader('Access-Control-Allow-Credentials', true);
    // Pass to next layer of middleware
    next();
}

module.exports = corsResolver;

&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;이제 server.js(index.js 또는 노드 서버를 시작하는 모든 메인 파일)를 편집하고 다음 미들웨어를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// server.js or indes.js 

const corsResolver = require('path/to/resolver-middleware')

app.use(corsResolver)  // -----------&amp;gt; applied middleware here


// other stuff
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/8685678/cors-how-do-preflight-an-httprequest&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>JQuery</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/746</guid>
      <comments>https://bestsource.tistory.com/746#entry746comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:17:54 +0900</pubDate>
    </item>
    <item>
      <title>Android TextView : &amp;quot;setText로 표시된 텍스트 연결 안 함&amp;quot;</title>
      <link>https://bestsource.tistory.com/745</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android TextView : &quot;setText로 표시된 텍스트 연결 안 함&quot;&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;1-1&quot;&gt;setText()&lt;/strong&gt;를 사용하여 텍스트를 설정하는 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prodNameView.setText(&quot;&quot; + name);

prodOriginalPriceView.setText(&quot;&quot; + String.format(getString(R.string.string_product_rate_with_ruppe_sign), &quot;&quot; + new BigDecimal(price).setScale(2, RoundingMode.UP)));
&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;strong papago-id=&quot;2-1&quot;&gt;첫번째&lt;/strong&gt;는 단순한 사용이고 &lt;strong papago-id=&quot;2-3&quot;&gt;두번째&lt;/strong&gt;는 텍스트를 포맷 텍스트로 설정하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android Studio가 너무 재미있어요, 메뉴를 사용해봤는데 위의 두 줄에 대한 제안을 받았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Yz5f2.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Yz5f2.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;setText와 함께 표시되는 텍스트를 연결하지 마십시오.&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;(Ctrl+F1)&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;5-1&quot;&gt;TextView#set&lt;/strong&gt; 호출 시&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;5-1&quot;&gt;텍스트:&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Number# toString()을 호출하여 형식 번호를 지정하지 마십시오. 이 경우 분수 구분자와 로케일별 숫자를 제대로 처리할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 적합한 형식 사양(%d 또는 %f)이 있는 String# 형식을 사용해 보십시오.&lt;/font&gt;&lt;/li&gt; 
  &lt;li papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열 리터럴(예: &quot;Hello&quot;)을 전달하여 텍스트를 표시하지 마십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하드코딩된 텍스트는 다른 언어로 제대로 번역할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 Android 리소스 문자열을 사용하는 것을 고려해 보십시오.&lt;/font&gt;&lt;/li&gt; 
  &lt;li papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 청크를 연결하여 메시지를 작성하지 마십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 메시지는 제대로 번역할 수 없습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 이걸 위해 무엇을 할 수 있을까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;누구든지 그것이 무엇인지 그리고 제가 무엇을 해야 하는지 설명을 도와줄 수 있습니까?&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;리소스에 getString의 오버로드 버전이 있으며 이 버전은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;varargs&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;활자의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Object&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;a href=&quot;http://developer.android.com/intl/es/reference/android/content/Context.html#getString(int,%20java.lang.Object...)&quot; papago-id=&quot;12-1&quot; rel=&quot;noreferrer&quot;&gt;getString(int, java.lang&lt;/a&gt;).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://developer.android.com/intl/es/reference/android/content/Context.html#getString(int,%20java.lang.Object...)&quot; papago-id=&quot;12-1&quot; rel=&quot;noreferrer&quot;&gt;개체...).&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;strings.xml에서 문자열을 올바르게 설정한 경우 올바른 자리 표시자를 사용하여 이 버전을 사용하여 최종 문자열의 형식화된 버전을 검색할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;string name=&quot;welcome_messages&quot;&amp;gt;Hello, %1$s! You have %2$d new messages.&amp;lt;/string&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getString(R.string.welcome_message, &quot;Test&quot;, 0);&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android는 문자열을 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &quot;Hello Test! you have 0 new messages&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대해서&lt;/font&gt;&lt;/strong&gt; &lt;code&gt;setText(&quot;&quot; + name);&lt;/code&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;prodNameView.setText(&quot;&quot; + name);&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;말이 안 돼&lt;/font&gt;요 &lt;font class=&quot;papago-parent&quot;&gt;TextView&lt;/font&gt;는 null&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;TextView는 null 값을 처리할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름이 null이면 텍스트가 그려지지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수락한 답변에서 &lt;strong papago-id=&quot;18-1&quot;&gt;%1$s&lt;/strong&gt; 및 &lt;strong papago-id=&quot;18-3&quot;&gt;%2$d&lt;/strong&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;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;형식 지정자는 다음 구문일 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;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;argument_index&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$]&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;format_specifier&lt;/code&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션인 &lt;strong papago-id=&quot;22-1&quot;&gt;argument_index&lt;/strong&gt;는 &quot;%&quot; 뒤에 &quot;$&quot;로 끝나는 숫자로 지정되며 인수 목록에서 지정된 인수를 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 인수는 &quot;&lt;strong papago-id=&quot;22-3&quot;&gt;1$&quot;,&lt;/strong&gt; 두 번째 인수는 &lt;strong papago-id=&quot;22-5&quot;&gt;&quot;2$&quot;&lt;/strong&gt; 등으로 참조됩니다.&lt;/font&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;strong papago-id=&quot;23-1&quot;&gt;형식 지정자&lt;/strong&gt;는 인수의 형식 지정 방법을 나타내는 문자입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지정된 인수에 대한 유효한 변환 집합은 인수의 &lt;strong papago-id=&quot;23-3&quot;&gt;데이터 유형&lt;/strong&gt;에 따라 달라집니다&lt;strong papago-id=&quot;23-3&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;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;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안녕하세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Test&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;0&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;/blockquote&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;string resource&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&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;&quot;welcome_&quot;&amp;gt;&amp;lt; &quot;welcome_&quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안녕하세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%1$s&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;%2$d&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; &amp;gt;지 &amp;lt;/string &amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;string substitution&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래에 제시된 바와 같이:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;getString(R)).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;welcome_message,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;Test&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&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;/blockquote&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;%1$s이(가) &quot;테스트&quot; 문자열로 대체됩니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;%2$d는 문자열 &quot;0&quot;으로 대체됩니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&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;private void displayQuantity(int quantity) {
    TextView quantityTextView = (TextView) findViewById(R.id.quantity_text_view);
    quantityTextView.setText(&quot;&quot; + quantity);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 오류가 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Do not concatenate text displayed with setText. Use resource string with placeholders.
&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;strings.xml&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;string name=&quot;blank&quot;&amp;gt;%d&amp;lt;/string&amp;gt;
&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;제 첫번째 &quot;&quot; + 제 번호(수량)의 자리 표시자입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;47-0&quot;&gt;참고&lt;/strong&gt;: 내&lt;/font&gt;&lt;/font&gt;&lt;code&gt;quantity&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;variable은 이전에 정의된 것으로 문자열에 추가하고자 했던 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font 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;private void displayQuantity(int quantity) {
    TextView quantityTextView = (TextView) findViewById(R.id.quantity_text_view);
    quantityTextView.setText(getString(R.string.blank, quantity));
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 일이 있은 후로, 저의 실수는 사라졌습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱의 동작은 변하지 않았고 내 수량은 보풀 오류 없이 지금 내가 원하는 대로 계속 표시되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;50-1&quot;&gt;setText()&lt;/strong&gt; 메서드 안에 텍스트를 연결하지 말고 &lt;strong papago-id=&quot;50-3&quot;&gt;String&lt;/strong&gt;에서 원하는 것을 연결하고 해당 String 값을 &lt;strong papago-id=&quot;50-5&quot;&gt;setText()&lt;/strong&gt; 메서드 안에 넣습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ex: 올바른 방법&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int min = 120;
int sec = 200;
int hrs = 2;

String minutes = String.format(&quot;%02d&quot;, mins);
String seconds = String.format(&quot;%02d&quot;, secs);
String newTime = hrs+&quot;:&quot;+minutes+&quot;:&quot;+seconds;

text.setText(minutes);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;setText()를 다음과 같이 &lt;strong papago-id=&quot;52-0&quot;&gt;연결하지 마십시오&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;text.setText(hrs+&quot;:&quot;+String.format(&quot;%02d&quot;, mins)+&quot;:&quot;+String.format(&quot;%02d&quot;, secs));
&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;a href=&quot;https://stackoverflow.com/questions/3656371/dynamic-string-using-string-xml&quot; papago-id=&quot;53-1&quot;&gt;스레드&lt;/a&gt;를 확인하고 이 스레드와 같은 자리 표시자를 사용해야 합니다(테스트되지 않음).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;string name=&quot;string_product_rate_with_ruppe_sign&quot;&amp;gt;Price : %1$d&amp;lt;/string&amp;gt;

String text = String.format(getString(R.string.string_product_rate_with_ruppe_sign),new BigDecimal(price).setScale(2, RoundingMode.UP));
prodOriginalPriceView.setText(text);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;화내지 마요, 너무 간단해요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String firstname = firstname.getText().toString();
String result = &quot;hi &quot;+ firstname +&quot; Welcome Here&quot;;
            mytextview.setText(result);
&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;&quot;&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;lint는 전달되는 인수를 검색합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setText&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;blockquote&gt; 
 &lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 청크를 연결하여 메시지를 작성하지 마십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 메시지는 제대로 번역할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 문자열을 연결할 때&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전달 중인 인수가 이미 텍스트이므로 이 연결을 제거합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.toString()&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;&quot;&quot;&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;String으로 고쳤습니다.&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;pre&gt;&lt;code&gt;textViewAddress.setText(&quot;Address&quot;+address+&quot;\n&quot;+&quot;nCountry&quot;+&quot;\n&quot;+&quot;City&quot;+&quot;city&quot;+&quot;\n&quot;+&quot;State&quot;+&quot;state&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;textViewAddress.setText(
     String.format(&quot;Address:%s\nCountry:%s\nCity:%s\nState:%s&quot;, address, country, city, state));
       
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이걸 쓰면 돼요, 저한테 효과가 있어요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;title.setText(MessageFormat.format(&quot;{0} {1}&quot;, itemList.get(position).getOppName(), itemList.get(position).getBatchNum()));
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;prodNameView.setText(&quot;&quot; + name); //this produce lint error

val nameStr=&quot;&quot; + name;//workaround for quick warning fix require rebuild
prodNameView.setText(nameStr);
&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;리소스에 액세스할 수 없고 Kotlin을 사용하는 경우와 유사한 경우 다음을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;val v = &quot;hello&quot;

&quot;placeholder $v placeholder&quot;.let {
                    textView.text = it
                }
&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;i18n을 지원할 필요가 없는 경우 Android Studio에서 이 보풀 검사를 비활성화할 수 있습니다.&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;파일 -&amp;gt; 설정 -&amp;gt; 편집기 -&amp;gt; 검사 -&amp;gt; 안드로이드 -&amp;gt; 보풀 -&amp;gt; TextView 국제화 (불체크)&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;// Java syntax
    String a = (&quot;&quot; + name);
    String b = &quot;&quot; + String.format(getString(R.string.string_product_rate_with_ruppe_sign);
    String c = &quot;&quot; + new BigDecimal(price).setScale(2, RoundingMode.UP));
    
    prodNameView.setText(a);
    prodOriginalPriceView.setText(b, c);
&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;textView인 경우 editText에서 myTextView.text = (&quot;Hello World&quot;)를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/33164886/android-textview-do-not-concatenate-text-displayed-with-settext&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>Android</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/745</guid>
      <comments>https://bestsource.tistory.com/745#entry745comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:17:47 +0900</pubDate>
    </item>
    <item>
      <title>파이썬에서 데이터베이스 연결 풀링을 위한 가장 좋은 솔루션은 무엇입니까?</title>
      <link>https://bestsource.tistory.com/744</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파이썬에서 데이터베이스 연결 풀링을 위한 가장 좋은 솔루션은 무엇입니까?&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;저는 어떤 종류의 프레임워크에서도 실행되지 않는 서버측 프로세스인 프로젝트에 대한 매우 전문화된 요구사항을 충족시키기 위해 맞춤형 DAO와 같은 클래스를 개발했습니다.&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;새로운 요청이 있을 때마다 MySQLdb.connect를 통해 새로운 연결을 여는 것을 제외하고는 솔루션이 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파이썬에서 연결 풀링을 사용하는 것으로 전환하기 위한 가장 좋은 &quot;드롭인&quot; 솔루션은 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 자바용 커먼즈 DBCP 솔루션과 같은 것을 상상하고 있습니다.&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;추가하기 위해 편집: 검색을 좀 더 한 후에 &lt;a href=&quot;http://furius.ca/antiorm/&quot; papago-id=&quot;5-1&quot; rel=&quot;noreferrer&quot;&gt;itpool&lt;/a&gt;을 찾았습니다&lt;a href=&quot;http://furius.ca/antiorm/&quot; papago-id=&quot;5-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://furius.ca/antiorm/&quot; papago-id=&quot;5-1&quot; rel=&quot;noreferrer&quot;&gt;py&lt;/a&gt;는 괜찮은 것 같지만, python을 비교적 처음 접하기 때문에 더 명백한/더 관용적인/더 나은 해결책을 놓치지 않고 싶은 것 같습니다.&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;MySQL에?&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;MySQL을 사용하면 문제의 원인이 되는 경우가 많기 때문에 원하는 성능의 이점을 얻을 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 길은 정치적으로 많은 노력이 필요할 수도 있습니다. 왜냐하면 이 공간에는 연결 풀링의 장점에 대해 손을 흔드는 것과 교과서적인 표현이 너무 많기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;연결 풀은 상태 비저장 응용프로그램(예: HTTP 프로토콜)의 웹 이후 시대와 상태 비저장(stateful) 장수명 일괄 처리 응용프로그램의 웹 이전 시대 사이의 다리일 뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사전 웹 데이터베이스에서는 접속 비용이 매우 높았기 때문에(접속을 설정하는 데 걸리는 시간에 대해 아무도 크게 신경 쓰지 않았기 때문에), 사후 웹 응용 프로그램은 이러한 접속 풀 체계를 고안하여 모든 히트가 RDBMS에서 이렇게 큰 처리 오버헤드를 발생시키지 않도록 했습니다.&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;MySQL은 웹 시대의 RDBMS에 가깝기 때문에 연결이 매우 가볍고 빠릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL에 대한 연결 풀을 전혀 사용하지 않는 대용량 웹 애플리케이션을 많이 작성했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 정치적 장애물이 극복되지 않는 한, 여러분이 이를 극복하는 것으로부터 이익을 얻을 수 있는 문제입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;연결 클래스를 마칩니다.&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;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트 : 이런 것을 dbpool에 넣었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;py:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import sqlalchemy.pool as pool
import MySQLdb as mysql
mysql = pool.manage(mysql)
&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;IMO, &quot;더 명백한/더 관용적인/더 나은 해결책&quot;은 DAO와 같은 수업을 발명하는 것보다 기존의 ORM을 사용하는 것입니다.&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;ORM은 &quot;원시&quot; SQL 연결보다 더 인기가 많은 것 같습니다. 왜죠?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python은 &lt;em papago-id=&quot;15-1&quot;&gt;OO&lt;/em&gt;이기 때문에 SQL 행에서 객체로의 매핑이 &lt;em papago-id=&quot;15-3&quot;&gt;절대적&lt;/em&gt;으로 중요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python 개체에 매핑되지 않는 SQL 행을 다루는 사용 사례는 많지 않습니다.&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://www.sqlalchemy.org/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;16-1&quot;&gt;SQLAlchemy&lt;/a&gt; 또는 &lt;a href=&quot;http://www.sqlobject.org/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;16-3&quot;&gt;SQObject&lt;/a&gt;(및 관련 연결 풀링)가 더 관용적인 Pythonic 솔루션이라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;별도의 기능으로 풀링하는 것은 일반적이지 않은데, 이는 (객체 매핑이 없는) 순수 SQL이 연결 풀링을 통해 이익을 얻는 복잡한 장기 프로세스에서는 그다지 대중적이지 않기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예, 순수 SQL이 &lt;em papago-id=&quot;17-1&quot;&gt;사용&lt;/em&gt;되지만 풀링이 도움이 되지 않는 단순하거나 더 통제된 애플리케이션에서는 항상 사용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 가지 대안이 있을 수 있다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQLLchemy 또는 SQLObject를 사용하도록 수업을 수정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 처음에는 고통스러워 보이지만(모든 작업이 낭비됨), 모든 디자인과 생각을 활용할 수 있어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 널리 사용되는 ORM과 풀링 솔루션을 채택하는 연습일 뿐입니다.&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;/ol&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;def pool(ctor, limit=None):
    local_pool = multiprocessing.Queue()
    n = multiprocesing.Value('i', 0)
    @contextlib.contextmanager
    def pooled(ctor=ctor, lpool=local_pool, n=n):
        # block iff at limit
        try: i = lpool.get(limit and n.value &amp;gt;= limit)
        except multiprocessing.queues.Empty:
            n.value += 1
            i = ctor()
        yield i
        lpool.put(i)
    return pooled
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 게으르게 구성되고, 선택적인 한계가 있으며, 내가 생각할 수 있는 모든 사용 사례에 일반화되어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론, 이것은 여러분이 어떤 리소스를 풀링하든지 간에 실제로 필요하다고 가정합니다. 이러한 풀링은 오늘날의 SQL과 같은 많은 리소스에는 적용되지 않을 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;용도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# in main:
my_pool = pool(lambda: do_something())
# in thread:
with my_pool() as my_obj:
    my_obj.do_something()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 개체를 생성하는 모든 개체가 필요한 경우 적절한 소멸자를 가지고 있다고 가정합니다(일부 서버는 연결 개체가 명확하게 닫히지 않는 한 삭제되지 않음).&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 똑같은 걸 찾고 있었어요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://pythonhosted.org/PySQLPool/tutorial.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;25-1&quot;&gt;pysqlpool&lt;/a&gt;과 &lt;a href=&quot;https://docs.sqlalchemy.org/en/14/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;25-3&quot;&gt;sqalchemy pool 모듈&lt;/a&gt;을 찾았습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 앱이 멀티스레딩을 사용하기 시작한다면 당신만의 연결 풀을 만드는 것은 나쁜 생각입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다중 스레드 응용 프로그램에 대한 연결 풀을 만드는 것은 단일 스레드 응용 프로그램에 대한 연결 풀보다 훨씬 복잡합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PySQ 같은 것을 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럴 땐 L풀.&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;성능을 찾고 있다면 ORM을 사용하는 것도 좋지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수많은 선택, 삽입, 업데이트 및 삭제를 동시에 처리해야 하는 대용량/무거운 데이터베이스를 다루려면 성능이 필요합니다. 즉, 조회 및 잠금 시간을 최적화하기 위해 맞춤형 SQL 작성이 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ORM을 사용하면 대개 그런 유연성을 가질 수 없습니다.&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;기본적으로, 네, 직접 연결 풀을 만들고 ORM을 사용할 수 있지만, 제가 방금 설명한 것 중 어떤 것도 필요하지 않을 것이라고 확신하는 경우에만 가능합니다.&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;이전 쓰레드에 답장했지만 마지막으로 확인했을 때 MySQL은 드라이버의 일부로 연결 풀링을 제공합니다.&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;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;https://dev.mysql.com/doc/connector-python/en/connector-python-connection-pooling.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://dev.mysql.com/doc/connector-python/en/connector-python-connection-pooling.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TFA에서 (OP가 밝힌 대로) 명시적으로 연결 풀을 열기를 원한다고 가정하면 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dbconfig = {  &quot;database&quot;: &quot;test&quot;, &quot;user&quot;:&quot;joe&quot; }
cnxpool = mysql.connector.pooling.MySQLConnectionPool(pool_name = &quot;mypool&quot;,pool_size = 3, **dbconfig)
&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;그런 다음 get_connection() 함수를 통해 풀에서 요청하여 이 풀에 액세스합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cnx1 = cnxpool.get_connection()
cnx2 = cnxpool.get_connection()
&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;DBUtils&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;pip install DBUtils
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고하실 수 있도록 오픈 서치로 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    from opensearchpy import OpenSearch

    def get_connection():
                    connection = None
                    try:
                        connection = OpenSearch(
                            hosts=[{'host': settings.OPEN_SEARCH_HOST, 'port': settings.OPEN_SEARCH_PORT}],
                            http_compress=True,
                            http_auth=(settings.OPEN_SEARCH_USER, settings.OPEN_SEARCH_PASSWORD),
                            use_ssl=True,
                            verify_certs=True,
                            ssl_assert_hostname=False,
                            ssl_show_warn=False,
                        )
                    except Exception as error:
                        print(&quot;Error: Connection not established {}&quot;.format(error))
                    else:
                        print(&quot;Connection established&quot;)
                    return connection

    class OpenSearchClient(object):
        connection_pool = []
        connection_in_use = []

        def __init__(self):
            if OpenSearchClient.connection_pool:
                pass
            else:

                OpenSearchClient.connection_pool = [get_connection() for i in range(0, settings.CONNECTION_POOL_SIZE)]

        def search_data(self, query=&quot;&quot;, index_name=settings.OPEN_SEARCH_INDEX):
            available_cursor = OpenSearchClient.connection_pool.pop(0)
            OpenSearchClient.connection_in_use.append(available_cursor)
            response = available_cursor.search(body=query, index=index_name)
            available_cursor.close()
            OpenSearchClient.connection_pool.append(available_cursor)
            OpenSearchClient.connection_in_use.pop(-1)
            return response
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/98687/what-is-the-best-solution-for-database-connection-pooling-in-python&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>mysql</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/744</guid>
      <comments>https://bestsource.tistory.com/744#entry744comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:17:39 +0900</pubDate>
    </item>
    <item>
      <title>ng-required vs required 사용</title>
      <link>https://bestsource.tistory.com/743</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ng-required vs required 사용&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;select 
    multiple=&quot;multiple&quot; 
    data-ng-model=&quot;rightSelected&quot; 
    data-ng-options=&quot;slide as slide.SlideBarcode for slide in form.Slides&quot; 
    data-ng-required=&quot;form.Slides.length &amp;gt; 0&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;pre&gt;&lt;code&gt;$scope.form.Slides = [];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;슬라이드 배열에 슬라이드가 있는 경우 양식의 이 요소가 유효하기를 원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 슬라이드를 추가할 수 있는 일종의 슬라이드 버킷입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 ngRequired가 어떻게 작동하는지 이해가 안가요&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;로 바꾸면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data-ng-required=&quot;true&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 폼은 괜찮아 보이는데 당연히 제가 원하는 대로 되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하면.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;form.Slides.length &amp;gt; 0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 진정으로 원하는 것을 확인하는 것입니다. 이것은 작동하지 않을 뿐만 아니라 제 양식 구조를 엉망으로 만듭니다. 제 요소 중 하나가 무작위로 사라지는 것처럼 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 사용하는 적절한 방법은 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것에 대한 서류는 상당히 희박합니다.&lt;/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&gt;&lt;a href=&quot;https://stackoverflow.com/questions/16648669/angular-what-is-the-difference-between-required-and-ng-required&quot; papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;required와 ng-required의 차이점은 무엇입니까?&lt;/font&gt;&lt;/a&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;제가 보기에 당신은 ng 요구 속성을 잘못 사용하고 있는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ng-required 속성은 조건부로 입력이 필요하거나 필요하지 않은 경우에 대한 속성입니다.&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.isFormValid= function(){
    if (form.Slides.length &amp;gt; 0 &amp;amp;&amp;amp; myForm.$valid)
        return true;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 나서.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ng-disabled=&quot;isFormValid()&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 가장 우아한 해결책은 아니지만 효과가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 당신이 원했던 것이 아니라면 저에게 알려주세요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/19230567/using-ng-required-vs-required&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>AngularJS</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/743</guid>
      <comments>https://bestsource.tistory.com/743#entry743comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:17:31 +0900</pubDate>
    </item>
    <item>
      <title>페이지 변경 청취자에서 페이지 설정 보기 더 이상 사용되지 않음</title>
      <link>https://bestsource.tistory.com/742</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지 변경 청취자에서 페이지 설정 보기 더 이상 사용되지 않음&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;ViewPager.setOnPageChangeListener&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감가상각된 걸 알게 됐어요&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;ViewPager.setOnPageChangeListener&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 지금 더 이상 사용되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할필요가 있습니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ViewPager.addOnPageChangeListener&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;em papago-id=&quot;5&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;ViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
&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;a href=&quot;http://developer.android.com/reference/android/support/v4/view/ViewPager.html#addOnPageChangeListener(android.support.v4.view.ViewPager.OnPageChangeListener)&quot; papago-id=&quot;6-1&quot; rel=&quot;noreferrer&quot;&gt;여기&lt;/a&gt;에서 찾을 수 있습니다&lt;a href=&quot;http://developer.android.com/reference/android/support/v4/view/ViewPager.html#addOnPageChangeListener(android.support.v4.view.ViewPager.OnPageChangeListener)&quot; papago-id=&quot;6-1&quot; rel=&quot;noreferrer&quot;&gt;.&lt;/a&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;viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener(){

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {       
        conterchange.setText(&quot;&quot;+(1+position));
    }

    @Override
    public void onPageSelected(int position) {
    }

    @Override
    public void onPageScrollStateChanged(int state) {
    }
});
&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;strong papago-id=&quot;8-3&quot;&gt;ViewPager.setOnPageChangeListener&lt;/strong&gt; 대신 &lt;strong papago-id=&quot;8-1&quot;&gt;ViewPager.addOnPageChangeListener&lt;/strong&gt;를 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가가 &lt;strong papago-id=&quot;9-1&quot;&gt;코틀린&lt;/strong&gt;에서 해결책을 필요로 할 경우를 대비해:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;viewPager.addOnPageChangeListener (object: ViewPager.OnPageChangeListener {
        override fun onPageScrollStateChanged(state: Int) {
            TODO(&quot;not implemented&quot;) //To change body of created functions use File | Settings | File Templates.
        }

        override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
            TODO(&quot;not implemented&quot;) //To change body of created functions use File | Settings | File Templates.
        }

        override fun onPageSelected(position: Int) {
            TODO(&quot;not implemented&quot;) //To change body of created functions use File | Settings | File Templates.
        }

    })
&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;SimpleOnPageChangeListener&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;private Fragment page = null;
/** Defining a listener for pageChange */
        ViewPager.SimpleOnPageChangeListener pageChangeListener = new ViewPager.SimpleOnPageChangeListener(){
            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);

                page = getSupportFragmentManager().findFragmentByTag(&quot;android:switcher:&quot; + R.id.pager_selectPhotos + &quot;:&quot; + position);

                System.out.println(page);
                switch (position) {
                case 0:

                    break;
                case 1:

                    break;

                default:
                    break;
                }
            }
        };
        /** Setting the pageChange listener to the viewPager */
        _pager.setOnPageChangeListener(pageChangeListener);
&lt;/code&gt;&lt;/pre&gt;&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요한 경우 인터페이스를 만듭니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;public interface FragmentLifecycle {
public void onPauseFragment();
public void onResumeFragment();
&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;/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;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;pre&gt;&lt;code&gt; public class FragmentCast extends Fragment implements FragmentLifecycle {
  @Override
    public void onPauseFragment() {
        Log.i(TAG, &quot;onPauseFragment()&quot;);
        Toast.makeText(getActivity(), &quot;onPauseFragment():&quot; + TAG, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onResumeFragment() {
        Log.i(TAG, &quot;onResumeFragment()&quot;);
        Toast.makeText(getActivity(), &quot;onResumeFragment():&quot; + TAG, Toast.LENGTH_SHORT).show();
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;/blockquote&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;addOnPageListener를 사용하는 방법을 나열합니다.&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;viewPager.adOnPageChangeListener(새 ViewPager)를 입력합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;OnPageChangeListener() {현재위치 = 0;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {


        FragmentLifecycle   fragmentLifecycleToShow =(FragmentLifecycle) viewPager.getAdapter().instantiateItem(viewPager, viewPager.getCurrentItem());
        fragmentLifecycleToShow.onResumeFragment();

        FragmentLifecycle   fragmentLifecycleToHide =(FragmentLifecycle) viewPager.getAdapter().instantiateItem(viewPager, currentPosition);
        fragmentLifecycleToHide.onPauseFragment();

        currentPosition = position;
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
});
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&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;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 새로운 navbar 방법으로 view pager It worked for me.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels);
            }

            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                switch (position) {
                    case 0:
                        binding.bottomNavigation.getMenu().findItem(R.id.nav_item_Home).setChecked(true);
                        break;
                    case 1:
                        binding.bottomNavigation.getMenu().findItem(R.id.nav_item_Booking).setChecked(true);
                        break;
                    case 2:
                        binding.bottomNavigation.getMenu().findItem(R.id.nav_item_Transaction).setChecked(true);
                        break;
                    case 3:
                        binding.bottomNavigation.getMenu().findItem(R.id.nav_item_HealthyFood).setChecked(true);
                        break;
                }

            }
        });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/30867852/viewpager-setonpagechangelistener-deprecated&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>Android</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/742</guid>
      <comments>https://bestsource.tistory.com/742#entry742comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:17:24 +0900</pubDate>
    </item>
    <item>
      <title>jquery 특정 양식에서 모든 입력 받기</title>
      <link>https://bestsource.tistory.com/741</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jquery 특정 양식에서 모든 입력 받기&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;form id=&quot;unique00&quot;&amp;gt;
  &amp;lt;input type=&quot;text&quot; name=&quot;whatever&quot; id=&quot;whatever&quot; value=&quot;whatever&quot; /&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;input type=&quot;checkbox&quot; name=&quot;whatever&quot; id=&quot;whatever&quot; value=&quot;whatever&quot; /&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;
    &amp;lt;input type=&quot;hidden&quot; name=&quot;whatever&quot; id=&quot;whatever&quot; value=&quot;whatever&quot; /&amp;gt;
    &amp;lt;input type=&quot;submit&quot; value=&quot;qweqsac&quot; /&amp;gt;
  &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;form id=&quot;unique01&quot;&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;input type=&quot;text&quot; name=&quot;whatever&quot; id=&quot;whatever&quot; value=&quot;whatever&quot; /&amp;gt;
    &amp;lt;input type=&quot;checkbox&quot; name=&quot;whatever&quot; id=&quot;whatever&quot; value=&quot;whatever&quot; /&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;
    &amp;lt;input type=&quot;hidden&quot; name=&quot;whatever&quot; id=&quot;whatever&quot; value=&quot;whatever&quot; /&amp;gt;
  &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
  &amp;lt;select&amp;gt;blah...&amp;lt;/select&amp;gt;
  &amp;lt;input type=&quot;submit&quot; value=&quot;qweqsac&quot; /&amp;gt;
&amp;lt;/form&amp;gt;
etc forms... forms...
&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;*note: 양식마다 입력량과 종류가 다를 수 있으며 html 구조도 다를 수 있습니다.&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;특정 양식 ID에서 입력을 채울 방법이 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 내가 특정 폼 ID에서 제출 버튼을 클릭하면 jquery가 해당 폼 ID 내의 모든 입력을 채울 것입니다. 현재 내가 하는 일은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;form&quot;).submit(function(){ return validateForm($(this)) });
function validateForm(form){
var retVal = true;
var re;
$.each(form.serializeArray(), function(i, field) {
  var input = $('input[name='+field.name+']');
  field.value = $.trim(field.value);
  switch(field.name){
    case &quot;name&quot; :
        and another cases...
      }
    })
 }
&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;그것은 일이었지만, 그 경우에, 저는 field.name 와 field.value만 얻을 수 있고, 실제로 제가 원하는 것은, 저는 각 입력 요소에 대한 jquery 객체를 원해서, 그들의 css, id, name에 접근할 수 있고, 심지어 그 입력 요소를 애니메이션화할 수 있습니다.&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;미리 알려주시면 감사하겠습니다! 그리고 D.&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;$(&quot;form#formID :input&quot;).each(function(){
 var input = $(this); // This is the jquery object of the input, do what you will
});
&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;jquery&lt;a href=&quot;http://api.jquery.com/input-selector/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-1&quot;&gt;:input selector&lt;/a&gt;를 사용하여 모든 유형의 입력을 가져옵니다. 텍스트만 원하는 경우 다음 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;form#formID input[type=text]&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 papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 코드는 폼 id와 함께 특정 폼에서 요소의 세부 정보를 얻는데 도움이 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#formId input, #formId select').each(
    function(index){  
        var input = $(this);
        alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
    }
);
&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;$('form input, form select').each(
    function(index){  
        var input = $(this);
        alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
    }
);
&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;$('input, select').each(
    function(index){  
        var input = $(this);
        alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
    }
);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;13-0&quot;&gt;참고:&lt;/strong&gt; 아래와 같이 객체 목록에 필요한 요소 태그 이름을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Example: to get name of attribute &quot;textarea&quot;,

$('input, select, textarea').each(
    function(index){  
        var input = $(this);
        alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
    }
);
&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-1&quot;&gt;HTML&lt;/strong&gt; 양식 &quot;elements&quot; 특성 사용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.each($(&quot;form&quot;).elements, function(){ 
    console.log($(this));
    });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 &quot;입력, 텍스트 영역, 선택...&quot; 등의 이름을 제공할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;$(document).on(&quot;submit&quot;,&quot;form&quot;,function(e){
        //e.preventDefault();
        $form = $(this);
        $i = 0;
        $(&quot;form input[required],form select[required]&quot;).each(function(){
            if ($(this).val().trim() == ''){
                $(this).css('border-color', 'red');
                $i++;
            }else{
                $(this).css('border-color', '');    
            }               
        })
        if($i != 0) e.preventDefault();
    });
    $(document).on(&quot;change&quot;,&quot;input[required]&quot;,function(e){
        if ($(this).val().trim() == '')
            $(this).css('border-color', 'red');
        else
            $(this).css('border-color', '');    
    });
    $(document).on(&quot;change&quot;,&quot;select[required]&quot;,function(e){
        if ($(this).val().trim() == '')
            $(this).css('border-color', 'red');
        else
            $(this).css('border-color', '');
    });&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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/4291005/jquery-get-all-input-from-specific-form&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>JQuery</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/741</guid>
      <comments>https://bestsource.tistory.com/741#entry741comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:17:15 +0900</pubDate>
    </item>
    <item>
      <title>PDO - FETCH_CLASS - 결과를 매개 변수로 생성자에게 전달</title>
      <link>https://bestsource.tistory.com/740</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PDO - FETCH_CLASS - 결과를 매개 변수로 생성자에게 전달&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;PDO의 결과를 컨스트럭터의 파라미터로 전달할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 저는 다음과 같은 수업을 듣습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class Test
{
    private $value1;
    private $value2;
    function __construct($val1, $val2)
    {
        $this-&amp;gt;value1 = $val1; $this-&amp;gt;value2 = $val2;
    }
}
&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;그런 다음, PDO 드라이버를 통해 DB에서 일부 데이터를 선택합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT price, quantity FROM stock

$results = $query-&amp;gt;fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, &quot;Test&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;지금 PDO는 이 값을 클래스 필드에 직접 전달하고 생성자를 바이패스합니다.&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;생성자는 쿼리 종속형이 될 수 없습니다. PDO를 사용하지 않더라도 이 클래스를 인스턴스화할 수 있기를 원합니다.&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;FETCH_FUNC constant를 사용하고 컨스트럭터를 통해 객체를 생성할 수 있는 기능을 제공하는 것이 제가 찾은 유일한 방법이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function rowMapper( $price, $quantity)
{
  return new Test( $price, $quantity);
}
$results = $query-&amp;gt;fetchAll( PDO::FETCH_FUNC, &quot;rowMapper&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 개체는 PDO가 개인 데이터에 값을 주입하고 캡슐화를 중단하는 대신 생성자를 사용하여만 생성됩니다.&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 뭔가를 놓치고 있는 것 같지만, 질의 결과를 시공자에게 전달하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리의 결과를 다음과 같이 직접 개체 속성에 할당할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 필요한 경우 PDO에서 값을 덮어쓸 수 있는 생성자가 필요하므로 제거합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PDO::FETCH_PROPS_LATE&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;fetch&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;function __construct($val1=null, $val2=null) {

      // now the constructor is called after the fetch
      // if you pass values to it, they will be assigned

  if ($val1!==null) $this-&amp;gt;price = $val1; 
  if ($val2!==null) $this-&amp;gt;quantity = $val2;
}
&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;h3 papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PDO&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;$stmt = $db-&amp;gt;prepare('SELECT price, quantity FROM stock');
$stmt-&amp;gt;setFetchMode(PDO::FETCH_CLASS,'Test');
$result = $stmt-&amp;gt;fetch();
&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;pre&gt;&lt;code&gt;$result = new Test(25,100);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스에서 가져온 값을 사용하여 작업하려면 생성자에서 작업할 수 있습니다. 여전히 남아 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FETCH_PROPS_LATE&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;function __construct($val1=null, $val2=null) {
  if ($val1!==null) $this-&amp;gt;price = $val1;
  if ($val2!==null) $this-&amp;gt;quantity = $val2;
  $this-&amp;gt;formattedPrice = number_format($this-&amp;gt;price,'2');
}
&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;개체에 대한 PDO Repository를 구축하는 중에 이러한 상황이 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파라미터를 1 대 1로 맞추는 것을 싫어하기 때문에 이 접근법을 사용하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 정적인 공장 패턴을 사용함으로써 제가 건설자의 흉내를 낼 수 있는 가장 근접한 방법이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class User
{
    private $id;
    public $name;
    public $isMinor;

    // make sure parameters are in the same order as the mysql result
    public static function buildFromPdo($id, $age, $name)
    {
        $user = new self;
        $user-&amp;gt;id = $id;
        $user-&amp;gt;name = $name;
        $user-&amp;gt;isMinor = $age &amp;lt; 18;
        return $user;
    }

    public function getId()
    {
        return $this-&amp;gt;id;
    }
}


$stmt = $db-&amp;gt;prepare('SELECT id, age, name FROM users');
$stmt-&amp;gt;execute();
$result = $stmt-&amp;gt;fetchAll(PDO::FETCH_FUNC, &quot;User::buildFromPdo&quot;);
&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;$result&quot;는 User 개체의 배열이 됩니다.&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;FETCH_CLASS는 개인 속성으로 가져옵니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/7282962/php-pdo-do-the-fetch-styles-fetch-class-and-fetch-into-fetch-into-private-objec&quot; papago-id=&quot;20-1&quot;&gt;이 답변&lt;/a&gt;을 참고해주시기 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 경우 다음과 같이 전달할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$results = $query-&amp;gt;fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, &quot;Test&quot;, array('val1', 'val1'));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음에 대한 세 번째 매개 변수에 대해 읽어 보십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fetchAll()&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;a href=&quot;http://php.net/manual/en/pdostatement.fetchall.php&quot; rel=&quot;nofollow&quot; papago-id=&quot;6-0&quot;&gt;여기에&lt;/a&gt;&lt;/font&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;PdObject::fetchAll(\PDO::&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;FETCH_CLASS), 이렇게 하면 원하는 대로 정확하게 반환됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼에도 불구하고, 당신이 전달할 특정한 것이 필요하다면 아래의 코드 스니펫을 따르세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;$sql = &quot;SELECT * FROM &quot;.$table. &quot; WHERE id=$id&quot;;
$sth = $dbAdapter-&amp;gt;prepare($sql);
$sth-&amp;gt;execute();

//inject anything you want
$result = $sth-&amp;gt;fetchAll(\PDO::FETCH_CLASS, $tableClass, array($pass1, $pass2, $dbAdapter));&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/58106411/how-to-use-pdofetch-class-with-a-class-whose-constructor-takes-arguments&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>MariaDB</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/740</guid>
      <comments>https://bestsource.tistory.com/740#entry740comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:17:07 +0900</pubDate>
    </item>
    <item>
      <title>PIL을 사용하여 픽셀의 RGB 가져오기</title>
      <link>https://bestsource.tistory.com/739</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PIL을 사용하여 픽셀의 RGB 가져오기&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;PIL로 픽셀의 RGB 색상을 얻을 수 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드를 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;im = Image.open(&quot;image.gif&quot;)
pix = im.load()
print(pix[1,1])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 숫자(예: 숫자)만 출력).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;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;3개의 숫자가 아닌 경우(예:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;60,60,60&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;R,G,B)의 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 그 기능에 대해 뭔가를 이해하지 못하고 있는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;설명이 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;pre&gt;&lt;code&gt;im = Image.open('image.gif')
rgb_im = im.convert('RGB')
r, g, b = rgb_im.getpixel((1, 1))

print(r, g, b)
(65, 100, 137)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 이전에 한 값을 얻었던 이유는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pix[1, 1]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GIF 픽셀은 GIF 컬러 팔레트의 256개 값 중 하나를 의미하기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 SO 게시물도 참조하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/5800009/python-and-pil-pixel-values-different-for-gif-and-jpeg&quot; papago-id=&quot;6-1&quot;&gt;GIF와 JPEG의 Python &lt;/a&gt;및&lt;a href=&quot;https://stackoverflow.com/questions/5800009/python-and-pil-pixel-values-different-for-gif-and-jpeg&quot; papago-id=&quot;6-1&quot;&gt; PIL 픽셀 값이 다르며&lt;/a&gt;, 이 &lt;a href=&quot;http://effbot.org/imagingbook/image.htm&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-3&quot;&gt;PIL Reference 페이지&lt;/a&gt;에는 다음에 대한 더 많은 정보가 포함되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;convert()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그건 그렇고, 당신의 코드는 잘 작동할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.jpg&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지들.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;numpy 포함:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;im = Image.open('image.gif')
im_matrix = np.array(im)
print(im_matrix[0][0])
&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;픽셀 위치의 RGB 벡터 제공 (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;GIF는 색상을 팔레트에 가능한 x개의 색상 중 하나로 저장합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.prepressure.com/library/file-formats/gif&quot; rel=&quot;nofollow&quot; papago-id=&quot;16-1&quot;&gt;gif 리미티드 컬러 팔레트&lt;/a&gt;에 대해 읽어보세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 PIL은 팔레트 색상의 색상 정보가 아닌 팔레트 인덱스를 알려주고 있습니다.&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;em papago-id=&quot;17-0&quot;&gt;&lt;strong papago-id=&quot;17-0-0&quot;&gt;편집:&lt;/strong&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;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지를 변환하는 대안은 팔레트에서 RGB 인덱스를 만드는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from PIL import Image

def chunk(seq, size, groupByList=True):
    &quot;&quot;&quot;Returns list of lists/tuples broken up by size input&quot;&quot;&quot;
    func = tuple
    if groupByList:
        func = list
    return [func(seq[i:i + size]) for i in range(0, len(seq), size)]


def getPaletteInRgb(img):
    &quot;&quot;&quot;
    Returns list of RGB tuples found in the image palette
    :type img: Image.Image
    :rtype: list[tuple]
    &quot;&quot;&quot;
    assert img.mode == 'P', &quot;image should be palette mode&quot;
    pal = img.getpalette()
    colors = chunk(pal, 3, False)
    return colors

# Usage
im = Image.open(&quot;image.gif&quot;)
pal = getPalletteInRgb(im)
&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;PIL은 아니지만 그래도 흥미로울 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import imageio
im = scipy.misc.imread('um_000000.png', flatten=False, mode='RGB')
im = imageio.imread('Figure_1.png', pilmode='RGB')
print(im.shape)
&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;(480, 640, 3)
&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 class=&quot;papago-parent&quot;&gt;그래서 픽셀이 위치해 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(x, y)&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;color = tuple(im[y][x])
r, g, b = color
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구식&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://docs.scipy.org/doc/scipy/reference/generated/scipy.misc.imread.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;24-0&quot;&gt;&lt;code papago-id=&quot;24-0-0&quot;&gt;scipy.misc.imread&lt;/code&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/scipy/scipy/issues/6242&quot; papago-id=&quot;24-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;SciPy 1.0.0&lt;/a&gt;에서 더 &lt;a href=&quot;https://github.com/scipy/scipy/issues/6242&quot; papago-id=&quot;24-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;이상&lt;/a&gt; 사용되지 않습니다. (알려주셔서 감사합니다, &lt;a href=&quot;https://stackoverflow.com/users/429303/fbahr&quot; papago-id=&quot;24-4&quot;&gt;fbahr&lt;/a&gt;!)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/11064786/get-pixels-rgb-using-pil&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>Python</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/739</guid>
      <comments>https://bestsource.tistory.com/739#entry739comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:16:59 +0900</pubDate>
    </item>
    <item>
      <title>mysql은 각 일에 대해 두 날짜/시간 사이의 초를 계산합니다.</title>
      <link>https://bestsource.tistory.com/738</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql은 각 일에 대해 두 날짜/시간 사이의 초를 계산합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b papago-id=&quot;1-1&quot;&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/3528219/how-to-get-the-difference-between-two-timestamps-in-seconds&quot; dir=&quot;ltr&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 타임스탬프 간의 차이를 초 단위로 가져오는 방법&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(4개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;닫힘&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;4-1&quot; title=&quot;2013-03-04 15:08:36Z&quot; papago-attr-id=&quot;1&quot;&gt;10년 전&lt;/span&gt;에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이 표를 가지고 있지만, 이 표에서 별도의 날마다 초를 계산하는 방법에 속수무책입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;id  from            to
---------------------------------------------------
1   2013-01-31 23:50:00 2013-02-02 09:00:00
2   2013-02-05 11:21:12 2013-02-08 01:01:01
3   2013-02-08 17:33:44 2013-02-08 18:22:55
4   2013-02-12 01:40:12 2013-02-12 02:00:59
5   2013-02-28 01:40:12 2013-03-02 02:00:59
&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;이제 나는 2월의 각 요일별로 1초와 2월 - x초, 2월 - y초, 3월 - 0초 등을 얻어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 해야할지 아세요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대단히 고맙습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL에서 &lt;a href=&quot;https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampdiff&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-1&quot;&gt;TIMESTAMPIFF&lt;/a&gt; 사용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT TIMESTAMPDIFF(SECOND,from,to); 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT TIMESTAMPDIFF(SECOND,'2016-01-01 00:00:00','2016-01-11 00:00:00'); -- 864000
SELECT TIMESTAMPDIFF(MINUTE,'2016-01-01 00:00:00','2016-01-11 00:00:00'); -- 14400
SELECT TIMESTAMPDIFF(HOUR,'2016-01-01 00:00:00','2016-01-11 00:00:00'); -- 240
SELECT TIMESTAMPDIFF(DAY,'2016-01-01 00:00:00','2016-01-11 00:00:00'); -- 10
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/15157090/mysql-calculate-seconds-between-two-date-times-for-each-day&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>mysql</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/738</guid>
      <comments>https://bestsource.tistory.com/738#entry738comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:16:52 +0900</pubDate>
    </item>
    <item>
      <title>선택한 오라클 업데이트 쿼리</title>
      <link>https://bestsource.tistory.com/737</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택한 오라클 업데이트 쿼리&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;상태가 'Linked'인 table1 레코드를 table2의 해당 값만큼 업데이트하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;table 1
ID              STATUS       VOUCHER
'T010000020 Not Linked      null
'T010000021 Linked          null
'T010000024 Not Linked      null
'T010000026 Linked          null

 table 2
 ID              STATUS       VOUCHER
'T010000020 Not Linked      null
'T010000021 Linked          11234
'T010000024 Not Linked      null
'T010000026 Linked          5423
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt; UPDATE Table1 t1
   SET Voucher = (SELECT Voucher FROM
                  Table2 t2 WHERE t2.Id = t1.Id
                  and t2.Status = 'Linked')
 WHERE Status = 'Linked'
&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;URL : https://stackoverflow.com/questions/3932146/oracle-update-query-with-select&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>oracle</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/737</guid>
      <comments>https://bestsource.tistory.com/737#entry737comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:16:46 +0900</pubDate>
    </item>
    <item>
      <title>WooCommerce | Variable Product | 값당 Attribute X(out Y)에 동일한 이미지 할당</title>
      <link>https://bestsource.tistory.com/736</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WooCommerce | Variable Product | 값당 Attribute X(out Y)에 동일한 이미지 할당&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 변수 제품에는 속성과 속성 값이 있으며, 이로 인해 변형이 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;E.g. :
Attribute: 1 (Size) | Values: XS/S/M/L/XL
Attribute: 2 (Style/Color) | Values: Red/Green/Blue/Black/...
Attribute: 3 (Fabric) | Cotton/Polyester/Some other stuff...
&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;또한 총 변동량이 500개라고 가정합니다(3중 속성으로 인해 누적됨).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변형된 모든 사진을 수동으로 편집할 필요가 없도록 &quot;ATTRIB2 VALUE&quot;당 하나의 사진을 연결하는 간단한 방법이 있습니까?&lt;/font&gt;&lt;/strong&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;단일 변형이 500개인 100개의 제품은 몽키 작업이 많은 것 같아요, 더&lt;strong papago-id=&quot;4-1&quot;&gt; 좋은&lt;/strong&gt; 방법이 &lt;strong papago-id=&quot;4-1&quot;&gt;있을&lt;/strong&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;편집: 모든 파란색 변형의 경우 사진 1장, 모든 빨간색 변형의 경우 사진 1장...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;등..&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;6-0&quot;&gt;&lt;em papago-id=&quot;6-0-0&quot;&gt;추가 질문:&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;활성화된 &quot;페이지&quot;에 있는 것들만 적용하는 것이 아니라 대량의 &quot;정가 설정&quot;을 사용하여 모든 변형에 적용할 수 있는 방법이 있습니까?&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;/**
 * Replace Woocommerce Product Variation Images
 * based on variation slug 
 */

add_filter( 'woocommerce_product_variation_get_image_id', 'so_filter_wooc_product_variation_images', 10, 2 ) ;

function so_filter_wooc_product_variation_images( $image_id, $data ) {

    //the variation product slug includes &quot;-black&quot;...
    if ( strpos( $data-&amp;gt;slug, '-black') ) { 

        //replace with new image by id number
        return $new_image_id ;

    } 

    //else return the image_id according to default settings
    return $image_id ;

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 여기서 한 것처럼 제품 슬러그를 검색할 필요는 없습니다. 반드시 다음과 같이 해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;설치 설계에 따라 한 가지 변수 제품 집합을 다른 것과 구별할 수 있는 다른 변수가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 기본적으로 제품 변형에 대한 제품 슬러그는 속성 항을 결합합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 제품이 &quot;테스트 제품&quot;이고 &quot;빅&quot;과 &quot;스몰&quot; 두 가지 크기와 &quot;블랙&quot;과 &quot;화이트&quot; 두 가지 색상이 있고 다양한 제품을 만들 수 있으며 가격이 책정되어(필요한 경우) 제품 슬러그 형식을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;test-product-big-black&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;test-product-big-white&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;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이 방법은 완벽한 방법은 아닙니다. 속성 이름이 항목 제목에 나타나면 &quot;테스트 블랙 제품&quot;이라는 제목의 제품에 대해 때때로 중복될 가능성이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 프로그래밍 방식으로 해결하는 방법은 분명 더 복잡한 질문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 여기서 제공한 기능은 여전히 일반적인 개념을 보여줍니다.&lt;/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;$new_image_id_number&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;예를 들어, 미디어 라이브러리에서 사용할 이미지 위에 마우스를 올려 놓으면 첨부 파일 ID를 찾을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 사이트 옵션(이전 방식 또는 Advanced Custom Fields Pro 사용 가능)을 만들고 이미지 업로드에서 ID를 추출할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든, 이 작업 해결책은 꽤 간단합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;필터 후크는 abstract-wc-data.php...의 보호된 기능을 기반으로 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$value = apply_filters( $this-&amp;gt;get_hook_prefix() . $prop, $value, $this );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;된 이 에는...&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우에는 &quot;hook 접두사&quot;로 구성됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;woocommerce_product_variation_&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그리고 이 사건에서 문제가 된 재산.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;image_id&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;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(제품 변형 클래스를 보고 여기에 적용되지 않는 특정한 경우에 대해 기능이 필수적으로 중복되는 유사한 구조의 필터를 발견했을 때 처음에는 혼란스러웠습니다.)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/61038707/woocommerce-variable-product-assign-same-image-to-attribute-x-out-of-y-per&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>Wordpress</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/736</guid>
      <comments>https://bestsource.tistory.com/736#entry736comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:37:14 +0900</pubDate>
    </item>
    <item>
      <title>HTML 태그를 제거하지만 내부 HTML은 유지합니다.</title>
      <link>https://bestsource.tistory.com/735</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML 태그를 제거하지만 내부 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;/p&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;A nice house was found in &amp;lt;b&amp;gt;Toronto&amp;lt;/b&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;jQuery에서 이것이 어떻게 가능합니까?&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$('b').contents().unwrap();
&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;b&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;elements, 를 &lt;a href=&quot;http://api.jquery.com/contents/&quot; papago-id=&quot;5-1&quot;&gt;사용&lt;/a&gt;하여 텍스트 내용을 대상으로 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;b&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, &lt;a href=&quot;http://api.jquery.com/unwrap/&quot; papago-id=&quot;6-1&quot;&gt;그&lt;/a&gt; 부모를 제거할 겁니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;b&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최고의 성능을 얻으려면 항상 기본으로 이동해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var b = document.getElementsByTagName('b');

while(b.length) {
    var parent = b[ 0 ].parentNode;
    while( b[ 0 ].firstChild ) {
        parent.insertBefore(  b[ 0 ].firstChild, b[ 0 ] );
    }
     parent.removeChild( b[ 0 ] );
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 여기에 제공되는 어떤 jQuery 솔루션보다 훨씬 더 빠를 것입니다.&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;$(&quot;b&quot;).replaceWith(function() { return $(this).contents(); });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 그냥 끈인 걸 아신다면요&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;b&quot;).replaceWith(function() { return this.innerHTML; });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 두 가지 접근 방식 중 하나가 비용보다 &lt;a href=&quot;http://jsperf.com/unwrap-vs-replacewith&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12-1&quot;&gt;상당히&lt;/a&gt; 빠르기 때문에 많은 요소의 포장을 뜯는 경우에는 큰 차이를 보일 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내부 html 요소를 제거하고 텍스트만 반환하는 가장 간단한 방법은 &lt;a href=&quot;http://api.jquery.com/text/&quot; papago-id=&quot;13-1&quot;&gt;JQuery .text() 기능&lt;/a&gt;입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var text = $('&amp;lt;p&amp;gt;A nice house was found in &amp;lt;b&amp;gt;Toronto&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;');

alert( text.html() );
//Outputs A nice house was found in &amp;lt;b&amp;gt;Toronto&amp;lt;/b&amp;gt;

alert( text.text() );
////Outputs A nice house was found in Toronto
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/webchemist/8WpDn/&quot; papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jsFiddle 데모&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&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;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Element/outerHTML&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;17-0&quot;&gt;외부&lt;/a&gt; HTML은 &lt;strong papago-id=&quot;17-2&quot;&gt;Internet Explorer 4&lt;/strong&gt;까지 지원됩니다&lt;strong papago-id=&quot;17-2&quot;&gt;!&lt;/strong&gt;&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery가 &lt;strong papago-id=&quot;18-1&quot;&gt;없어도&lt;/strong&gt; javascript로 하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;element.outerHTML = element.innerHTML
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;19-1&quot;&gt;jQuery&lt;/strong&gt;와 함께&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var element = $('b')[0];
element.outerHTML = element.innerHTML;
&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;또는 jQuery 없이&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var element = document.querySelector('b');
element.outerHTML = element.innerHTML
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수로 원하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function unwrap(selector) {
    var nodelist = document.querySelectorAll(selector);
    Array.prototype.forEach.call(nodelist, function(item,i){
        item.outerHTML = item.innerHTML; // or item.innerText if you want to remove all inner html tags 
    })
}

unwrap('b')
&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;이것은 기존 IE를 포함한 모든 주요 브라우저에서 작동해야 합니다.&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;strong papago-id=&quot;23-1&quot;&gt;수정이&lt;/strong&gt; 없을 경우&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;23-1&quot;&gt;AllowedError&lt;/strong&gt; 또는 DOME &lt;strong papago-id=&quot;23-3&quot;&gt;exception&lt;/strong&gt;은 요소에 부모가 없음을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;보통 다른 요소의 자식으로 두지 않고 javascript 콘솔에서 새로운 노드를 생성하여 이 답변을 시도할 때 이 답변을 받습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 걱정하지 마시고, 문서의 어떤 요소라도 적어도 부모가 한 명은 있다는 것을 기억하시기 바랍니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;html&amp;gt;&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;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;HTML을 사용하면 내부 요소를 참조하는 변수가 있으면 동일한 요소를 가리키지 않습니다.&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;코딩에서 일부 내부 요소의 참조를 유지해야 하는 경우 요소를 다시 쓰지 않고 예상 위치로 이동하는 jQuery(위쪽 답변)를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이건 어때?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;b&quot;).insertAdjacentHTML(&quot;afterend&quot;,$(&quot;b&quot;).innerHTML);
$(&quot;b&quot;).parentNode.removeChild($(&quot;b&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;첫번째 줄은 의 HTML 내용을 복사합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;b&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;b&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;b&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;복사된 내용만 남기고 DOM에서 태그를 지정합니다.&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;저는 일반적으로 이 기능을 사용하기 쉽게 하기 위해 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function removeElementTags(element) {
   element.insertAdjacentHTML(&quot;afterend&quot;,element.innerHTML);
   element.parentNode.removeChild(element);
}
&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;모든 코드는 실제로 순수한 자바스크립트이며, JQuery가 사용되고 있는 유일한 것은 타겟으로 할 요소를 선택하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;b&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;:D함수는 JS :D다입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 항목도 봅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML&quot; rel=&quot;noreferrer&quot; papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;pre&gt;&lt;code&gt;// For MSIE:
el.removeNode(false);

// Old js, w/o loops, using DocumentFragment:
function replaceWithContents (el) {
  if (el.parentElement) {
    if (el.childNodes.length) {
      var range = document.createRange();
      range.selectNodeContents(el);
      el.parentNode.replaceChild(range.extractContents(), el);
    } else {
      el.parentNode.removeChild(el);
    }
  }
}

// Modern es:
const replaceWithContents = (el) =&amp;gt; {
  el.replaceWith(...el.childNodes);
};

// or just:
el.replaceWith(...el.childNodes);

// Today (2018) destructuring assignment works a little slower
// Modern es, using DocumentFragment.
// It may be faster than using ...rest
const replaceWithContents = (el) =&amp;gt; {
  if (el.parentElement) {
    if (el.childNodes.length) {
      const range = document.createRange();
      range.selectNodeContents(el);
      el.replaceWith(range.extractContents());
    } else {
      el.remove();
    }
  }
};
&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;el = document.getElementsByTagName 'b'

docFrag = document.createDocumentFragment()
docFrag.appendChild el.firstChild while el.childNodes.length

el.parentNode.replaceChild docFrag, el
&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;user113716의 솔루션보다 빠른지는 모르겠지만, 어떤 이들에게는 더 이해하기 쉬울 수도 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/4232961/remove-a-html-tag-but-keep-the-innerhtml&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>JQuery</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/735</guid>
      <comments>https://bestsource.tistory.com/735#entry735comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:37:08 +0900</pubDate>
    </item>
    <item>
      <title>ES6 맵 객체를 정렬할 수 있습니까?</title>
      <link>https://bestsource.tistory.com/734</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ES6 맵 객체를 정렬할 수 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;es6 맵 개체의 항목을 정렬할 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var map = new Map();
map.set('2-1', foo);
map.set('0-1', bar);
&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;map.entries = {
    0: {&quot;2-1&quot;, foo },
    1: {&quot;0-1&quot;, bar }
}
&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;map.entries = {
    0: {&quot;0-1&quot;, bar },
    1: {&quot;2-1&quot;, foo }
}
&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;MDN 문서에 따르면:&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;/blockquote&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;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;false&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var map = new Map();
map.set('2-1', &quot;foo&quot;);
map.set('0-1', &quot;bar&quot;);
map.set('3-1', &quot;baz&quot;);

var mapAsc = new Map([...map.entries()].sort());

console.log(mapAsc)&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;.sort()&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;code&gt;2-1, 0-1, 3-1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;올바르게 정렬됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;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;pre&gt;&lt;code&gt; new Map([...map].sort((a, b) =&amp;gt; 
   // Some sort function comparing keys with a[0] b[0] or values with a[1] b[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;&lt;strong papago-id=&quot;11-0&quot;&gt;문자열이 필요한 경우:&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;평소와 마찬가지로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.sort&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래일 경우 -1을 반환하고 같다면 0을 반환해야 합니다. 문자열의 경우 이를 &lt;a href=&quot;https://stackoverflow.com/questions/51165/how-to-sort-strings-in-javascript&quot; papago-id=&quot;12-1&quot;&gt;올바르게&lt;/a&gt; 처리하고 다음과 같은 어색한 문자를 자동으로 처리하는 방법이 &lt;a href=&quot;https://stackoverflow.com/questions/51165/how-to-sort-strings-in-javascript&quot; papago-id=&quot;12-1&quot;&gt;권장&lt;/a&gt;됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ä&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;strong papago-id=&quot;14-1&quot;&gt;키&lt;/strong&gt;로 맵을 정렬하는 간단한 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; new Map([...map].sort((a, b) =&amp;gt; String(a[0]).localeCompare(b[0])))
&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;strong papago-id=&quot;15-1&quot;&gt;기준&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; new Map([...map].sort((a, b) =&amp;gt; String(a[1]).localeCompare(b[1])))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열이 아닌 키나 값을 치면 오류가 발생하지 않는다는 점에서 안전한 유형입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선발대에서&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;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;.localeCompare()&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;hr&gt; 
&lt;h2 papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 상세히 설명합니다.&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;em&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; tldr:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;...map.entries()&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;...map&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;.sort()&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;/em&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;.entries()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[...map.entries()]&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;(많은 답변에서 제시) JS 엔진이 이 방법을 최적화하지 않는 한 지도의 추가 반복을 추가할 수 있습니다.&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;간단한 테스트 케이스에서는 다음을 사용하여 질문이 요구하는 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;new Map([...map].sort())
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 및  쉼표  키 값 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;키가 모두 문자열인 경우 스퀴드와 강제 콤마 joined 키 값 문자열을 비교합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'2-1,foo'&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;'0-1,[object Object]'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 새 지도를 새 삽입 순서와 함께 반환:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&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;{}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SO의 콘솔 출력에서 실제 브라우저 콘솔을 살펴보십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/em&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 map = new Map([
  ['2-1', 'foo'],
  ['0-1', { bar: 'bar' }],
  ['3-5', () =&amp;gt; 'fuz'],
  ['3-2', [ 'baz' ]]
])

console.log(new Map([...map].sort()))&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;34-0&quot;&gt;하지만&lt;/strong&gt; 이렇게 강압과 끈질에 의존하는 것은 좋은 관행이 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 놀라운 결과를 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;const map = new Map([
  ['2', '3,buh?'],
  ['2,1', 'foo'],
  ['0,1', { bar: 'bar' }],
  ['3,5', () =&amp;gt; 'fuz'],
  ['3,2', [ 'baz' ]],
])

// Compares '2,3,buh?' with '2,1,foo'
// Therefore sorts ['2', '3,buh?'] ******AFTER****** ['2,1', 'foo']
console.log('Buh?', new Map([...map].sort()))

// Let's see exactly what each iteration is using as its comparator
for (const iteration of map) {
  console.log(iteration.toString())
}&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 버그는 디버그하기가 정말 어렵습니다. 위험을 무릅쓰지 마세요!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;a[0]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;b[0]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위와 같은 정렬 함수에서, 또는 함수 인수에서 배열 파괴와 함께:&lt;/font&gt;&lt;/font&gt;&lt;/font&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 map = new Map([
  ['2,1', 'this is overwritten'],
  ['2,1', '0,1'],
  ['0,1', '2,1'],
  ['2,2', '3,5'],
  ['3,5', '2,1'],
  ['2', ',9,9']
])

// Examples using array destructuring. We're saying 'keys' and 'values'
// in the function names so it's clear and readable what the intent is. 
const sortStringKeys = ([a], [b]) =&amp;gt; String(a).localeCompare(b)
const sortStringValues = ([,a], [,b]) =&amp;gt; String(a).localeCompare(b)

console.log('By keys:', new Map([...map].sort(sortStringKeys)))
console.log('By values:', new Map([...map].sort(sortStringValues)))&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 알파벳 순서의 문자열이 아닌 다른 비교가 필요하다면, 항상 당신이 돌아오는지 확인하는 것을 잊지 마세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전후를 위해서가 아니라&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;false&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;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날것과 마찬가지로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a[0] &amp;gt; b[0]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 동등한 것으로 취급되기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Map&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열로 , 배열 정렬, 다시 변환&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Map&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 들면.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;new Map(
  Array
    .from(eventsByDate)
    .sort((a, b) =&amp;gt; {
      // a[0], b[0] is the key of the map
      return a[0] - b[0];
    })
)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 맵 개체에 &lt;strong papago-id=&quot;48-1&quot;&gt;맞춤형 반복기&lt;/strong&gt;를 사용하여 정렬된 액세스를 수행할 것을 제안합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;map[Symbol.iterator] = function* () {
    yield* [...map.entries()].sort((a, b) =&amp;gt; a[0].localeCompare(b[0]));
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반복기를 사용하면 한 번만 선언할 수 있다는 장점이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지도에서 항목을 추가/삭제한 후, 지도 위에 새로운 for-loop이 반복기를 사용하여 이 변경 사항을 자동으로 반영합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 대부분의 답변과 같이 정렬된 복사본은 지도의 상태를 한 시점에만 반영하기 때문에 그렇지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자의 초기 상황을 사용한 전체적인 작업 예시입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var map = new Map();
map.set('2-1', { name: 'foo' });
map.set('0-1', { name: 'bar' });

for (let [key, val] of map) {
    console.log(key + ' - ' + val.name);
}
// 2-1 - foo
// 1-0 - bar

map[Symbol.iterator] = function* () {
    yield* [...map.entries()].sort((a, b) =&amp;gt; a[0].localeCompare(b[0]));
}

for (let [key, val] of map) {
    console.log(key + ' - ' + val.name);
}
// 1-0 - bar
// 2-1 - foo

map.set('2-0', { name: 'zzz' });

for (let [key, val] of map) {
    console.log(key + ' - ' + val.name);
}
// 1-0 - bar
// 2-0 - zzz
// 2-1 - foo
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안부 전해요.&lt;/font&gt;&lt;/p&gt;&lt;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;/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;var unsortedMap = new Map();
unsortedMap.set('2-1', 'foo');
unsortedMap.set('0-1', 'bar');

// Initialize your keys array
var keys = [];
// Initialize your sorted maps object
var sortedMap = new Map();

// Put keys in Array
unsortedMap.forEach(function callback(value, key, map) {
    keys.push(key);
});

// Sort keys array and go through them to put in and put them in sorted map
keys.sort().map(function(key) {
    sortedMap.set(key, unsortedMap.get(key));
});

// View your sorted map
console.log(sortedMap);
&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;[...map].sort(/* etc */);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;세부 사항을 파악하는데 2시간이 걸렸습니다.&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;질문에 대한 답변은 이미 https://stackoverflow.com/a/31159284/984471 에 나와 있습니다.&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;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;35-1&quot;&gt;설명과 함께 명확&lt;/strong&gt;하고 일반적인 &lt;strong papago-id=&quot;35-1&quot;&gt;예&lt;/strong&gt;를 제시하면 &lt;strong papago-id=&quot;35-1&quot;&gt;다음&lt;/strong&gt;과 같습니다&lt;strong papago-id=&quot;35-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 몇 가지 예시: https://javascript.info/map-set&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 코드를 다음 링크로 복사 paste하여 특정 사용 사례에 맞게 수정할 수 있습니다. https://www.jdoodle.com/execute-nodejs-online/&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&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;let m1 = new Map();

m1.set(6,1); // key 6 is number and type is preserved (can be strings too)
m1.set(10,1);
m1.set(100,1);
m1.set(1,1);
console.log(m1);

// &quot;string&quot; sorted (even if keys are numbers) - default behaviour
let m2 = new Map( [...m1].sort() );
//      ...is destructuring into individual elements
//      then [] will catch elements in an array
//      then sort() sorts the array
//      since Map can take array as parameter to its constructor, a new Map is created
console.log('m2', m2);

// number sorted
let m3 = new Map([...m1].sort((a, b) =&amp;gt; {
  if (a[0] &amp;gt; b[0]) return 1;
  if (a[0] == b[0]) return 0;
  if (a[0] &amp;lt; b[0]) return -1;
}));
console.log('m3', m3);

// Output
//    Map { 6 =&amp;gt; 1, 10 =&amp;gt; 1, 100 =&amp;gt; 1, 1 =&amp;gt; 1 }
// m2 Map { 1 =&amp;gt; 1, 10 =&amp;gt; 1, 100 =&amp;gt; 1, 6 =&amp;gt; 1 }
//           Note:  1,10,100,6  sorted as strings, default.
//           Note:  if the keys were string the sort behavior will be same as this
// m3 Map { 1 =&amp;gt; 1, 6 =&amp;gt; 1, 10 =&amp;gt; 1, 100 =&amp;gt; 1 }
//           Note:  1,6,10,100  sorted as number, looks correct for number keys
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안타깝게도 ES6에서는 실제로 구현되지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능은 불변의 &lt;a href=&quot;https://facebook.github.io/immutable-js/docs/#/OrderedMap&quot; rel=&quot;nofollow&quot; papago-id=&quot;62-1&quot;&gt;OrderedMap.sort()&lt;/a&gt;에 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Lodash에서 JS 또는 &lt;a href=&quot;https://lodash.com/docs#sortBy&quot; rel=&quot;nofollow&quot; papago-id=&quot;62-3&quot;&gt;_.sortBy().&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 가지 방법은 항목 배열을 가져와 정렬한 다음 정렬된 배열로 새 지도를 만드는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let ar = [...myMap.entries()];
sortedArray = ar.sort();
sortedMap = new Map(sortedArray);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 새 개체를 만들지 않고 동일한 개체에서 작업하려면 다음과 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Get an array of the keys and sort them
let keys = [...myMap.keys()];
sortedKeys = keys.sort();

sortedKeys.forEach((key)=&amp;gt;{
  // Delete the element and set it again at the end
  const value = this.get(key);
  this.delete(key);
  this.set(key,value);
})
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래의 토막글은 주어진 맵을 키별로 정렬하고 키 값 객체에 다시 매핑합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지도가 string-&amp;gt;string 객체 지도였기 때문에 localCompare 함수를 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var hash = {'x': 'xx', 't': 'tt', 'y': 'yy'};
Object.keys(hash).sort((a, b) =&amp;gt; a.localeCompare(b)).map(function (i) {
            var o = {};
            o[i] = hash[i];
            return o;
        });
&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;[{t:'tt'}, {x:'xx'}, {y: 'yy'}];&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지도 객체를 정렬하지 않고 지도를 수행하기 전에 미리 정렬을 준비하는 것이 더 현실적인 예일 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 실제로 구문이 상당히 압축됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 맵 기능 전 정렬 기능을 적용할 수 있고 맵 전 정렬 기능을 적용할 수 있습니다(JSX 구문을 사용하여 작업 중인 리액트 앱의 예).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 API에서 가져온 배열에 있는 자바스크립트 객체의 속성에 대해 작으면 -1을 반환하고, 작으면 0을 반환하는 화살표 함수를 사용하여 내부에 정렬 기능을 정의함을 표시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;report.ProcedureCodes.sort((a, b) =&amp;gt; a.NumericalOrder &amp;lt; b.NumericalOrder ? -1 : 0).map((item, i) =&amp;gt;
                        &amp;lt;TableRow key={i}&amp;gt;

                            &amp;lt;TableCell&amp;gt;{item.Code}&amp;lt;/TableCell&amp;gt;
                            &amp;lt;TableCell&amp;gt;{item.Text}&amp;lt;/TableCell&amp;gt;
                            {/* &amp;lt;TableCell&amp;gt;{item.NumericalOrder}&amp;lt;/TableCell&amp;gt; */}
                        &amp;lt;/TableRow&amp;gt;
                    )
&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;/p&gt; 
&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;맵을 배열로 변환하고 이렇게 정렬하는 다른 솔루션에는 다음과 같은 버그가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var a = new Map([[1, 2], [3,4]])
console.log(a);    // a = Map(2)&amp;nbsp;{1 =&amp;gt; 2, 3 =&amp;gt; 4}

var b = a;
console.log(b);    // b = Map(2)&amp;nbsp;{1 =&amp;gt; 2, 3 =&amp;gt; 4}

a = new Map();     // this is when the sorting happens
console.log(a, b); // a = Map(0)&amp;nbsp;{}     b = Map(2)&amp;nbsp;{1 =&amp;gt; 2, 3 =&amp;gt; 4}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정렬하면 새 개체가 생성되고 정렬되지 않은 개체에 대한 다른 모든 포인터가 끊어집니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;약간의 변형 - 확산 구문이 없어서 작업을 하고 싶었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;object&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;Map&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;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;Object.fromEntries(Object.entries(apis).sort())
&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;Map()을 감소시켜 정렬하는 기능이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function groupBy(list, keyGetter) {
    const map = new Map();
    list.forEach((item) =&amp;gt; {
        const key = keyGetter(item);
        const collection = map.get(key);
        if (!collection) {
            map.set(key, [item]);
        } else {
            collection.push(item);
        }
    });

    const sortedMap = new Map();
    [...map].sort((a, b) =&amp;gt; b[1].length - a[1].length).forEach(e =&amp;gt; sortedMap.set(e[0], e[1]));

    return sortedMap;
}
const test = groupBy(array, item =&amp;gt; item.fieldName);  
&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/31158902/is-it-possible-to-sort-a-es6-map-object&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>Javascript</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/734</guid>
      <comments>https://bestsource.tistory.com/734#entry734comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:37:00 +0900</pubDate>
    </item>
    <item>
      <title>web.config가 원하는 길이의 요청을 허용하도록 구성하는 방법</title>
      <link>https://bestsource.tistory.com/733</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;web.config가 원하는 길이의 요청을 허용하도록 구성하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 영역 요소의 값으로 파일 클라이언트 쪽을 만들고 싶은 사이트를 만들고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업을 수행할 코드가 있지만 이 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTTP 오류 404.15 - 찾을 수 없음 요청 필터링 모듈은 쿼리 문자열이 너무 긴 요청을 거부하도록 구성되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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;그렇지 않다면 filesystem/active x 객체를 사용하지 않고 file client측을 생성할 수 있는 방법이 있습니까?&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;web.config에 다음을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;system.webServer&amp;gt;
  &amp;lt;security&amp;gt;
    &amp;lt;requestFiltering&amp;gt;
      &amp;lt;requestLimits maxQueryString=&quot;32768&quot;/&amp;gt;
    &amp;lt;/requestFiltering&amp;gt;
  &amp;lt;/security&amp;gt;
&amp;lt;/system.webServer&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;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/requestLimits&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/requestLimits&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주석을 반영하도록 업데이트되었습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms689462%28v=vs.90%29.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;requestLimitsElement for requestFiltering [IIS 설정 스키마]&lt;/font&gt;&lt;/a&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;web.config에 다음을 추가해야 할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;system.web&amp;gt;
    &amp;lt;httpRuntime maxQueryStringLength=&quot;32768&quot; maxUrlLength=&quot;65536&quot;/&amp;gt;
&amp;lt;/system.web&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;참조: http &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/e1f13641%28v=vs.100%29.aspx&quot; papago-id=&quot;13-1&quot; rel=&quot;noreferrer&quot;&gt;Runtime Element(ASP).&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/e1f13641%28v=vs.100%29.aspx&quot; papago-id=&quot;13-1&quot; rel=&quot;noreferrer&quot;&gt;NET 설정 스키마)&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;물론 위의 구성 설정에서 숫자(32768 및 65536)는 예시일 뿐입니다.&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;내 경우 (Visual Studio 2012 / IIS Express / ASP)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET MVC 4 앱 / .&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Net Framework 4.5) 30분간의 시행착오 끝에 실제로 작동한 것은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;maxQueryStringLength&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;&amp;lt;httpRuntime&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;httpRuntime targetFramework=&quot;4.5&quot; maxQueryStringLength=&quot;10240&quot; enable=&quot;true&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;maxQueryStringLength&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;2048&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;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.asp.net/whitepapers/aspnet4#0.2__Toc253429244&quot; rel=&quot;noreferrer&quot; papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;허용 가능한 URL 범위 확대&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 설치를 해봤습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;system.webServer&amp;gt;&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;a href=&quot;https://stackoverflow.com/a/11636484/114029&quot; papago-id=&quot;23-1&quot;&gt;@MattVarblow&lt;/a&gt;가 암시하듯이, 하지만 효과가 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 이것은 제가 Windows 8이 있는 개발 컴퓨터에서 IIS Express(IIS 8 기반)를 사용하고 있기 때문입니다.&lt;/font&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;운영 환경에 앱을 배포했을 때(Windows Server 2008 R2 with IIS 7), IE 10은 쿼리 문자열이 긴 AJAX 요청에서 404개의 오류를 반환하기 시작했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 문제가 쿼리 문자열과 관련이 있다고 생각하고 @MattVarblow의 답변을 시도했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;방금 IIS 7에서 작동했습니다. :)&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;IIS 8.5 웹 서버를 실행할 때 이 문제가 발생하면 다음 방법을 사용할 수 있습니다.&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;먼저 작업 중인 IIS 사이트에서 &lt;strong papago-id=&quot;26-1&quot;&gt;&quot;필터링&lt;/strong&gt; 요청&lt;strong papago-id=&quot;26-1&quot;&gt;&quot;&lt;/strong&gt; 모듈을 찾은 다음 두 번 클릭합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8RLaH.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8RLaH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 아래에 표시된 흰색 영역에서 마우스 오른쪽 버튼을 누른 다음 &quot;&lt;strong papago-id=&quot;27-1&quot;&gt;Edit&lt;/strong&gt; Feature &lt;strong papago-id=&quot;27-1&quot;&gt;Settings&quot;(기능&lt;/strong&gt; 설정 편집)라는 컨텍스트 메뉴 옵션을 클릭해야 합니다&lt;strong papago-id=&quot;27-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/q7Kkf.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/q7Kkf.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음에는 &quot;&lt;strong papago-id=&quot;28-1&quot;&gt;최대 쿼리&lt;/strong&gt; 문자열&lt;strong papago-id=&quot;28-1&quot;&gt;(Bytes)&quot;&lt;/strong&gt; 값을 &lt;strong papago-id=&quot;28-3&quot;&gt;2048년&lt;/strong&gt;에서 &lt;strong papago-id=&quot;28-5&quot;&gt;5000&lt;/strong&gt;과 같은 더 적합한 값으로 변경하는 것이 마지막입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iuUHL.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iuUHL.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&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;확인할 사항: 사이트에서 MVC를 사용하는 경우 로그인 컨트롤러 클래스에 [Authorize]를 추가하면 이 문제가 발생할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인증되지 않아 로그인 방법에 접근할 수 없어 로그인 방법 --&amp;gt; boom으로 리디렉션됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 ajax call 매개변수에서 큰 문자열을 전달할 때 오류가 발생합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 항상 use type post in ajax를 사용하면 &lt;strong papago-id=&quot;31-1&quot;&gt;문제가 100%&lt;/strong&gt; 해결되며 web.config에서 길이를 설정할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;// var UserId= 1000개 사용자 ID 배열&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
        global: false,
        url: SitePath + &quot;/User/getAussizzMembersData&quot;,
        &quot;data&quot;: { UserIds: UserId},
        &quot;type&quot;: &quot;POST&quot;,
        &quot;dataType&quot;: &quot;JSON&quot;
}}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASP 웹 응용 프로그램을 IIS 8에 배포하는 데 비슷한 문제가 있었습니다. 이를 해결하기 위해 Matt와 Leniel이 위에서 제안한 대로 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 익명 인증을 활성화하기 위해 내 사이트의 인증 설정을 구성해야 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 그것은 나에게 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 아직 인증되지 않았기 때문에 로그인 페이지의 ActionResult 기능에 [AllowAnonymous]를 추가해야 했습니다.&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;웹 사이트에서 인증을 사용하고 있지만 IIS에 올바른 인증 방법(예: 기본, 양식 등)이 설정되어 있지 않은 경우&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 브라우저가 리디렉션 루프에 갇히게 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 리디렉션 URL이 폭발할 때까지 점점 더 길어집니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Visual Studio에서 앱을 실행하는 동안 IIS Express를 사용하는 동안 이 문제가 발생한 사람의 경우, 먼저 응용 프로그램에서 사용 중인 &lt;b papago-id=&quot;36-1&quot;&gt;applicationhost.config&lt;/b&gt; 파일을 찾아야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;36-5&quot;&gt;applicationhost.config&lt;/b&gt; 파일을 찾는 방법에 대해서는 https://stackoverflow.com/a/41553876/1849880 에서 답변을 참조하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 위에서 설명한 대로 &lt;i papago-id=&quot;36-7&quot;&gt;maxQueryString&lt;/i&gt; 값을 변경할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTTP 오류 404.15 - 찾을 수 없음 요청 필터링 모듈은 쿼리 문자열이 너무 긴 요청을 거부하도록 구성되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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;Form&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;method&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;get/set state입니다.&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;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;method&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성을 제거해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;43&quot; papago-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/11636386/how-to-configure-the-web-config-to-allow-requests-of-any-length&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>Javascript</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/733</guid>
      <comments>https://bestsource.tistory.com/733#entry733comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:36:49 +0900</pubDate>
    </item>
    <item>
      <title>SQL 대신 XML을 언제 사용합니까?</title>
      <link>https://bestsource.tistory.com/732</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 대신 XML을 언제 사용합니까?&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-05 13:14:53Z&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;저는 몇 년 전부터 데이터베이스 기반 웹 애플리케이션 작업을 해왔고 최근에는 XML을 사용할 수 있는 CMS 관련 프로젝트를 수행했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 XML/XSLT의 일반적인 사용법과 모든 데이터를 (My)SQL 데이터베이스에 저장한 후 필요에 따라 PHP/Python/등을 사용하여 웹에서 작업하는 접근법보다 어떤 경우에 더 유용할지 생각하게 되었습니다.&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;데이터베이스가 아닌 XML 파일에 데이터를 저장하는 것이 더 나은 응용 프로그램의 예를 들어줄 수 있는 사람이 있습니까?&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://www.amazon.com/exec/obidos/tg/detail/-/0321150406/102-0503816-7711357&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;이 책&lt;/a&gt;(Effective XML: XML 향상을 위한 50가지 구체적인 방법)을 인용하려면:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;XML은 데이터베이스가 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 결코 데이터베이스가 되기 위한 것이 아니었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 결코 데이터베이스가 될 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;관계형 데이터베이스는 20년 이상의 구현 경험을 보유한 검증된 기술입니다.&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;XML은 서로 다른 데이터베이스 간 또는 데이터베이스와 다른 프로그램 간에 데이터를 이동하는 데 매우 유용한 기술입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 그것 자체가 데이터베이스는 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게 쓰지 마세요.&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각에는 이것이 좀 직설적으로라도 요약되는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML은 데이터 교환 형식입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;XPath 표현식을 가진 DOM을 쿼리할 수 있는 XML 구문 분석 라이브러리를 가질 수 있지만 DBMS와 동일한 것은 아닙니다. DOM/XPath 인터페이스를 가진 DBMS를 구축할 수 있지만 인덱스가 있는 DBMS 엔진과 데이터 형식을 구현하기 위해 필요한 ACID 속성이나 대용량 데이터 세트로 확장할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DBMS의 로깅 및 기타 아티팩트 - (정의상) XML이 아닌 다른 것으로 만듭니다.&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;XML을 사용하여 다른 응용프로그램으로 보낼 파일을 만듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML은 데이터 저장 형식보다는 데이터 교환 형식으로 더 적합합니다.&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;XML을 사용할 때 설명하기에 나쁘지 않은 링크는 다음과 같습니다. 왜 &lt;a href=&quot;http://xml.silmaril.ie/whyxml.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;XML을 사용해야 합니까?&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL은 좋은 표 형식의 데이터로 행과 열에 쉽게 맞는 데이터입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML은 여러 수준의 크기가 다른 계층 데이터에 적합합니다.&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;SQL은 저장 및 검색에 적합합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML은 전송 및 포맷에 적합합니다.&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;1) 데이터를 다른 사람과 교환해야 할 때.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML은 웹의 &quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/Lingua_franca&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12-1&quot;&gt;lingua franca&lt;/a&gt;&quot;입니다. 데이터베이스 파일과 달리 거의 모든 사람이 읽고 해석할 수 있습니다.&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;2) 데이터 볼륨이 작아서 복잡한 쿼리를 수행할 필요가 없는 경우 XML 파일은 구성이나 문서 템플릿을 저장하는 데 유용합니다.&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;3) 동일한 데이터에 액세스하려는 작성자가 많지 않을 때.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 데이터베이스는 사용자를 위해 배후에서 작동하는 동시성 메커니즘을 포함합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 데이터베이스는 대용량 데이터 세트에 대한 정보를 신속하게 검색할 수 있도록 인덱스를 지원할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML을 사용하는 용도:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개체 계층 구조를 유지합니다.&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;거의 변경되지 않는 데이터, 구성 설정 등.&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;XSLT에 대한 입력이 변환됨에 따라: 일반적으로 말하자면, 내 프로그램 중 하나가 HTML을 내보낸다면, 그것은 XSLT를 사용하여 그것을 하고 있으므로, 소스 데이터는 어느 정도 XML로 표현될 것입니다.&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;/ul&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 활용 사례와 데이터베이스의 활용 사례 간에 중복되는 부분이 많지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 개는 있지만 많지는 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이러니하게도, 현재 XML을 가장 많이 사용하고 있는 곳은 인메모리 ADO DataSet을 구축하고 DataSet의 WriteXml 및 ReadXml 메서드를 사용하여 지속 및 검색하는 데스크톱 앱입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 ADO를 사용하고 있는데, 그 이유는 메타정보에 의해 정의된 데이터 모델을 ADO를 사용하여 동적으로 구축하는 것이 작업에 대한 저만의 객체 모델을 구현하는 것보다 훨씬 더 쉽기 때문입니다.&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;XML을 데이터베이스로 사용하는 것처럼 &lt;em papago-id=&quot;23-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;저는 데이터베이스와 같은 많은 기능을 구현하는 객체 모델을 사용하고 있으며, XML을 지속성 형식으로 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지 마.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.joelonsoftware.com/articles/fog0000000319.html&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;소프트웨어에 관한 Joel:&quot; papago-id=&quot;25-1&quot; papago-attr-id=&quot;4&quot;&gt;책에서 작성자 선택&lt;/a&gt; 시도&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML을 저장 매체로 많이 사용하는 상용 응용 프로그램이 꽤 있다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 각 프로젝트를 자신의 파일에 저장하는 프로젝트 기획 애플리케이션을 위해 해봤습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 앱은 USB 스틱에 저장되며, 설치가 0으로 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 데이터는 XML에서 가져와 메모리에서 작업하므로 getRecord(id)는 매우 빠릅니다.&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;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;XML 및 RDMS는 모두 데이터스토어로 사용할 수 있지만 각 구현에는 각각의 장단점이 있습니다.&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;웹 응용 프로그램의 데이터를 저장하기 위해 XML을 사용하는 것은 많은 양의 데이터를 처리하기 시작하거나 데이터에서 다른 정보를 검색하기로 결정할 때까지 일반적으로 큰 문제가 되지 않습니다(예: 데이터 마이닝).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 말해, 데이터 소스를 위해 많은 양의 XML 파일을 저장하는 것은 확장성이 뛰어나지 않지만 데이터 이동을 쉽게 해줍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML을 사용하여 복잡한 개체를 관계형이 아닌 형식으로 직렬화할 수도 있으므로 XML에서 직접 개체를 직렬화/병렬화할 수 있으면 ORM이 필요 없습니다.&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;RDMS(데이터베이스)는 일반적으로 확장성이 뛰어나고 동시 지원 기능이 뛰어나며 대용량 데이터를 사용할 때 훨씬 빠릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;관계형 모델을 사용하면 나중에 데이터 마이닝을 쉽게 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스는 개체-관계 임피던스 불일치(http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch) 로 인해 사용자가 보기 흉한 코드를 작성하거나 복잡한 ORM을 사용해야 할 수 있습니다.&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;호스트에 제한된 mysql 데이터베이스가 있는 경우 XML을 데이터스토어로 사용할 수 있는 기회가 제공됩니다.&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;SQL과 함께 XML을 사용하는 예는 다음과 같습니다. 인증된 사용자는 모두 동일한 DBMS가 아닌 다양한 데이터베이스에 데이터를 읽고 씁니다. A사의 사용자는 로컬 SQL Server 데이터베이스의 데이터를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;B 사의 사용자들은 원격 오라클 데이터베이스의 데이터를 사용합니다.&lt;/font&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;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 사이트 개발자는 원격 데이터베이스에 저장 프로시저를 만들 수 있는 기능이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL은 웹 앱에서 데이터베이스로 직접 전송해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스마다 SQL 구문과 스키마가 조금씩 다르기 때문에 동일한 작업(SELECT, INSERT 등)을 위해 12개 데이터베이스마다 다른 SQL을 사용해야 합니다.&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;웹 앱에 SQL 문을 내장하는 방법 중 하나는 XML 파일에 배치하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 XML 파일에는 십여 개의 데이터베이스 중 하나에 대한 SQL 문 집합이 포함되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드는 로그인한 사용자가 액세스할 데이터베이스를 결정하고 지정된 XML 파일에서 적절한 SQL을 검색합니다.&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;저장 프로시저와 마찬가지로 XML 파일의 SQL을 응용 프로그램을 중지하거나 다시 컴파일하지 않고 업데이트할 수 있습니다.&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;일부 애플리케이션은 XML 파일을 사용하여 구성을 저장합니다. 저는 &lt;a href=&quot;http://www.sqlite.org/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;38-1&quot;&gt;SQLite&lt;/a&gt;를 사용하는 것을 선호합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 제 데이터를 저장하기 위해 어떤 종류의 XML도 &lt;em papago-id=&quot;39-1&quot;&gt;사용&lt;/em&gt;하지 않을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당사는 SOA 앱에서 XSLT 변환을 데이터 추상화 계층으로 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 개체는 XSLT로 서로 데이터를 전송하므로 이해하기 위해 필요한 언어는 하나뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DB로 전송하기 위해 데이터를 SQL로 변환할 수 있어야 하는 데이터베이스 커넥터를 제외합니다.&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;이렇게 하면 앱에 수많은 개체가 분산된 SQL 문자열 생성이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유지보수가 훨씬 쉬워집니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/201568/when-would-i-use-xml-instead-of-sql&lt;/font&gt;&lt;/p&gt;</description>
      <category>bestsource</category>
      <category>XML</category>
      <author>bestsource</author>
      <guid isPermaLink="true">https://bestsource.tistory.com/732</guid>
      <comments>https://bestsource.tistory.com/732#entry732comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:36:40 +0900</pubDate>
    </item>
  </channel>
</rss>