<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>manycodes</title>
    <link>https://manycodes.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Fri, 19 Jun 2026 21:40:39 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>manycodes</managingEditor>
    <item>
      <title>ubuntu에 ansible과 함께 MySQL 설치</title>
      <link>https://manycodes.tistory.com/1023</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ubuntu에 ansible과 함께 MySQL 설치&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;부랑 우분투에 ansible로 MySQL을 설치하는 데 문제가 있습니다.&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;pre&gt;&lt;code&gt;---
- name: Install MySQL
  apt:
    name: &quot;{{ item }}&quot;
  with_items:
    - python-mysqldb
    - mysql-server

- name: copy .my.cnf file with root password credentials
  template: 
    src: templates/root/.my.cnf
    dest: ~/.my.cnf
    owner: root
    mode: 0600

- name: Start the MySQL service
  service: 
    name: mysql 
    state: started
    enabled: true

  # 'localhost' needs to be the last item for idempotency, see
  # http://ansible.cc/docs/modules.html#mysql-user
- name: update mysql root password for all root accounts
  mysql_user: 
    name: root 
    host: &quot;{{ item }}&quot; 
    password: &quot;{{ mysql_root_password }}&quot; 
    priv: &quot;*.*:ALL,GRANT&quot;
  with_items:
    - &quot;{{ ansible_hostname }}&quot;
    - 127.0.0.1
    - ::1
    - localhost 
&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;failed: [default] =&amp;gt; (item=vagrant-ubuntu-trusty-64) =&amp;gt; {&quot;failed&quot;: true, &quot;item&quot;: &quot;vagrant-ubuntu-trusty-64&quot;}
msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials
failed: [default] =&amp;gt; (item=127.0.0.1) =&amp;gt; {&quot;failed&quot;: true, &quot;item&quot;: &quot;127.0.0.1&quot;}
msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials
failed: [default] =&amp;gt; (item=::1) =&amp;gt; {&quot;failed&quot;: true, &quot;item&quot;: &quot;::1&quot;}
msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials
failed: [default] =&amp;gt; (item=localhost) =&amp;gt; {&quot;failed&quot;: true, &quot;item&quot;: &quot;localhost&quot;}
msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나의 .my.cnf는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[client]
user=root
password={{ mysql_root_password }}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서버에 복사할 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[client]
user=root
password=root
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;왜 ~/.my.cnf가 생성되었는지 이해할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로젝트 &lt;a href=&quot;https://github.com/ajouve/vagrant-php&quot;&gt;깃허브&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언제&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql-server&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;.my.cnf&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;work, 빈 비밀번호 줄이 있어야 합니다.&lt;/font&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;[client]
user=root
password=
&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;.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;code&gt;vagrant&lt;/code&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;.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 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;업데이트해야 하므로 idempotency test에 실패합니다.&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;ansible mysql_user module 페이지에 비밀번호를 작성한 후 &lt;strong&gt;작성&lt;/strong&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;code&gt;where&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에 대한 조항&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql_user&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;action (이전의 file stat로 probably).&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;check_implicit_admin&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;login_user&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;login_password&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 그것은 아주 무능력한 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제3의 방법으로, 아마도&lt;/font&gt;&lt;/font&gt;&lt;code&gt;check_implicit_admin&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 쉽게 만들 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 몇 개의 새로운 서버로 테스트한 위의 내용을 보여주는 성공적인 플레이북이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자랑스럽긴 하네요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메모&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.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;---
- hosts: mysql
  vars:
    mysql_root_password: fart
  tasks:
  - name: Install MySQL
    apt: name={{ item }} update_cache=yes cache_valid_time=3600 state=present
    sudo: yes
    with_items:
    - python-mysqldb
    - mysql-server
  #- name: copy cnf
  #  copy: src=.my.cnf dest=~/.my.cnf owner=ubuntu mode=0644
  #  sudo: yes
  - name: Start the MySQL service
    sudo: yes
    service: 
      name: mysql 
      state: started
      enabled: true
  - name: update mysql root password for all root accounts
    sudo: yes
    mysql_user: 
      name: root 
      host: &quot;{{ item }}&quot; 
      password: &quot;{{ mysql_root_password }}&quot;
      login_user: root
      login_password: &quot;{{ mysql_root_password }}&quot;
      check_implicit_admin: yes
      priv: &quot;*.*:ALL,GRANT&quot;
    with_items:
      - &quot;{{ ansible_hostname }}&quot;
      - 127.0.0.1
      - ::1
      - localhost 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(편집 - my.cnf 제거)&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;&lt;strong&gt;vars/main.yml&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql_root_pass: mypassword #MySQL Root Password
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;asks/main.yml&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;---
 - name: Install the MySQL packages
   apt: name={{ item }} state=installed update_cache=yes
   with_items:
     - mysql-server-5.6
     - mysql-client-5.6
     - python-mysqldb
     - libmysqlclient-dev

 - name: Update MySQL root password for all root accounts
   mysql_user: name=root host={{ item }} password={{ mysql_root_pass }} state=present
   with_items:
     - &quot;{{ ansible_hostname }}&quot;
     - 127.0.0.1
     - ::1
     - localhost

 - name: Copy the root credentials as .my.cnf file
   template: src=root.cnf.j2 dest=~/.my.cnf mode=0600

 - name: Ensure Anonymous user(s) are not in the database
   mysql_user: name='' host={{ item }} state=absent
   with_items:
     - localhost
     - &quot;{{ ansible_hostname }}&quot;

 - name: Remove the test database
   mysql_db: name=test state=absent
   notify:
     - Restart MySQL
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;템플릿/root.cnf.j2&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[client]
user=root
password={{ mysql_root_pass }}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;핸들러/메인.yml&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;---
 - name: Restart MySQL
   service: name=mysql state=restarted
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;site.yml&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;---
- hosts: all
  become: yes
  gather_facts: yes
  roles:
    - mysql
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도움이 필요하시면 이 github &lt;a href=&quot;https://github.com/arbabnazar/ansible-roles/blob/master/LEMP/tasks/mysql.yml&quot; rel=&quot;noreferrer&quot;&gt;링크&lt;/a&gt;를 확인해주시기 바랍니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ubuntu 20.04에서는 login_unix_socket이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- name: setting default root password
  mysql_user:
    name: root
    password: &quot;{{ mysql_root_password }}&quot;
    check_implicit_admin: true
    login_unix_socket: /var/run/mysqld/mysqld.sock
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;건배.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/26597926/install-mysql-with-ansible-on-ubuntu&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MySQL</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1023</guid>
      <comments>https://manycodes.tistory.com/1023#entry1023comment</comments>
      <pubDate>Tue, 7 Nov 2023 21:01:14 +0900</pubDate>
    </item>
    <item>
      <title>각 HTML 페이지(예: 각 ng-class)에서 Typescript 열거형을 사용하는 올바른 방법</title>
      <link>https://manycodes.tistory.com/1022</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 HTML 페이지(예: 각 ng-class)에서 Typescript 열거형을 사용하는 올바른 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 및 활자 스크립트를 처음 접합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 다음과 같은 타이프스크립트 열거를 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public enum MyEnum{
   A = 0,
   B = 1,
   C = 2
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;범위 변수는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.myLetter: MyEnum = MyEnum.B;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열거형 검사를 하는 올바른 방법은 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;옵션 1:&lt;/strong&gt; html 페이지의 열거형 정수 값 비교 -&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ng-class=&quot;{classA: myLetter === 0, classB: myLetter === 1, classC: myLetter === 2}&quot;&amp;gt;Test panel&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;옵션 2:&lt;/strong&gt; 컨트롤러 범위 메서드에서 클래스 이름 가져오기&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.getClass(value: myLetter): string{
    if(value === MyEnum.A)
    return 'classA';

    if(value === MyEnum.B)
    return 'classB';

    if(value === MyEnum.C)
    return 'classC';
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 html 요소를 가지는건..&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ng-class='getClass(myLetter)'&amp;gt;Test panel&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;옵션 3:&lt;/strong&gt; &lt;a href=&quot;https://stackoverflow.com/questions/16627860/angular-js-and-ng-swith-when-emulating-enum&quot;&gt;Angular.js &lt;/a&gt;및&lt;a href=&quot;https://stackoverflow.com/questions/16627860/angular-js-and-ng-swith-when-emulating-enum&quot;&gt; ng-switch-when-emulating enum&lt;/a&gt;에서 &lt;em&gt;'RyanNerd'&lt;/em&gt;가 제공하는 답변&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저의 경우 옵션 2가 바람직하며, 나머지 옵션은 ng-class 값을 문자열로 체크인하므로 정적 유형을 적용할 수 없습니다.&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;저는 컨트롤러가 클래스 이름을 알도록 하는 아이디어를 좋아하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스코프에 컨버터 기능을 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$scope.myEnumName = (value: MyEnum) =&amp;gt; MyEnum[value];
&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;ng-class=&quot;{'A':'ClassA', 'B':'ClassB', 'C':'ClassC'}[myEnumName(myLetter)]&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 스위치 기능 추가&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$scope.switchMyEnum =
    &amp;lt;T&amp;gt;(value: MyEnum, cases: { [value: string]: T }) =&amp;gt; cases[MyEnum[value]];
&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;ng-class=&quot;switchMyEnum(myLetter, {'A':'ClassA', 'B':'ClassB', 'C':'ClassC'})
&lt;/code&gt;&lt;/pre&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;myLetter&lt;/code&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;$scope.switchMyLetter =
    &amp;lt;T&amp;gt;(cases: { [value: string]: T }) =&amp;gt; cases[MyEnum[$scope.myLetter]];
&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;ng-class=&quot;switchMyLetter({'A':'ClassA', 'B':'ClassB', 'C':'ClassC'})
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여러 범위에서 여러 개의 열거형을 사용하려는 경우:&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;angular.module(&quot;MyApp&quot;, [])
  .run([&quot;$rootScope&quot;, (root: {}) =&amp;gt; {
    function registerSwitchers(...enumInfos: [string, { [value: number]: string }][]) {
      enumInfos.forEach(enumInfo =&amp;gt; {
        var switcherName = enumInfo[0]
        var enumType = enumInfo[1]
        root[switcherName] = (value: any, cases: { [value: string]: any }) =&amp;gt; cases[enumType[value]];
      });
    }
    registerSwitchers(
      [&quot;switchMyEnum1&quot;, MyEnum1],
      [&quot;switchMyEnum2&quot;, MyEnum2]);
  }])
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 클래스 개체를 컨트롤러에 빌드하고 보기에서 식(괄호 표기법 사용)으로 설정할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예:-&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.panelClass = {};
$scope.panelClass[MyEnum.A] = 'classA';
$scope.panelClass[MyEnum.B] = 'classB';
$scope.panelClass[MyEnum.C] = 'classC';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 다시 쓸 수 있도록 타이프스크립트 버전에서 지원(폴리필 지원 포함)하는 경우 위 내용을 속기 구문(ES6)으로 쓸 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.panelClass = {
    [MyEnum.A]:'classA',
    [MyEnum.B]:'classB', 
    [MyEnum.C]:'classC'
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ng-class=&quot;panelClass[myLetter]&quot;&amp;gt;Test panel&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 ng-class 축약식과 유사합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ng-class=&quot;{0:'classA', 1:'classB', 2:'classC'}[myLetter]&quot;&amp;gt;Test panel&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우리는 보통 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Enums&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;enum&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;s. 어레이는 다음과 같이 잘 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;((): void =&amp;gt; {

 var ClassConstant: string[] = ['classA', 'classB', 'classC'];
 
 angular
  .module('app', [])
  .constant('ClassConstant', ClassConstant)
  .controller('AppController', ($scope, ClassConstant) =&amp;gt; {
	  $scope.setClass = (classname: string) =&amp;gt; {
		return ClassConstant[classname];
	  };
  });
 })();&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;meta charset=&quot;utf-8&quot;&amp;gt;
  &amp;lt;title&amp;gt;JS Bin&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body ng-app=&quot;app&quot;&amp;gt;

  &amp;lt;div ng-controller=&quot;AppController&quot;&amp;gt;
    &amp;lt;div ng-class=&quot;{{setClass(myLetter)}}&quot;&amp;gt;1&amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
  
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저도 이 질문에 직면했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 제 해결책입니다.&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 내 열거값의 각 값에 대해 부울을 반환하는 함수를 컨트롤러에 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 컨트롤러에서.ts&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;export class AController { 
    public TestEnumA(): boolean { 
        return this.scope.field == MyEnum.A; 
    }

    public TestEnumB(): boolean { 
        return this.scope.field == MyEnum.B; 
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 보기에 .html&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ngController=&quot;AController as controllerAlias&quot;&amp;gt;
    &amp;lt;div class=&quot;a-class&quot; ng-class=&quot;{'classA-true': controllerAlias.TestEnumA(), 'classB-true': controllerAlias.TestEnumB()}&quot;&amp;gt;&amp;lt;div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 솔루션을 선택한 이유는 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이런 식으로, 저는 컨트롤러의 &lt;strong&gt;css&lt;/strong&gt; 클래스를 &lt;strong&gt;하드&lt;/strong&gt; 코딩하지 &lt;strong&gt;않습니다.&lt;/strong&gt; (당신의 컨트롤러의 css 클래스를 하드 코딩하는 것은 뷰의 유지성을 보장하는 좋은 생각이 아닙니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 ng-class의 enum &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;strong&gt;이렇게&lt;/strong&gt; 하면 자동 &lt;strong&gt;코드 완성&lt;/strong&gt;과 &lt;strong&gt;컴파일 &lt;/strong&gt;시&lt;strong&gt; 검증&lt;/strong&gt;의 &lt;strong&gt;이점을 얻을&lt;/strong&gt; 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;rootScope에서 열거형을 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;angular
    .module('moduleName', [])
    .run(['$rootScope', function ($rootScope) {
        $rootScope.Enum = PathToEnum.Enum;
     }]);
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;pro&lt;/strong&gt;: 쉽게 설정할 수 있고 어디서나 사용할 수 있습니다(컨트롤러가 다르거나 보기에 따라 다름).&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;단점&lt;/strong&gt;: 컴파일 시 자동 완성 및 검증을 잃게 됩니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보기에서&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ngController=&quot;AController&quot;&amp;gt;
    &amp;lt;div class=&quot;class&quot; ng-class=&quot;{$root.Enum.A: 'classA', $root.Enum.B: 'classB'}[valueInScope]&quot;&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/31703204/correct-way-to-utilize-typescript-enum-in-angular-html-pages-e-g-angular-ng-cl&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>angularJS</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1022</guid>
      <comments>https://manycodes.tistory.com/1022#entry1022comment</comments>
      <pubDate>Tue, 7 Nov 2023 21:01:05 +0900</pubDate>
    </item>
    <item>
      <title>Oracle sqdeveloper - 명령줄에서 DB를 연결하는 방법</title>
      <link>https://manycodes.tistory.com/1021</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle sqdeveloper - 명령줄에서 DB를 연결하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작은 DB 유틸리티를 작성하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 유틸리티에서 직접 Oracle sqdeveloper 인스턴스를 열 수 있는 권한을 사용자에게 부여하고자 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특정 DB에 이미 연결되어 있는 Oracle sqdeveloper IDE를 열 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;sqdeveloper USERID/PASSWARD@DATABASE 같은 것.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;/? /h 가 아닌 작업&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구성 파일을 재정의하는 옵션이 있으므로 구성 파일에서 제공하는 기능에 따라 구성 파일을 재정의할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 SQL 개발자 버전 20.2 이상을 사용하는 한 무료 오픈 소스 &lt;a href=&quot;https://github.com/oracle/oracle-db-examples/tree/master/sqldeveloper/extension/java/ConnectionHelper&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;a href=&quot;https://www.thatjeffsmith.com/archive/2020/09/initiating-sql-developer-connections-from-outside-of-sql-developer/&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;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7ybuP.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7ybuP.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;운이 좋게도 그렇습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 Oracle의 Connection을 사용하여 이 작업을 수행할 수 있습니다.&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;경영진이 '기타 사용자 컨텐츠' 레포를 추가하는 방법을 알게 되면 위험을 잘못 판단할 수 있기 때문에 SQL 개발자 자체에 포함할 수 있는 방법을 찾을 수 있기를 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 최신 SQL 개발자(20.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;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SQL 개발자에서 도움말 -&amp;gt; 업데이트 확인으로 이동하여 '추가'를 눌러 다음 업데이트 소스를 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;https://raw.githubusercontent.com/bjeffrie/sqldev-update-center/master/update-center.xml&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;'연결 도우미'를 선택한 후 다음으로 마법사를 완료합니다(SQL Developer를 다시 시작해야 합니다).&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도구 -&amp;gt; 기본 설정으로 이동하고 왼쪽 창에서 '연결 도우미' 노드를 클릭한 다음 기본 창에서 '명령줄 연결 수락'을 활성화합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 요청하는 것에 다른 체크 박스는 필요 없습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SQL 개발자를 닫고 CLI에서 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sqldeveloper -myCLIconnection=user/pw@host:port/service&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;[이것은 Oracle의 &lt;a href=&quot;https://stackoverflow.com/users/1156452/thatjeffsmith&quot;&gt;Jeffsmith&lt;/a&gt;가 블로그에 &lt;a href=&quot;https://www.thatjeffsmith.com/archive/2020/09/initiating-sql-developer-connections-from-outside-of-sql-developer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;기록&lt;/a&gt;한 내용과 Oracle의 &lt;a href=&quot;https://github.com/bjeffrie&quot; rel=&quot;nofollow noreferrer&quot;&gt;Brian Jeffries&lt;/a&gt;가 &lt;a href=&quot;https://github.com/oracle/oracle-db-examples/tree/master/sqldeveloper/extension/java/ConnectionHelper&quot; rel=&quot;nofollow noreferrer&quot;&gt;Oracle의 github repo&lt;/a&gt;에 기록한 내용을 결합한 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇지 않은 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sqldeveloper.exe /h&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 가능한 출시 파라미터를 보여주며, 어느 것도 고객님의 요구와 공통점이 없는 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/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/3883820/oracle-sqldeveloper-how-to-connect-db-from-command-line&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Oracle</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1021</guid>
      <comments>https://manycodes.tistory.com/1021#entry1021comment</comments>
      <pubDate>Tue, 7 Nov 2023 21:00:57 +0900</pubDate>
    </item>
    <item>
      <title>Angularjs로 해시 후 URL 매개 변수를 구문 분석하려면 어떻게 해야 합니까?</title>
      <link>https://manycodes.tistory.com/1020</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Angularjs로 해시 후 URL 매개 변수를 구문 분석하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL이 다음과 같은 Foursquare에서 access_token을 구문 분석하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://mywebsite.com/4sqredirect/#access_token=1234567890XXXXX&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://mywebsite.com/4sqredirect/ #access_token=1234567890XXXXX&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$routeParams와 $location을 시도했지만 아무것도 돌려받지 못했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$route를 시도한 후에야 다음 속성이 포함된 개체가 반환되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;current:  { 
    params:  {  } 
    pathParams:  {  } 
    loadedTemplateUrl: partials/4sqredirect
    locals:  {  } 
    scope:  { 
        this:  { 
            $ref: $[&quot;current&quot;][&quot;scope&quot;]
        } 
        route:  { 
            $ref: $
        } 
        location:  {  } 
        token: null
    }
} 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네이티브 앵귤러를 사용해서는 구할 방법이 없다는 뜻인가요?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JS 함수가 해시의 원인입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;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;angular.module('myApp')
    .controller('4sqredirectCtrl', function ($scope, $route, $location, $routeParams) {
        $scope.route = $route;
        $scope.location = $location;
        $scope.token = $routeParams.access_token;
    });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나의 주요 js는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;angular.module('myApp', [
    'ngCookies',
    'ngResource',
    'ngSanitize',
    'ngRoute'
])
.config(function ($routeProvider, $locationProvider) {
    $locationProvider.html5Mode(true);

    $routeProvider
    .when('/', {
        templateUrl: 'partials/main',
        controller: 'MainCtrl'
    })
    .when('/4sqredirect/', {
        templateUrl: 'partials/4sqredirect',
        controller: '4sqredirectCtrl'
    })
    .otherwise({
        redirectTo: '/'
    });
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://docs.angularjs.org/api/ng.$location&quot; rel=&quot;noreferrer&quot;&gt;각도 위치 서비스에서&lt;/a&gt;&lt;/font&gt;&lt;/font&gt; &lt;code&gt;$location.hash()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메소드 리턴&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#after-hash&lt;/code&gt; &lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 만약 당신의 url이 다음과 같다면.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;https://mywebsite.com/4sqredirect/#access_token=1234567890XXXXX
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고나서&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;$location.hash()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;돌아가다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;access_token=1234567890XXXXX&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;split('=')[1]&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클릭할 때 이 &lt;a href=&quot;http://plnkr.co/edit/4tVZCuCIkqPzhvoa7ffN?p=preview&quot; rel=&quot;noreferrer&quot;&gt;플렁커&lt;/a&gt;를 봅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;4Square&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고나서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$location.url()&lt;/code&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;/4sqredirect/#access_token=123456
$location.hash().split('=')[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;123456&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;$location.search()&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//e.g. url https://www.example.com/#!?name=123
var s = $location.search();
// {name: '123'}
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://docs.angularjs.org/api/ng&quot;&gt;http://docs.angularjs.org/api/ng&lt;/a&gt;.$location&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;매개 변수 없이 호출하면 현재 URL의 검색 부분(객체)을 반환합니다.&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;&quot;원어민 각선미&quot; 방법은 모르지만, 당신은 해시에 접근할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;location.hash&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현형으로&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이상적이지는 않겠지만, 가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 위한 Angular JS의 직접적인 지원은 사실 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안 써요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ngRoute&lt;/code&gt;&lt;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;location.hash&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;substring()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html ng-app=&quot;app&quot;&amp;gt;

&amp;lt;head&amp;gt;
&amp;lt;script src=&quot;http://code.angularjs.org/1.2.6/angular.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;link href=&quot;style.css&quot; rel=&quot;stylesheet&quot; /&amp;gt;
&amp;lt;script&amp;gt;
angular.module('app', [])
.controller('AppCtrl', ['$scope', '$window', function($scope, $window) {
  $scope.accessToken = $window.location.hash.substring(14);
}]);
&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;

&amp;lt;body ng-controller=&quot;AppCtrl&quot;&amp;gt;
&amp;lt;h1&amp;gt;Access Token&amp;lt;/h1&amp;gt;
&amp;lt;p&amp;gt;{{accessToken}}&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;

&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/20878335/how-do-i-parse-url-params-after-a-hash-with-angularjs&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>angularJS</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1020</guid>
      <comments>https://manycodes.tistory.com/1020#entry1020comment</comments>
      <pubDate>Tue, 7 Nov 2023 21:00:42 +0900</pubDate>
    </item>
    <item>
      <title>Python에서 문자열이 비어 있지 않은 경우 여러 개의 문자열에 가입</title>
      <link>https://manycodes.tistory.com/1019</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Python에서 문자열이 비어 있지 않은 경우 여러 개의 문자열에 가입&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 4개의 줄이 있는데 아무 줄이나 비어 있을 수 있습니다.&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;new_string = string1 + ' ' + string2 + ' ' + string3 + ' ' + string4
&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;string1&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;또한, 저는 3개의 빈칸이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string2&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string3&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필요 없을 때 빈칸 없이 어떻게 쉽게 가입할 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; strings = ['foo','','bar','moo']
&amp;gt;&amp;gt;&amp;gt; ' '.join(filter(None, strings))
'foo bar moo'
&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;None&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;통화 중에 모든 거짓 요소를 제거합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열에 선행/후행 공백이 없는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; strings = ['foo','','bar','moo']
&amp;gt;&amp;gt;&amp;gt; ' '.join(x for x in strings if x)
'foo bar moo'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇지 않은 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; strings = ['foo ','',' bar', ' ', 'moo']
&amp;gt;&amp;gt;&amp;gt; ' '.join(x.strip() for x in strings if x.strip())
'foo bar moo'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열에 선두가 아닌 공백/trailing이 있는 경우에는 더 열심히 해야 할 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 실제로 가지고 있는 것이 무엇인지 명확히 해주세요.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;strings = ['foo','','bar','moo']
' '.join([x for x in strings if x is not ''])
'foo bar moo'
&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/8626694/joining-multiple-strings-if-they-are-not-empty-in-python&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Python</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1019</guid>
      <comments>https://manycodes.tistory.com/1019#entry1019comment</comments>
      <pubDate>Tue, 7 Nov 2023 21:00:34 +0900</pubDate>
    </item>
    <item>
      <title>플라스크/Ajax HTTP 연결을 유지하는 방법?</title>
      <link>https://manycodes.tistory.com/1018</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;플라스크/Ajax HTTP 연결을 유지하는 방법?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery Ajax 전화가 왔는데요, 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    $(&quot;#tags&quot;).keyup(function(event) {
      $.ajax({url: &quot;/terms&quot;,
        type: &quot;POST&quot;,
        contentType: &quot;application/json&quot;,
        data: JSON.stringify({&quot;prefix&quot;: $(&quot;#tags&quot;).val() }),
        dataType: &quot;json&quot;,
        success: function(response) { display_terms(response.terms); },
      });
&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;@app.route(&quot;/terms&quot;, methods=[&quot;POST&quot;])
def terms_by_prefix():
    req = flask.request.json
    tlist = terms.find_by_prefix(req[&quot;prefix&quot;])
    return flask.jsonify({'terms': tlist})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;tcpdump는 HTTP 대화 상자를 표시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;POST /terms HTTP/1.1
Host: 127.0.0.1:5000
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20100101 Firefox/12.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/json; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://127.0.0.1:5000/
Content-Length: 27
Pragma: no-cache
Cache-Control: no-cache

{&quot;prefix&quot;:&quot;foo&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;HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 445
Server: Werkzeug/0.8.3 Python/2.7.2+
Date: Wed, 09 May 2012 17:55:04 GMT

{&quot;terms&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;기본 request_handler는 WSGIRquestHandler입니다.&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;app.run()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 한 줄 더하면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WSGIRequestHandler.protocol_version = &quot;HTTP/1.1&quot;&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;잊지 마세요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;from werkzeug.serving import WSGIRequestHandler&lt;/code&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;Werkzeug의 통합 웹 서버는 Base를 기반으로 구축됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Python 표준 라이브러리의 HTTPS 서버.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 HTTP 서버는 HTTP 프로토콜 버전을 1.1로 설정하면 Keep-Alives를 지원하는 것 같습니다.&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;Werkzeug는 하지 않지만 Flask가 Werkzeug의 BaseWSG 서버를 인스턴스화하기 위해 사용하는 기계를 해킹할 준비가 되었다면 직접 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Flask.run()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어느쪽이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;werkzeug.serving.run_simple()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 당신이 해야 할 일은 결국.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BaseWSGIServer.protocol_version = &quot;HTTP/1.1&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 해결책을 시험해 보지 않았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;플라스크의 웹 서버는 개발용으로만 사용되어야 한다는 것을 알고 계실 겁니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/10523879/how-to-make-flask-keep-ajax-http-connection-alive&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>ajax</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1018</guid>
      <comments>https://manycodes.tistory.com/1018#entry1018comment</comments>
      <pubDate>Tue, 7 Nov 2023 21:00:28 +0900</pubDate>
    </item>
    <item>
      <title>각 12개의 'ng serve'는 거의 프로덕션 빌드와 같이 앱을 느리게 만듭니다.</title>
      <link>https://manycodes.tistory.com/1017</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 12개의 'ng serve'는 거의 프로덕션 빌드와 같이 앱을 느리게 만듭니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;방금 Angular 11.2.7에서 Angular 12로 앱을 마이그레이션했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 'ng serve'를 개발하고 사용할 때 리빌드 시간이 지금은 훨씬, 훨씬 느려서 답답할 정도라는 것을 제외하고는 모든 것이 잘 실행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 M1 iMac을 사용하고 있고, 노드 16.1.0을 사용하고 있습니다. 가치가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 Angular 12로 옮기기 전에 기계는 개발 재구축(초단위)에서 번개처럼 빨랐습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 한 줄의 코드만 변경해도 콘솔 로그에서 한 글자만 변경해도 빌드 시간은 23초이며 그 중 약 22초는 &quot;단계: 밀봉&quot;으로 소요됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 ng 서브를 할 때도 이제 모든 것이 main.js로 최소화되어 실행된다는 것을 알게 되었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;버전 11이 그렇게 하지는 않았지만, 개발 중에 개별적으로 미니화되지 않은 컴포넌트를 실행했던 것을 기억하는 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 엔지서브는 제가 어떤 것을 바꿀 &lt;em&gt;때&lt;/em&gt;마다 완전한 생산 구축과 같은 일을 하는 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그게 느림의 근본 원인인 것 같은데 잘 모르겠어요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서...&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Angular 12에서 개발할 때 'ng serve'를 계속 사용해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전 빌드 속도를 유지하기 위해 마이그레이션할 때 설정해야 하는 옵션이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런데 이 '봉인 단계'란 무엇입니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 보기에는 생산 제작 용어처럼 들리는데요!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;감사해요.&lt;/font&gt;&lt;/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;개발 환경이 프로덕션과 비슷하도록 v12로 업데이트된 Angular click.&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;기본적으로 운영 구축&quot; 이니셔티브를 지원하는 것입니다.&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;angular.json&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 업데이트 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;projects.{PROJECT_NAME}.architect.build.defaultConfiguration&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;경로:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;defaultConfiguration&quot;: &quot;development&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/angular/angular-cli/commit/656f8d75a3368a5affd1c55145841123dafdb007&quot; rel=&quot;noreferrer&quot;&gt;여기&lt;/a&gt;서 자세히 보기&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하지 않은 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng update&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;명령을 사용하여 수동으로 업데이트합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 마이그레이션을 실행해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구체적으로 재료 스타일에 약간의 변화가 있어 마이그레이션하지 않으면 빌드 시간이 길어질 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마이그레이션을 트리거하려면 다음을 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ng update @angular/cli --migrate-only --from 11 --to 12
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 제 구성에 다음 사항을 추가해야 했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 새 앱에 &quot;개발&quot; 구성이 없는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인&lt;/font&gt;&lt;/font&gt;&lt;code&gt;angular.json&lt;/code&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-json prettyprint-override&quot;&gt;&lt;code&gt;&quot;configurations&quot;: {
  &quot;development&quot;: {
    &quot;optimization&quot;: false,
    &quot;outputHashing&quot;: &quot;all&quot;,
    &quot;sourceMap&quot;: true,
    &quot;namedChunks&quot;: true,
    &quot;extractLicenses&quot;: false,
    &quot;vendorChunk&quot;: true,
    &quot;buildOptimizer&quot;: false,
    &quot;budgets&quot;: []
  }
},
&quot;serve&quot;: {
  &quot;builder&quot;: &quot;@angular-devkit/build-angular:dev-server&quot;,
  &quot;options&quot;: {
    &quot;browserTarget&quot;: &quot;ui:build&quot;
  },
  &quot;configurations&quot;: {
    &quot;development&quot;: {
      &quot;browserTarget&quot;: &quot;ui:build:development&quot;
    }
  },
  &quot;defaultConfiguration&quot;: &quot;development&quot;
}

&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;깨끗한 angular.json에서 비트와 조각을 수동으로 복사하는 경우(그리고 이 작업을 반드시 수행해야 함), 놓치지 않도록 하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;defaultConfiguration&quot;: &quot;development&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래&lt;/font&gt;&lt;/font&gt;&lt;code&gt;serve&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 이전 각.json은 이것을 가지고 있지 않았는데, 솔직히 제 실수였을 수도 있고, 아니면 그 사건 이후에 나온 특징일 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아직 &lt;em&gt;생산&lt;/em&gt; 빌드를 받고 있었는데, 3분이 걸리고 어떤 빌드를 하고 있는지 알려주는 것이 없어서 매우 답답합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &quot;serve&quot;: {
      &quot;builder&quot;: &quot;@angular-devkit/build-angular:dev-server&quot;,
      &quot;configurations&quot;: {
        &quot;production&quot;: {
          &quot;browserTarget&quot;: &quot;angular12:build:production&quot;
        },
        &quot;development&quot;: {
          &quot;browserTarget&quot;: &quot;angular12:build:development&quot;
        }
      },
      &quot;defaultConfiguration&quot;: &quot;development&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;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;Lazy Chunk 파일에는 다음과 같은 긴 파일 이름이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;default-src_app_common-crm_common-crm_module_ts.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;code&gt;34.js&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;sourceMap&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 이를 통해 컴파일 속도가 훨씬 빨라지고 필요한 경우 언제든지 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매우 중요합니다.&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마이그레이션을 한 번 이상 실행하면 마이그레이션에 '버그와 유사한 행동'이 발생하는 것으로 보입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;aot&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;그러나 aot 설정이 누락된 상태에서 다시 실행하면 다음과 같이 기록됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;false&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하지 않도록 설정했습니다(11에서 마이그레이션할 때 부재가 거짓을 의미한다고 생각하고 거짓으로 유지되기를 원하기 때문입니다).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; ng update @angular/cli --migrate-only --from 11 --to 12
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 마이그레이션을 실행하는 것은 실제로 구축 속도를 높이는 것과 같은 착각을 불러일으킬 수 있지만 실제로는 실제로는 장애물만 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 이미 실행한 경우에는 실행하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng update&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 당신의 것을 보세요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;angular.json&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서류철로 철하다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;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;ng update @angular/cli --migrate-only update-angular-config-v12&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 참고: 수락한 답변에 언급된 마이그레이션이 저에게도 적용되지 않았습니다. &quot;Package is not installed&quot;(패키지가 설치되지 않았습니다)라는 오류가 계속 발생했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/67598130/angular-12-ng-serve-builds-apps-slowly-almost-like-production-builds&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>angular</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1017</guid>
      <comments>https://manycodes.tistory.com/1017#entry1017comment</comments>
      <pubDate>Tue, 7 Nov 2023 21:00:20 +0900</pubDate>
    </item>
    <item>
      <title>GAE에서 완벽하게 유효한 XML을 구문 분석할 때 &amp;quot;Prolog에서 컨텐츠가 허용되지 않습니다.</title>
      <link>https://manycodes.tistory.com/1016</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GAE에서 완벽하게 유효한 XML을 구문 분석할 때 &quot;Prolog에서 컨텐츠가 허용되지 않습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 지난 48시간 동안 이 완전히 화가 나는 벌레에 머리를 부딪쳐 왔습니다. 그래서 저는 노트북을 창밖으로 던지기 전에 마침내 수건을 집어 던지고 여기에 물어보려고 생각했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 AWS SimpleDB와 통화한 응답 XML을 파싱하려고 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;응답이 정상적으로 와이어로 되돌아옵니다. 예를 들어 다음과 같이 보일 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt; 
&amp;lt;ListDomainsResponse xmlns=&quot;http://sdb.amazonaws.com/doc/2009-04-15/&quot;&amp;gt;
    &amp;lt;ListDomainsResult&amp;gt;
        &amp;lt;DomainName&amp;gt;Audio&amp;lt;/DomainName&amp;gt;
        &amp;lt;DomainName&amp;gt;Course&amp;lt;/DomainName&amp;gt;
        &amp;lt;DomainName&amp;gt;DocumentContents&amp;lt;/DomainName&amp;gt;
        &amp;lt;DomainName&amp;gt;LectureSet&amp;lt;/DomainName&amp;gt;
        &amp;lt;DomainName&amp;gt;MetaData&amp;lt;/DomainName&amp;gt;
        &amp;lt;DomainName&amp;gt;Professors&amp;lt;/DomainName&amp;gt;
        &amp;lt;DomainName&amp;gt;Tag&amp;lt;/DomainName&amp;gt;
    &amp;lt;/ListDomainsResult&amp;gt;
    &amp;lt;ResponseMetadata&amp;gt;
        &amp;lt;RequestId&amp;gt;42330b4a-e134-6aec-e62a-5869ac2b4575&amp;lt;/RequestId&amp;gt;
        &amp;lt;BoxUsage&amp;gt;0.0000071759&amp;lt;/BoxUsage&amp;gt;
    &amp;lt;/ResponseMetadata&amp;gt;
&amp;lt;/ListDomainsResponse&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 이 XML을 파서에게 전달합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;XMLEventReader eventReader = xmlInputFactory.createXMLEventReader(response.getContent());
&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;eventReader.nextEvent();&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 원하는 데이터를 얻기 위해 여러 번.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 특이한 부분이 있습니다. 로컬 서버 내부에서 잘 작동합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;응답이 들어오고, 내가 분석해보면, 모두가 기뻐합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제는 내가 Google App Engine에 코드를 배포할 때 발신 요청이 여전히 작동하고 응답 XML이 100% 동일하고 정확한 것처럼 보이지만 다음 예외를 제외하고 응답 구문 분석에 실패한다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;com.amazonaws.http.HttpClient handleResponse: Unable to unmarshall response (ParseError at [row,col]:[1,1]
Message: Content is not allowed in prolog.): &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt; 
&amp;lt;ListDomainsResponse xmlns=&quot;http://sdb.amazonaws.com/doc/2009-04-15/&quot;&amp;gt;&amp;lt;ListDomainsResult&amp;gt;&amp;lt;DomainName&amp;gt;Audio&amp;lt;/DomainName&amp;gt;&amp;lt;DomainName&amp;gt;Course&amp;lt;/DomainName&amp;gt;&amp;lt;DomainName&amp;gt;DocumentContents&amp;lt;/DomainName&amp;gt;&amp;lt;DomainName&amp;gt;LectureSet&amp;lt;/DomainName&amp;gt;&amp;lt;DomainName&amp;gt;MetaData&amp;lt;/DomainName&amp;gt;&amp;lt;DomainName&amp;gt;Professors&amp;lt;/DomainName&amp;gt;&amp;lt;DomainName&amp;gt;Tag&amp;lt;/DomainName&amp;gt;&amp;lt;/ListDomainsResult&amp;gt;&amp;lt;ResponseMetadata&amp;gt;&amp;lt;RequestId&amp;gt;42330b4a-e134-6aec-e62a-5869ac2b4575&amp;lt;/RequestId&amp;gt;&amp;lt;BoxUsage&amp;gt;0.0000071759&amp;lt;/BoxUsage&amp;gt;&amp;lt;/ResponseMetadata&amp;gt;&amp;lt;/ListDomainsResponse&amp;gt;
javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Content is not allowed in prolog.
    at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(Unknown Source)
    at com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(Unknown Source)
    at com.amazonaws.transform.StaxUnmarshallerContext.nextEvent(StaxUnmarshallerContext.java:153)
    ... (rest of lines omitted)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 이 XML에서 '보이지 않는 문자' 또는 UTF8 인코딩되지 않은 문자 등을 이중, 삼중, 4중으로 확인했습니다.&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;더 이상한 것은 색슨 기반 파서를 사용하는 경우입니다. 하지만 GAE에서만 사용할 수 있습니다. 제 지역 환경에서는 항상 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;완벽하게 작동하는 환경에서만 디버거를 실행할 수 있는 경우(GAE에서 원격 디버그할 수 있는 좋은 방법을 찾지 못했습니다) 문제가 있는지 코드를 추적하는 것은 매우 어렵습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그럼에도 불구하고, 제가 가지고 있는 원시적인 수단을 사용하여, 저는 다음을 포함한 수많은 접근법을 시도했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프롤로그를 사용하거나 사용하지 않는 XML&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; encoding=&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;HTTP 스트림에 존재하는 청킹 정보 유무&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 저는 이것들 대부분을 여러 조합으로 시도해 보았는데, 그 조합들이 상호작용하는 것이 합리적이었습니다. - 아무것도 아닙니다!&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어찌할 바를 모르겠어요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이와 같은 문제를 전에 본 적이 있는 사람이 있습니까?&lt;/font&gt;&lt;/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;XML과 XSD(또는 DTD)의 인코딩은 다릅니다.&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;XML 파일 헤더:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;?xml version='1.0' encoding='utf-8'?&amp;gt;&lt;/code&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;XSD 파일 헤더:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;?xml version='1.0' encoding='utf-16'?&amp;gt;&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;XML 문서 유형 선언 앞에 무엇이 올 때 발생할 수 있는 또 다른 시나리오입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;버퍼에 이와 같은 것이 있을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;helloworld&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;  
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;혹은 공간이나 특별한 캐릭터까지도.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;버퍼에 있을 수 있는 바이트 순서 마커라고 하는 특수 문자가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;버퍼를 파서에게 전달하기 전에...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String xml = &quot;&amp;lt;?xml ...&quot;;
xml = xml.trim().replaceFirst(&quot;^([\\W]+)&amp;lt;&quot;,&quot;&amp;lt;&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;notepad++에서 xml 파일을 검사하고 파일을 저장하는 동안 문제가 있었습니다. 상위 utf-8 xml 태그가 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Encoding(탭) &amp;gt; Encoding in UTF-8:selected(UTF-8-BOM에서 Encoding)으로 notpad++에 파일을 저장하여 수정하였습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 오류 메시지는 항상 시작 요소의 잘못된 XML 내용으로 인해 발생합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 XML 요소의 시작 부분에 &quot;.&quot;라는 추가 작은 점이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;앞의 모든 문자&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;?xml….&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;” 위의 &quot;&lt;strong&gt; &lt;/strong&gt;org.xml.sax&quot;를 야기합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;SAXParse 예외:&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt; 프롤로그&lt;/strong&gt;&quot; 오류 메시지에 &lt;strong&gt;내용이 허용되지 않습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;앞에 작은 점 &quot;.&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;“&amp;lt;?xml….&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;고치기 위해서는 그 이상한 캐릭터들을 모두 삭제하고,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;“&amp;lt;?xml“&lt;/code&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.mkyong.com/java/sax-error-content-is-not-allowed-in-prolog/&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;해결책은 문서를 BOM이 있는 UTF-8에서 BOM이 없는 UTF-8로 변경하는 것이었습니다.&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;저의 경우 XML 파일은 c# program에서 생성되어 AS400에 입력되어 추가적인 처리가 가능합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;몇 가지 분석을 통해 XML 파일을 생성하는 동안 UTF8 인코딩을 사용하고 있는 반면 javac(AS400의 경우)은 &quot;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;BOM&quot;이 없는 UTF8&quot;. 따라서 아래에 언급된 것과 유사한 코드를 추가로 작성해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//create encoding with no BOM
Encoding outputEnc = new UTF8Encoding(false); 
//open file with encoding
TextWriter file = new StreamWriter(filePath, false, outputEnc);           

file.Write(doc.InnerXml);
file.Flush();
file.Close(); // save and close it
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 xml 파일에서 헤더는 다음과 같이 보였습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;? /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테스트 파일에서 파일 바이트를 읽고 데이터를 UTF-8(이 파일의 헤더가 utf-16임을 알 수 없음)로 디코딩하여 문자열을 만들고 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;byte[] data = Files.readAllBytes(Paths.get(path));
String dataString = new String(data, &quot;UTF-8&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;javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Content is not allowed in prolog.
&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 dataString = new String(data, &quot;UTF-16&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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;xml 선언을 제거하면 해결되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version='1.0' encoding='utf-8'?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예기치 않은 이유:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일 경로의 문자&lt;/font&gt;&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일부 내부 버그로 인해 파일 내용 자체는 100% 맞지만 다음과 같은 파일 이름을 제공하는 경우에도 &lt;em&gt;&lt;strong&gt;Prolog&lt;/strong&gt;&lt;/em&gt;에서 &lt;em&gt;&lt;strong&gt;Content is not allowed in&lt;/strong&gt;&lt;/em&gt; prolog라는 오류가 나타납니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Data\#22\file.xml&lt;/code&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;strong&gt;확인 방법:&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일을 특수 문자가 없는 경로로 이동한 후 오류가 사라지면 이 문제가 발생한 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;xml 파일에서 &quot;content is not allowed in prolog&quot; 라는 문제에 직면했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해결책&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;처음에 내 루트 폴더는 '#&lt;strong&gt;Filename&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;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 개체를 unmarshaller 메서드에 전달하는 대신 FileInputStream을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;File myFile = new File(&quot;........&quot;);
Object obj = unmarshaller.unmarshal(new FileInputStream(myFile));
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;&amp;lt;?xml 이전에 이상한 문자를 모두 삭제하십시오&quot;라는 정신으로 버퍼드 리더를 통한 입력과 잘 작동하는 자바 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    BufferedReader test = new BufferedReader(new InputStreamReader(fisTest));
    test.mark(4);
    while (true) {
        int earlyChar = test.read();
        System.out.println(earlyChar);
        if (earlyChar == 60) {
            test.reset();
            break;
        } else {
            test.mark(4);
        }
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;FWIW, 제가 보고 있던 바이트는 (십진수로) 239, 187, 191입니다.&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;탭 '\t'을(를) 교체하면 문제가 해결되었습니다.&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;문제의 경우, 해결책은 독일의 움라우트(äöü)를 HTML과 동등한 것으로 대체하는 것이었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래는 &quot; org.xml.sax&quot; 이상의 원인입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SAXParse 예외:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내용은 prolog&quot; 예외에서 허용되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;먼저 schema.xsd와 file.xml의 파일 경로를 확인합니다.&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;XML과 XSD(또는 DTD)의 인코딩은 동일해야 합니다.&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;XML 파일 헤더:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;?xml version='1.0' encoding='utf-8'?&amp;gt;&lt;/code&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;XSD 파일 헤더:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;?xml version='1.0' encoding='utf-8'?&amp;gt;&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;XML 문서 유형 선언 앞에 오는 것이 있을 경우, 즉:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;hello&amp;lt;?xml version='1.0' encoding='utf-16'?&amp;gt;&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;xml을 Mac OS에 압축하여 Windows 컴퓨터로 전송했는데 기본 압축으로 파일이 변경되어 인코딩에서 이 메시지가 전송되었습니다.&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;@JsmListener&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IBM MQ를 들을 때 Spring Boot을 사용합니다. 제 메소드는 받았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;parameter를 JAXB를 사용하여 deserialization을 시도할 때 이 예외가 발생했습니다.&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;byte[].toString()&lt;/code&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;byte[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 다음에 그 다음에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@JmsListener(destination = &quot;Q1&quot;)
public void receiveQ1Message(byte[] msgBytes) {
    var msg = new String(msgBytes);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Soap에서 테스트 케이스를 실행할 때 이 메시지를 접했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;UI:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;org.xml.sax.SAXParseException; systemId: file://; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
&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;def holder = groovyUtils.getXmlHolder(&quot;SoapCall#Request&quot;) // Get Request body
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 그 이유는 테스트 단계의 이름이 &quot;SoapCall&quot;이 아니라 &quot;SOAPCall&quot;이기 때문이었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반환된 문자열이 비어 있어서 &quot;프롤로그&quot; 오류가 발생한 것 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/3030903/content-is-not-allowed-in-prolog-when-parsing-perfectly-valid-xml-on-gae&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>XML</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1016</guid>
      <comments>https://manycodes.tistory.com/1016#entry1016comment</comments>
      <pubDate>Tue, 7 Nov 2023 21:00:13 +0900</pubDate>
    </item>
    <item>
      <title>@미디어 최소 너비 &amp;amp; 최대 너비</title>
      <link>https://manycodes.tistory.com/1015</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;@미디어 최소 너비 &amp;amp; 최대 너비&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;@media&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;설정:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;HTML&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, user-scalable=no&quot; /&amp;gt;
&amp;lt;/head&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;CSS&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@media screen and (min-width: 769px) {
    /* STYLES HERE */
}

@media screen and (min-device-width: 481px) and (max-device-width: 768px) { 
    /* STYLES HERE */
}

@media only screen and (max-device-width: 480px) {
    /* STYLES HERE */
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 설정을 사용하면 아이폰에서는 작동하지만 브라우저에서는 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 이미 가지고 있어서 그런가요?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;device&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메타에서, 아마도.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;max-width:480px&lt;/code&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;가장 좋은 방법은 오래된 브라우저(IE 5.5, 6, 7, 8 포함)는 읽을 수 없기 때문에 오래된 브라우저의 기본 CSS를 쓰는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@media&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 사용할때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@media&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 이렇게 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;style type=&quot;text/css&quot;&amp;gt;
    /* default styles here for older browsers. 
       I tend to go for a 600px - 960px width max but using percentages
    */
    @media only screen and (min-width: 960px) {
        /* styles for browsers larger than 960px; */
    }
    @media only screen and (min-width: 1440px) {
        /* styles for browsers larger than 1440px; */
    }
    @media only screen and (min-width: 2000px) {
        /* for sumo sized (mac) screens */
    }
    @media only screen and (max-device-width: 480px) {
       /* styles for mobile browsers smaller than 480px; (iPhone) */
    }
    @media only screen and (device-width: 768px) {
       /* default iPad screens */
    }
    /* different techniques for iPad screening */
    @media only screen and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation:portrait) {
      /* For portrait layouts only */
    }

    @media only screen and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation:landscape) {
      /* For landscape layouts only */
    }
&amp;lt;/style&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 당신은 당신의 마음대로 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@media&lt;/code&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;a href=&quot;http://css-tricks.com/snippets/css/ipad-specific-css/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아이패드 CSS 규격.&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한! 인쇄성을 찾으시는 분들은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@media print{}&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;근본적인 문제는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;max-device-width&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오래된 것과 비교하여&lt;/font&gt;&lt;/font&gt;&lt;code&gt;max-width&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;device&quot; 키워드를 사용하면 브라우저 창의 너비가 아니라 화면의 물리적 차원을 대상으로 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@media only screen and (max-device-width: 480px) {
    /* STYLES HERE for DEVICES with physical max-screen width of 480px */
}
&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;@media only screen and (max-width: 480px) {
    /* STYLES HERE for BROWSER WINDOWS with a max-width of 480px. 
       This will work on desktops when the window is narrowed.  */
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데스크톱 화면과 같은 작은 장치의 웹 사이트에서 동작하는 경우, 이 메타 태그를 다음에 헤더에 넣어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;미디어 쿼리의 경우 다음과 같이 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모바일/ cellphone 폭을 모두 커버합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; @media only screen and (min-width: 200px) and (max-width: 767px)  {
    //Put your CSS here for 200px to 767px width devices (cover all width between 200px to 767px //
   
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;iPad 및 iPad pro의 경우 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  @media only screen and (min-width: 768px) and (max-width: 1024px)  {
        //Put your CSS here for 768px to 1024px width devices(covers all width between 768px to 1024px //   
  }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;랜드스케이프 모드용 CSS를 추가하려면 이를 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;및 (방향: 가로)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  @media only screen and (min-width: 200px) and (max-width: 767px) and (orientation : portrait) {
        //Put your CSS here for 200px to 767px width devices (cover all mobile portrait width //        
  }
&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;content&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;속성은 다음을 포함해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;initial-scale&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&amp;gt;
                                                   ^^^^^^^^^^^^^^^&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;브라우저에서 응답성을 위해 최소 너비와 최대 너비를 모두 포함하려면 다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; @media (min-width: 768px) and (max-width: 992px){...}
 @media (min-width: 480px) and (max-width: 767px) {...}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 아이폰은 뷰포트를 이렇게 둬야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0, maximum-scale=1.0, shrink-to-fit=no, user-scalable=0&quot; /&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/13550541/media-min-width-max-width&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>css</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1015</guid>
      <comments>https://manycodes.tistory.com/1015#entry1015comment</comments>
      <pubDate>Tue, 7 Nov 2023 21:00:04 +0900</pubDate>
    </item>
    <item>
      <title>오라클 디버깅 기법</title>
      <link>https://manycodes.tistory.com/1014</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;현재 저는 오라클의 SQL 개발자 툴을 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;트리거를 테스트하기 위해 테스트 창에 삽입하거나 삭제하지만 트리거 내부에서 무슨 일이 일어나고 있는지 볼 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;방아쇠를 통과해서 방아쇠가 울릴 때 무슨 일이 일어나는지 보고 싶습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;트리거 내부의 변수 값을 표시하기 위해 select 문을 사용하는 방법이 있습니까?&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;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;논리는 본인이 부르는 저장 프로시저에 넣는 것이 좋습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 시작(입력을 유효성 검사하는 곳)과 끝 및 논리 경로가 내내 표시됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저장 프로시저는 한 경로를 따라가면 디버그하기가 훨씬 쉬워집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;둘째, 어떻게 다루어야 할지 모르는 오류를 절대로 테스트하지 마세요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 당신이 그것을 잡지 못하면, 그것은 무엇이 잘못되었는지(오류 메시지), 어디에 있는지(즉, 오류/콜 스택)를 말하는 오류 보고를 받는 클라이언트에게 거품을 내게 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것을 잡으려고 하면, 그것을 어떻게 해야 하는지 알아야 합니다 (그리고 그것을 무시하는 경향을 모른다면 - 그것은 나쁜 것입니다).&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;v$session_longops가 현재 수행 중인 작업을 나타낼 수 있습니다.&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://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_output.htm#BABJCAJA&quot; rel=&quot;noreferrer&quot;&gt;있는&lt;/a&gt; 방법은 DBMS_OUTPUT을 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; CREATE OR REPLACE TRIGGER mytrigger
     BEFORE UPDATE ON mytable
     FOR EACH ROW
     ...
     BEGIN
       DBMS_OUTPUT.put_line('mytrigger STARTING');
       ... do some logic ...
       DBMS_OUTPUT.put_line('old=' || :OLD.mycolumn);
       DBMS_OUTPUT.put_line('new=' || :NEW.mycolumn);
       DBMS_OUTPUT.put_line('mytrigger FINISHED');
     END;
     /

SQL&amp;gt; SET SERVEROUT ON
SQL&amp;gt; UPDATE mytable SET mycolumn = mycolumn + 1;
2 rows updated.

mytrigger STARTING
old=10
new=11
mytrigger FINISHED
mytrigger STARTING
old=20
new=21
mytrigger FINISHED
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 www.quest.com/toad/toad-for-oracle.aspx 에서 이용 가능한 퀘스트의 TADO라는 프로그램을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위에 언급한 바와 같이 DBMS_OUTT는 매우 편리합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편집기에서 Output(출력) 창을 활성화해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PL/SQL은 코드의 &quot;블록&quot;에서 작동하며 EXECURE 키워드로 잡을 수 있습니다.&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;DECLARE
    C_DATE_FORMAT VARCHAR2(20) := 'DD-Mon-YYYY';
    C_TIME_FORMAT VARCHAR2(20) := 'HH24:MI:SS';
    C_NOT_IMPLEMENTED_CODE CONSTANT NUMBER(5) := -20200;
    C_NOT_IMPLEMENTED_MESSAGE CONSTANT VARCHAR2(255) := 'Not implemented';
    not_implemented EXCEPTION; -- user defined exception
BEGIN
    --RAISE not_implemented; -- raise user defined exception
    RAISE_APPLICATION_ERROR(C_NOT_IMPLEMENTED_CODE, C_NOT_IMPLEMENTED_MESSAGE); -- user defined exception
EXCEPTION -- exception block
    WHEN not_implemented THEN -- catch not_implemented exception
        DBMS_OUTPUT.PUT_LINE('Error: Not implemented');
    WHEN OTHERS THEN -- catch all other exceptions
        DBMS_OUTPUT.PUT_LINE('Error occured.');
        DBMS_OUTPUT.PUT_LINE('Date: ' || TO_CHAR(SYSDATE, C_DATE_FORMAT));
        DBMS_OUTPUT.PUT_LINE('Time: ' || TO_CHAR(SYSDATE, C_TIME_FORMAT));
        DBMS_OUTPUT.PUT_LINE('Error code: ' || SQLCODE);
        DBMS_OUTPUT.PUT_LINE('Error message: ' || SQLERRM); --deal with error
        RAISE; -- raise to calling object
END;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle PL/SQL에서 DEBUG 트리거를 수행하려면 다음 단계를 따릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Edit(편집) 옵션을 사용하여 트리거를 엽니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;라인 번호를 클릭하여 중단점을 설정합니다(아래 참조).&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래와 같이 테스트 창을 엽니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블에 대한 Write Insert/Update 쿼리입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(참고: 트리거는 업데이트/삽입 또는 둘 다에서 설정할 수 있습니다.)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;[디버거 시작] 단추를 누릅니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HlvaB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HlvaB.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표에 값이 업데이트되는 즉시 해당 표가 업데이트됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;디버거가 트리거를 해줄 겁니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;디버깅을 계속할 수 있는 위치.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8h5e3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8h5e3.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/3731918/oracle-debugging-techniques&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Oracle</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1014</guid>
      <comments>https://manycodes.tistory.com/1014#entry1014comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:59:57 +0900</pubDate>
    </item>
    <item>
      <title>Angular의 두 가지 사례가 필요합니다.JS $http 서비스?</title>
      <link>https://manycodes.tistory.com/1013</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Angular의 두 가지 사례가 필요합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JS $http 서비스?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오류 처리를 위해 $http 서비스에 응답 인터셉터를 추가하고 싶습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인터셉터 로직에는 필요한 경우 $http를 사용하여 오류 메시지를 서버에 전송하는 것이 포함되지만, &lt;em&gt;오류&lt;/em&gt; 메시지에 대한 오류 메시지를 서버에 전송하는 것은 원하지 않습니다. 즉, 서버에 오류 메시지를 전송하는 동안 인터셉터를 비활성화하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 아이디어는 'remote_log'라는 이름의 서비스를 만들어서 서버에 오류를 전송하는 데 필요한 모든 코드를 입력하는 것이었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 서비스는 당연히 $http 서비스를 이용하고 종속성 목록에 포함됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 'remote_log' 서비스에 인터셉터의 종속성을 추가하고, 서버에 오류를 전송해야 할 때 인터셉터 내부의 'remote_log'를 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$http 서비스가 여전히 인스턴스화/액세스할 수 없는 경우에는 $httpProvider를 사용하여 인터셉터를 정의해야 합니다. 따라서 &quot;Circular dependency&quot; 오류가 발생하므로 인터셉터 코드 내부가 해당 $http 서비스에 종속될 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 'remote_log' 안에 별도의 $http 서비스 인스턴스를 만드는 것이 나의 유일한 방법이라고 생각합니다. 인터셉트를 생성하는 동안 내가 설정한 $httpProvider 구성을 사용하지 않는 인스턴스입니다.&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;h1&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1. 순환 종속성 문제입니다.&lt;/font&gt;&lt;/h1&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;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$http 서비스를 요청합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$httpProvider가 구축을 요청합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;공사 중에 인터셉터를 등록하면 $http 서비스가 아직 존재하지 않습니다.&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;br&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;font papago-translate=&quot;translated&quot;&gt;주입기&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;앱에서 독립적으로 다른 $http 서비스를 생성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$httpProvider.interceptors.push(function($q) {
    $injector = angular.injector();
    return {
        response: function(response) {
            $injector.invoke(function($http) {
                // This is the exterior $http service!
                // This interceptor will not affect it.
            });
        }
    };
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;br&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;인터셉터에 $injector를 주입하고 필요한 시점에 $http 초기화 후 종속성을 검색하는 데 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 종속성은 앱의 등록된 서비스이므로 새로 생성되지 않습니다!&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$httpProvider.interceptors.push(function($q, $injector) {
    return {
        response: function(response) {
            $injector.invoke(function($http, someService) {
                // $http is already constructed at the time and you may
                // use it, just as any other service registered in your
                // app module and modules on which app depends on.
            });
        }
    };
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;br&gt;&lt;/p&gt; 
&lt;h1&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2. 가로채기 방지 문제.&lt;/font&gt;&lt;/h1&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;인터셉터 내부에서 $http 서비스를 사용할 경우 무한 인터셉션으로 끝날 수 있습니다. 요청을 보내고, 인터셉터가 이를 잡고, 다른 것을 잡고, 다시 보내고 등입니다.&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;$http 서비스의 'config' 매개 변수는 개체일 뿐입니다.&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;예를 들어, &quot;no intercept&quot; 속성을 구성에 추가하고 모든 사용자 요청을 복제해 보겠습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 어리석은 응용 프로그램이지만 동작을 이해하는 데 유용한 예입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$httpProvider.interceptors.push(function($q, $injector) {
    return {
        response: function(response) {
            if (response.config.nointercept) {
                return $q.when(response); // let it pass
            } else {
                var defer = $q.defer();
                $injector.invoke(function($http) {
                    // This modification prevents interception:
                    response.config.nointercept = true;
                    // Reuse modified config and send the same request again:
                    $http(response.config)
                        .then(function(resp) { defer.resolve(resp); },
                              function(resp) { defer.reject(resp); });
                });
                return defer.promise;
            }
        }
    };
});
&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;app.controller('myController', function($http) {
    // The second parameter is actually 'config', see API docs.
    // This query will not be duplicated by the interceptor.
    $http.get('/foo/bar', {nointercept: true})
        .success(function(data) {
            // ...
        });

});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;답변에 설명된 내용을 사용했지만 익명 기능으로는 작동하지 않았기 때문에 공장에서 구문을 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(function(angular){
    angular.module('app', [])
    .config([
        '$httpProvider',
        function($httpProvider) {
                $httpProvider.interceptors.push('Interceptor');
        } 
    ])
    .factory('Interceptor', [
        '$injector',
        InterceptorFactory
    ]);

    function InterceptorFactory($injector){

        return {
            request: function(config) {             
                var ServiceWithHttp = $injector.get('ServiceWithHttp');
                // Use ServiceWithHttp
                return config;
            }
        };
    }

}(window.angular));
&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/14681654/i-need-two-instances-of-angularjs-http-service-or-what&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>angularJS</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1013</guid>
      <comments>https://manycodes.tistory.com/1013#entry1013comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:59:49 +0900</pubDate>
    </item>
    <item>
      <title>각 리소스 호출 및 $q</title>
      <link>https://manycodes.tistory.com/1012</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 리소스 호출 및 $q&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여러분.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드 설정은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.init = function(){
  return $q.all([resource1.query(),resource2.query(),resource3.query()])
            .then(result){
               $scope.data1 = result[1];
               $scope.data2 = result1[2];
               $scope.data3 = result[3];


               console.log(data1); //prints as [$resolved: false, $then: function]

               doSomething($scope.data1,$scope.data2); 
                 }
}
&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;data1을 출력하면 미해결 상태가 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 뭘 놓쳤는지 알 수 있는 단서라도 있나요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 이 문제에 부딪혔고, 꽤 혼란스러웠습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제는 리소스 작업을 호출하는 것이 실제로 http 약속을 반환하는 것이 아니라 빈 참조(데이터가 서버에서 반환될 때 채워짐)라는&lt;a href=&quot;http://docs.angularjs.org/api/ngResource.$resource&quot;&gt; 점&lt;/a&gt;입니다($&lt;a href=&quot;http://docs.angularjs.org/api/ngResource.$resource&quot;&gt;resource&lt;/a&gt; docs의 반환 값 섹션 참조).&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;resource1.query().$promise&lt;/code&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;$scope.init = function() {
  return $q.all([resource1.query().$promise, resource2.query().$promise, resource3.query().$promise])
           .then( function(result) {
             $scope.data1 = result[0];
             $scope.data2 = result[1];
             $scope.data3 = result[2];

             console.log($scope.data1);

             doSomething($scope.data1,$scope.data2); 
           })
}
&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;$scope.data1이 아닌 data1을 인쇄하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;console.log(data1);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 당신이라면 다음과 같이 사용할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.init = function(){
return $q.all([resource1.query(),resource2.query(),resource3.query()])
        .then(result){
          console.log(result[1]);
           $scope.data1 = result[1];
           $scope.data2 = result1[2];
           $scope.data3 = result[3];

           doSomething($scope.data1,$scope.data2); 
             }
}
&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;@cdidyks answer처럼 이것은 유용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$promise&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 하지만 제 생각에 그것은 과제 수행을 위해 완료되는 모든 자원에 의존하지 않고, 적은 코드로 $ promises를 더 쉽게 접근할 수 있도록 하기 때문에 더 나은 설계 패턴입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.data1 = resource1.query();
$scope.data2 = resource2.query();
$scope.data3 = resource3.query();

$scope.init = function() {
  return $q.all([
      $scope.data1.$promise,
      $scope.data2.$promise,
      $scope.data3.$promise
    ])
    .then(function(result) {
        console.log('all done');
      doSomething($scope.data1, $scope.data2);
    })
}
&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;  resource.query().$promise.then(function(result) {
    console.log(result);
    // Do something else, like instantiate a JS driven table
  });
&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/18646912/angular-resource-calls-and-q&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>angularJS</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1012</guid>
      <comments>https://manycodes.tistory.com/1012#entry1012comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:59:41 +0900</pubDate>
    </item>
    <item>
      <title>요소의 XSLT 이름이 있습니까?</title>
      <link>https://manycodes.tistory.com/1011</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소의 XSLT 이름이 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;XSLT에는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;xsl:value-of select=&quot;expression&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소의 값을 얻으려면 요소의 태그 이름을 선택해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이런 상황에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;person&amp;gt;
  &amp;lt;!-- required stuff --&amp;gt;
  &amp;lt;name&amp;gt;Robert&amp;lt;/name&amp;gt;
  &amp;lt;!-- optional stuff, free form for future extension. 
       Using XMLSchema's xsd:any --&amp;gt;
  &amp;lt;profession&amp;gt;programmer&amp;lt;/profession&amp;gt;
  &amp;lt;hobby&amp;gt;photography&amp;lt;/hobby&amp;gt;
&amp;lt;/person&amp;gt;

&amp;lt;xsl:for-each select=&quot;person&quot;&amp;gt;
   &amp;lt;xsl:tag-of select=&quot;.&quot;/&amp;gt; : &amp;lt;xsl:value-of select=&quot;.&quot;/&amp;gt;
&amp;lt;/xsl:for-each&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같은 출력을 얻으려면:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;pre&gt;&lt;code&gt;name : Robert
profession : programmer
hobby : photography
&lt;/code&gt;&lt;/pre&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론 위의 XSLT는 컴파일이 되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;xsl:tag-of select=&quot;expression&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;존재하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 어떻게 이런 일을 할 수 있을까요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 요소 이름(태그 이름)을 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;xsl:value-of select =&quot;name(.)&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;OP-편집:&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 방법으로도 효과가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;xsl:value-of select =&quot;local-name()&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아무도 함수의 의미론의 미묘한 차이를 지적하지 않았습니다. 그리고.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;name(someNode)&lt;/code&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;code&gt;local-name(someNode)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 노드의 로컬 이름만 반환하며 노드가 요소 또는 속성인 경우 접두사와 콜론은 포함하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 이름이 두 개의 다른 네임스페이스에 속할 수 있는 상황에서는 다음을 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;name()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 이름들이 여전히 구별될 수 있도록 기능합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;그리고, BTW, 논쟁 없이&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;strong&gt;&lt;code&gt;name()&lt;/code&gt;&lt;/strong&gt; 는 의 약어입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;&lt;code&gt;local-name()&lt;/code&gt;&lt;/strong&gt; 는 의 약어입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;마지막&lt;/strong&gt;으로 요소와 속성에만 이름이 있는 것이 아니라 이 두 기능을 PI에서 사용할 수 있으며 동일하다는 것을 기억해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;xsl:for-each select=&quot;person&quot;&amp;gt;
  &amp;lt;xsl:for-each select=&quot;*&quot;&amp;gt;
    &amp;lt;xsl:value-of select=&quot;local-name()&quot;/&amp;gt; : &amp;lt;xsl:value-of select=&quot;.&quot;/&amp;gt;
  &amp;lt;/xsl:for-each&amp;gt;  
&amp;lt;/xsl:for-each&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;관심있는 분들께는 다음 사항이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;xsl:tag-of select=&quot;.&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 다음과 같은 방법으로 태그/요소를 다시 생성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;xsl:element name=&quot;{local-name()}&quot;&amp;gt;
  &amp;lt;xsl:value-of select=&quot;substring(.,1,3)&quot;/&amp;gt;
&amp;lt;/xsl:element&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 여러 요소에 대한 형식 지정 데이터 값을 처리하는 xslt 템플릿에서 유용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작업 중인 요소의 이름을 모를 때에도 동일한 요소를 출력할 수 있으며 필요한 경우 값을 수정할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;xsl:value-of select=&quot;name(.)&quot; /&amp;gt; : &amp;lt;xsl:value-of select=&quot;.&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&amp;gt;
    &amp;lt;xsl:output method=&quot;xml&quot; indent=&quot;yes&quot; omit-xml-declaration=&quot;yes&quot;/&amp;gt;
    &amp;lt;xsl:template match=&quot;person&quot;&amp;gt;
        &amp;lt;xsl:for-each select=&quot;*&quot;&amp;gt;
            &amp;lt;xsl:text&amp;gt;
       &amp;lt;/xsl:text&amp;gt;
            &amp;lt;xsl:value-of select=&quot;local-name()&quot;/&amp;gt; : &amp;lt;xsl:value-of select=&quot;.&quot;/&amp;gt;
        &amp;lt;/xsl:for-each&amp;gt;
    &amp;lt;/xsl:template&amp;gt;
&amp;lt;/xsl:stylesheet&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/585261/is-there-an-xslt-name-of-element&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>XML</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1011</guid>
      <comments>https://manycodes.tistory.com/1011#entry1011comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:59:33 +0900</pubDate>
    </item>
    <item>
      <title>printk와 pr_info의 차이</title>
      <link>https://manycodes.tistory.com/1010</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;printk와 pr_info의 차이&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;printk&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pr_info&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;a href=&quot;https://elixir.bootlin.com/linux/v6.5-rc5/source/include/linux/printk.h#L527&quot; rel=&quot;nofollow noreferrer&quot;&gt;커널의 printk.h&lt;/a&gt;는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-c prettyprint-override&quot;&gt;&lt;code&gt;#define pr_info(fmt,arg...) \
    printk(KERN_INFO fmt,##arg)
&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;pr_info()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;printk()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;KERN_INFO&lt;/code&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;pr_info&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그 정의는 차례로 사용될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;printk(KERN_INFO ...&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(barcelona_delpy의 &lt;a href=&quot;https://stackoverflow.com/questions/42243185/difference-between-printk-and-pr-info/42243429#42243429&quot;&gt;답변&lt;/a&gt;에서 언급된 바와 같이); 그러나 답변의 소스 스니펫은 형식 래퍼를 제외한 것으로 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pr_fmt(fmt)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(LP &lt;a href=&quot;https://stackoverflow.com/questions/42243185/difference-between-printk-and-pr-info#comment71646428_42243429&quot;&gt;댓글&lt;/a&gt;에서 언급한 바와 같이).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용할 수 있는 이유의 &lt;strong&gt;차이&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pr_info&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;printk(KERN_INFO ...&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;printk&lt;/code&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;printk(KERN_INFO &quot;mymodule: hello there\n&quot;);
// outputs &quot;mymodule: hello there&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;printk(KERN_INFO KBUILD_MODNAME &quot; hello there\n&quot;);
// outputs &quot;mymodule: hello there&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 만약 당신이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pr_info&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(기타)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pr_*&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;functions), 포맷을 다시 define하고 간단히 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pr_info&lt;/code&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;... (includes)
#ifdef pr_fmt
#undef pr_fmt
#endif
#define pr_fmt(fmt) KBUILD_MODNAME &quot;: &quot; fmt

...
{
    ...
    pr_err(&quot;hello there\n&quot;);
    // outputs &quot;mymodule: hello there&quot; (assuming module is named 'mymodule')
    ...
}
...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고 항목:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.kernel.org/doc/html/latest/process/coding-style.html#printing-kernel-messages&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Kernel.org | 커널 메시지 인쇄 중&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/printk.h#n284&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인쇄 실행&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://lwn.net/Articles/487437/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;lwn.net | pr_info의 위험성&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/42243185/difference-between-printk-and-pr-info&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1010</guid>
      <comments>https://manycodes.tistory.com/1010#entry1010comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:59:26 +0900</pubDate>
    </item>
    <item>
      <title>루트(또는 sudo)에서 NVM을 사용할 수 없습니다.</title>
      <link>https://manycodes.tistory.com/1009</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;루트(또는 sudo)에서 NVM을 사용할 수 없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;애플리케이션에서 다른 버전의 노드를 사용하고 있음을 확인했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JS에서 실행할 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo&lt;/code&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;$ node -v
v0.10.23
$ sudo node -v
v0.11.8-pre
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 &lt;strong&gt;v0.11.8-pre&lt;/strong&gt;로 인해 몇 가지 문제가 발생하여 사용하고 싶지 않지만 루트로 변경할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ sudo nvm use v0.10.23
sudo: nvm: command not found
&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;루트 사용자로부터 nvm을 설치하려고 했지만 &quot;NVM이 이미 설치되어 있습니다&quot;라는 오류가 발생했지만 다음에서 실행할 때 여전히 nvm을 찾을 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo&lt;/code&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;node&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 지금.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/usr/local/bin&lt;/code&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;sudo ln -s &quot;$NVM_DIR/versions/node/$(nvm version)/bin/node&quot; &quot;/usr/local/bin/node&quot;
sudo ln -s &quot;$NVM_DIR/versions/node/$(nvm version)/bin/npm&quot; &quot;/usr/local/bin/npm&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이거는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm&lt;/code&gt;&lt;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&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 사용자가 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래 명령 목록(출처: &lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-install-node-js-with-nvm-node-version-manager-on-a-vps#-installing-nodejs-on-a-vps&quot; rel=&quot;nofollow noreferrer&quot;&gt;digital&lt;/a&gt; ocean)은 문제를 해결한 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h1&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;a href=&quot;https://askubuntu.com/questions/1108162/how-to-solve-this-error-sudo-usr-local-bin-sudo-must-be-owned-by-uid-0-and-ha&quot;&gt;관련된&lt;/a&gt;&lt;/font&gt;&lt;/h1&gt; 
&lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;n=$(which node); \
n=${n%/bin/node}; \
chmod -R 755 $n/bin/*; \
sudo cp -r $n/{bin,lib,share} /usr/local
&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;위 명령은 조금 복잡하지만 nvm을 통해 활성화된 노드의 버전을 복사하는 것이 전부입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/usr/local/&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;디렉토리(사용자가 설치한 글로벌 파일이 Linux VPS에 있어야 함) 및 모든 사용자가 액세스할 수 있도록 권한을 설정합니다.&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;nvm&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;사용자의 화면에 로드되는 bash 기능입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.profile&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.bashrc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 아니면... 그래서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대부분의 다른 프로그램처럼 $PATH에서 자동으로 선택하지 않습니다.&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;n&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;: https://github.com/tj/n .&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그건 진짜 프로그램이니까요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해킹 없이 $PATH를 통해 픽업합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가지다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/usr/local/bin&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;($PATH).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo npm install -g n  # install 'n' globally
which n                # should be /usr/local/bin/n

sudo n lts             # need sudo to switch node versions
node --version         # v6.10.0
sudo node --version    # v6.10.0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 문제는..&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nvm&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;를 사용할 때 경로에 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서타입&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ which nvm
&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;/home/abc/mynvm/nvm
&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;sudo&lt;/code&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;sudo /home/abc/mynvm/nvm use v0.10.23
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 루트 사용자가 0.10.13 버전을 찾을 수 없다는 문제가 발생하지만 다음 오류 메시지가 표시됩니다.&lt;/font&gt;&lt;/p&gt;&lt;h1&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/creationix/nvm/blob/master/README.md&quot; rel=&quot;noreferrer&quot;&gt;README&lt;/a&gt;에 의하면.&lt;/font&gt;&lt;/h1&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;nvm을 사용할 때는 필요 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전 세계적으로 모듈을 설치합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm -g&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 하는 대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo npm install -g grunt&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 대신에 하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm install -g grunt&lt;/code&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h1&gt;&lt;font papago-translate=&quot;translated&quot;&gt;선데이프 필요하신가요?&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저 같은 경우에는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo npm run start&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;a href=&quot;https://github.com/creationix/nvm/issues/1935&quot; rel=&quot;noreferrer&quot;&gt;이 문제&lt;/a&gt;에 의하면,&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 사용하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 대신 파일을 chmod/chown해야 nvm을 가진 사용자가 파일에 액세스할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h1&gt;&lt;font papago-translate=&quot;translated&quot;&gt;총합하여&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;nvm의 관리자는 우리가 할 필요가 없다고 강하게 믿고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:P&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나도 당신 문제가 있었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마침내 나는 그것을 해결했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해결책은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;nvm 및 nodejs를 제거합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 유용한 링크입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/creationix/nvm/issues/298&quot; rel=&quot;noreferrer&quot;&gt;nvm&lt;/a&gt;을(를) &lt;a href=&quot;https://github.com/creationix/nvm/issues/298&quot; rel=&quot;noreferrer&quot;&gt;제거&lt;/a&gt;합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;apt-get을 사용하여 nodejs를 설치한 경우 명령을 사용하여 제거할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;apt-get purge nodejs&lt;/code&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;글로벌 nvm을 설치합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/xtuple/nvm&quot; rel=&quot;noreferrer&quot;&gt;nvm 글로벌&lt;/a&gt; 페이지를 참조하십시오.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;표준 nvm은 다중 사용자 또는 루트 환경에서 작업하는 데 어려움을 알고 있었습니다.&quot;라고 되어 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;터미널을 다시 시작한 후 명령을 실행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo nvm ls&lt;/code&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;$ sudo bash -ic &quot;nvm use stable; npm -v&quot;
Now using node v6.3.1 (npm v3.10.3)
3.10.3
&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;@SimpleJ 솔루션을 확장하여 실제 nvm bin dir에서 모든 바이너리를 연결하는 데 사용할 수 있는 유용한 bash 스크립트를 만들었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/usr/local/bin&lt;/code&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-sh prettyprint-override&quot;&gt;&lt;code&gt;#!/bin/bash
. ~/.nvm/nvm.sh

DIR=$NVM_DIR/versions/node/$(nvm version)/bin/*
DEST=/usr/local/bin

for filename in $DIR; do
    filename=$(basename $filename)
    DEST_FILE=$DEST/$filename
    echo &quot;Copying $filename to $DEST_FILE&quot;
    sudo ln -sf &quot;$NVM_DIR/versions/node/$(nvm version)/bin/$filename&quot; &quot;$DEST_FILE&quot;
done
&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;nvm&lt;/code&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;$ sudo node --version                                                                                                                                                                    
sudo: node: command not found
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;nvm 외부에 노드 0.11을 설치한 것으로 추정됩니다. (&lt;em&gt;package manager&lt;/em&gt; 경유 &lt;em&gt;또는 심지어 소스&lt;/em&gt;에서)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 sudo를 통해 노드를 실행하면 대신 이 독립 실행형 노드가 선택됩니다.&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;이에 대한 가장 쉬운 해결책은 nvm.sh 실행 파일이 어디에 있든 바로 실행 파일을 다운로드하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo /home/ubuntu/.nvm/nvm.sh install node
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 저에게 잘 작동합니다(설치 경로라고 가정합니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전체 설치 절차는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
export NVM_DIR=&quot;/home/ubuntu/.nvm&quot;

[ -s &quot;$NVM_DIR/nvm.sh&quot; ] &amp;amp;&amp;amp; \. &quot;$NVM_DIR/nvm.sh&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 위의 명령을 실행하여 새로 설치된 nvm.sh 을 누를 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NVM API의 최신 node-js를 추가 패키지 삭제 버전을 사용하지 않고 설치하고 싶었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 SUDONVM install-latest-npm을 찾고 있었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Mb 이것은 당신에게 효과가 있을 것입니다 - 그것은 분명히 어떤 앱도 설치/제거하지 않고 저에게 효과가 있었습니다. (분명히 당신의 시스템에 적합한 것으로 당신의_USER_DIRECTORY를 변경하세요)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo /home/YOUR_USER_DIRECTORY/.nvm/nvm.sh | nvm install-latest-npm 
&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;nvm&lt;/code&gt;&lt;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&lt;/code&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;이 sudo를 사용하기 위해서, 저는 이것을 수퍼유저의 것에 추가했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.bashrc&lt;/code&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;$ sudo bash -c 'echo $HOME/.bashrc'
/root/.bashrc
&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;/root/.bashrc&lt;/code&gt;&lt;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;your-user&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# Lazy load NVM/NPM/Node
lazynvm() {
  unset -f nvm node npm
  export NVM_DIR=/home/&amp;lt;your-user&amp;gt;/.nvm
  [ -s &quot;$NVM_DIR/nvm.sh&quot; ] &amp;amp;&amp;amp; . &quot;$NVM_DIR/nvm.sh&quot;  # This loads nvm
}

nvm() {
  lazynvm
  nvm $@
}

node() {
  lazynvm
  node $@
}

npm() {
  lazynvm
  npm $@
}
&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;PATH&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 것을 포함할 변수.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/bin&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 위치&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NVM_DIR&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 예는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;export NVM_DIR=&quot;$HOME/.nvm&quot;
  [ -s &quot;/opt/homebrew/opt/nvm/nvm.sh&quot; ] &amp;amp;&amp;amp; \. &quot;/opt/homebrew/opt/nvm/nvm.sh&quot;  # This loads nvm
  [ -s &quot;/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm&quot; ] &amp;amp;&amp;amp; \. &quot;/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm&quot;  # This loads nvm bash_completion
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PATH 변수에 NVM의 노드 이진법이 포함되도록 하려면 이 행을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;export PATH=&quot;$NVM_DIR/versions/node/$(nvm version)/bin:$PATH&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;nvm을 글로벌하게 설치합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;code&gt;wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | sudo bash&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/21215059/cant-use-nvm-from-root-or-sudo&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Node.js</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1009</guid>
      <comments>https://manycodes.tistory.com/1009#entry1009comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:59:20 +0900</pubDate>
    </item>
    <item>
      <title>문자열에 C#의 숫자만 포함되어 있는지 확인하는 가장 빠른 방법</title>
      <link>https://manycodes.tistory.com/1008</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열에 C#의 숫자만 포함되어 있는지 확인하는 가장 빠른 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열에 숫자만 포함되어 있는지 확인하는 몇 가지 방법을 알고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;RegEx,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int.parse&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tryparse&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 고리 모양 등&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가장 &lt;em&gt;빨리&lt;/em&gt; 확인할 수 있는 방법이 무엇인지 누가 말해 줄 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;값만 &lt;strong&gt;확인&lt;/strong&gt;하면 되고 실제로 파싱할 필요는 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;digit&quot;이란 구체적으로 ASCII 숫자를 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0 1 2 3 4 5 6 7 8 9&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/894263/how-do-i-identify-if-a-string-is-a-number&quot;&gt;이&lt;/a&gt; 질문은 &lt;a href=&quot;https://stackoverflow.com/questions/894263/how-do-i-identify-if-a-string-is-a-number&quot;&gt;문자열이 숫자인지 식별&lt;/a&gt;하는 것과 동일한 질문이 아닙니다. 이 질문은 식별하는 &lt;strong&gt;방법&lt;/strong&gt;뿐만 아니라 가장 빠른 방법이 무엇인지에 대한 질문이기 때문입니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;bool IsDigitsOnly(string str)
{
    foreach (char c in str)
    {
        if (c &amp;lt; '0' || c &amp;gt; '9')
            return false;
    }

    return true;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아마 그것을 하는 가장 빠른 방법이 될 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;LINQ를 사용하여 간단히 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;return str.All(char.IsDigit);&lt;/code&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;.All&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;빈 문자열의 경우 true를 반환하고 null 문자열의 경우 예외를 발생시킵니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;char.IsDigit&lt;/code&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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 동일한 문자열의 1000000 구문을 기준으로 한 몇 가지 벤치마크입니다.&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;release&lt;/code&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;IsDigitsOnly: 384588
TryParse:     639583
Regex:        1329571
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 코드가 있어요, 아이즈디지츠처럼 보여요&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 빠른 것만:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class Program
{
    private static Regex regex = new Regex(&quot;^[0-9]+$&quot;, RegexOptions.Compiled);

    static void Main(string[] args)
    {
        Stopwatch watch = new Stopwatch();
        string test = int.MaxValue.ToString();
        int value;

        watch.Start();
        for(int i=0; i&amp;lt; 1000000; i++)
        {
            int.TryParse(test, out value);
        }
        watch.Stop();
        Console.WriteLine(&quot;TryParse: &quot;+watch.ElapsedTicks);

        watch.Reset();
        watch.Start();
        for (int i = 0; i &amp;lt; 1000000; i++)
        {
            IsDigitsOnly(test);
        }
        watch.Stop();
        Console.WriteLine(&quot;IsDigitsOnly: &quot; + watch.ElapsedTicks);

        watch.Reset();
        watch.Start();
        for (int i = 0; i &amp;lt; 1000000; i++)
        {
            regex.IsMatch(test);
        }
        watch.Stop();
        Console.WriteLine(&quot;Regex: &quot; + watch.ElapsedTicks);

        Console.ReadLine();
    }

    static bool IsDigitsOnly(string str)
    {
        foreach (char c in str)
        {
            if (c &amp;lt; '0' || c &amp;gt; '9')
                return false;
        }

        return true;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론 TryParse는 문화적인 상징뿐만 아니라 선도/추종의 공백을 허용한다는 점에 주목할 필요가 있습니다.&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;Char에는 이미 IsDigit(char)이 있으며 이를 통해 다음과 같은 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; public static bool IsDigit(char c)
    {
      if (!char.IsLatin1(c))
        return CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber;
      if ((int) c &amp;gt;= 48)
        return (int) c &amp;lt;= 57;
      else
        return false;
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;간단히 다음과 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var theString = &quot;839278&quot;;
bool digitsOnly = theString.All(char.IsDigit);
&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;비교를 한 번만 수행하면 약 20% 더 빨라집니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;for&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foreach&lt;/code&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;bool isDigits(string s) 
{ 
    if (s == null || s == &quot;&quot;) return false; 

    for (int i = 0; i &amp;lt; s.Length; i++) 
        if ((s[i] ^ '0') &amp;gt; 9) 
            return false; 

    return true; 
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테스트에 사용되는 코드(결과는 하드웨어, 버전, 순서 등에 따라 달라지므로 항상 프로파일):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;static bool isDigitsFr(string s) { if (s == null || s == &quot;&quot;) return false; for (int i = 0; i &amp;lt; s.Length; i++) if (s[i] &amp;lt; '0' || s[i] &amp;gt; '9') return false; return true; }
static bool isDigitsFu(string s) { if (s == null || s == &quot;&quot;) return false; for (int i = 0; i &amp;lt; s.Length; i++) if ((uint)(s[i] - '0') &amp;gt; 9) return false; return true; }
static bool isDigitsFx(string s) { if (s == null || s == &quot;&quot;) return false; for (int i = 0; i &amp;lt; s.Length; i++) if ((s[i] ^ '0') &amp;gt; 9) return false; return true; }
static bool isDigitsEr(string s) { if (s == null || s == &quot;&quot;) return false; foreach (char c in s) if (c &amp;lt; '0' || c &amp;gt; '9') return false; return true; }
static bool isDigitsEu(string s) { if (s == null || s == &quot;&quot;) return false; foreach (char c in s) if ((uint)(c - '0') &amp;gt; 9) return false; return true; }
static bool isDigitsEx(string s) { if (s == null || s == &quot;&quot;) return false; foreach (char c in s) if ((c ^ '0') &amp;gt; 9) return false; return true; }
static void test()
{
    var w = new Stopwatch(); bool b; var s = int.MaxValue + &quot;&quot;; int r = 12345678*2; var ss = new SortedSet&amp;lt;string&amp;gt;(); //s = string.Concat(Enumerable.Range(0, 127).Select(i =&amp;gt; ((char)i ^ '0') &amp;lt; 10 ? 1 : 0));
    w.Restart(); for (int i = 0; i &amp;lt; r; i++) b = s.All(char.IsDigit); w.Stop(); ss.Add(w.Elapsed + &quot;.All .IsDigit&quot;); 
    w.Restart(); for (int i = 0; i &amp;lt; r; i++) b = s.All(c =&amp;gt; c &amp;gt;= '0' &amp;amp;&amp;amp; c &amp;lt;= '9'); w.Stop(); ss.Add(w.Elapsed + &quot;.All &amp;lt;&amp;gt;&quot;); 
    w.Restart(); for (int i = 0; i &amp;lt; r; i++) b = s.All(c =&amp;gt; (c ^ '0') &amp;lt; 10); w.Stop(); ss.Add(w.Elapsed + &quot; .All ^&quot;); 
    w.Restart(); for (int i = 0; i &amp;lt; r; i++) b = isDigitsFr(s); w.Stop(); ss.Add(w.Elapsed + &quot; for     &amp;lt;&amp;gt;&quot;);
    w.Restart(); for (int i = 0; i &amp;lt; r; i++) b = isDigitsFu(s); w.Stop(); ss.Add(w.Elapsed + &quot; for     -&quot;);
    w.Restart(); for (int i = 0; i &amp;lt; r; i++) b = isDigitsFx(s); w.Stop(); ss.Add(w.Elapsed + &quot; for     ^&quot;);
    w.Restart(); for (int i = 0; i &amp;lt; r; i++) b = isDigitsEr(s); w.Stop(); ss.Add(w.Elapsed + &quot; foreach &amp;lt;&amp;gt;&quot;);
    w.Restart(); for (int i = 0; i &amp;lt; r; i++) b = isDigitsEu(s); w.Stop(); ss.Add(w.Elapsed + &quot; foreach -&quot;);
    w.Restart(); for (int i = 0; i &amp;lt; r; i++) b = isDigitsEx(s); w.Stop(); ss.Add(w.Elapsed + &quot; foreach ^&quot;);
    MessageBox.Show(string.Join(&quot;\n&quot;, ss)); return;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Intel i5-3470에 대한 결과 @ 3.2&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GHz, VS 2015.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NET 4.6.1 릴리스 모드 및 최적화 활성화:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;time    method          ratio
0.7776  for     ^       1.0000 
0.7984  foreach -       1.0268 
0.8066  foreach ^       1.0372 
0.8940  for     -       1.1497 
0.8976  for     &amp;lt;&amp;gt;      1.1543 
0.9456  foreach &amp;lt;&amp;gt;      1.2160 
4.4559  .All &amp;lt;&amp;gt;         5.7303 
4.7791  .All ^          6.1458 
4.8539  .All. IsDigit   6.2421 
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 짧은 방법을 사용하고 싶은 사람은 다음 사항을 참고하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://msdn.microsoft.com/en-us/library/bb548541&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;.All&lt;/code&gt;&lt;/a&gt; 빈 &lt;a href=&quot;https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,be4bfd025bd2724c&quot; rel=&quot;nofollow noreferrer&quot;&gt;문자열&lt;/a&gt; 및 예외를 &lt;a href=&quot;https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,be4bfd025bd2724c&quot; rel=&quot;nofollow noreferrer&quot;&gt;생성&lt;/a&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;줄들&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://msdn.microsoft.com/en-us/library/0t641e58&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;char.IsDigit&lt;/code&gt;&lt;/a&gt; &lt;a href=&quot;https://www.fileformat.info/info/unicode/category/Nd/list.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nd 카테고리의 모든 유니코드 문자&lt;/a&gt;에 대해 true입니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://msdn.microsoft.com/en-us/library/f02979c7&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;int.TryParse&lt;/code&gt;&lt;/a&gt; 또한 공백과 부호 문자를 허용합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성능에 관심이 있다면 어느 쪽도 사용하지 마십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int.TryParse&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도 아니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Regex&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;- simple 함수를 직접 작성합니다(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DigitsOnly&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DigitsOnly2&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래에 있지만 &lt;strong&gt;그렇지&lt;/strong&gt;는 않습니다.&lt;/font&gt;&lt;/font&gt; &lt;code&gt;DigitsOnly3&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;- LINQ는 상당한 오버헤드가 발생하는 것으로 보입니다.&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;int.TryParse&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열이 너무 길어서 &quot;맞추기&quot;가 어려울 경우 실패합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/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 Program {

    static bool DigitsOnly(string s) {
        int len = s.Length;
        for (int i = 0; i &amp;lt; len; ++i) {
            char c = s[i];
            if (c &amp;lt; '0' || c &amp;gt; '9')
                return false;
        }
        return true;
    }

    static bool DigitsOnly2(string s) {
        foreach (char c in s) {
            if (c &amp;lt; '0' || c &amp;gt; '9')
                return false;
        }
        return true;
    }

    static bool DigitsOnly3(string s) {
        return s.All(c =&amp;gt; c &amp;gt;= '0' &amp;amp;&amp;amp; c &amp;lt;= '9');
    }

    static void Main(string[] args) {

        const string s1 = &quot;916734184&quot;;
        const string s2 = &quot;916734a84&quot;;

        const int iterations = 1000000;
        var sw = new Stopwatch();

        sw.Restart();
        for (int i = 0 ; i &amp;lt; iterations; ++i) {
            bool success = DigitsOnly(s1);
            bool failure = DigitsOnly(s2);
        }
        sw.Stop();
        Console.WriteLine(string.Format(&quot;DigitsOnly: {0}&quot;, sw.Elapsed));

        sw.Restart();
        for (int i = 0; i &amp;lt; iterations; ++i) {
            bool success = DigitsOnly2(s1);
            bool failure = DigitsOnly2(s2);
        }
        sw.Stop();
        Console.WriteLine(string.Format(&quot;DigitsOnly2: {0}&quot;, sw.Elapsed));

        sw.Restart();
        for (int i = 0; i &amp;lt; iterations; ++i) {
            bool success = DigitsOnly3(s1);
            bool failure = DigitsOnly3(s2);
        }
        sw.Stop();
        Console.WriteLine(string.Format(&quot;DigitsOnly3: {0}&quot;, sw.Elapsed));

        sw.Restart();
        for (int i = 0; i &amp;lt; iterations; ++i) {
            int dummy;
            bool success = int.TryParse(s1, out dummy);
            bool failure = int.TryParse(s2, out dummy);
        }
        sw.Stop();
        Console.WriteLine(string.Format(&quot;int.TryParse: {0}&quot;, sw.Elapsed));

        sw.Restart();
        var regex = new Regex(&quot;^[0-9]+$&quot;, RegexOptions.Compiled);
        for (int i = 0; i &amp;lt; iterations; ++i) {
            bool success = regex.IsMatch(s1);
            bool failure = regex.IsMatch(s2);
        }
        sw.Stop();
        Console.WriteLine(string.Format(&quot;Regex.IsMatch: {0}&quot;, sw.Elapsed));

    }

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;...다음 결과를 produces합니다...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DigitsOnly: 00:00:00.0346094
DigitsOnly2: 00:00:00.0365220
DigitsOnly3: 00:00:00.2669425
int.TryParse: 00:00:00.3405548
Regex.IsMatch: 00:00:00.7017648
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;빈 유효성 검사 기능:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static bool IsDigitsOnly(string str)
  {             
        return !string.IsNullOrEmpty(str) &amp;amp;&amp;amp; str.All(char.IsDigit);
  }
&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 str = '0129834X33';
bool isAllDigits = !str.Any( ch=&amp;gt; ch &amp;lt; '0' || ch &amp;gt; '9' );
&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 (str.All(Char.IsDigit))
{
  // string contains only digits
}
&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 (lstStr.All(s =&amp;gt; s.All(Char.IsDigit)))
{
  // List of strings contains only digits
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 작업은 한 줄의 LINQ 문에서 수행할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네, 이것이 반드시 가장 빠른 것은 아니라는 것을 알고 있습니다. 그래서 엄밀히 말하면 질문에 답하지는 않지만, 아마 다음과 같이 쓰는 것이 가장 쉬울 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;str.All(c =&amp;gt; c &amp;gt;= '0' &amp;amp;&amp;amp; c &amp;lt;= '9')
&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;myString.All(c =&amp;gt; char.IsDigit(c))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;참고:&lt;/strong&gt; 문자열이 비어 있으면 &lt;strong&gt;True&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;pre&gt;&lt;code&gt;Regex.IsMatch(&quot;124&quot;, &quot;^[0-9]+$&quot;, RegexOptions.Compiled)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;int.Parse&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int.TryParse&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열에 int에서 사용할 수 있는 숫자가 더 많이 포함될 수 있기 때문에 항상 작동하지는 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;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;        private static bool IsDigitsOnly(string str)
        {
            return str.All(c =&amp;gt; c &amp;gt;= '0' &amp;amp;&amp;amp; c &amp;lt;= '9');
        }
&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;정규식을 사용하려면 입력 문자열이 숫자(0-9)만을 갖도록 테스트해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.IsMatch(string input, string pattern)&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&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;using System;
using System.Text.RegularExpression;

public namespace MyNS
{
    public class MyClass
    {
        public void static Main(string[] args)
        {
             string input = Console.ReadLine();
             bool containsNumber = ContainsOnlyDigits(input);
        }

        private bool ContainOnlyDigits (string input)
        {
            bool containsNumbers = true;
            if (!Regex.IsMatch(input, @&quot;/d&quot;))
            {
                containsNumbers = false;
            }
            return containsNumbers;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안부 전해요&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 완벽하게 작동할 것입니다. 다른 많은 방법들이 있지만 이것은 작동할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bool IsDigitsOnly(string str)
    {
        if (str.Length &amp;gt; 0)//if contains characters
        {
            foreach (char c in str)//assign character to c
            {
                if (c &amp;lt; '0' || c &amp;gt; '9')//check if its outside digit range
                    return false;
            }
        }else//empty string
        {
            return false;//empty string 
        }

        return true;//only digits
    }
&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 str = &quot;12345&quot;;
bool containsOnlyDigits = true;
try { if(Convert.ToInt32(str) &amp;lt; 0){ containsOnlyDigits = false; } }
catch { containsOnlyDigits = false; }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 만약 그 진술서가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Convert.ToInt32(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 papago-translate=&quot;translated&quot;&gt;또 다른 가능성은 만약 끈이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;-12345&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로 변환됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-12345&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성공적으로 변환된 숫자가 0보다 작지 않음을 확인하기 위한 검사가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 @TheCodeKing의 답변을 약간 변경했습니다.&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;forint type 가장 빠른 방법은 TryParse입니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;롱타입의 가장 빠른 방법은 레젝스입니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나의 결과는 아래와 같습니다(칙)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;For int:

TryParse Max: 355788
IsDigitsOnly Max: 787013
Regex Max: 1297691

TryParse Avg: 186007
IsDigitsOnly Avg: 430963
Regex Avg: 464657,79

TryParse Min: 162742
IsDigitsOnly Min: 335646
Regex Min: 452121


For float :

TryParse Max : 3151995
IsDigitsOnly Max: 1392740
Regex Max : 1283451

TryParse Avg: 1391636
IsDigitsOnly Avg: 824029
Regex Avg: 501176

TryParse Min: 1187410
IsDigitsOnly Min: 706646
Regex Min: 476204
&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;using System.Diagnostics;
using System.Text.RegularExpressions;

class Program
{
    private static Regex regex = new Regex(&quot;^[0-9]+$&quot;, RegexOptions.Compiled);

    static void Main(string[] args)
    {
        Stopwatch watch = new Stopwatch();
        watch.Start();
        watch.Stop();
        watch.Reset();
        List&amp;lt;TimeSpan&amp;gt; tryparse = new List&amp;lt;TimeSpan&amp;gt;();
        List&amp;lt;TimeSpan&amp;gt; isdigitsonly = new List&amp;lt;TimeSpan&amp;gt;();
        List&amp;lt;TimeSpan&amp;gt; regexss = new List&amp;lt;TimeSpan&amp;gt;();

        for (int say = 0; say &amp;lt; 1000; say++)
        { 
            float value;

            string test = Random.Shared.NextInt64(1000,long.MaxValue).ToString();
            watch.Start();
            for (int i = 0; i &amp;lt; 1000000; i++)
            {
                float.TryParse(test, out value);
            }
            watch.Stop();
            //Console.WriteLine(&quot;TryParse: &quot; + watch.Elapsed);
            tryparse.Add(watch.Elapsed);

            watch.Reset();
            watch.Start();
            for (int i = 0; i &amp;lt; 1000000; i++)
            {
                IsDigitsOnly(test);
            }
            watch.Stop();
            //Console.WriteLine(&quot;IsDigitsOnly: &quot; + watch.Elapsed);
            isdigitsonly.Add(watch.Elapsed);
            watch.Reset();
            watch.Start();
            for (int i = 0; i &amp;lt; 1000000; i++)
            {
                regex.IsMatch(test);
            }
            watch.Stop();
            regexss.Add(watch.Elapsed);
            watch.Reset();
            //   Console.WriteLine(&quot;Regex: &quot; + watch.Elapsed);
     
            Console.Write(&quot;---------------------% &quot; + (Convert.ToDecimal( say)/ 999 * 100).ToString(&quot;N2&quot;) + &quot;---------------------------&quot;);
            Console.CursorLeft = 0;
        }
        Console.WriteLine();
        Console.WriteLine($&quot;TryParse: {tryparse.Max(t =&amp;gt; t.Ticks)}&quot;);
        Console.WriteLine($&quot;IsDigitsOnly: {isdigitsonly.Max(t =&amp;gt; t.Ticks)}&quot;);
        Console.WriteLine($&quot;Regex: {regexss.Max(t =&amp;gt; t.Ticks)}&quot;);
        Console.WriteLine();

        Console.WriteLine($&quot;TryParse Avg: {tryparse.Average(t =&amp;gt; t.Ticks)}&quot;);
        Console.WriteLine($&quot;IsDigitsOnly Avg: {isdigitsonly.Average(t =&amp;gt; t.Ticks)}&quot;);
        Console.WriteLine($&quot;Regex Avg: {regexss.Average(t =&amp;gt; t.Ticks)}&quot;);
        Console.WriteLine();
        Console.WriteLine($&quot;TryParse Min: {tryparse.Min(t =&amp;gt; t.Ticks)}&quot;);
        Console.WriteLine($&quot;IsDigitsOnly Min: {isdigitsonly.Min(t =&amp;gt; t.Ticks)}&quot;);
        Console.WriteLine($&quot;Regex Min: {regexss.Min(t =&amp;gt; t.Ticks)}&quot;);
        Console.ReadLine();
    }

    static bool IsDigitsOnly(string str)
    {
        foreach (char c in str)
        {
            if (c &amp;lt; '0' || c &amp;gt; '9')
                return false;
        }

        return true;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 코드를 사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bool isDigitsOnly(string str)
{
   try
   {
      int number = Convert.ToInt32(str);
      return true;
   }
   catch (Exception)
   {
      return false;
   }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char.IsDigit(myChar)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열에 숫자만 포함되어 있는지 여부를 매우 영리하고 쉽게 탐지할 수 있는 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string s = &quot;12fg&quot;;

if(s.All(char.IsDigit))
{
   return true; // contains only digits
}
else
{
   return false; // contains not only digits
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;public bool CheckforDigits(string x)
{    
    int tr;  
    return x.All(r=&amp;gt; int.TryParse(r.ToString(), out tr));
}
&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/7461080/fastest-way-to-check-if-string-contains-only-digits-in-c-sharp&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>String</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1008</guid>
      <comments>https://manycodes.tistory.com/1008#entry1008comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:56:26 +0900</pubDate>
    </item>
    <item>
      <title>숫자를 세 부분으로 나누고 그 총합을 원래의 숫자와 일치시키는 알고리즘이 있습니까?</title>
      <link>https://manycodes.tistory.com/1007</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;숫자를 세 부분으로 나누고 그 총합을 원래의 숫자와 일치시키는 알고리즘이 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 다음 예제를 고려할 경우.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;100.00 - Original Number
33.33  - 1st divided by 3
33.33  - 2nd divided by 3
33.33  - 3rd divided by 3
99.99  - Is the sum of the 3 division outcomes

But i want it to match the original 100.00
&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;이제 그 3개의 번호를 찍으면 원래 번호를 받습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; 100.00 - Original Number
  33.33 - 1st divided by 3
  33.33 - 2nd divided by 3
  33.34 - 3rd number
 100.00 - Which gives me my original number correctly. (33.33+33.33+33.34 = 100.00)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle PL/SQL이나 구현 가능한 함수 등에서 이에 대한 공식이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;미리 감사드립니다!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 버전은 정밀도를 매개변수로 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;with q as (select 100 as val, 3 as parts, 2 as prec from dual)
select rownum as no
      ,case when rownum = parts
       then val - round(val / parts, prec) * (parts - 1) 
       else round(val / parts, prec)
       end v
from   q
connect by level &amp;lt;= parts

no  v
=== =====
1   33.33
2   33.33
3   33.34
&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;with q as (select 100 as val
                 ,extract(day from last_day(sysdate)) as parts
                 ,2 as prec from dual)
select rownum as no
      ,case when rownum = parts
       then val - round(val / parts, prec) * (parts - 1) 
       else round(val / parts, prec)
       end v
from   q
connect by level &amp;lt;= parts;

1   3.33
2   3.33
3   3.33
4   3.33
...
27  3.33
28  3.33
29  3.33
30  3.43
&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;level &amp;lt;= 3&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;계산된 개월 수를 변경하는 방법):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;with q as (
  select add_months(date '2013-07-01', rownum-1) the_month
        ,extract(day from last_day(add_months(date '2013-07-01', rownum-1)))
         as days_in_month
        ,100 as val
        ,2 as prec
  from dual
  connect by level &amp;lt;= 3)
,q2 as (
  select the_month, val, prec
        ,round(val * days_in_month 
                     / sum(days_in_month) over (), prec)
         as apportioned
        ,row_number() over (order by the_month desc) 
         as reverse_rn
  from   q)
select the_month
      ,case when reverse_rn = 1
       then val - sum(apportioned) over (order by the_month
                  rows between unbounded preceding and 1 preceding)
       else apportioned
       end as portion
from q2;

01/JUL/13   33.7
01/AUG/13   33.7
01/SEP/13   32.6
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Rational_number&quot; rel=&quot;nofollow&quot;&gt;유리수를 사용&lt;/a&gt;합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단순 값이 아닌 분수로 숫자를 저장할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇게 해야 수량이 3으로 나뉘고 원래 수량과 합이 된다는 것을 확인할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론 라운딩과 남은 음식들을 가지고도 무리한 일을 할 수 있습니다. 정확히 3분으로 나누지 않아도 상관없다면 말입니다.&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;100/3 + 100/3 + 100/3 == 300/3 == 100&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;분자와 분모를 모두 별도의 필드에 저장한 다음 분자를 추가합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;값을 표시할 때 항상 부동 소수점으로 변환할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://docs.oracle.com/cd/A91202_01/901_doc/appdev.901/a88896/dci05pls.htm&quot; rel=&quot;nofollow&quot;&gt;Oracle 문서&lt;/a&gt;에는 다음과 같은 구현 방법에 대한 &lt;a href=&quot;http://docs.oracle.com/cd/A91202_01/901_doc/appdev.901/a88896/dci05pls.htm&quot; rel=&quot;nofollow&quot;&gt;좋은 예도 있습니다&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE TYPE rational_type AS OBJECT
( numerator INTEGER,
  denominator INTEGER,
  MAP MEMBER FUNCTION rat_to_real RETURN REAL,
  MEMBER PROCEDURE normalize,
  MEMBER FUNCTION plus (x rational_type)
       RETURN rational_type);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 매개 변수화된 SQL 버전입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  SELECT COUNT (*), grp
    FROM (WITH input AS (SELECT 100 p_number, 3 p_buckets FROM DUAL),
               data
               AS (    SELECT LEVEL id, (p_number / p_buckets) group_size
                         FROM input
                   CONNECT BY LEVEL &amp;lt;= p_number)
          SELECT id, CEIL (ROW_NUMBER () OVER (ORDER BY id) / group_size) grp
            FROM data)
GROUP BY grp
&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;COUNT(*)    GRP
33          1
33          2
34          3
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;입력 파라미터(p_number 및 p_buckets)를 편집하면 SQL은 기본적으로 요청된 버킷 수(p_buckets)에 p_number를 최대한 균등하게 분배합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어제 시작번호에서 3개 중 2개를 빼고 100 - 33.33 - 33.33 = 33.34로 이 문제를 해결했는데 합산한 결과는 여전히 100입니다.&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/22026226/is-there-an-algorithm-that-can-divide-a-number-into-three-parts-and-have-their-t&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Oracle</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1007</guid>
      <comments>https://manycodes.tistory.com/1007#entry1007comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:56:12 +0900</pubDate>
    </item>
    <item>
      <title>리눅스에서 syscall 기능을 다시 구현(또는 랩)하려면 어떻게 해야 합니까?</title>
      <link>https://manycodes.tistory.com/1006</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리눅스에서 syscall 기능을 다시 구현(또는 랩)하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열려 있는() 시스템 호출을 완전히 인계받고 실제 syscall을 랩핑하고 로깅을 수행하려고 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://scaryreasoner.wordpress.com/2007/11/17/using-ld_preload-libraries-and-glibc-backtrace-function-for-debugging/&quot; rel=&quot;noreferrer&quot;&gt;LD_PRELOAD를 사용&lt;/a&gt;하여 열린() 진입점을 대신하는 (사용자가 만든) 공유 객체 라이브러리를 로드하는 &lt;a href=&quot;http://scaryreasoner.wordpress.com/2007/11/17/using-ld_preload-libraries-and-glibc-backtrace-function-for-debugging/&quot; rel=&quot;noreferrer&quot;&gt;것&lt;/a&gt;도 한 &lt;a href=&quot;http://scaryreasoner.wordpress.com/2007/11/17/using-ld_preload-libraries-and-glibc-backtrace-function-for-debugging/&quot; rel=&quot;noreferrer&quot;&gt;방법&lt;/a&gt;입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자가 만든 open() 루틴은 glibc 함수에 대한 포인터를 가져옵니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;open()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;타고&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dlsym()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것을 호출하고, 그것을 호출합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 위에서 제안된 해결책은 동적인 해결책입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 내 것을 연결하고 싶다고 가정해 보겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;open()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정적 포장지&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 어떻게 하죠?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메커니즘은 동일하지만 사용자 정의 간에 심볼 충돌이 있을 것으로 추측합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;open()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 libc.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;open()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;같은 목표를 달성하기 위한 다른 기술을 공유해 주시기 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에서 제공하는 랩 기능을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ld&lt;/code&gt;&lt;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 ld&lt;/code&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;code&gt;--wrap symbol&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;symbol&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로 해결될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__wrap_symbol&lt;/code&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;__real_symbol&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로 해결될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;symbol&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 접두사만 쓰면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__wrap_&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 포장지 기능을 위해.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__real_&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;code&gt;malloc_wrapper.c&lt;/code&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;#include &amp;lt;stdio.h&amp;gt;
void *__real_malloc (size_t);

/* This function wraps the real malloc */
void * __wrap_malloc (size_t size)
{
    void *lptr = __real_malloc(size);
    printf(&quot;Malloc: %lu bytes @%p\n&quot;, size, lptr);
    return lptr;
}
&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;testapp.c&lt;/code&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;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
int main()
{
    free(malloc(1024)); // malloc will resolve to __wrap_malloc
    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 응용프로그램을 컴파일합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;gcc -c malloc_wrapper.c
gcc -c testapp.c
gcc -Wl,-wrap,malloc testapp.o malloc_wrapper.o -o testapp
&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;$ ./testapp
Malloc: 1024 bytes @0x20d8010
&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;gcc의 경우 지정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;gcc &amp;lt;BLAH&amp;gt; -nodefaultlibs &amp;lt;BLAH BLAH&amp;gt; -lYOUR_LIB &amp;lt;OTHER_LIBS&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 라이브러리가 먼저 검색되고 찾을 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리눅스 및 GNU libc의 경우 라이브러리에 있는 모든 기능을 가로채고 다시 구현할 수 있도록 라이브러리가 내장되어 있습니다.&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;ANY libc 함수의 고유 버전을 정의하고 libc 이전에 링크하는 경우(따라서 실행 파일의 일부이거나 link 명령어의 -lc 이전에 링크된 라이브러리 또는 loaded.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;LD_PRELOAD&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;libc가 동적 링크인 경우 libc 버전 대신 호출됩니다(libc 자체의 다른 함수에서도 호출됨).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 a를 사용하여 함수를 호출할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__libc_&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;라이브러리에서 실제 버전을 가져오려면 접두사를 사용합니다(단, 해당 기호를 직접 선언해야 함).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어,&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;       #include &amp;lt;sys/types.h&amp;gt;
       #include &amp;lt;sys/stat.h&amp;gt;
       #include &amp;lt;fcntl.h&amp;gt;

       extern int __libc_open(const char *pathname, int flags, mode_t mode);

       int open(const char *pathname, int flags, mode_t mode) {
           return __libc_open(pathname, flags, mode);
       }
&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/3662856/how-do-i-reimplement-or-wrap-a-syscall-function-on-linux&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1006</guid>
      <comments>https://manycodes.tistory.com/1006#entry1006comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:56:04 +0900</pubDate>
    </item>
    <item>
      <title>XML 파일을 어떻게 구문 분석합니까?</title>
      <link>https://manycodes.tistory.com/1005</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;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 wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;문&lt;/b&gt; 닫았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 질문은 더 많아야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;/help/closed-questions&quot;&gt;집중력&lt;/a&gt;이 있는&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 답변을 받지 않고 있습니다.&lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;닫힘&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;span class=&quot;relativetime&quot; title=&quot;2018-05-08 06:05:56Z&quot; papago-attr-id=&quot;1&quot;&gt;5년 전&lt;/span&gt;에.&lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item mr8&quot;&gt; 
     &lt;svg aria-hidden=&quot;true&quot; class=&quot;svg-icon iconLock&quot; width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 18 18&quot;&gt;
      &lt;path d=&quot;M16 9a2 2 0 0 0-2-2V6A5 5 0 0 0 4 6v1a2 2 0 0 0-2 2v6c0 1.1.9 2 2 2h10a2 2 0 0 0 2-2V9Zm-7 5a2 2 0 1 1 0-4 2 2 0 0 1 0 4Zm3.1-7H5.9V6a3.1 3.1 0 0 1 6.2 0v1Z&quot;&gt;&lt;/path&gt;
     &lt;/svg&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;이 질문에 대한 답&lt;/b&gt;은 &lt;b&gt;&lt;a href=&quot;/help/privileges/edit-community-wiki&quot;&gt;공동체의 노력&lt;/a&gt;&lt;/b&gt;입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기존 답변을 편집하여 이 게시물을 개선합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 새 답변이나 상호 작용을 수락하지 않고 있습니다.&lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C#에서 XML 파일을 파싱하는 간단한 방법이 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 그렇다면, 뭐?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아주 간단해요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것들이 일반적인 방법이라는 것을 알지만, 당신은 당신만의 라이브러리를 만들어 훨씬 더 잘 다룰 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 몇 가지 예입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;XmlDocument xmlDoc= new XmlDocument(); // Create an XML document object
xmlDoc.Load(&quot;yourXMLFile.xml&quot;); // Load the XML document from the specified file

// Get elements
XmlNodeList girlAddress = xmlDoc.GetElementsByTagName(&quot;gAddress&quot;);
XmlNodeList girlAge = xmlDoc.GetElementsByTagName(&quot;gAge&quot;); 
XmlNodeList girlCellPhoneNumber = xmlDoc.GetElementsByTagName(&quot;gPhone&quot;);

// Display the results
Console.WriteLine(&quot;Address: &quot; + girlAddress[0].InnerText);
Console.WriteLine(&quot;Age: &quot; + girlAge[0].InnerText);
Console.WriteLine(&quot;Phone Number: &quot; + girlCellPhoneNumber[0].InnerText);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한, 작업할 수 있는 &lt;a href=&quot;http://www.google.lt/search?hl=lt&amp;amp;client=firefox-a&amp;amp;rls=org.mozilla%3Aen-US%3Aofficial&amp;amp;hs=pLz&amp;amp;q=parse+XML+C%23&amp;amp;btnG=Paie%C5%A1ka&amp;amp;meta=&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://support.microsoft.com/kb/307548&quot; rel=&quot;noreferrer&quot;&gt;여기&lt;/a&gt;.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 이것을 할 수 있는 가장 좋은 방법은 없다고 생각합니다. 항상 자신에게 가장 적합한 것을 스스로 선택해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 있다면 &lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/linq-to-xml&quot; rel=&quot;noreferrer&quot;&gt;XML에 LINQ&lt;/a&gt;를 사용하겠습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NET 3.5 이상.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;양호한 &lt;a href=&quot;http://en.wikipedia.org/wiki/XSD&quot; rel=&quot;noreferrer&quot;&gt;XSD 스키마&lt;/a&gt;를 사용하여 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/x6c1kb0s.aspx&quot; rel=&quot;noreferrer&quot;&gt;xsd.exe&lt;/a&gt;로 클래스 집합을 생성하고 XML로 개체 트리를 생성하거나 그 반대의 경우도 마찬가지입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모델에 제한이 거의 없는 경우 Xml*Attribute를 사용하여 모델 클래스와 XML 간에 직접 매핑을 만들 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MSDN의 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/182eeyhh.aspx&quot; rel=&quot;noreferrer&quot;&gt;XML 직렬화에 대한 소개 기사&lt;/a&gt;가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성능 팁:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구성하기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XmlSerializer&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;XmlSerializer&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여러 XML 파일을 구문 분석/쓰기하려는 경우.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;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;XmlReader&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;XML을 스트림 구문 분석합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;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;XPathNavigator&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XElement&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XmlDocument&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;심지어는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XmlSerializer&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전체 생성 개체 그래프)를 유지하면 &lt;a href=&quot;https://stackoverflow.com/questions/1505075/deciding-on-when-to-use-xmldocument-vs-xmlreader&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;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 및 네임스페이스를 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고(,&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnavigator(VS.80).aspx&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;XPathNavigator&lt;/code&gt;&lt;/a&gt; , , ).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로 XML을 더 쉽게 읽을 수 있으므로 원하는 것을 찾을 수 있는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 최근에 XML 문서의 구문 분석과 관련된 응용 프로그램에 대한 작업을 요청받았는데, 제 생각에 LINQ to XML 기반 접근 방식이 가장 좋다는 Jon Galloway의 의견에 동의합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 사용 가능한 예를 찾기 위해 약간의 땅을 파야 했기 때문에, 더 이상의 일은 하지 않고, 여기에 몇 가지가 있습니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 코드가 작동하기 때문에 어떤 코멘트라도 환영하지만 완벽하지 않을 수 있으며 이 프로젝트를 위해 XML을 구문 분석하는 것에 대해 더 배우고 싶습니다!&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public void ParseXML(string filePath)  
{  
    // create document instance using XML file path
    XDocument doc = XDocument.Load(filePath);

    // get the namespace to that within of the XML (xmlns=&quot;...&quot;)
    XElement root = doc.Root;
    XNamespace ns = root.GetDefaultNamespace();

    // obtain a list of elements with specific tag
    IEnumerable&amp;lt;XElement&amp;gt; elements = from c in doc.Descendants(ns + &quot;exampleTagName&quot;) select c;

    // obtain a single element with specific tag (first instance), useful if only expecting one instance of the tag in the target doc
    XElement element = (from c in doc.Descendants(ns + &quot;exampleTagName&quot; select c).First();

    // obtain an element from within an element, same as from doc
    XElement embeddedElement = (from c in element.Descendants(ns + &quot;exampleEmbeddedTagName&quot; select c).First();

    // obtain an attribute from an element
    XAttribute attribute = element.Attribute(&quot;exampleAttributeName&quot;);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 기능으로 XML 파일에서 어떤 요소와 속성을 해석해도 문제가 없습니다!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 다음과 같은 방법으로 XPath Selector(XPath 셀렉터)를 사용할 수 있습니다(특정 노드를 쉽게 선택할 수 있는 방법).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;XmlDocument doc = new XmlDocument();
doc.Load(&quot;test.xml&quot;);

var found = doc.DocumentElement.SelectNodes(&quot;//book[@title='Barry Poter']&quot;); // select all Book elements in whole dom, with attribute title with value 'Barry Poter'

// Retrieve your data here or change XML here:
foreach (XmlNode book in nodeList)
{
  book.InnerText=&quot;The story began as it was...&quot;;
}

Console.WriteLine(&quot;Display XML:&quot;);
doc.Save(Console.Out);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://msdn.microsoft.com/en-us/library/hcebdtae(v=vs.110).aspx&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서류, 서류&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하시는 분들은.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NET 2.0 시도&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XmlReader&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 그 하위 계급들.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XmlTextReader&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XmlValidatingReader&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. XML 파일을 구문 분석하는 빠르고 가벼운(메모리 사용량 등) 순방향 전용 방법을 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;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;XPathNavigator&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 메모리에 전체 문서가 필요한 경우 시도해 보십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XmlDocument&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;XML 구문 분석 모범 사례&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;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Language_Integrated_Query#LINQ_to_XML_.28formerly_called_XLINQ.29&quot; rel=&quot;nofollow noreferrer&quot;&gt;LINQ&lt;/a&gt; to &lt;a href=&quot;http://en.wikipedia.org/wiki/Language_Integrated_Query#LINQ_to_XML_.28formerly_called_XLINQ.29&quot; rel=&quot;nofollow noreferrer&quot;&gt;XML&lt;/a&gt;, 또는 정규식을 사용할 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 요구를 구체적으로 설명해 주신다면, 저는 몇 가지 제안을 해 드릴 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 라이브러리를 사용하여 XML을 구문 분석할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Xml.Linq&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 아래는 XML 파일을 구문 분석하는 데 사용한 샘플 코드입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public CatSubCatList GenerateCategoryListFromProductFeedXML()
{
    string path = System.Web.HttpContext.Current.Server.MapPath(_xmlFilePath);

    XDocument xDoc = XDocument.Load(path);

    XElement xElement = XElement.Parse(xDoc.ToString());


    List&amp;lt;Category&amp;gt; lstCategory = xElement.Elements(&quot;Product&quot;).Select(d =&amp;gt; new Category
    {
        Code = Convert.ToString(d.Element(&quot;CategoryCode&quot;).Value),
        CategoryPath = d.Element(&quot;CategoryPath&quot;).Value,
        Name = GetCateOrSubCategory(d.Element(&quot;CategoryPath&quot;).Value, 0), // Category
        SubCategoryName = GetCateOrSubCategory(d.Element(&quot;CategoryPath&quot;).Value, 1) // Sub Category
    }).GroupBy(x =&amp;gt; new { x.Code, x.SubCategoryName }).Select(x =&amp;gt; x.First()).ToList();

    CatSubCatList catSubCatList = GetFinalCategoryListFromXML(lstCategory);

    return catSubCatList;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ExtendedXml &lt;a href=&quot;https://github.com/wojtpl2/ExtendedXmlSerializer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Serializer&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; &lt;a href=&quot;https://www.nuget.org/packages/ExtendedXmlSerializer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;nuget&lt;/a&gt;에서 ExtendedXmlSerializer를 설치하거나 다음 명령을 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Install-Package ExtendedXmlSerializer
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;직렬화:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ExtendedXmlSerializer serializer = new ExtendedXmlSerializer();
var obj = new Message();
var xml = serializer.Serialize(obj);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;역직렬화&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var obj2 = serializer.Deserialize&amp;lt;Message&amp;gt;(xml);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의 표준 XML Serializer입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NET은 매우 제한적입니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;순환 참조가 있는 클래스 또는 인터페이스 속성이 있는 클래스의 직렬화를 지원하지 않습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사전을 지원하지 않습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;XML의 이전 버전을 읽을 수 있는 메커니즘이 없습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자 지정 serializer를 만들려면 클래스가 IXmlSerializable에서 상속되어야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 당신의 수업이 POCO 수업이 아니라는 것을 의미합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IoC를 지원하지 않습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ExtendedXmlSerializer는 이 작업 외에도 더 많은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;확장 XmlSerializer 지원&lt;strong&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;NET 4.5&lt;/strong&gt; 이상 및&lt;strong&gt; &lt;/strong&gt;.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;NET Core&lt;/strong&gt;.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WebApi 및 AspCore와 통합할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;XmlDocument를 사용할 수 있으며 특성에서 데이터를 조작하거나 검색하기 위해 XML 클래스에 연결할 수 있습니다.&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/55828/how-does-one-parse-xml-files&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>XML</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1005</guid>
      <comments>https://manycodes.tistory.com/1005#entry1005comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:55:58 +0900</pubDate>
    </item>
    <item>
      <title>레일, link_to helper 클릭 후 자바스크립트가 로딩되지 않음</title>
      <link>https://manycodes.tistory.com/1004</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;레일, link_to helper 클릭 후 자바스크립트가 로딩되지 않음&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;레일에서 link_to helper를 사용할 때 javascript를 로드하는 데 문제가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수동으로 'localhost:3000/products/new'로 url을 입력하거나 페이지를 다시 로드하면 javascript가 로드되지만 아래와 같이 링크를 거치면 jQuery가 실행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(document).ready&lt;/code&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;Link_to, 다음 링크를 클릭하면 javascript가 로드되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;%= link_to &quot;New Product&quot;, new_product_path %&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;products.js 파일&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).ready(function() {
    alert(&quot;test&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;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;레일 4를 사용하고 있습니까? (해봄으로써 알아봅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rails -v&lt;/code&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;https://github.com/rails/turbolinks/&quot; rel=&quot;noreferrer&quot;&gt;터보링크스&lt;/a&gt; 보석 때문일 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 당신의 응용프로그램이 한 페이지의 자바스크립트 응용프로그램처럼 동작하게 만듭니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;몇 가지 이점(더 &lt;a href=&quot;http://blog.steveklabnik.com/posts/2012-09-27-seriously--numbers--use-them-&quot; rel=&quot;noreferrer&quot;&gt;빠름)&lt;/a&gt;이 &lt;a href=&quot;http://blog.steveklabnik.com/posts/2012-09-27-seriously--numbers--use-them-&quot; rel=&quot;noreferrer&quot;&gt;있지만&lt;/a&gt; 안타깝게도 다음과 같은 기존 이벤트를 중단합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(document).ready()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;페이지가 다시 로드되지 않기 때문입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 당신이 직접 URL을 로드할 때 자바스크립트가 작동하는 이유를 설명해 줄 것이고, 당신이 a를 통해 그것을 탐색할 때는 그렇지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;link_to&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 터보링크에 대한 &lt;a href=&quot;http://railscasts.com/episodes/390-turbolinks&quot; rel=&quot;noreferrer&quot;&gt;레일캐스트&lt;/a&gt;가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;몇 가지 해결책이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/kossnocorp/jquery.turbolinks&quot; rel=&quot;noreferrer&quot;&gt;jquery.turbolinks&lt;/a&gt;를 drop-in fix로 사용할 수도 있고, 당신은 당신의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(document).ready()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신 Turbolinks를 사용하겠다는 성명서.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'page:change'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).on('page:change', function() {
    // your stuff here
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 Turbolinks뿐만 아니라 일반 페이지 로드와의 호환성을 위해 다음과 같은 작업을 수행할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var ready = function() {
    // do stuff here.
};

$(document).ready(ready);
$(document).on('page:change', ready);
&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;Ruby on Rails &amp;gt;5를 사용하는 경우 (Ruby on Rails &amp;gt; 5를 실행하여 확인할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rails -v&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;콘솔에서) 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'turbolinks:load'&lt;/code&gt;&lt;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:change'&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).on('turbolinks:load', ready); 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;같은 문제가 발생했지만 &lt;a href=&quot;https://github.com/kossnocorp/jquery.turbolinks&quot; rel=&quot;noreferrer&quot;&gt;jquery.turbolinks&lt;/a&gt;는 도움이 되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;GET 방법을 무시해야 한다는 것을 알게 되었습니다.&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;%= link_to 'Edit', edit_interpreter_path(@interpreter), method: :get %&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;만약 당신이 5번 레일 위에 있다면 대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'page:change'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'turbolinks:load'&lt;/code&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;$(document).on('turbolinks:load', function() {
  // Should be called at each visit
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출처 : https://stackoverflow.com/a/36110790&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 데이터 무터볼 링크를 지정하는 div로 링크를 래핑할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div id=&quot;some-div&quot; data-no-turbolink&amp;gt;
    &amp;lt;a href=&quot;/&quot;&amp;gt;Home (without Turbolinks)&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출처 : https://github.com/rails/turbolinks&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;script&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;tags. (인라인 스크립트 태그는 터보링크의 경우 좋지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;FWIW, &lt;a href=&quot;https://github.com/turbolinks/turbolinks-classic&quot; rel=&quot;nofollow&quot;&gt;Turbolinks 문서&lt;/a&gt;에서 캡처 대신 캡처하기에 더 적합한 이벤트입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(document).ready&lt;/code&gt;&lt;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:change&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;page:load&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;캐시 재장전 시 불이 붙지 않는다는 주의사항이 있습니다...&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새로운 신체 요소가 DOM에 로드되었습니다.&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;터벌링크스가 시선을 돌리니까요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;page:change&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 적합합니다.&lt;/font&gt;&lt;/font&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;meta name=&quot;turbolinks-visit-control&quot; content=&quot;reload&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 특정 페이지에 대한 방문이 항상 전체 다시 로드를 트리거합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 제가 이 문제를 해결하기 위한 해결책을 마련하는 데 매우 유용했습니다. https://github.com/turbolinks/turbolinks#reloading-when-assets-change .&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;reload 후 link_tojs가 작동 중이므로 turbolink 문제일 경우 turbolink를 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;false&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 링크에서_ex에 대한 좋아요:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;%= link_to &quot;Home&quot;, home_path, data: { turbolinks: false } %&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/17600093/rails-javascript-not-loading-after-clicking-through-link-to-helper&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>jQuery</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1004</guid>
      <comments>https://manycodes.tistory.com/1004#entry1004comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:55:50 +0900</pubDate>
    </item>
    <item>
      <title>크로스 플랫폼 모바일 개발에 대해 어떤 작업이 이루어졌습니까?</title>
      <link>https://manycodes.tistory.com/1003</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;크로스 플랫폼 모바일 개발에 대해 어떤 작업이 이루어졌습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item 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&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 상태로는 이 질문은 우리의 Q&amp;amp;A 형식에 맞지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사실, 참고 자료 또는 전문 지식에 의해 답변이 뒷받침되기를 기대하지만, 이 질문은 토론, 주장, 여론 조사 또는 토론을 요청할 가능성이 높습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 이 질문이 개선되고 다시 열릴 수 있다고 생각한다면,&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;/help/reopen-questions&quot;&gt;안내&lt;/a&gt;를 받기 위해 헬프 &lt;a href=&quot;/help/reopen-questions&quot;&gt;센터를 방문&lt;/a&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;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;닫힘&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;span class=&quot;relativetime&quot; title=&quot;2012-06-14 16:46:02Z&quot; papago-attr-id=&quot;1&quot;&gt;11년 전&lt;/span&gt;에.&lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문서화가 잘 되어 있거나 오픈 소스 프로젝트가 목표로 되어 있는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;iPhone&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Blackberry&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Android&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;? 이러한 노력에 더 적합한 다른 플랫폼이 있습니까? 여러 모바일 플랫폼에서 웹 앱을 사용할 때의 어려움에 대한 정보도 흥미롭지만, 웹 앱이 아닌 클라이언트 측 소프트웨어에 대해 특별히 묻고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML5 표준은 독립 실행형 &lt;em&gt;HTML5&lt;/em&gt; 앱 출시를 지원합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 &lt;em&gt;HTML5&lt;/em&gt; 앱은 데스크톱 또는 장치의 브라우저에서 독립 실행되는 &lt;em&gt;HTML5&lt;/em&gt;, &lt;em&gt;자바스크립트&lt;/em&gt; 및 &lt;em&gt;CSS&lt;/em&gt; 파일 묶음입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;아이폰용&lt;/strong&gt; &lt;em&gt;iStore&lt;/em&gt;에서 판매하는 등 다른 프로그램처럼 배포할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이에 대한 지원은 현재는 미흡하지만 향후 1~2년 안에 엄청나게 개선될 것으로 보입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Google for &lt;em&gt;HTML5&lt;/em&gt; 앱 정보 및 리소스&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML5에 대한 좋은 소개는 &lt;a href=&quot;http://fortuito.us/diveintohtml5/table-of-contents.html&quot; rel=&quot;noreferrer&quot;&gt;Mark Pilgrim의 온라인&lt;/a&gt; 책 &quot;&lt;a href=&quot;http://fortuito.us/diveintohtml5/table-of-contents.html&quot; rel=&quot;noreferrer&quot;&gt;Dive&lt;/a&gt; Into &lt;a href=&quot;http://fortuito.us/diveintohtml5/table-of-contents.html&quot; rel=&quot;noreferrer&quot;&gt;HTML5&quot;&lt;/a&gt;입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 현재 진행 중인 작업이지만 충분히 완성되어 유용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;정확히 이 문제에 대한 해결책은 두 가지입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.rhomobile.com/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마름모빌&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.phonegap.com/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전화 간격&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;크로스 플랫폼 모바일이 성공할 수 있는 가장 좋은 기회는 웹이라고 생각합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;달성하고자 하는 것을 위해 아주 &lt;a href=&quot;http://geo.webvm.net/&quot; rel=&quot;noreferrer&quot;&gt;간단한&lt;/a&gt; 웹 &lt;a href=&quot;http://geo.webvm.net/&quot; rel=&quot;noreferrer&quot;&gt;애플리케이션&lt;/a&gt;을 작성하기만 하면 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 노키아 S60 브라우저, 아이폰 그리고 안드로이드에서 작동할 것입니다.&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;Appcelerator, PhoneGap(Adobe가 인수하고 현재 Apache Cordova로 표준화됨), Intel XDK(이전에는 appMobi로 불림) 및 Rhodes(Motorola Solutions가 인수함)는 모두 오픈 소스이며 하이브리드 앱(htmlui로 네이티브로 구성되어 있으며 일부 기본 컨트롤을 추가할 수 있음)을 생성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;게임이라면 상용 개발에 사용할 수 있는 무료 엔진을 선택할 수 있는 전문가는 Unity3D뿐입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2D 게임의 경우 cocos2d-x도 이용할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 외에도 부포리아는 AR, 리퀴드펀은 물리학에 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://www.xmlvm.org/overview/&quot; rel=&quot;noreferrer&quot;&gt;XMLVM&lt;/a&gt;(&lt;a href=&quot;http://www.cokeandcode.com/node/1393&quot; rel=&quot;noreferrer&quot;&gt;코크&lt;/a&gt; 및 &lt;a href=&quot;http://www.cokeandcode.com/node/1393&quot; rel=&quot;noreferrer&quot;&gt;코드&lt;/a&gt; 경유)과 &lt;a href=&quot;http://www.edgelib.com/&quot; rel=&quot;noreferrer&quot;&gt;EdgeLib&lt;/a&gt;이 현재 가장 성숙한 옵션인 것으로 보입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;EdgeLib은 주로 게임 개발자를 대상으로 하며, Coke와 Code에 따르면 XMLVM 개발자는 접촉이 어렵습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아이폰은 오브젝티브 C, RIM 기능이 있는 Blackberry Java SE, Android의 또 다른 맞춤형 Java 버전을 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 당신이 후자의 두 가지를 어떻게 결합할 수 있는지 알 수 있지만 iPhone에서 Java 애플리케이션을 실행할 수 있는 기능은 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지금까지 본 것 중 가장 좋은 것은 Windows CE에서 실행될 &lt;a href=&quot;http://en.wikipedia.org/wiki/Qt_(toolkit)&quot; rel=&quot;noreferrer&quot;&gt;Qt&lt;/a&gt;와 같은 것입니다. 거의 확실하게 곧 Symbian, 일부 Java 플랫폼 및 3대 데스크톱 OS에서 실행될 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://www.redfivelabs.com/default.aspx&quot; rel=&quot;noreferrer&quot;&gt;redfive&lt;/a&gt; labs는 를 구현했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;S60 플랫폼을 위한 넷 컴팩트 프레임워크&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;앱셀러레이터의 &lt;a href=&quot;http://www.appcelerator.com/products/titanium-mobile-application-development/&quot; rel=&quot;noreferrer&quot;&gt;티타늄 모바일&lt;/a&gt;은 흥미로워 보입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML &amp;amp; Javascript에서 앱을 개발하고 서버에 업로드하면 대상 플랫폼(현 iPhone &amp;amp; Android)의 네이티브 어플리케이션으로 컴파일됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 아이폰의 경우 애플 아이폰 SDK NDA가 코드를 게시하는 것을 금지하는 오픈 소스와 같은 개념은 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그들은 또한 애플이 아닌 사이트나 심지어 애플이 아닌 토론 포럼에 아이폰 개발에 관한 코드를 게시하는 것을 금지하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NDA가 만료되는 즉시(그럴 수 있을까요?) 오픈 소스 아이폰 앱을 시작할 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;깜짝 놀란 &lt;strong&gt;MoSync&lt;/strong&gt;는 아직 여기서 언급되지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;업데이트(2014년 1월 &lt;/em&gt;-&lt;em&gt; 현재):&lt;/em&gt; 프로젝트가 &lt;a href=&quot;https://groups.google.com/forum/#!topic/mosync-dev/PaYzr5ENw-g&quot; rel=&quot;nofollow&quot;&gt;중단&lt;/a&gt;되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 EdgeLib이라는 정말 멋진 크로스 플랫폼 SDK를 사용하기 시작했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;간단한 API를 사용할 수 있으며 프로젝트를 다양한 플랫폼에 컴파일할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;윈도우 모바일 포켓 PC, 윈도우 모바일 스마트폰, 심비안 시리즈 60, 시리즈 80, 시리즈 90, 심비안 UIQ, 게임파크 홀딩스 GP2X, 기즈몬도, 윈도우 데스크톱&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.edgelib.com/index.php?node=iphone&quot; rel=&quot;nofollow noreferrer&quot;&gt;아이폰 베타&lt;/a&gt;가 발표되었지만 아직 공개되지 않았습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://jquerymobile.com/&quot; rel=&quot;nofollow&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery 모바일 알파2 출시&lt;/font&gt;&lt;/a&gt;&lt;br&gt; &lt;a href=&quot;http://www.nimblekit.com/&quot; rel=&quot;nofollow&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;님블킷&lt;/font&gt;&lt;/a&gt;&lt;br&gt; &lt;a href=&quot;http://www.sencha.com/products/touch/&quot; rel=&quot;nofollow&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;센차&lt;/font&gt;&lt;/a&gt;&lt;br&gt; &lt;a href=&quot;http://www.phonegap.com/&quot; rel=&quot;nofollow&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;폰갭&lt;/font&gt;&lt;/a&gt;&lt;br&gt; &lt;a href=&quot;http://www.appcelerator.com/products/titanium-mobile-application-development/&quot; rel=&quot;nofollow&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;액셀러레이터&lt;/font&gt;&lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;BlackBerry는 Java SE를 보유하고 있지 않고 Java ME를 보유하고 있으며 RIM에서 제공하는 &lt;em&gt;추가&lt;/em&gt; 라이브러리도 많습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안드로이드도 마찬가지입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모바일 기기에서 볼 수 있는 유일한 크로스 플랫폼 앱은 대부분의 기기에서 실행되는 엄격한 Java ME로 작성되었을 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 다른 브라우저 간의 자바스크립트와 마찬가지로 자바 ME도 여러 장치에 걸쳐 특이점이 있으므로 소스 코드 변경이 필요할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 dat MoMinis 게임을 위한 한가지 게임 엔진이 배포가 가능하고 Android, Blackberry, Symbian, J2me 기기에서 지원된다는 것을 알았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MoMinis 게임에는 아케이드, 퍼즐, 시간 관리, 전략, 두뇌 트레이닝 모바일 게임 등 다양한 캐주얼 게임이 포함되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.mominis.com/&quot; rel=&quot;nofollow&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모미니즈&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;폰사이는 크로스 플랫폼 모바일 개발 시장에서 &quot;코딩 없이&quot; 새롭게 출시되었습니다. 직접 하는 모바일 개발과 콘텐츠 관리가 혼합되어 있습니다. 모든 애플리케이션을 사용자 정의할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;템플릿 없음.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;SaaS 입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바 웹 스타트로 완전한 웹 기반.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2000대의 휴대전화 모델로 작업 가능.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매우 간단한 GUI와 코딩이 없습니다.&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;그리고 마침내 안에 에뮬레이터가 4개 있어서 위지위그 컨셉입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;폰사이에는 http://phonsai.com 에서 접속할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;RAMP라는 크로스 플랫폼 모바일 개발 플랫폼을 보유하고 있습니다. 미드p 1부터 안드로이드까지 기능과 스마트폰을 모두 망라하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 플랫폼은 대부분 안전한 상용 애플리케이션을 목표로 하지만 플러그를 꽂을 수 있기 때문에 거의 모든 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자세한 정보와 플랫폼에 대한 액세스는 다음을 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://ramp.virtualmobiletech.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가상 모바일 기술&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;Symbian OS의 S60은 애플리케이션&lt;/em&gt;을 모바일로 이동시키기 위해 데스크톱/서버 언어와 관련된 많은 흥미로운 프로젝트를 수행하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;흥미로운 것들이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Python: 소스 &lt;a href=&quot;http://sourceforge.net/projects/pys60&quot; rel=&quot;nofollow noreferrer&quot;&gt;위조&lt;/a&gt;&lt;/font&gt;&lt;/font&gt; &lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;루비: 루비 &lt;a href=&quot;http://sourceforge.net/projects/pys60&quot; rel=&quot;nofollow noreferrer&quot;&gt;심비안&lt;/a&gt;&lt;/font&gt;&lt;/font&gt; &lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모질라: &lt;a href=&quot;https://wiki.mozilla.org/Mobile/Symbian/NSPR&quot; rel=&quot;nofollow noreferrer&quot;&gt;모질라&lt;/a&gt;&lt;/font&gt;&lt;/font&gt; &lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;S60 웹킷:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://opensource.nokia.com/projects/S60browser/&quot; rel=&quot;nofollow noreferrer&quot;&gt;S60브라우저&lt;/a&gt;&lt;/font&gt;&lt;/font&gt; &lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;POSIX: &lt;a href=&quot;http://www.forum.nokia.com/main/resources/technologies/openc_cpp/&quot; rel=&quot;nofollow noreferrer&quot;&gt;openc_cpp&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;URL : https://stackoverflow.com/questions/51988/what-work-has-been-done-on-cross-platform-mobile-development&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>iPhone</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1003</guid>
      <comments>https://manycodes.tistory.com/1003#entry1003comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:55:43 +0900</pubDate>
    </item>
    <item>
      <title>R: RMySQL을 사용하여 MySQL 오류에 테이블 쓰기</title>
      <link>https://manycodes.tistory.com/1002</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;R: RMySQL을 사용하여 MySQL 오류에 테이블 쓰기&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 RMySQL을 사용하여 테이블에 data.frame을 작성하려고 합니다.&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;dbWriteTable (mydb, value = dataframe, name = &quot;table&quot;, append = TRUE)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 항상 다음을 받습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.local(conn, statement, ...)에서 오류가 발생했습니다. 문을 실행할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 MariaDB 버전에서는 사용된 명령이 허용되지 않습니다.&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;append = FALSE&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;). 그러나 테이블에는 어떠한 데이터도 기입되지 않은 채 작성되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터 프레임은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;date forecast  lt st combined
16611  0.0874 0.7  0     0.7
16612  0.0853 0.7  0     0.7
16613  0.0844 0.7  0     0.7
16614  0.0822 0.7  0     0.7
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;mysql 테이블의 열은 이름이 같고 모두 이중입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블이 비었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;좋은 의견이라도 있나?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 방법이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;감사합니다!!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/38542501/r-write-table-to-mysql-error-using-rmysql&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>mariadb</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1002</guid>
      <comments>https://manycodes.tistory.com/1002#entry1002comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:55:36 +0900</pubDate>
    </item>
    <item>
      <title>static_assert를 사용하여 매크로에 전달된 유형을 확인합니다.</title>
      <link>https://manycodes.tistory.com/1001</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;static_assert를 사용하여 매크로에 전달된 유형을 확인합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;불행하게도 제 라이브러리의 원래 버전에서 꽤 미친 C를 사용한 매크로가 몇 개 남아 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특히, 저는 특정한 종류가 자신에게 전달되기를 기대하는 일련의 매크로를 가지고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;다음과 같은 작업을 수행할 수 있습니까?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;static_assert(decltype(retval) == bool);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떻게?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현명한 대안이 있습니까?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네 매크로가 나쁘다는 것을 알고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C++는 C 등이 아닌 것으로 알고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;업데이트 0&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 &lt;a href=&quot;http://pastebin.com/vSanw492&quot; rel=&quot;noreferrer&quot;&gt;관련된 코드&lt;/a&gt;와 &lt;a href=&quot;http://code.google.com/p/cpfs/source/browse/libcpfs/cpfs.cc&quot; rel=&quot;noreferrer&quot;&gt;소스&lt;/a&gt; 파일이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제안을 환영합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원래 질문은 그대로입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;@&lt;a href=&quot;https://stackoverflow.com/users/155693/unclebens&quot;&gt;UncleBens&lt;/a&gt; 제안을 사용하면 가장 깨끗하다는 것을 알 수 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;type_traits&amp;gt;

static_assert(std::is_same&amp;lt;decltype(retval), bool&amp;gt;::value, &quot;retval must be bool&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;strong&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;/strong&gt;&lt;/em&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;template &amp;lt;class T1, class T2&amp;gt; struct CheckSameType; //no definition
template &amp;lt;class T&amp;gt; struct CheckSameType&amp;lt;T,T&amp;gt;{}; //

template &amp;lt;class T1, class T2&amp;gt;
AssertHasType(T2)
{
   CheckSameType&amp;lt;T1, T2&amp;gt; tmp; //will result in error if T1 is not T2
}
&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;AssertHasType&amp;lt;bool&amp;gt;(retval);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대안(GMan이 제안):&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;template &amp;lt;class T1, class T2&amp;gt; struct SameType
{
    enum{value = false};
}
template &amp;lt;class T&amp;gt; struct SameType&amp;lt;T,T&amp;gt;
{
    enum{value = true};
}; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 사용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;static_assert(SameType&amp;lt;decltype(retval), bool&amp;gt;::value);
&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;decltype&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;지금 이미 충분한 방법이 있습니다(C++03).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 부울을 체크하는 것.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;inline void mustBeBool(bool) { }
template&amp;lt;typename T&amp;gt; inline void mustBeBool(T t) { &amp;amp; (&amp;amp;t); } // Takes address of rvalue (&amp;amp;t)

// Use:
#define DifficultMacro(B) do { mustBeBool(B); foo(B); } while (false)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 당신이 신경쓰면.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예선자들, 그리고 확실하게 하기를 원합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/4029310/4561887&quot;&gt;@Matt Joiner가 말하는 것&lt;/a&gt;처럼 유형의 일부도 비교 대상 유형과 정확히 일치합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;type_traits&amp;gt;

static_assert(std::is_same&amp;lt;decltype(my_variable), uint64_t&amp;gt;::value, 
              &quot;type must be `uint64_t`&quot;); 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 신경쓰지 않는 나는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그러나, 그리고 단순히 그 유형이 다음을 고려하지 않고 특정한 유형인지 확인하기를 원합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const&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::remove_const&amp;lt;&amp;gt;::type&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기에 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;static_assert(std::is_same&amp;lt;std::remove_const&amp;lt;decltype(my_variable)&amp;gt;::type, uint64_t&amp;gt;::value, 
              &quot;type must be `uint64_t` OR `const uint64_t`&quot;);   
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마찬가지입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 당신이 신경쓰지 않는다면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;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::remove_volatile&amp;lt;&amp;gt;::type&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;static_assert(std::is_same&amp;lt;std::remove_volatile&amp;lt;decltype(my_variable)&amp;gt;::type, uint64_t&amp;gt;::value, 
              &quot;type must be `uint64_t` OR `volatile uint64_t`&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 신경쓰지 않는다면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오어&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&lt;/code&gt;&lt;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::remove_cv&amp;lt;&amp;gt;::type&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;static_assert(std::is_same&amp;lt;std::remove_cv&amp;lt;decltype(my_variable)&amp;gt;::type, uint64_t&amp;gt;::value, 
              &quot;type must be `uint64_t` OR `const uint64_t` OR `volatile uint64_t` OR `volatile const uint64_t`&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 C++17 기준으로 다음을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;std::remove_cv_t&amp;lt;decltype(my_variable)&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::remove_cv&amp;lt;decltype(my_variable)&amp;gt;::type&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그리고:&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;std::is_same_v&amp;lt;some_type, another_type&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::is_same&amp;lt;some_type, another_type&amp;gt;::value&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참조:&lt;/font&gt;&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/4021981/use-static-assert-to-check-types-passed-to-macro/4029310#4029310&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;static_assert를 사용하여 매크로에 전달된 유형을 확인합니다.&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://en.cppreference.com/w/cpp/types/is_same&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://en.cppreference.com/w/cpp/types/is_same&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://en.cppreference.com/w/cpp/language/decltype&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://en.cppreference.com/w/cpp/language/decltype&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://en.cppreference.com/w/cpp/header/type_traits&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://en.cppreference.com/w/cpp/header/type_traits&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://en.cppreference.com/w/cpp/types/remove_cv&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.cppreference.com/w/cpp/types/remove_cv&lt;/a&gt; -&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::remove_cv&amp;lt;&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::remove_const&amp;lt;&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::remove_volatile&amp;lt;&amp;gt;&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;관련:&lt;/font&gt;&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;[위의 내용을 사용하는 나의 또 다른 답변.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;static_assert&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;트릭] &lt;a href=&quot;https://stackoverflow.com/questions/67449789/how-to-make-span-of-spans/67454463#67454463&quot;&gt;스팬 스팬을 만드는&lt;/a&gt; 방법&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/3385515/static-assert-in-c/54993033#54993033&quot;&gt;C의 정적 주장&lt;/a&gt; [나 자신의 대답]&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C에서 정적 주장을 사용하여 &lt;a href=&quot;https://stackoverflow.com/questions/60611626/how-to-use-static-assert-in-c-to-check-the-types-of-parameters-passed-to-a-macro&quot;&gt;매크로에 전달된 파라미터의 종류를 확인&lt;/a&gt;하는 방법 [&lt;a href=&quot;https://stackoverflow.com/questions/60611626/how-to-use-static-assert-in-c-to-check-the-types-of-parameters-passed-to-a-macro&quot;&gt;나만의 질문&lt;/a&gt;]&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/4712720/typechecking-macro-arguments-in-c&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C의 매크로 인수 확인 유형&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;*****&lt;a href=&quot;https://stackoverflow.com/questions/44848011/c-limit-template-type-to-numbers/44848104#44848104&quot;&gt;C++ 템플릿 유형을 숫자로 제한&lt;/a&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대부분의 매크로는 다음으로 대체할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;inline&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;isnan&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;macro는 C++0x의 템플릿입니다.&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;em&gt;언어&lt;/em&gt; 기능을 구현하는 매크로입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 더 스마트한 예외 처리, 공분산 또는 매개 변수화된 선언 집합이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;합리적으로 표현할 수 없는 매크로가 다음과 같은 경우가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;inline&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수 또는 템플릿은 더 똑똑한 종류의 전처리, 즉 코드 생성으로 대체될 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 필요한 코드를 생성하는 스크립트가 어딘가에 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 매크로와 템플릿을 사용하여 순수 C++로 옵션 클래스를 수행하는 것은 가능하지만, 이는 털이 많고, 그록이 더 쉽고, 유지보수가 더 용이한 대안으로 추가 빌드 단계와 여러 언어를 처리하는 비용으로 필수 클래스를 생성하는 스크립트를 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;건배!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/4021981/use-static-assert-to-check-types-passed-to-macro&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1001</guid>
      <comments>https://manycodes.tistory.com/1001#entry1001comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:55:30 +0900</pubDate>
    </item>
    <item>
      <title>Swift XCTest UI에서 테스트 사이에 앱을 재설정할 수 있는 방법이 있습니까?</title>
      <link>https://manycodes.tistory.com/1000</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Swift XCTest UI에서 테스트 사이에 앱을 재설정할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테스트 사이에 앱을 재설정하기 위해 setUP() 또는 tearDown()에 넣을 수 있는 XCT 테스트 내 API 호출이 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 XCUIA Application의 dot 구문을 살펴보았는데 .launch()만 보였습니다.&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;그러면 xcrun in-between test methods를 호출하여 시뮬레이터를 리셋할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;스크립트 실행&quot; 단계를 추가하여 테스트 대상에 단계를 만들어 앱에 대한 단위 테스트를 실행하기 전에 앱을 제거할 수 있습니다.&lt;s&gt; 하지만 안타깝게&lt;/s&gt;도 이 &lt;s&gt;단계는 테스트 사례 사이&lt;/s&gt;에 있는 &lt;s&gt;것은 아닙니다&lt;/s&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;/usr/bin/xcrun simctl uninstall booted com.mycompany.bundleId&lt;/code&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;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;테스트 사이&lt;/strong&gt;에 tearDown 단계에서 Springboard를 통해 &lt;strong&gt;앱을 삭제&lt;/strong&gt;할 수 &lt;strong&gt;있습니다.&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 XCTest의 개인 헤더를 사용해야 합니다. (헤더 &lt;a href=&quot;https://github.com/facebook/WebDriverAgent/tree/master/PrivateHeaders/XCTest&quot; rel=&quot;noreferrer&quot;&gt;덤프&lt;/a&gt;는 여기 &lt;a href=&quot;https://github.com/facebook/WebDriverAgent/tree/master/PrivateHeaders/XCTest&quot; rel=&quot;noreferrer&quot;&gt;Facebook의 WebDriverAgent&lt;/a&gt;에서 사용할 수 있습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Springboard 클래스에서 탭을 누른 상태에서 Springboard에서 앱을 삭제하기 위한 샘플 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;#스위프트4:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import XCTest

class Springboard {

    static let springboard = XCUIApplication(bundleIdentifier: &quot;com.apple.springboard&quot;)
    
    /**
     Terminate and delete the app via springboard
     */
    class func deleteMyApp() {
        XCUIApplication().terminate()
        
         // Force delete the app from the springboard
        let icon = springboard.icons[&quot;Citizen&quot;]
        if icon.exists {
            let iconFrame = icon.frame
            let springboardFrame = springboard.frame
            icon.press(forDuration: 1.3)
        
            // Tap the little &quot;X&quot; button at approximately where it is. The X is not exposed directly
            springboard.coordinate(withNormalizedOffset: CGVector(dx: (iconFrame.minX + 3) / springboardFrame.maxX, dy: (iconFrame.minY + 3) / springboardFrame.maxY)).tap()
        
            springboard.alerts.buttons[&quot;Delete&quot;].tap()
        }
    }
 }
&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;import XCTest

class Springboard {

    static let springboard = XCUIApplication(privateWithPath: nil, bundleID: &quot;com.apple.springboard&quot;)
    
    /**
     Terminate and delete the app via springboard
     */
    class func deleteMyApp() {
        XCUIApplication().terminate()
        
        // Resolve the query for the springboard rather than launching it
        springboard.resolve()
        
        // Force delete the app from the springboard
        let icon = springboard.icons[&quot;MyAppName&quot;]
        if icon.exists {
            let iconFrame = icon.frame
            let springboardFrame = springboard.frame
            icon.pressForDuration(1.3)
            
            if #available(iOS 13.0, *) {
                springboard.buttons[&quot;Remove App&quot;].tap()
                springboard.alerts.buttons[&quot;Delete App&quot;].tap()
                springboard.alerts.buttons[&quot;Delete&quot;].tap()
            } else {
            
                // Tap the little &quot;X&quot; button at approximately where it is. The X is not exposed directly
                let xPosition = CGVector(dx: (iconFrame.minX + 3) / springboardFrame.maxX,
                                     dy: (iconFrame.minY + 3) / springboardFrame.maxY)
                springboard.coordinate(withNormalizedOffset: xPosition).tap()
                springboard.alerts.buttons[&quot;Delete&quot;].tap()
            }
        }
    }
 }
&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;override func tearDown() {
    Springboard.deleteMyApp()
    super.tearDown()
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;개인 헤더를 Swift bridging 헤더로 가져왔습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음을 가져와야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Private headers from XCTest
#import &quot;XCUIApplication.h&quot;
#import &quot;XCUIElement.h&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;참고&lt;/strong&gt;: Xcode 10 기준,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XCUIApplication(bundleIdentifier:)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 Apple에 의해 노출되므로 개인 헤더가 더 &lt;em&gt;이상 필요&lt;/em&gt;하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 Xcode, Simulator 및 Swift Package Manager에서 제공하는 &lt;em&gt;공개 API&lt;/em&gt;는 호출할 수 있는 방법이 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setUp()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tearDown()&lt;/code&gt; &lt;code&gt;XCText&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;subclasses to &quot;Reset Contents and Settings&quot;(시뮬레이터 내용 및 설정 재설정)으로 이동합니다.&lt;/font&gt;&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;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;응용&lt;/strong&gt; 프로그램 &lt;strong&gt;코드&lt;/strong&gt;.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;추가하기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;myResetApplication()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;응용 프로그램을 알려진 상태로 만들기 위한 응용 프로그램 코드입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 장치(시뮬레이터) 상태 제어는 애플리케이션 샌드박스에 의해 제한됩니다...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;응용 프로그램 밖에서는 큰 도움이 되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 방법은 응용프로그램 제어 가능한 저항을 제거하는 데 적합합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;셸 스크립트&lt;/strong&gt;.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;셸 스크립트에서 테스트를 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xcrun simctl erase all&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xcrun simctl uninstall &amp;lt;device&amp;gt; &amp;lt;app identifier&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 시뮬레이터를 재설정&lt;em&gt;(또는 &lt;/em&gt;앱&lt;em&gt; 제거&lt;/em&gt;)하기 위한 각 테스트 실행 간에 유사합니다&lt;em&gt;.&lt;/em&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/5125243/how-can-i-reset-the-ios-simulator-from-the-command-line&quot;&gt;StackOverflow: &quot;명령줄에서 iOS 시뮬레이터를 재설정하려면 어떻게 해야 합니까?&quot;를 참조하십시오.&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;xcrun simctl --help
# Uninstall a single application
xcrun simctl uninstall --help  
xcrun simctl uninstall &amp;lt;device&amp;gt; &amp;lt;app identifier&amp;gt;

# Erase a device's contents and settings.
xcrun simctl erase &amp;lt;device&amp;gt;
xcrun simctl erase all      # all existing devices

# Grant, revoke, or reset privacy and permissions
simctl privacy &amp;lt;device&amp;gt; &amp;lt;action&amp;gt; &amp;lt;service&amp;gt; [&amp;lt;bundle identifier&amp;gt;]
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;Xcode 스키마 스크립트 작업&lt;/strong&gt;. 추가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xcrun simctl erase all&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(또는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xcrun simctl erase &amp;lt;DEVICE_UUID&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테스트 또는 빌드 섹션과 같은 Xcode Scheme 섹션과 유사한 명령입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Product &amp;gt; Scheme &amp;gt; Edit Scheme … 메뉴를 선택합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Scheme Test 섹션을 펼칩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테스트 섹션 아래에 있는 Pre-actions(사전 작업)을 선택합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(+) &quot;New Run Script Action&quot;을 추가합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;명령어&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xcrun simctl erase all&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;외부 스크립트 없이 직접 입력할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;1&lt;/strong&gt;을 호출하기 위한 옵션&lt;strong&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt; &lt;/strong&gt;응용 프로그램을 재설정하기 위한 &lt;strong&gt;응용&lt;/strong&gt; 프로그램 &lt;strong&gt;코드&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가. &lt;strong&gt;어플리케이션 UI&lt;/strong&gt;&lt;em&gt; [UI Test]&lt;/em&gt; 어플리케이션을 리셋하는 리셋 버튼 또는 기타 UI 동작을 제공합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;UI 요소는 다음을 통해 실행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XCUIApplication&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XCTest&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일상적인&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setUp()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tearDown()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;testSomething()&lt;/code&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;B. &lt;strong&gt;매개변수를 실행&lt;/strong&gt;합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;[UI Test]&lt;/em&gt; Victor Ronin이 언급한 바와 같이, 그 테스트에서 주장이 통과될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setUp()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;...&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-swift prettyprint-override&quot;&gt;&lt;code&gt;class AppResetUITests: XCTestCase {

  override func setUp() {
    // ...
    let app = XCUIApplication()
    app.launchArguments = [&quot;MY_UI_TEST_MODE&quot;]
    app.launch()
&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;AppDelegate&lt;/code&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;class AppDelegate: UIResponder, UIApplicationDelegate {

  func application( …didFinishLaunchingWithOptions… ) -&amp;gt; Bool {
    // ...
    let args = ProcessInfo.processInfo.arguments
    if args.contains(&quot;MY_UI_TEST_MODE&quot;) {
      myResetApplication()
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C. &lt;strong&gt;Xcode Scheme&lt;/strong&gt; 매개 변수&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;[UI Test, Unit Test]&lt;/em&gt; Product &amp;gt; Scheme &amp;gt; Edit Scheme … 메뉴를 선택합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구성표 실행 섹션을 펼칩니다. (+) 다음과 같은 매개변수 추가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MY_UI_TEST_MODE&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 매개 변수는 다음에서 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ProcessInfo.processInfo&lt;/code&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;// ... in application
let args = ProcessInfo.processInfo.arguments
if args.contains(&quot;MY_UI_TEST_MODE&quot;) {
    myResetApplication()
}
&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;D. &lt;strong&gt;직접 통화&lt;/strong&gt;.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;[Unit Test]&lt;/em&gt; Unit Test 번들은 실행 중인 어플리케이션에 주입되어 일부를 직접 호출할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;myResetApplication()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지원서의 일상적인 작업&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주의 사항:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 단위 테스트는 주 화면이 로드된 후에 실행됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/32639263/changed-load-method-order-in-xcode-7/33851001#33851001&quot;&gt;테스트 로드 시퀀스를 참조&lt;/a&gt;하십시오. 그러나 UI 테스트 번들은 테스트 대상 응용 프로그램 외부의 프로세스로 실행됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 단위 테스트에서 작동하는 것은 UI 테스트에서 링크 오류를 발생시킵니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-swift prettyprint-override&quot;&gt;&lt;code&gt;class AppResetUnitTests: XCTestCase {

  override func setUp() {
    // ... Unit Test: runs.  UI Test: link error.
    myResetApplication() // visible code implemented in application
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;swift 3.1 / xcode 8.3용으로 업데이트됨&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테스트 대상에 브리징 헤더 생성:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#import &amp;lt;XCTest/XCUIApplication.h&amp;gt;
#import &amp;lt;XCTest/XCUIElement.h&amp;gt;

@interface XCUIApplication (Private)
- (id)initPrivateWithPath:(NSString *)path bundleID:(NSString *)bundleID;
- (void)resolve;
@end
&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;class Springboard {
   static let springboard = XCUIApplication(privateWithPath: nil, bundleID: &quot;com.apple.springboard&quot;)!
   static let settings = XCUIApplication(privateWithPath: nil, bundleID: &quot;com.apple.Preferences&quot;)!

/**
Terminate and delete the app via springboard
*/

class func deleteMyApp() {
   XCUIApplication().terminate()

// Resolve the query for the springboard rather than launching it

   springboard.resolve()

// Force delete the app from the springboard
   let icon = springboard.icons[&quot;{MyAppName}&quot;] /// change to correct app name
   if icon.exists {
     let iconFrame = icon.frame
     let springboardFrame = springboard.frame
     icon.press(forDuration: 1.3)

  // Tap the little &quot;X&quot; button at approximately where it is. The X is not exposed directly

    springboard.coordinate(withNormalizedOffset: CGVector(dx: (iconFrame.minX + 3) / springboardFrame.maxX, dy: (iconFrame.minY + 3) / springboardFrame.maxY)).tap()

     springboard.alerts.buttons[&quot;Delete&quot;].tap()

     // Press home once make the icons stop wiggling

     XCUIDevice.shared().press(.home)
     // Press home again to go to the first page of the springboard
     XCUIDevice.shared().press(.home)
     // Wait some time for the animation end
     Thread.sleep(forTimeInterval: 0.5)

      let settingsIcon = springboard.icons[&quot;Settings&quot;]
      if settingsIcon.exists {
       settingsIcon.tap()
       settings.tables.staticTexts[&quot;General&quot;].tap()
       settings.tables.staticTexts[&quot;Reset&quot;].tap()
       settings.tables.staticTexts[&quot;Reset Location &amp;amp; Privacy&quot;].tap()
       settings.buttons[&quot;Reset Warnings&quot;].tap()
       settings.terminate()
      }
     }
    }
   }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;iOS 13.2용 솔루션&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;final class Springboard {

    private static var springboardApp = XCUIApplication(bundleIdentifier: &quot;com.apple.springboard&quot;)

    class func deleteApp(name: String) {
        XCUIApplication().terminate()

        springboardApp.activate()

        sleep(1)

        let appIcon = springboardApp.icons.matching(identifier: name).firstMatch
        appIcon.press(forDuration: 1.3)

        sleep(1)

        springboardApp.buttons[&quot;Delete App&quot;].tap()

        let deleteButton = springboardApp.alerts.buttons[&quot;Delete&quot;].firstMatch
        if deleteButton.waitForExistence(timeout: 5) {
            deleteButton.tap()
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;앱에 스스로 &quot;정리&quot;를 요청할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XCUIApplication.launchArguments&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;깃발을 꽂다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;AppDelegate에서 다음을 확인합니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NSProcessInfo.processInfo().arguments.에 포함된 경우(&quot;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;YOUR_FLAG_NAME_HERE&quot;) { // 여기서 정리하기 }&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;@&lt;a href=&quot;https://stackoverflow.com/users/1082430/odm&quot;&gt;ODM&lt;/a&gt; &lt;a href=&quot;https://stackoverflow.com/a/39092323/3216568&quot;&gt;답변&lt;/a&gt;을 사용했는데 스위프트 4에서 작동하도록 수정했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NB: 일부 S/O 답변은 Swift 버전을 차별화하지 않으며, 때로는 상당히 근본적인 차이가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아이폰7 시뮬레이터와 아이패드 에어 시뮬레이터를 세로 방향으로 테스트해봤는데 제 앱에 잘 맞았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스위프트 4&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import XCTest
import Foundation

class Springboard {

let springboard = XCUIApplication(bundleIdentifier: &quot;com.apple.springboard&quot;)
let settings = XCUIApplication(bundleIdentifier: &quot;com.apple.Preferences&quot;)


/**
 Terminate and delete the app via springboard
 */
func deleteMyApp() {
    XCUIApplication().terminate()

    // Resolve the query for the springboard rather than launching it
    springboard.activate()

    // Rotate back to Portrait, just to ensure repeatability here
    XCUIDevice.shared.orientation = UIDeviceOrientation.portrait
    // Sleep to let the device finish its rotation animation, if it needed rotating
    sleep(2)

    // Force delete the app from the springboard
    // Handle iOS 11 iPad 'duplication' of icons (one nested under &quot;Home screen icons&quot; and the other nested under &quot;Multitasking Dock&quot;
    let icon = springboard.otherElements[&quot;Home screen icons&quot;].scrollViews.otherElements.icons[&quot;YourAppName&quot;]
    if icon.exists {
        let iconFrame = icon.frame
        let springboardFrame = springboard.frame
        icon.press(forDuration: 2.5)

        // Tap the little &quot;X&quot; button at approximately where it is. The X is not exposed directly
        springboard.coordinate(withNormalizedOffset: CGVector(dx: ((iconFrame.minX + 3) / springboardFrame.maxX), dy:((iconFrame.minY + 3) / springboardFrame.maxY))).tap()
        // Wait some time for the animation end
        Thread.sleep(forTimeInterval: 0.5)

        //springboard.alerts.buttons[&quot;Delete&quot;].firstMatch.tap()
        springboard.buttons[&quot;Delete&quot;].firstMatch.tap()

        // Press home once make the icons stop wiggling
        XCUIDevice.shared.press(.home)
        // Press home again to go to the first page of the springboard
        XCUIDevice.shared.press(.home)
        // Wait some time for the animation end
        Thread.sleep(forTimeInterval: 0.5)

        // Handle iOS 11 iPad 'duplication' of icons (one nested under &quot;Home screen icons&quot; and the other nested under &quot;Multitasking Dock&quot;
        let settingsIcon = springboard.otherElements[&quot;Home screen icons&quot;].scrollViews.otherElements.icons[&quot;Settings&quot;]
        if settingsIcon.exists {
            settingsIcon.tap()
            settings.tables.staticTexts[&quot;General&quot;].tap()
            settings.tables.staticTexts[&quot;Reset&quot;].tap()
            settings.tables.staticTexts[&quot;Reset Location &amp;amp; Privacy&quot;].tap()
            // Handle iOS 11 iPad difference in error button text
            if UIDevice.current.userInterfaceIdiom == .pad {
                settings.buttons[&quot;Reset&quot;].tap()
            }
            else {
                settings.buttons[&quot;Reset Warnings&quot;].tap()
            }
            settings.terminate()
        }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;@Chase Holland &lt;a href=&quot;https://stackoverflow.com/a/36168101/1082430&quot;&gt;답변&lt;/a&gt;을 사용하고 Settings 앱을 사용하여 Springboard 클래스를 동일한 방법으로 업데이트하여 내용과 설정을 재설정했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;권한 대화상자를 재설정해야 할 때 유용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import XCTest

class Springboard {
    static let springboard = XCUIApplication(privateWithPath: nil, bundleID: &quot;com.apple.springboard&quot;)
    static let settings = XCUIApplication(privateWithPath: nil, bundleID: &quot;com.apple.Preferences&quot;)

    /**
     Terminate and delete the app via springboard
     */
    class func deleteMyApp() {
        XCUIApplication().terminate()

        // Resolve the query for the springboard rather than launching it
        springboard.resolve()

        // Force delete the app from the springboard
        let icon = springboard.icons[&quot;MyAppName&quot;]
        if icon.exists {
            let iconFrame = icon.frame
            let springboardFrame = springboard.frame
            icon.pressForDuration(1.3)

            // Tap the little &quot;X&quot; button at approximately where it is. The X is not exposed directly
            springboard.coordinateWithNormalizedOffset(CGVectorMake((iconFrame.minX + 3) / springboardFrame.maxX, (iconFrame.minY + 3) / springboardFrame.maxY)).tap()

            springboard.alerts.buttons[&quot;Delete&quot;].tap()

            // Press home once make the icons stop wiggling
            XCUIDevice.sharedDevice().pressButton(.Home)
            // Press home again to go to the first page of the springboard
            XCUIDevice.sharedDevice().pressButton(.Home)
            // Wait some time for the animation end
            NSThread.sleepForTimeInterval(0.5)

            let settingsIcon = springboard.icons[&quot;Settings&quot;]
            if settingsIcon.exists {
                settingsIcon.tap()
                settings.tables.staticTexts[&quot;General&quot;].tap()
                settings.tables.staticTexts[&quot;Reset&quot;].tap()
                settings.tables.staticTexts[&quot;Reset Location &amp;amp; Privacy&quot;].tap()
                settings.buttons[&quot;Reset Warnings&quot;].tap()
                settings.terminate()
            }
        }
    }
}
&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;setUp&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tearDown&lt;/code&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;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;응용프로그램의 Xcode 프로젝트 선택&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테스트 대상을 선택합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;빌드 단계를 선택&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;+&quot; 및 &quot;새 스크립트 실행 단계&quot;를 누릅니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 자리 표시자를 교체합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;# Type a script or drag a script file from your workspace to insert its path.&lt;/code&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;xcrun simctl boot ${TARGET_DEVICE_IDENTIFIER}
xcrun simctl uninstall ${TARGET_DEVICE_IDENTIFIER} YOUR_APP_BUNDLE
&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;Xcode 11.4부터, 만일 당신이 원하는 것이 권한을 재설정하는 것이라면, 당신은 다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;resetAuthorizationStatus(for:)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;…을 예로 들어서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XCUIApplication&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, https://developer.apple.com/documentation/xctest/xcuiapplication/3526066-resetauthorizationstatusforresou 를 참조하십시오.&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;simctl&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필요한 경우 &lt;a href=&quot;https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_release_notes&quot; rel=&quot;noreferrer&quot;&gt;Xcode 11.4 Release Notes&lt;/a&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;simctl은 이제 개인 정보 보호 권한 수정을 지원합니다.&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;br&gt; &lt;code&gt;xcrun simctl privacy &amp;lt;device&amp;gt; grant photos com.example.app&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;br&gt; &lt;code&gt;xcrun simctl privacy &amp;lt;device&amp;gt; reset all com.example.app&lt;/code&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;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;iOS14용 워킹 솔루션&lt;/font&gt;&lt;/h3&gt; 
&lt;pre class=&quot;lang-swift prettyprint-override&quot;&gt;&lt;code&gt;final class Springboard {

    private static var springboardApp = XCUIApplication(bundleIdentifier: &quot;com.apple.springboard&quot;)

    class func deleteApp(name: String) {
        XCUIApplication().terminate()

        springboardApp.activate()

        sleep(1)

        let appIcon = springboardApp.icons.matching(identifier: name).firstMatch
        appIcon.press(forDuration: 1.3)

        sleep(1)

        springboardApp.buttons[&quot;Remove App&quot;].tap()

        let deleteButton = springboardApp.alerts.buttons[&quot;Delete App&quot;].firstMatch
        if deleteButton.waitForExistence(timeout: 5) {
            deleteButton.tap()
            springboardApp.alerts.buttons[&quot;Delete&quot;].tap()
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;iOS 11 sims an up의 경우 &quot;x&quot; 아이콘과 @Code Monkey가 제안한 수정 사항을 탭하는 곳을 약간 수정했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수정은 10.3과 11.2 폰 심 모두에서 잘 작동합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고로 swift 3를 사용하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;좀 더 쉽게 수정할 수 있는 코드를 복사해서 붙여넣어야겠다고 생각했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import XCTest

class Springboard {

    static let springboard = XCUIApplication(privateWithPath: nil, bundleID: &quot;com.apple.springboard&quot;)

    class func deleteMyApp() {
        XCUIApplication().terminate()

        // Resolve the query for the springboard rather than launching it
        springboard!.resolve()

        // Force delete the app from the springboard
        let icon = springboard!.icons[&quot;My Test App&quot;]
        if icon.exists {
            let iconFrame = icon.frame
            let springboardFrame = springboard!.frame
            icon.press(forDuration: 1.3)

            springboard!.coordinate(withNormalizedOffset: CGVector(dx: (iconFrame.minX + 3 * UIScreen.main.scale) / springboardFrame.maxX, dy: (iconFrame.minY + 3 * UIScreen.main.scale) / springboardFrame.maxY)).tap()

            springboard!.alerts.buttons[&quot;Delete&quot;].tap()
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;답변의 종류가 매우 다양하여 추가해야 할지조차 확신할 수 없지만, 누군가가 보편적인 해결책을 필요로 할 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;h1&gt;&lt;font papago-translate=&quot;translated&quot;&gt;iOS 14.6 및 15 베타&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;    class func deleteApp() {
    XCUIApplication().terminate()
    
    // Force delete the app from the springboard
    let icon = springboard.icons[&quot;APP_NAME&quot;]
    if icon.exists {
        icon.press(forDuration: 1.3)
        
        springboard.buttons[&quot;Remove App&quot;].tap()
        springboard.alerts.buttons[&quot;Delete App&quot;].tap()
        springboard.alerts.buttons[&quot;Delete&quot;].tap()
        
        // Press home once to make the icons stop wiggling
        XCUIDevice.shared.press(.home)
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 iOS 12.1 &amp;amp; 시뮬레이터에서 나에게 잘 맞는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class func deleteApp(appName: String) {
    XCUIApplication().terminate()

    // Force delete the app from the springboard
    let icon = springboard.icons[appName]
    if icon.exists {
        icon.press(forDuration: 2.0)

        icon.buttons[&quot;DeleteButton&quot;].tap()
        sleep(2)
        springboard.alerts[&quot;Delete “\(appName)”?&quot;].buttons[&quot;Delete&quot;].tap()
        sleep(2)

        XCUIDevice.shared.press(.home)
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;iOS 13.1/Swift 5.1&lt;/strong&gt; UI 기반 삭제&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;static let springboard = XCUIApplication(privateWithPath: nil, bundleID: &quot;com.apple.springboard&quot;)!

class func deleteApp() {
    XCUIApplication().terminate()
    XCUIDevice.shared.press(.home)
    XCUIDevice.shared.press(.home)

    let icon = springboard.icons[&quot;YourApplication&quot;]
    if !icon.exists { return }

    springboard.swipeLeft()
    springboard.activate()
    Thread.sleep(forTimeInterval: 1.0)

    icon.press(forDuration: 1.3)
    springboard.buttons[&quot;Rearrange Apps&quot;].eventuallyExists().tap()

    icon.buttons[&quot;DeleteButton&quot;].eventuallyExists().tap()
    springboard.alerts.buttons[&quot;Delete&quot;].eventuallyExists().tap()

    XCUIDevice.shared.press(.home)
    XCUIDevice.shared.press(.home)
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스위프트 4에 대한 크레이그 피셔의 답변 업데이트 중입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;iPad용으로 조경용으로 업데이트되었으며, 아마 남은 조경용으로만 작동할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가져오기 XCT 테스트&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;static let springboard = XCUIApplication(bundleIdentifier: &quot;com.apple.springboard&quot;)

class func deleteMyApp(name: String) {        
    // Force delete the app from the springboard
    let icon = springboard.icons[name]
    if icon.exists {
        let iconFrame = icon.frame
        let springboardFrame = springboard.frame
        icon.press(forDuration: 2.0)

        var portaitOffset = 0.0 as CGFloat
        if XCUIDevice.shared.orientation != .portrait {
            portaitOffset = iconFrame.size.width - 2 * 3 * UIScreen.main.scale
        }

        let coord = springboard.coordinate(withNormalizedOffset: CGVector(dx: (iconFrame.minX + portaitOffset + 3 * UIScreen.main.scale) / springboardFrame.maxX, dy: (iconFrame.minY + 3 * UIScreen.main.scale) / springboardFrame.maxY))
        coord.tap()

        let _ = springboard.alerts.buttons[&quot;Delete&quot;].waitForExistence(timeout: 5)
        springboard.alerts.buttons[&quot;Delete&quot;].tap()

        XCUIDevice.shared.press(.home)
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;앱 삭제 및 경고 재설정을 위한 위 답변의 목표 C 버전은 다음과 같습니다(iOS 11 및 12에서 테스트됨).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- (void)uninstallAppNamed:(NSString *)appName {

    [[[XCUIApplication alloc] init] terminate];

    XCUIApplication *springboard = [[XCUIApplication alloc] initWithBundleIdentifier:@&quot;com.apple.springboard&quot;];
    [springboard activate];
    XCUIElement *icon = springboard.otherElements[@&quot;Home screen icons&quot;].scrollViews.otherElements.icons[appName];

    if (icon.exists) {
        [icon pressForDuration:2.3];
        [icon.buttons[@&quot;DeleteButton&quot;] tap];
        sleep(2);
        [[springboard.alerts firstMatch].buttons[@&quot;Delete&quot;] tap];
        sleep(2);
        [[XCUIDevice sharedDevice] pressButton:XCUIDeviceButtonHome];
        sleep(2);
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;..&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- (void)resetWarnings {

    XCUIApplication *settings = [[XCUIApplication alloc] initWithBundleIdentifier:@&quot;com.apple.Preferences&quot;];
    [settings activate];
    sleep(2);
    [settings.tables.staticTexts[@&quot;General&quot;] tap];
    [settings.tables.staticTexts[@&quot;Reset&quot;] tap];
    [settings.tables.staticTexts[@&quot;Reset Location &amp;amp; Privacy&quot;] tap];

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        [settings.buttons[@&quot;Reset&quot;] tap];
    } else {
        [settings.buttons[@&quot;Reset Warnings&quot;] tap];
    }
    sleep(2);
    [settings terminate];
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 모든 OS 버전(iOS11, 12 및 13)에서 나에게 적합합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;static let springboard = XCUIApplication(bundleIdentifier: &quot;com.apple.springboard&quot;)

    func deleteApp() {
        XCUIApplication().terminate()
        springboard.activate()

        let icon = springboard.icons[appName]

        if icon.exists {
            icon.firstMatch.press(forDuration: 5)
            icon.buttons[&quot;DeleteButton&quot;].tap()

            let deleteConfirmation = springboard.alerts[&quot;Delete “\(appName)”?&quot;].buttons[&quot;Delete&quot;]
            XCTAssertTrue(deleteConfirmation.waitForExistence(timeout: 5), &quot;Delete confirmation not shown&quot;)
            deleteConfirmation.tap()
        }
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;몇 가지 실험 끝에 다양한 iOS 버전을 포함하는 보다 명확한 솔루션 구현을 마쳤습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import XCTest

private enum Constants {
  static let springboardBundleIdentifier = &quot;com.apple.springboard&quot;
  static let appIconName = &quot;Your App Name&quot;
  static let appIconPressShortDuration: TimeInterval = 2.0
  static let appIconPressLongDuration: TimeInterval = 3.0
  static let deleteAppButton = &quot;Delete App&quot;
  static let removeAppButton = &quot;Remove App&quot;
  static let deleteButton = &quot;Delete&quot;
  static let deleteButtonVectorOffset: CGFloat = 3.0
}

final class SpringboardManager {

  private static let springboard = XCUIApplication(bundleIdentifier: Constants.springboardBundleIdentifier)

  static func deleteApp(_ app: XCUIApplication) {
    if app.exists &amp;amp;&amp;amp; app.isHittable {
      XCUIDevice.shared.press(.home)
    }

    app.terminate()

    self.deleteAppIfNeeded(with: Constants.appIconName)
    sleep(1)
  }

  private static func deleteAppIfNeeded(with iconName: String) {
    let appIcon = self.springboard.icons[iconName]

    guard appIcon.exists else {
      return
    }

    appIcon.press(forDuration: Constants.appIconPressShortDuration)

    if let deleteListButton = self.deleteListButton() {
      deleteListButton.tap()
      self.pressDeleteAlertButtons()
    } else {
      appIcon.press(forDuration: Constants.appIconPressLongDuration)
      self.pressDeleteTopLeftButton(for: appIcon)
      self.pressDeleteAlertButtons()
    }
  }

}

private extension SpringboardManager {

  static func pressDeleteAlertButtons() {
    self.pressDeleteAlertButton(self.deleteAppAlertButton())
    self.pressDeleteAlertButton(self.deleteAlertButton())
  }

  static func pressDeleteAlertButton(_ button: XCUIElement?) {
    guard let button = button else {
      return
    }

    button.tap()
  }

  static func pressDeleteTopLeftButton(for appIcon: XCUIElement) {
    let iconFrame = appIcon.frame
    let springboardFrame = self.springboard.frame

    let deleteButtonVector = CGVector(
      dx: (iconFrame.minX + Constants.deleteButtonVectorOffset) / springboardFrame.maxX,
      dy: (iconFrame.minY + Constants.deleteButtonVectorOffset) / springboardFrame.maxY)

    let deleteButtonCoordinate = self.springboard.coordinate(withNormalizedOffset: deleteButtonVector)
    deleteButtonCoordinate.tap()
  }

}

private extension SpringboardManager {

  static func deleteListButton() -&amp;gt; XCUIElement? {
    sleep(1)
    
    let removeListButton = self.springboard.buttons[Constants.removeAppButton]
    let deleteListButton = self.springboard.buttons[Constants.deleteAppButton]

    if removeListButton.exists {
      return removeListButton
    } else if deleteListButton.exists {
      return deleteListButton
    }

    return nil
  }

  static func deleteAppAlertButton() -&amp;gt; XCUIElement? {
    sleep(1)

    let deleteAppButton = self.springboard.alerts.buttons[Constants.deleteAppButton]

    if deleteAppButton.exists {
      return deleteAppButton
    }

    return nil
  }

  static func deleteAlertButton() -&amp;gt; XCUIElement? {
    sleep(1)

    let deleteButton = self.springboard.alerts.buttons[Constants.deleteButton]

    if deleteButton.exists {
      return deleteButton
    }

    return nil
  }

}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/33107731/is-there-a-way-to-reset-the-app-between-tests-in-swift-xctest-ui&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Swift</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/1000</guid>
      <comments>https://manycodes.tistory.com/1000#entry1000comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:55:23 +0900</pubDate>
    </item>
    <item>
      <title>jquery는 Safari에서만 마진 문제 생성</title>
      <link>https://manycodes.tistory.com/999</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jquery는 Safari에서만 마진 문제 생성&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반응성이 뛰어난 카루프레셀을 사용하면 크롬과 파이어폭스에서는 매력적으로 작동하지만 사파리에서는 갑자기 상하 마진 800px를 만들어내며 모든 것을 벗어던지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반응이 좋은 사이트이며, 500px 이하의 화면에 대한 미디어 쿼리의 영향을 받으면 이상하게도 문제가 발생하지 않습니다.&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;http://109.203.120.0/~wirebird/wordpress/the-guitars/
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://www.wirebirdguitars.com/staging/guitars.html&quot; rel=&quot;nofollow&quot;&gt;static&lt;/a&gt; html &lt;a href=&quot;http://www.wirebirdguitars.com/staging/guitars.html&quot; rel=&quot;nofollow&quot;&gt;버전&lt;/a&gt;은 잘 작동하는데 워드프레스 문제인가요, 아니면 아직 true domain을 사용하지 않고 있는 것인가요?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래 카루프레셀 발사용 jquery:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery(document).ready(function() {

jQuery(&quot;#guitars-gallery&quot;).carouFredSel({
auto: false,
circular: false,
prev: '#prev',
next: '#next',
responsive : true,
height : 500,
scroll: 1,
items : { width : 370, height : 500, visible : { min : 1, max : 3 } } });   

});

function doSomething() {

jQuery('#guitars-gallery').trigger('destroy', true);
jQuery('#guitars-gallery').css({'text-align': '','float': '','position': '','top': '','right': '','bottom': '','left': '','width': '90%','height': '','margin': '1% auto'});

jQuery(&quot;#guitars-gallery&quot;).carouFredSel({
auto: false,
circular: false,
prev: '#prev',
next: '#next',
responsive : true,
height : 500,
scroll: 1,
items : { width : 370, height : 500, visible : { min : 1, max : 3 } } });

};

var resizeTimer;

jQuery(window).resize(function() {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(doSomething, 100);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 아이디어라도 환영합니다. 정말 미칠 것 같아요!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;업데이트: 저는 회전목마가 불려진 후 jquery를 사용하여 스타일링을 변경함으로써 이 문제를 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery('.caroufredsel_wrapper').css({'margin-top': '0px', 'margin-bottom': '0px'});
&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 항상 전화를 했었나요?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.caroufredsel_wrapper&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;와는 반대로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.wrapper&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/11175814/jquery-producing-margin-issues-in-safari-only&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Wordpress</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/999</guid>
      <comments>https://manycodes.tistory.com/999#entry999comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:55:05 +0900</pubDate>
    </item>
    <item>
      <title>Angularjs에서 문자열 보간 내에서 줄 바꿈을 얻는 방법</title>
      <link>https://manycodes.tistory.com/998</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Angularjs에서 문자열 보간 내에서 줄 바꿈을 얻는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 아주 간단한 일을 하려고 하는데 막혔어요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변수와 해당 변수 내에서 줄 바꿈을 설정하여 텍스트의 특정 부분이 새 줄로 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;title: string = &quot;My \n Title&quot;;
title: string = &quot;My\ Title&quot;;
title: string = &quot;My\
Title&quot;;
title: string = &quot;My&quot; + &quot;\n&quot; + &quot;Title&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;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;br/&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;효과가 없었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;업데이트:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 브라우저 HTML에 변수가 인쇄되고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;{{title}}&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 두 가지 버전이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h1&gt;&lt;font papago-translate=&quot;translated&quot;&gt;화이트 스페이스&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해결책 1...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML에서 새 줄을 존중하려면...(백틱 문자열과 함께 작동하거나)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'My \ntitle'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;...&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;document.getElementById('example').innerHTML = `My
title`;&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;h1 {
  white-space: pre;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;h1 id=&quot;example&quot;&amp;gt;

&amp;lt;/h1&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각도 버전:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;h1 style=&quot;white-space: pre;&quot;&amp;gt;{{title}}&amp;lt;/h1&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML Break&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두번째 해결책...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML을 사용하길 원하십니까...&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;document.getElementById('example').innerHTML = 'My&amp;lt;br /&amp;gt;title';&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;h1 id=&quot;example&quot;&amp;gt;

&amp;lt;/h1&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://docs.angularjs.org/api/ng/directive/ngBindHtml&quot; rel=&quot;noreferrer&quot;&gt;바인딩&lt;/a&gt; 중 &lt;a href=&quot;https://docs.angularjs.org/api/ng/directive/ngBindHtml&quot; rel=&quot;noreferrer&quot;&gt;HTML을 허용&lt;/a&gt;하려면 ng-bind-html을 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;html add 스타일의 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div style=&quot;white-space: pre-line&quot;&amp;gt;{{DialogText}} &amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;'\n'을 사용하여 타자기에 새 줄을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;this.DialogText = &quot;Hello&quot; + '\n' + &quot;World&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스택블리츠에서도 동일: https://stackblitz.com/edit/angular-rpoxr5linebreak&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;textarea&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신 요소&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;div&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원래 문자열의 형식을 유지합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이런 식으로 해봐요&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ng-bind-html=&quot;myMsg&quot;&amp;gt;&amp;lt;/div&amp;gt;

$scope.myMsg =  `Below is the result:  &amp;lt;br&amp;gt;Successful:1,  &amp;lt;br&amp;gt;Failed:2`  // Use backtick
&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;그러나 브라우저에서 이 내용을 표시하는 경우 \n은 didley를 의미합니다.&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;title: string = &quot;My&amp;lt;br&amp;gt;Title&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 리액트와 같은 화려한 프론트 엔드 도구를 사용한다면 안전하지 않은 HTML을 문자열로 처리해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;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/47678148/how-to-get-line-break-within-string-interpolation-in-angularjs&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>angularJS</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/998</guid>
      <comments>https://manycodes.tistory.com/998#entry998comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:54:58 +0900</pubDate>
    </item>
    <item>
      <title>서버 표준 시간대 값 'CEST'을(를) 인식할 수 없습니다.</title>
      <link>https://manycodes.tistory.com/997</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서버 표준 시간대 값 'CEST'을(를) 인식할 수 없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동면(Hibernate Maven 5.2.15)을 사용하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마지막으로 리눅스에서 lamp 환경에서 mysql 5.7을 가진 Mysql-connector Maven 8.0.9-rc).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 이탈리아(중앙유럽 여름 시간)에 있으며 3월 25일에 한 번 접속 db에서 follow error가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서버 표준 시간대 값 'CEST'가 인식되지 않거나 둘 이상의 표준 시간대를 나타냅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시간대 지원을 활용하려면 서버 또는 JDBC 드라이버(serverTimezone 구성 속성을 통해)를 구성하여 보다 구체적인 시간대 값을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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;SHOW GLOBAL VARIABLES LIKE 'time_zone';
SET GLOBAL time_zone='Europe/Rome'; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 그것은 지속되지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 다음에 추가했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;my.cnf&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일(/etc/mysql):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[mysqld] 
default-time-zone = 'Europe/Rome' 
&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;default_time_zone = 'Europe/Rome' 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 db서버가 아직 시작되지 않았습니다...&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오류가 발생하는 이유는 무엇입니까?&lt;/font&gt;&lt;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;@aiman의 답변은 정확하지 않습니다. 당신의 경우 유효 서버 시간대가 UTC가 &lt;strong&gt;아니기&lt;/strong&gt; 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인터넷에서 jdbc 연결 문자열에 추가 파라미터를 포함한 몇 가지 솔루션을 찾을 수 있지만, 이 문자열을 변경할 수 없는 경우가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 고친 방법은 이렇습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;먼저 시스템 시간대를 mysql로 가져옵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 에서 기본 mysql 서버 시간대를 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[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;/etc/mysql/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;code&gt;/etc/mysql/mysql.conf.d/mysqld.cnf&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최근 Debian/Ubuntu distros)에서 실제 서버 표준 시간대에 다음과 같이 입력할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;default_time_zone = Europe/Paris
&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 service mysql restart
&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;db에 접속할 때 문제가 있다면 이 &lt;a href=&quot;https://stackoverflow.com/a/7610174/2581587&quot;&gt;답변&lt;/a&gt;의 note에서 해결책을 찾았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연결 URL에서 다음을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String url = &quot;jdbc:mysql://localhost/mydb?serverTimezone=Europe/Rome&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 저에게 플라이웨이 및 유럽/암스테르담 시간대와 연결하는 데 도움이 되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;먼저 mysql 서버 시간대를 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;code&gt;mysql -e &quot;SELECT @@global.time_zone;&quot; -u &amp;lt;mysqluser&amp;gt; -p&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아마도 그럴 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SYSTEM&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시스템 시간대 찾기:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;date +”%Z&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CEST인지 확인해보세요.&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;#cd /usr/share/zoneinfo
#ls -l
#rm /etc/localtime
#ln -s /usr/share/zoneinfo/UTC /etc/localtime
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 mysql 서버를 다시 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/etc/init.d/mysqld restart&lt;/code&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;이것은 내 개발 기계에서 갑자기 나타났습니다 - MySQL을 다시 시작하는 것은 나를 위해 고쳐졌습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/49518683/the-server-time-zone-value-cest-is-unrecognized&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MySQL</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/997</guid>
      <comments>https://manycodes.tistory.com/997#entry997comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:54:51 +0900</pubDate>
    </item>
    <item>
      <title>Git의 변경 내용을 삭제할 수 없는 것 같습니다.</title>
      <link>https://manycodes.tistory.com/996</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Git의 변경 내용을 삭제할 수 없는 것 같습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;명령줄에서 다음을 확인한 후:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# On branch RB_3.0.10
# Changed but not updated:
#   (use &quot;git add &amp;lt;file&amp;gt;...&quot; to update what will be committed)
#   (use &quot;git checkout -- &amp;lt;file&amp;gt;...&quot; to discard changes in working directory)
#
#       modified:   index.htm
&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;git checkout -- index.htm
&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;저는 윈도우/싸이그윈에서 GIT 1.6.1.2를 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# On branch RB_3.0.10
# Changed but not updated:
#   (use &quot;git add &amp;lt;file&amp;gt;...&quot; to update what will be committed)
#   (use &quot;git checkout -- &amp;lt;file&amp;gt;...&quot; to discard changes in working directory)
#
#       modified:   index.htm
&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;이것이 Mac에서 정상적인 상태로 되돌리기 위해 수행한 작업입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Completely remove the autocrlf &amp;amp; safecrlf settings from ~/.gitconfig
Completely remove the autocrlf &amp;amp; safecrlf settings from your repo's local config ./.git/config
git rm --cached -r .
git reset --hard
&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;.git/config&lt;/code&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;[core]
    autocrlf = false
    safecrlf = false
    eol = crlf
&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;$ git checkout HEAD .&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 효과는 있습니다만&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$ git checkout -- .&lt;/code&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;* git 버전 1.9.3&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변경사항&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git diff&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일에 표시?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;윈도우에서 라인 엔딩으로 인해 이와 같은 문제가 발생하는 것을 본 적이와 같은 문제가 발생합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 경우에는 어떤 설정을 사용하는지 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git config core.autocrlf&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git config core.safecrlf&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. &lt;a href=&quot;https://git-scm.com/docs/git-config&quot; rel=&quot;noreferrer&quot;&gt;여기에 이러한&lt;/a&gt; 설정에 &lt;a href=&quot;https://git-scm.com/docs/git-config&quot; rel=&quot;noreferrer&quot;&gt;대한 설명서&lt;/a&gt;가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 당신이 사용하고 있다면, 저는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git svn&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전복과의 통합을 위해, 그리고 나서 반드시&lt;/font&gt;&lt;/font&gt;&lt;code&gt;autocrlf&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;checkout&lt;/code&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;git checkout&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,그리고 나서.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git status&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일이 여전히 수정된 상태임을 보여 줍니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git diff&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 파일의 모든 줄에서 파일이 수정된 것을 보여줍니다. 그러면 이 문제가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;핵심.자폐.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;true이면 파일 시스템에서 읽을 때 텍스트 파일의 줄 끝에 있는 CRLF를 LF로 git 변환하고 파일 시스템에 쓸 때는 반대로 변환합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변수를 입력으로 설정할 수 있습니다. 이 경우 변환은 파일 시스템에서 읽는 동안에만 수행되지만 파일은 줄 끝에 LF로 작성됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재, &quot;text&quot;를 고려할 경로(즉, autoclf mechanism의 적용을 받는)는 순수하게 내용에 기초하여 결정됩니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;core.safecrlf&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;true이면 CRLF를 core에서 제어하는 대로 변환하는지 git 체크합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;autoclf는 가역적입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Git는 명령어가 작업 트리의 파일을 직접 또는 간접적으로 수정하는지 확인합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 파일을 커밋한 후 동일한 파일을 체크아웃하면 작업 트리의 원본 파일이 생성됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Core의 현재 설정이 그렇지 않은 경우.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;autoclf, git은 파일을 거부할 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변수를 &quot;warn&quot;(경고)로 설정할 수 있습니다. 이 경우 git는 비가역적 변환에 대해서만 경고하고 작업은 계속합니다. ...&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;-f&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;man git-checkout&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, GIT-체크아웃(1):&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;-f, --force&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;인덱스 또는 작업 트리가 HEAD와 다를 경우에도 진행합니다.&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;strong&gt;이것은 지역의 변화를 버리기 위해&lt;/strong&gt; 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 현재 분기에서 변경 내용을 삭제하고 다른 분기로 전환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git checkout -f master
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;@1800-information에서 알 수 있듯이 줄 끝일 수도 있지만, 다른 가능성은 (체크아웃 명령으로 이러한 파일을 되돌리지 못하도록 하는) 차이점이 파일 모드 중 하나일 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이게 저한테 일어난 일입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 git 버전에서 당신은 다음을 사용하여 이것을 발견할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;git diff index.htm&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;그러나 -f 옵션을 사용하더라도 체크아웃을 사용하여 이를 되돌릴 수는 없습니다.&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;git config core.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일 모드 false&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 텍스트 편집기의 git.config를 다음을 추가하여 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;[핵심]&lt;/font&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;filemode = false
&lt;/code&gt;&lt;/pre&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;git reset HEAD index.htm&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일이 사라져야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(나는 어떻게 &lt;a href=&quot;https://stackoverflow.com/questions/1580596/how-do-i-make-git-ignore-mode-changes-chmod&quot;&gt;git ignore mode changes&lt;/a&gt; (&lt;a href=&quot;https://stackoverflow.com/questions/1580596/how-do-i-make-git-ignore-mode-changes-chmod&quot;&gt;chmod)&lt;/a&gt;를 &lt;a href=&quot;https://stackoverflow.com/questions/1580596/how-do-i-make-git-ignore-mode-changes-chmod&quot;&gt;변경&lt;/a&gt;할 수 &lt;a href=&quot;https://stackoverflow.com/questions/1580596/how-do-i-make-git-ignore-mode-changes-chmod&quot;&gt;있는지&lt;/a&gt;에 대한 답변에서 이 모든 것을 얻었습니다&lt;a href=&quot;https://stackoverflow.com/questions/1580596/how-do-i-make-git-ignore-mode-changes-chmod&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;업데이트 파일 &lt;a href=&quot;https://stackoverflow.com/questions/10516201/updating-file-permissions-only-in-git&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;제 문제는 여기서 비슷하고 방금 git가 파일 권한의 변경 사항을 추적하고 있다는 것을 알게 되었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;브랜치를 폐기하고 재설정하려고 했지만 파일이 그대로 있습니다. 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git config --get --local core.filemode&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 참이면 파일 권한 추적을 해제하려면 false로 설정해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git config --local core.fileMode false&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해결해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://medium.com/@tahteche/how-git-treats-changes-in-file-permissions-f71874ca239d&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;OSX와 Windows 중 어느 것을 사용하십니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇다면 문제는 아마 같은 이름의 두 개의 파일을 다른 경우에 가지고 있는 것일 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;index.htm 및 Index.htm&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;윈도우와 OSX는 기본적으로 대소문자를 구분하지 않는 파일 시스템을 사용하며, 이 파일 시스템은 대소문자를 구분하지 않는 깃과 충돌합니다.&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;git status&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 해당 dir의 모든 파일이 삭제된 것으로 표시되었는지 확인했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 다음엔 그냥 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git checkout -f&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 게 정상으로 돌아갔죠&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저도 같은 문제가 있었는데, 위의 댓글에서 아무 것도 통하지 않았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일 시스템은 대소문자를 구분하지 않으며(osx 기본값은 동일하지만 윈도우는 동일하게 동작함), 파일이 같은 디렉토리에 대문자와 소문자로 모두 존재하며 다른 내용을 가진 것으로 나타났습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 컴퓨터에서 두 이름이 같은 파일을 가리키기 때문에 git 상태는 제가 무엇을 하든 항상 수정되었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제 해결 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 컴퓨터에서 파일 중 하나를 제거하고 repo로 푸시해야 했습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로컬 버전 전체를 완전히 삭제합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;처음부터 복제를 하다&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 일을 하고 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;libGDX&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에 투사하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Android Studio&lt;/code&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;git checkout -b TRASH
git add .
git commit -m &quot;discarded changes&quot;
git checkout master
&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;TRASH&lt;/code&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;나는 다음과 같은 내용을 가진 .git 속성을 가지고 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;* text=auto eol=lf&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;.gitattributes&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;git reset --hard HEAD&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일을 되돌리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.gitattributes&lt;/code&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;git stash&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;뒤에 a.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git stash clear&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;.git/ 또는 ~/.git 항목에서 자동 cr/lf 구성을 찾을 수 없습니다.&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;회사에서 Visual Studio를 사용하는데 앱이 실행되는 동안 분기를 전환할 때 이러한 현상이 발생한다는 것을 알게 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;git checkout&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;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;안전 모드&lt;/strong&gt;로 들어갑니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일 삭제&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다시 시작하는 것은 힘든 일이지만 이것은 100가지를 시도하는 것보다 더 빨리 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쉬운 해결책이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 경우(보통 예기치 않은 창 종료 또는 메모리 덤프로 인해) 변경 사항을 삭제할 수 없고 분기 간 전환조차 할 수 없는 경우(Git에서 사용자에게 권한이 충분하지 않다고 표시함),&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Windows&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;환경&lt;/font&gt;&lt;/font&gt;&lt;code&gt;show all hidden files and folders&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;GIT 디렉토리로 이동합니다(처음부터 시작).)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.git&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;) 및 삭제합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;index.lock&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일. 그럼 깃은 당신이 하고 싶은 대로 하게 해줘야겠네요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;디렉토리와 관련된 변경사항을 삭제할 수 없는 경우(예: git diff를 실행하면 다음과 같이 표시됩니다).&lt;/font&gt;&lt;/font&gt;&lt;code&gt; -Subproject commit fdcccccccccccccccccccccccccccccccccccccc +Subproject commit f1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb&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 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;git checkout master&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저 안에&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것이 저에게 잘 맞았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 이것은 여기서 질문한 정확한 시나리오에 도움이 되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;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;git status update
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Windows에서 권한 문제가 발생하여 다음 작업을 수행해야 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;icacls containingFolder /reset /t /l /c&lt;/code&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;이 문제는 Netlifify CMS를 통해 업로드되고 Netlify Large Media 핸들러가 다르게 제공하는 Git-LFS 이미지를 다운로드하는 조합을 생각해 냈습니다.&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;~/.gitconfig&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아래와 같이 보이게 한 다음에 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git status&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다시.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# [filter &quot;lfs&quot;]
#   clean = git-lfs clean %f
#   smudge = git-lfs smudge %f
#   required = true
&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;.gitconfig&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;repo root에서 lfs에 대한 필터 규칙을 덮어씁니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 친구에게 도움이 되기를 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 답변 중 많은 부분이 많은 문제 중 하나에 대한 문제를 해결합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 문제가 된 것을 찾을 때까지 몇 가지 시도를 해봐야 할 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 믹스에 저만의 경험을 더하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저의 경우, 문제는 제가 세계적인&lt;/font&gt;&lt;/font&gt;&lt;code&gt;~/.gitattributes&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나의 파일에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;~/.gitconfig&lt;/code&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;*.bat&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;need be&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-text eol=crlf&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;text eol=crlf&lt;/code&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;core.autocrlf=false&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구성.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제는 거기에 제가 추가했다는 겁니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;* text eol=lf&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.gitattibutes&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일, 그리고 모든 기존 파일에서 CRLF를 LF로 변환하지 않고 repo에 커밋했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 이 파일들은 다른 repo의 새로운 클론에서도 수정된 것으로 표시됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 조금 이상합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git status&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;git 작업 디렉토리와 스테이지 영역 모두에서 동일한 CRLF를 갖더라도 파일이 &lt;strong&gt;수정&lt;/strong&gt;되었다고 보고합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;수정&lt;/strong&gt;된 내용은 파일이 추가되고 커밋되면 현재 구성에 따라 비어 있지 않은 변경 사항이 있을 것으로 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;/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;git add&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 파일과 커밋(커밋에 CRLF-&amp;gt;LF의 변환이 포함되어 있음을 확인)하여 수정된 파일 보고서를 더 이상 받지 못했습니다.&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;가끔 나는 n&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Windows&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;먼저 Visual Studio를 닫거나 파일을 실행하거나 쓰기 위해 열려 있는 모든 프로그램을 닫아야 합니다.&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;.txt&lt;/code&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;*.txt       eol=crlf
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.git 속성 파일에서 문제가 해결되었습니다.&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;git status&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 일반 텍스트 파일이 아닌 파일이라도 LF/CRLF 스왑으로 인한 파일의 변경 사항을 보여줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해결하기 위해 나는 이 파일들을 .git 속성 파일에 이진으로 표시했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt; &amp;lt;path_to_problematic_files&amp;gt; binary&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저도 비슷한 문제에 직면했고 다음 단계가 도움이 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git commit -am 'temp commit'
git pull origin master
git reset head~1
git reset head --hard
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 사람들에게도 도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/1575682/cant-seem-to-discard-changes-in-git&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Git</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/996</guid>
      <comments>https://manycodes.tistory.com/996#entry996comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:54:45 +0900</pubDate>
    </item>
    <item>
      <title>변수 또는 매크로 할당을 열에서 클랜 형식으로 정렬할 수 있습니까?</title>
      <link>https://manycodes.tistory.com/995</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;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int someInteger             = 42;
std::string someString      = &quot;string&quot;;
const unsigned someUnsigned = 42;

#define SOME_INTEGER        42
#define SOME_STRING_LITERAL &quot;string&quot;
#define SOME_CONSTANT       42

enum Enum {
    ONE   = 1,
    TWO   = 2,
    THREE = 3,
    FOUR  = 4,
    FIVE  = 5,
    SIX   = 6,
    SEVEN = 7
};
&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;int someInteger = 42;
const unsigned someUnsigned = 42;
std::string someString = &quot;string&quot;;

#define SOME_INTEGER 42
#define SOME_STRING_LITERAL &quot;string&quot;
#define SOME_CONSTANT 42

enum Enum {
    ONE = 1,
    TWO = 2,
    THREE = 3,
    FOUR = 4,
    FIVE = 5,
    SIX = 6,
    SEVEN = 7
};
&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;3.7은 이와 같은 것을 지원하는 것 같습니다(아직 테스트하지 않았습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://clang.llvm.org/docs/ClangFormatStyleOptions.html&quot; rel=&quot;noreferrer&quot;&gt;문서에서&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연속된 할당 정렬(부울)&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참이면 연속 할당을 정렬합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 연속된 선의 할당 연산자가 정렬됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 코드가 aaaa = 12, int b = 23, int ccc = 23, endcode와 같은 형식이 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(sic)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Clang-format에는 이 작업을 수행할 수 있는 옵션이 없습니다.&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;// clang-format off&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;// clang-format on&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;평.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;3.7을 지원하는 ClangFormat-Xcode의 지사인 https://github.com/mattga/ClangFormat-Xcode/tree/clang_3.7 을 이용하여 테스트해 보았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;옵션으로 원하는 대로 = 9999를 포맷할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연속 할당 정렬 = true&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 그러나 정의가 일치하지 않았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그들을 정렬할 표시가 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매크로의 경우: clang 10이 해제되면 다음을 추가하여 이 작업을 수행할 수 있을 것으로 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AlignConsecutiveMacros: true&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신에게&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.clang-format&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://reviews.llvm.org/D28462&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://reviews.llvm.org/D28462&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;AlignConsecutiveMacros: trueref&lt;a href=&quot;https://clang.llvm.org/docs/ClangFormatStyleOptions.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;:&lt;/a&gt;https://clang.llvm.org/docs/ClangFormatStyleOptions.html support llvm version: &amp;gt;= 10.0&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/27111078/can-clang-format-align-variable-or-macro-assignments-in-columns&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/995</guid>
      <comments>https://manycodes.tistory.com/995#entry995comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:54:36 +0900</pubDate>
    </item>
    <item>
      <title>strerror_r은 어떤 사이즈를 허용해야 합니까?</title>
      <link>https://manycodes.tistory.com/994</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;strerror_r은 어떤 사이즈를 허용해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;OpenGroup POSIX.1-2001은 &lt;a href=&quot;http://refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/baselib-strerror-r.html&quot; rel=&quot;noreferrer&quot;&gt;Linux Standard Base Core Specification 3.1&lt;/a&gt;과 마찬가지로 &lt;a href=&quot;http://www.opengroup.org/onlinepubs/000095399/functions/strerror.html&quot; rel=&quot;noreferrer&quot;&gt;strerror_r&lt;/a&gt;을 정의합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 오류 메시지에 대해 합리적으로 예상할 수 있는 최대 크기에 대한 참조를 찾을 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드에 넣을 수 있는 정의를 기대했지만 찾을 수 있는 정의가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;코드는 스레드 세이프여야 합니다.&lt;/em&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇기 때문에 strererror_r이 사용되고 strererror는 사용되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 사용할 수 있는 기호를 아는 사람이 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나만의 것을 만들어야 할까요?&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;int result = gethostname(p_buffy, size_buffy);
int errsv = errno;
if (result &amp;lt; 0)
{
    char buf[256];
    char const * str = strerror_r(errsv, buf, 256);
    syslog(LOG_ERR,
             &quot;gethostname failed; errno=%d(%s), buf='%s'&quot;,
             errsv,
             str,
             p_buffy);
     return errsv;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문서에서:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오픈 그룹 베이스 사양 6호:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오류&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;strererror_r() 함수는 다음과 같은 경우 실패할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;[ERANGE]&lt;/strong&gt; strerrbuff 및 buflen을 통해 생성된 메시지 문자열을 포함할 수 있는 저장소가 부족합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/blockquote&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;glibc-2.7/glibc-2.7/ 문자열/ strerror.c:41:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    char *
    strerror (errnum)
         int errnum;
    {
        ...
        buf = malloc (1024);
&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;전체 오류 메시지를 꼭 받아야 한다면 gnu &lt;a href=&quot;http://linux.die.net/man/3/strerror_r&quot; rel=&quot;noreferrer&quot;&gt;버전의 strererror_r을 사용&lt;/a&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;errno.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;string.h&amp;gt;

/* Call strerror_r and get the full error message. Allocate memory for the
 * entire string with malloc. Return string. Caller must free string.
 * If malloc fails, return NULL.
 */
char *all_strerror(int n)
{
    char *s;
    size_t size;

    size = 1024;
    s = malloc(size);
    if (s == NULL)
        return NULL;

    while (strerror_r(n, s, size) == -1 &amp;amp;&amp;amp; errno == ERANGE) {
        size *= 2;
        s = realloc(s, size);
        if (s == NULL)
            return NULL;
    }

    return s;
}

int main(int argc, char **argv)
{
    for (int i = 1; i &amp;lt; argc; ++i) {
        int n = atoi(argv[i]);
        char *s = all_strerror(n);
        printf(&quot;[%d]: %s\n&quot;, n, s);
        free(s);
    }

    return 0;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 그것에 대해 걱정하지 않을 것입니다. 버퍼 사이즈 256은 충분하고도 1024는 오버킬입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strerror()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strerror_r()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그리고 선택적으로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strdup()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오류 문자열을 저장해야 할 경우의 결과입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 이건 안전하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;꼭 사용해야 할 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strerror_r()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strerror()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나사산의 안전을 위해서, 256의 사이즈를 사용하세요. 인&lt;/font&gt;&lt;/font&gt;&lt;code&gt;glibc-2.7&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 가장 긴 오류 메시지 문자열은 50자(&quot;잘못되거나 불완전한 멀티바이트 또는 와이드 문자&quot;)입니다.&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;a href=&quot;http://coliru.stacked-crooked.com/a/673ba48e81aa49b3&quot; rel=&quot;nofollow noreferrer&quot;&gt;온라인(여기&lt;/a&gt;서는 C&lt;a href=&quot;http://coliru.stacked-crooked.com/a/673ba48e81aa49b3&quot; rel=&quot;nofollow noreferrer&quot;&gt;++&lt;/a&gt;로 실행):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;errno.h&amp;gt;
#include &amp;lt;string.h&amp;gt;

int main(){
        const int limit = 5;
        int unknowns = 0;
        int maxlen = 0;
        int i=0; char* s = strerror(i);
        while(1){
            if (maxlen&amp;lt;strlen(s)) maxlen = strlen(s);
            if (/*BEGINS WITH &quot;Unknown &quot;*/ 0==strncmp(&quot;Unknown &quot;, s , sizeof(&quot;Unknown &quot;)-1) )
                unknowns++;
            printf(&quot;%.3d\t%s\n&quot;, i, s);
            i++; s=strerror(i);
            if ( limit == unknowns ) break;
        }
        printf(&quot;Max: %d\n&quot;, maxlen);
        return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 시스템의 모든 오류를 나열하고 인쇄하며 최대 길이를 추적합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보기에 길이는 &lt;strong&gt;49자&lt;/strong&gt;를 넘지 않습니다(순수).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strlen&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의 결승전이 없는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;\0&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;) 따라서 어느 정도 여유가 있다면 64–100 정도면 충분합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구조물 반송만으로 버퍼 사이즈 협상 전체를 피할 수 없는 것인지, 구조물 반송을 하지 않는 근본적인 이유가 있는지 궁금했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 벤치마킹을 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#define _POSIX_C_SOURCE 200112L //or else the GNU version of strerror_r gets used
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;errno.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;string.h&amp;gt;

typedef struct { char data[64]; } error_str_t;
error_str_t strerror_reent(int errn) __attribute__((const));
error_str_t strerror_reent(int errn){
    error_str_t ret;
    strerror_r(errn, ret.data, sizeof(ret));
    return ret;
}


int main(int argc, char** argv){
    int reps = atoi(argv[1]);
    char buf[64];
    volatile int errn = 1;
    for(int i=0; i&amp;lt;reps; i++){
#ifdef VAL
        error_str_t err = strerror_reent(errn);
#else
        strerror_r(errn, buf, 64);
#endif
    }
    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 -O2에서 두 가지 성능 차이는 최소입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;gcc -O2 : The VAL version is slower by about 5%
g++ -O2 -x c++ : The VAL version is faster by about 1% than the standard version compiled as C++ and by about 4% faster than the standard version compiled as C (surprisingly, even the slower C++ version beats the faster C version by about 3%).
&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;strerror&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스레드가 안전하지 않을 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반환된 문자열은 문자열 리터럴에 대한 포인터여야 합니다. (깨달아주세요. 하지만 런타임에 합성해야 하는 경우는 생각나지 않습니다.)&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 문자열 리터럴은 정의상 읽기 전용이며 읽기 전용 데이터에 대한 액세스는 항상 스레드 안전합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아직 아무도 확실한 답을 주지 않아서 이 부분을 더 알아봤는데 그 일에 더 좋은 기능이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;perror(3)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 아마도 이 오류를 어딘가에 표시하고 싶을 것이기 때문에, 요구 사항에 따라 사용하지 않는 한 이 오류를 사용하는 것이는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/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;strerror_r(3)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 이 두 기능은 POSIX 표준에 부합하고 널리 사용할 수 있으므로 제 눈에는 이 문제에 대한 권위 있는 진리의 원천입니다.&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://code.woboq.org/userspace/glibc/stdio-common/perror.c.html#perror_internal&quot; rel=&quot;nofollow noreferrer&quot;&gt;glibc 구현에서 발췌&lt;/a&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;static void
perror_internal (FILE *fp, const char *s, int errnum)
{
  char buf[1024];
  const char *colon;
  const char *errstring;
  if (s == NULL || *s == '\0')
    s = colon = &quot;&quot;;
  else
    colon = &quot;: &quot;;
  errstring = __strerror_r (errnum, buf, sizeof buf);
  (void) __fxprintf (fp, &quot;%s%s%s\n&quot;, s, colon, errstring);
}
&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;1024&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;촤스&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/423248/what-size-should-i-allow-for-strerror-r&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/994</guid>
      <comments>https://manycodes.tistory.com/994#entry994comment</comments>
      <pubDate>Thu, 2 Nov 2023 21:54:30 +0900</pubDate>
    </item>
    <item>
      <title>정의되지 않은 동작은 얼마나 정의되지 않습니까?</title>
      <link>https://manycodes.tistory.com/993</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;em papago-id=&quot;1-1&quot;&gt;정도&lt;/em&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;#include &amp;lt;stdio.h&amp;gt;

int main()
{
    int v = 0;
    scanf(&quot;%d&quot;, &amp;amp;v);
    if (v != 0)
    {
        int *p;
        *p = v;  // Oops
    }
    return v;
}
&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;em papago-id=&quot;3-1&quot;&gt;경우&lt;/em&gt;에만 정의되지 않습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;v&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;0이 아님 또는 다음과 같은 경우에도 정의되지 않음&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;v&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;0까입니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 0과 다른 숫자를 삽입하는 경우에만 동작이 정의되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;결국, 불쾌 코드 섹션이 실제로 실행되지 않으면 UB에 대한 조건이 충족되지 않습니다(즉, 초기화되지 않은 포인터는 생성되지도 않고 참조되지도 않음).&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;이에 대한 힌트는 3.4.3의 표준에서 찾을 수 있습니다.&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;/blockquote&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 만약 그러한 &quot;오류 데이터&quot;가 정확했다면, 행동이 완벽하게 정의되었을 것이라는 것을 암시하는 것 같습니다. 이것은 우리의 경우에 거의 적용 가능한 것처럼 보입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&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;사용자가 제공한 데이터에 대해 광범위한 검사를 수행하지 않고 추가를 수행하는 모든 프로그램은 이러한 종류의 정의되지 않은 동작의 대상이 됩니다. 그러나 추가는 사용자가 특정 데이터를 제공하는 경우에만 UB가 됩니다.&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;a class=&quot;post-tag&quot; href=&quot;/questions/tagged/language-lawyer&quot; papago-id=&quot;11-1&quot; rel=&quot;tag&quot; title=&quot;'언어-lawyer' 태그가 붙은 질문을 보여줍니다.&quot; papago-attr-id=&quot;1&quot;&gt;언어-변호사&lt;/a&gt; 태그가 있기 때문에, 프로그램의 동작은 사용자 입력에 관계없이 정의되지 않지만, 사용자가 예상할 수 있는 이유로 정의되지 않는다는 극단적으로 비판하는 주장이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;v==0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구현에 따라 달라질 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;main&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;~하듯이&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int main()
{
    /* ... */
}
&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;C995.1.2.2.1 주 &lt;strong papago-id=&quot;15-1&quot;&gt;기능&lt;/strong&gt;은 다음 중 하나로 정의되어야 한다고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int main(void) { /* ... */ }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 로서&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int main(int argc, char *argv[]) { /* ... */ }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 이와 동등한 방법, 또는 다른 구현 정의 방식.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;int main()&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;int main(void)&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;main&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 고정되어 있지만 지정되지 않은 수의 인수와 유형을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 후자는 인수를 사용하지 않는다고 말합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 점은 재귀적인 호출이&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;main(42);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용하는 경우 제약 조건 위반입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int main(void)&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;int main()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;int main() {
    if (0) main(42); /* not a constraint violation */
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;br&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int main(void) {
    if (0) main(42); /* constraint violation, requires a diagnostic */
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동치가 아닙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 수락하는 구현 &lt;em papago-id=&quot;27-1&quot;&gt;문서&lt;/em&gt;가 있는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int main()&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;em papago-id=&quot;28-1&quot;&gt;해당 구현에 적용&lt;/em&gt;되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 (모두가 동의하지 않는) &lt;em papago-id=&quot;16-1&quot;&gt;극도&lt;/em&gt;의 트집 잡기 포인트이며, 선언함으로써 쉽게 피할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int main(void)&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 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;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;int main()&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 papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의도한 질문에 답하기&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;v==0&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;v!=0&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특별히 특이한 점은 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 왜 이것이 아직도 정의되지 않았다고 생각하는지에 대한 논거를 제시하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫째, 일부 컴파일러에 대한 경험을 바탕으로 이것이 &quot;대부분 정의된&quot; 것이라고 말하는 응답자들은 틀렸습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예제를 약간 수정하면 다음을 설명하는 데 도움이 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

int
main()
{
    int v;
    scanf(&quot;%d&quot;, &amp;amp;v);
    if (v != 0)
    {
        printf(&quot;Hello\n&quot;);
        int *p;
        *p = v;  // Oops
    }
    return v;
}
&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;&quot;1&quot;을 입력으로 제공하면 이 프로그램은 어떤 역할을 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;Hello를 인쇄한 다음 충돌합니다&quot;라고 대답하면 틀립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;정의되지 않은 동작&quot;은 특정 문장의 동작이 정의되지 않음을 의미하는 것이 아니라, 전체 &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;v&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;0이 아니며 단순히 다음을 포함하여 괄호로 표시된 코드를 전혀 방출하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;printf&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 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;GCC는 이 분석을 정확하게 수행하지는 않지만 매우 유사한 분석을 수행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로 포인트를 실제로 보여주는 제가 가장 좋아하는 예는:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int test(int x) { return x+1 &amp;gt; x; }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력할 작은 테스트 프로그램을 작성해 봅니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;INT_MAX&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;INT_MAX+1&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;test(INT_MAX)&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적인 구현을 통해&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;INT_MAX&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; 2147483647,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;INT_MAX+1&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; -2147483648,-&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;test(INT_MAX)&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;1이 될 것입니다.&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;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실, GCC는 상수 1을 반환하기 위해 이 함수를 컴파일합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 왜일까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;정수 오버플로는 정의되지 않은 동작이기 때문에 컴파일러는 당신이 그렇게 하고 있지 않다고 가정할 수 있고, 따라서 x는 같을 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;INT_MAX&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,그러므로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x+1&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;x&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;, 따라서 이 함수는 무조건 1을 반환할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정의되지 않은 행동은 자신과 동일하지 않은 변수, 양수보다 큰 음수(위의 예 참조) 및 기타 기이한 행동을 초래할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러가 영리할수록 기이한 행동을 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;알겠습니다, 질문하신 정확한 질문에 답하기 위해 표준의 장과 절을 인용할 수 없음을 인정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 &quot;그래, 하지만 실제로는 NULL이 seg fault를 줄 뿐이야&quot;라고 말하는 사람들은 상상할 수 있는 것보다 더 잘못되었고, 모든 컴파일러 세대에서 더 잘못되고 있습니다.&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;em papago-id=&quot;56-1&quot;&gt;호출해서&lt;/em&gt;는 안 &lt;em papago-id=&quot;56-1&quot;&gt;됩니다&lt;/em&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 당신의 질문에 대한 제 대답입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;v가 0이면 랜덤 포인터 할당이 실행되지 않으며 함수가 0을 반환하므로 정의되지 않은 동작이 아닙니다.&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수(특히 명시적 포인터)를 선언하면 메모리 조각이 할당됩니다(보통 int).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기억의 평화는 다음과 같이 표시되고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;free&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;시스템에 저장된 이전 값이 지워지지 않았습니다. (이것은 컴파일러가 구현하는 메모리 할당에 따라 달라지며, 그 자리를 0으로 채울 수도 있습니다.) 그래서 당신은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int *p&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로 해석해야 하는 임의의 값(junk)을 가질 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;integer&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그 결과는 기억 속의 장소입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;p&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(p's pointee) 를 가리킵니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 하려고 할 때&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dereference&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(일명 이 메모리 부분에 액세스), 다른 프로세스/프로그램이 거의 매번 사용하므로 다른 메모리를 변경/modify하려고 하면 결과적으로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;access violation&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 의한 쟁점들&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;memory manager&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 이 예에서, 0과 같은 다른 값은 정의되지 않은 동작을 초래할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 왜냐하면 아무도 무엇을 알지 못하기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;*p&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 순간을 가리킬 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 설명이 도움이 되기를 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;70-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;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력이 0이면 내부의 코드가&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행되지 않으므로 동작이 정의되었는지 여부는 프로그램의 나머지 부분에 따라 결정됩니다(이 경우 정의됨).&lt;/font&gt;&lt;/font&gt;&lt;/font&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;입력이 0이 아닌 경우, 우리 모두가 정의되지 않은 동작의 경우라는 것을 알고 있는 코드를 실행합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 전체 프로그램을 정의하지 못하게 만든다고 말할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정의되지 않은 행동의 핵심은 &lt;strong papago-id=&quot;75-1&quot;&gt;정의&lt;/strong&gt;되지 않았다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러는 그 문장을 보고 싶은 대로 할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 모든 컴파일러가 예상대로 처리하겠지만, 이와 무관한 부분을 변경하는 것을 포함하여 원하는 것은 무엇이든 할 수 있는 모든 권리가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 컴파일러가 정의되지 않은 동작을 감지할 경우 &quot;이 프로그램은 위험할 수 있습니다&quot;라는 메시지를 프로그램에 추가하도록 선택할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 출력이 변경됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;v&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;0 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 프로그램은 아주 잘 정의되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;v == 0이면 0을 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;v!=0이면 메모리의 임의의 지점에 튄다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;p는 포인터이며 초기값은 무엇이든 될 수 있습니다. 초기화를 하지 않기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 값은 운영 체제(프로세스에 제공하기 전에 메모리가 0인 경우도 있고 그렇지 않은 경우도 있습니다), 컴파일러, 하드웨어 및 프로그램을 실행하기 전에 메모리에 무엇이 있는지에 따라 달라집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포인터 할당은 임의의 메모리 위치에 쓰는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;성공할 수도 있고, 다른 데이터를 손상시킬 수도 있고, 고장일 수도 있습니다. 위의 모든 요소에 따라 달라집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C에 관한 한, 초기화되지 않은 변수들은 알려진 값을 갖지 않는다는 것은 꽤 잘 정의되어 있으며, 당신의 프로그램은 (컴파일될 수는 있지만) 정확하지 않을 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/7961067/how-undefined-is-undefined-behavior&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/993</guid>
      <comments>https://manycodes.tistory.com/993#entry993comment</comments>
      <pubDate>Sat, 28 Oct 2023 08:05:02 +0900</pubDate>
    </item>
    <item>
      <title>역대 상위 5개국에 대한 지난 7일간의 총 합계 집계</title>
      <link>https://manycodes.tistory.com/992</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;역대 상위 5개국에 대한 지난 7일간의 총 합계 집계&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;events&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; id |    date    | country |  event | count
--------------------------------------------- 
 1  | 2018-03-16 |   RS    | views  | 33577
 2  | 2018-03-21 |   US    | plays  | 232712
 3  | 2018-03-14 |   AR    | clicks | 469159
 4  | 2018-03-18 |   US    | plays  | 415732
 5  | 2018-03-26 |   US    | views  | 442159
 6  | 2018-03-22 |   BA    | plays  | 181610
 7  | 2018-03-21 |   UK    | plays  | 57899
 8  | 2018-03-17 |   CZ    | views  | 64605
 9  | 2018-03-17 |   BA    | plays  | 375444
 10 | 2018-03-22 |   US    | plays  | 148073
 11 | 2018-03-23 |   BA    | views  | 181644
 12 | 2018-03-22 |   CZ    | clicks | 411953
 13 | 2018-03-15 |   AR    | views  | 329597
 14 | 2018-03-18 |   BA    | clicks | 480834
 15 | 2018-03-17 |   CZ    | plays  | 279060
 16 | 2018-03-19 |   MN    | views  | 611975
 17 | 2018-03-26 |   MN    | clicks | 227115
 18 | 2018-03-24 |   BA    | plays  | 176248
 19 | 2018-03-14 |   UK    | views  | 288072
 20 | 2018-03-18 |   UK    | plays  | 598980
&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;나는 역대 상위 5개국의 마지막 7일간의 종목별 합계를 얻어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 다음을 수행하는 쿼리가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT
    `c`.`country`,
    `event`,
    SUM(`count`) AS `total`
FROM
    `eem_events` `a`
INNER JOIN(
    SELECT
        `country`
    FROM
        `eem_events` `b`
    GROUP BY
        `country`
    ORDER BY
        SUM(`count`)
    DESC
LIMIT 5
) AS `c`
WHERE
    `date` &amp;gt; DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY
    `c`.`country`,
    `event`
&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; country | event  | count 
-----------------------------
   AR    | views  | 43084323
   AR    | plays  | 46487773
   AR    | clicks | 44581794
   BA    | views  | 43084323
   BA    | plays  | 46487773
   BA    | clicks | 44581794
   DE    | views  | 43084323
   DE    | plays  | 46487773
   DE    | clicks | 44581794
   MN    | views  | 43084323
   MN    | plays  | 46487773
   MN    | clicks | 44581794
   UK    | views  | 43084323
   UK    | plays  | 46487773
   UK    | clicks | 44581794 
&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; country |   views   |   plays   |  clicks   
-----------------------------------------------
   AR    | 43084323  | 46487773  | 44581794
   BA    | 43084323  | 46487773  | 44581794
   DE    | 43084323  | 46487773  | 44581794
   MN    | 43084323  | 46487773  | 44581794
   UK    | 43084323  | 46487773  | 44581794 
&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;저는 지금 12시간 동안 이것을 하려고 노력하고 있고 더 이상 생각이 없습니다.&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;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL / MariaDB를 사용하고 있습니다.&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;SUM()&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT
    `c`.`country`,
    SUM(CASE WHEN event = 'views'  THEN `count` ELSE 0 END) AS `views`,
    SUM(CASE WHEN event = 'plays'  THEN `count` ELSE 0 END) AS `plays`,
    SUM(CASE WHEN event = 'clicks' THEN `count` ELSE 0 END) AS `clicks`
FROM
    `eem_events` `a`
INNER JOIN(
    SELECT    `country`
    FROM      `eem_events` `b`
    GROUP BY  `country`
    ORDER BY   SUM(`count`) DESC
    LIMIT 5
) AS `c`
  ON `a`.`country` = `c`.`country`
WHERE
    `date` &amp;gt; DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY
    `c`.`country`
&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/49520028/get-total-count-of-last-seven-days-for-top-5-countries-of-all-time&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>mariadb</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/992</guid>
      <comments>https://manycodes.tistory.com/992#entry992comment</comments>
      <pubDate>Sat, 28 Oct 2023 08:04:54 +0900</pubDate>
    </item>
    <item>
      <title>제약 조건 레이아웃을 다른 제약 조건 레이아웃에 포함하고 각 제약 조건 간에 제약 조건을 설정하는 방법</title>
      <link>https://manycodes.tistory.com/991</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;constraintLyout v 1.0.1을 사용하고 있습니다.&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;글로벌 레이아웃(자체가 제약 레이아웃)의 일부에 해당하는 서브 제약 레이아웃을 xml에 포함하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 서브 파트를 다른 곳에서 사용하기 위해 레이아웃을 두 xmls로 분할했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 시도해 보았지만 하위 제약 조건 레이아웃을 상위 항목에 어디에 배치할지 제어할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 모든 것을 같은 xml 파일에 넣어야 하는지 아니면 그것들이 각각의 파일을 사용하는 해결책인지 궁금합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;tmp_1.xml&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;android.support.constraint.ConstraintLayout
    xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    android:orientation=&quot;vertical&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    &amp;gt;
    &amp;lt;TextView
        android:id=&quot;@+id/label&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;LABEL1&quot;
        app:layout_constraintStart_toStartOf=&quot;parent&quot;
        app:layout_constraintEnd_toEndOf=&quot;parent&quot;
        app:layout_constraintTop_toTopOf=&quot;parent&quot;
        android:layout_marginTop=&quot;16dp&quot;
        /&amp;gt;
    &amp;lt;TextView
        android:id=&quot;@+id/label_2&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;LABEL2&quot;
        app:layout_constraintStart_toStartOf=&quot;@id/label&quot;
        app:layout_constraintEnd_toEndOf=&quot;@id/label&quot;
        app:layout_constraintTop_toBottomOf=&quot;@id/label&quot;
        android:layout_marginTop=&quot;16dp&quot;
        /&amp;gt;

    &amp;lt;include layout=&quot;@layout/tmp_2&quot; /&amp;gt;
&amp;lt;/android.support.constraint.ConstraintLayout&amp;gt;
&lt;/code&gt;&lt;/pre&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;tmp_2.xml&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;android.support.constraint.ConstraintLayout
    xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    android:orientation=&quot;vertical&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    &amp;gt;
    &amp;lt;TextView
        android:id=&quot;@+id/view_80&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;80th element&quot;
        app:layout_constraintStart_toStartOf=&quot;parent&quot;
        app:layout_constraintTop_toTopOf=&quot;parent&quot;
        android:layout_marginTop=&quot;10dp&quot;
        android:layout_marginStart=&quot;12dp&quot;
        /&amp;gt;
&amp;lt;/android.support.constraint.ConstraintLayout&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과는 이렇습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wfmjH.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wfmjH.png&quot; alt=&quot;Actual result&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 나는 이것이 되기를 원합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LCS3H.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LCS3H.png&quot; alt=&quot;Expected result&quot;&gt;&lt;/a&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;&amp;lt;include 
    app:layout_constraintTop_toBottomOf=&quot;@id/label_2&quot;
    layout=&quot;@layout/tmp_2&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로 해결책을 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android Studio는 포함 태그의 레이아웃 매개변수를 자동으로 완료하지는 않지만 크기를 포함하는 한 레이아웃 매개변수는 영향을 미칩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;include
        layout=&quot;@layout/tmp_2&quot;
        android:layout_width=&quot;0dp&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_marginTop=&quot;10dp&quot;
        app:layout_constraintStart_toStartOf=&quot;parent&quot;
        app:layout_constraintEnd_toEndOf=&quot;parent&quot;
        app:layout_constraintTop_toBottomOf=&quot;@+id/label_2&quot;
        /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 제약 레이아웃을 포함하고 필요에 따라 제약하려면 다음과 같이 포함된 레이아웃에 너비와 높이를 부여해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;include
        android:id=&quot;@+id/shop_card_layout&quot;
        layout=&quot;@layout/shop_card_one&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_width=&quot;300dp&quot;
        android:layout_marginTop=&quot;8dp&quot;
        app:layout_constraintStart_toStartOf=&quot;@id/heading_tv&quot;
        app:layout_constraintTop_toBottomOf=&quot;@+id/heading_tv&quot; /&amp;gt;
&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;ConstraintLayout&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포함 항목의 제약 조건.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 난.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;include/&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&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;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;android.support.constraint.ConstraintLayout
    xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;&amp;gt;

    &amp;lt;include
        android:id=&quot;@+id/toolbarLayout&quot;
        layout=&quot;@layout/layout_toolbar&quot; /&amp;gt;

    &amp;lt;TextView
        android:id=&quot;@+id/textView2&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_marginBottom=&quot;8dp&quot;
        android:layout_marginEnd=&quot;8dp&quot;
        android:layout_marginStart=&quot;8dp&quot;
        android:layout_marginTop=&quot;8dp&quot;
        android:text=&quot;CONTENTS&quot;
        app:layout_constraintBottom_toBottomOf=&quot;@+id/footerLayout&quot;
        app:layout_constraintEnd_toEndOf=&quot;@+id/footerLayout&quot;
        app:layout_constraintStart_toStartOf=&quot;@+id/footerLayout&quot;
        app:layout_constraintTop_toTopOf=&quot;@+id/footerLayout&quot; /&amp;gt;

    &amp;lt;include
        android:id=&quot;@+id/footerLayout&quot;
        layout=&quot;@layout/layout_footer&quot; /&amp;gt;

&amp;lt;/android.support.constraint.ConstraintLayout&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;툴바 레이아웃 파일:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;android.support.constraint.ConstraintLayout
    xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;&amp;gt;

    &amp;lt;android.support.v7.widget.Toolbar
        android:id=&quot;@+id/toolbar&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:background=&quot;@color/colorPrimary&quot;
        android:minHeight=&quot;?attr/actionBarSize&quot;
        app:layout_constraintRight_toRightOf=&quot;parent&quot;
        app:layout_constraintStart_toStartOf=&quot;parent&quot;
        android:theme=&quot;@style/ThemeOverlay.AppCompat.Dark.ActionBar&quot;
        app:popupTheme=&quot;@style/ThemeOverlay.AppCompat.Light&quot;&amp;gt;

        &amp;lt;TextView
            android:id=&quot;@+id/toolbarTitleTextView&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:layout_gravity=&quot;center&quot;
            android:text=&quot;@string/hidden&quot;
            android:textColor=&quot;@android:color/white&quot;
            tools:layout_editor_absoluteX=&quot;192dp&quot;
            tools:layout_editor_absoluteY=&quot;19dp&quot; /&amp;gt;

    &amp;lt;/android.support.v7.widget.Toolbar&amp;gt;
&amp;lt;/android.support.constraint.ConstraintLayout&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 제약 조건 레이아웃을 다른 제약 조건 레이아웃에 포함하여 각 제약 조건 레이아웃에 하나의 제약 조건 레이아웃을 더 사용하려면...&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;android.support.constraint.ConstraintLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
xmlns:tools=&quot;http://schemas.android.com/tools&quot;
android:layout_width=&quot;match_parent&quot;
android:layout_height=&quot;match_parent&quot;
android:background=&quot;@drawable/new_landing_bg&quot;
tools:context=&quot;.activity.DesignTestActivity&quot;&amp;gt;

&amp;lt;android.support.constraint.ConstraintLayout
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:layout_marginStart=&quot;16dp&quot;
    android:layout_marginEnd=&quot;16dp&quot;
    android:layout_marginBottom=&quot;8dp&quot;
    app:layout_constraintBottom_toBottomOf=&quot;parent&quot;
    app:layout_constraintEnd_toEndOf=&quot;parent&quot;
    app:layout_constraintStart_toStartOf=&quot;parent&quot;&amp;gt;

    &amp;lt;include layout=&quot;@layout/common_footer_layout&quot; /&amp;gt;

&amp;lt;/android.support.constraint.ConstraintLayout&amp;gt;
&lt;/code&gt;&lt;/pre&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;이것은 제 xml 레이아웃에 대한 작업입니다.&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;strong papago-id=&quot;18-1&quot;&gt;레이아웃&lt;/strong&gt; &lt;strong papago-id=&quot;18-3&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;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;저는 도구 모음 입면을 0dp로 설정하고 탭 뷰 아래에 보기 파일을 추가하여 탭 뷰와 도구 모음이 하나의 단위로 보이도록 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;&amp;gt;

    &amp;lt;com.google.android.material.tabs.TabLayout
        android:id=&quot;@+id/tabs_container&quot;
        style=&quot;@style/tab_layout_style&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        app:layout_constraintTop_toTopOf=&quot;parent&quot;
        app:tabGravity=&quot;fill&quot;
        app:tabIndicatorFullWidth=&quot;false&quot;
        app:tabMode=&quot;scrollable&quot;
        app:tabSelectedTextColor=&quot;@color/text_black_app&quot;
        app:tabTextColor=&quot;@color/txt_gray_contact_lbl&quot; /&amp;gt;

    &amp;lt;LinearLayout
        android:id=&quot;@+id/layout_elevation_view&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        app:layout_constraintTop_toBottomOf=&quot;@+id/tabs_container&quot;&amp;gt;

        &amp;lt;include layout=&quot;@layout/gray_view_for_elevation&quot; /&amp;gt;
    &amp;lt;/LinearLayout&amp;gt;

    &amp;lt;androidx.viewpager2.widget.ViewPager2
        android:id=&quot;@+id/pager&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;0dp&quot;
        app:layout_constraintBottom_toBottomOf=&quot;parent&quot;
        app:layout_constraintHeight_percent=&quot;100&quot;
        app:layout_constraintTop_toBottomOf=&quot;@+id/layout_elevation_view&quot; /&amp;gt;

&amp;lt;/androidx.constraintlayout.widget.ConstraintLayout&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드는 선형 레이아웃에 대한 코드입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;LinearLayout
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:background=&quot;@color/colorWhite&quot;
    android:orientation=&quot;vertical&quot;&amp;gt;

    &amp;lt;com.google.android.material.tabs.TabLayout
        style=&quot;@style/tab_layout_style&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:elevation=&quot;@dimen/dp_4&quot;
        app:tabGravity=&quot;fill&quot;
        app:tabIndicatorFullWidth=&quot;false&quot;
        app:tabMode=&quot;scrollable&quot;/&amp;gt;

    &amp;lt;include
        android:id=&quot;@+id/layout_elevation_view&quot;
        layout=&quot;@layout/gray_view_for_elevation&quot; /&amp;gt;

    &amp;lt;androidx.viewpager2.widget.ViewPager2
        android:id=&quot;@+id/view_pager&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;match_parent&quot;
        android:background=&quot;@color/background_gray&quot; /&amp;gt;

&amp;lt;/LinearLayout&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 입면 뷰 파일&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
android:id=&quot;@+id/linear_layout&quot;
android:layout_width=&quot;match_parent&quot;
android:layout_height=&quot;wrap_content&quot;
android:orientation=&quot;vertical&quot;&amp;gt;

&amp;lt;View
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;@dimen/dp_1&quot;
    android:background=&quot;#80bbbbbb&quot; /&amp;gt;

&amp;lt;View
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;@dimen/dp_1&quot;
    android:background=&quot;#60bbbbbb&quot; /&amp;gt;

&amp;lt;View
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;@dimen/dp_1&quot;
    android:background=&quot;#50bbbbbb&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/43676415/how-to-include-constraint-layout-to-another-constraint-layout-and-set-constraint&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>XML</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/991</guid>
      <comments>https://manycodes.tistory.com/991#entry991comment</comments>
      <pubDate>Sat, 28 Oct 2023 08:04:47 +0900</pubDate>
    </item>
    <item>
      <title>bootstrap.properties가 spring-cloud-starter-config에서 무시되는 이유는 무엇입니까?</title>
      <link>https://manycodes.tistory.com/990</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;bootstrap.properties가 spring-cloud-starter-config에서 무시되는 이유는 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&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;world-service&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;config-service&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;/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;아키텍처:&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;config-service&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의지하여&lt;/font&gt;&lt;/font&gt;&lt;code&gt;spring-cloud-config-server&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;localhost:8888&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;world-service&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;spring-web&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;spring-cloud-starter-config&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;/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;수행한 작업:&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Config Server를 설정하고 GET 요청을 다음으로 보냅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;http://localhost:8888/hello-service/master&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 config 서버는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;hello-service.properties&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;a href=&quot;https://github.com/kidfrom/learn-spring-cloud-config&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-1&quot;&gt;config-repo 저장소&lt;/a&gt;에서. (필요한 경우)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;config-service&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스 코드, 이 &lt;a href=&quot;https://github.com/kidfrom/learn-spring-cloud&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-1&quot;&gt;저장소&lt;/a&gt;로 푸시하겠습니다.)&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 예상한 결과: The&lt;/font&gt;&lt;/font&gt;&lt;code&gt;world-service&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포트 8081을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 실제 결과: 더&lt;/font&gt;&lt;/font&gt;&lt;code&gt;world-service&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포트 8080을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩.속성&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;spring.application.name=world-service
spring.cloud.config.uri=http://localhost:8888
&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;pom.xml&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
    xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&amp;gt;
    &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
    &amp;lt;parent&amp;gt;
        &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
        &amp;lt;artifactId&amp;gt;spring-boot-starter-parent&amp;lt;/artifactId&amp;gt;
        &amp;lt;version&amp;gt;2.4.0&amp;lt;/version&amp;gt;
        &amp;lt;relativePath/&amp;gt; &amp;lt;!-- lookup parent from repository --&amp;gt;
    &amp;lt;/parent&amp;gt;
    &amp;lt;groupId&amp;gt;com.example&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;world-service&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;0.0.1-SNAPSHOT&amp;lt;/version&amp;gt;
    &amp;lt;name&amp;gt;world-service&amp;lt;/name&amp;gt;
    &amp;lt;description&amp;gt;Demo project for Spring Boot&amp;lt;/description&amp;gt;

    &amp;lt;properties&amp;gt;
        &amp;lt;java.version&amp;gt;11&amp;lt;/java.version&amp;gt;
        &amp;lt;spring-cloud.version&amp;gt;2020.0.0-M5&amp;lt;/spring-cloud.version&amp;gt;
    &amp;lt;/properties&amp;gt;

    &amp;lt;dependencies&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;spring-boot-starter-web&amp;lt;/artifactId&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.springframework.cloud&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;spring-cloud-starter-config&amp;lt;/artifactId&amp;gt;
        &amp;lt;/dependency&amp;gt;

        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;spring-boot-starter-test&amp;lt;/artifactId&amp;gt;
            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
        &amp;lt;/dependency&amp;gt;
    &amp;lt;/dependencies&amp;gt;

    &amp;lt;dependencyManagement&amp;gt;
        &amp;lt;dependencies&amp;gt;
            &amp;lt;dependency&amp;gt;
                &amp;lt;groupId&amp;gt;org.springframework.cloud&amp;lt;/groupId&amp;gt;
                &amp;lt;artifactId&amp;gt;spring-cloud-dependencies&amp;lt;/artifactId&amp;gt;
                &amp;lt;version&amp;gt;${spring-cloud.version}&amp;lt;/version&amp;gt;
                &amp;lt;type&amp;gt;pom&amp;lt;/type&amp;gt;
                &amp;lt;scope&amp;gt;import&amp;lt;/scope&amp;gt;
            &amp;lt;/dependency&amp;gt;
        &amp;lt;/dependencies&amp;gt;
    &amp;lt;/dependencyManagement&amp;gt;

    &amp;lt;build&amp;gt;
        &amp;lt;plugins&amp;gt;
            &amp;lt;plugin&amp;gt;
                &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
                &amp;lt;artifactId&amp;gt;spring-boot-maven-plugin&amp;lt;/artifactId&amp;gt;
            &amp;lt;/plugin&amp;gt;
        &amp;lt;/plugins&amp;gt;
    &amp;lt;/build&amp;gt;

    &amp;lt;repositories&amp;gt;
        &amp;lt;repository&amp;gt;
            &amp;lt;id&amp;gt;spring-milestones&amp;lt;/id&amp;gt;
            &amp;lt;name&amp;gt;Spring Milestones&amp;lt;/name&amp;gt;
            &amp;lt;url&amp;gt;https://repo.spring.io/milestone&amp;lt;/url&amp;gt;
        &amp;lt;/repository&amp;gt;
    &amp;lt;/repositories&amp;gt;

&amp;lt;/project&amp;gt;
&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;Spring Cloud 2020을 통해 부트스트랩의 작동 방식에 변화가 생겼기 때문에 다음과 같은 새로운 시동장치를 추가해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;spring-cloud-starter-bootstrap&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 그것에 하루를 보냈고 마침내 해결책을 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사람들에게 도움이 될 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 종속성을 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.springframework.cloud&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;spring-cloud-starter-bootstrap&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://spring.io/blog/2020/10/07/spring-cloud-2020-0-0-m4-aka-ilford-is-available&quot; rel=&quot;noreferrer&quot; papago-id=&quot;25-1&quot;&gt;Spring Cloud 2020.0&lt;/a&gt;에 따르면&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;spring-cloud-commons에서 제공하는 부트스트랩은 기본적으로 더 이상 사용할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트에 필요한 경우 속성을 사용하거나 새 시동기를 사용하여 다시 활성화할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;spring.cloud 속성을 설정하여 다시 활성화합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;bootstrap.enabled=true 또는 spring.config.use-legacy-processing=true.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이들은 환경 변수, 자바 시스템 속성 또는 명령줄 인수로 설정해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 옵션은 새 스프링-클라우드-스타터-부트스트랩(POM 파일에)을 포함하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 첫 번째 옵션을 사용했고 그것이 저에게 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring Boot 2.4는 spring.config.import 속성을 통해 구성 데이터를 가져올 수 있는 새로운 방법을 도입했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 Config Server에 바인딩하는 기본 방법입니다.&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;config server에 연결하려면 application.yml에서 다음을 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스프링:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;응용프로그램:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름 : APPLICATION_NAME&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가져오기: 옵션:configserver:http://USER:PASSWARD@MY_HOST:PORT/&lt;/font&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 https://docs.spring.io/spring-cloud-config/docs/3.0.0/reference/html/ &lt;a href=&quot;https://docs.spring.io/spring-cloud-config/docs/3.0.0/reference/html/#config-data-import&quot; rel=&quot;noreferrer&quot; papago-id=&quot;32-1&quot;&gt;#config-data-import&lt;/a&gt;에서 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/65063402/why-bootstrap-properties-is-ignored-by-spring-cloud-starter-config&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>spring-boot</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/990</guid>
      <comments>https://manycodes.tistory.com/990#entry990comment</comments>
      <pubDate>Sat, 28 Oct 2023 08:04:36 +0900</pubDate>
    </item>
    <item>
      <title>Python's Pandas의 데이터 프레임에서 Matplotlib 산점도 만들기</title>
      <link>https://manycodes.tistory.com/989</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python's Pandas의 데이터 프레임에서 Matplotlib 산점도 만들기&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;matplotlib&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;pandas&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;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 데이터 프레임이 있는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df&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;import matplotlib.pylab as plt
# df is a DataFrame: fetch col1 and col2 
# and drop na rows if any of the columns are NA
mydata = df[[&quot;col1&quot;, &quot;col2&quot;]].dropna(how=&quot;any&quot;)
# Now plot with matplotlib
vals = mydata.values
plt.scatter(vals[:, 0], vals[:, 1])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플롯하기 전에 모든 것을 배열로 변환할 때의 문제점은 데이터 프레임에서 벗어나도록 강요한다는 것입니다.&lt;/font&gt;&lt;/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;ol&gt; 
 &lt;li&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;col3&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;scatter&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;col1,col2&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;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;/p&gt; &lt;pre&gt;&lt;code&gt;mydata = df.dropna(how=&quot;any&quot;, subset=[&quot;col1&quot;, &quot;col2&quot;])
# plot a scatter of col1 by col2, with sizes according to col3
scatter(mydata([&quot;col1&quot;, &quot;col2&quot;]), s=mydata[&quot;col3&quot;])
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마찬가지로, 일부 열의 값에 따라 각 점을 필터링하거나 색을 다르게 칠하려고 한다고 가정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 특정 컷오프를 충족하는 점의 레이블을 자동으로 표시하려는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;col1, col2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(라벨이 df의 다른 열에 저장되어 있는) 이들과 나란히 있거나, 사람들이 R의 데이터 프레임을 사용하는 것처럼 이 점들을 다르게 색칠합니다.&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;mydata = df.dropna(how=&quot;any&quot;, subset=[&quot;col1&quot;, &quot;col2&quot;]) 
myscatter = scatter(mydata[[&quot;col1&quot;, &quot;col2&quot;]], s=1)
# Plot in red, with smaller size, all the points that 
# have a col2 value greater than 0.5
myscatter.replot(mydata[&quot;col2&quot;] &amp;gt; 0.5, color=&quot;red&quot;, s=0.5)
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 어떻게 행해지는가?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;승무원 앨범에 대한 답변 &lt;strong papago-id=&quot;16-0&quot;&gt;편집&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 조건을 그림으로 표시하는 것이 가장 좋은 방법이라고 합니다(예:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;subset_a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;subset_b&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 class=&quot;papago-parent&quot;&gt;산점을 4종류 이상의 점으로 분할하여 각각 다른 모양/색상으로 표시하는 등 여러 조건이 있는 경우에는 어떻게 해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 조건 a, b, c 등을 우아하게 적용하고 마지막 단계로 &quot;나머지&quot;(이 조건들 중 어떤 것에도 없는 것들)를 플롯할 수 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그림을 그리는 예제에서도 마찬가지로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;col1,col2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기준을 달리하여&lt;/font&gt;&lt;/font&gt;&lt;code&gt;col3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 만약 NA 값들이 사이의 연관성을 깨는 것이 있다면 어떻게 할 것인가요?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;col1,col2,col3&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;col2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 가치관에 근거한 가치관&lt;/font&gt;&lt;/font&gt;&lt;code&gt;col3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값들, 그러나 일부 행들은 둘 중 하나에 NA 값을 갖습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;col1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;col3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 강제로 사용하기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dropna&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;mydata = df.dropna(how=&quot;any&quot;, subset=[&quot;col1&quot;, &quot;col2&quot;, &quot;col3&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용하여 플롯을 구성할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mydata&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보여주는 것처럼 -- 사이의 산점도를 표시합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;col1,col2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값을 사용하여&lt;/font&gt;&lt;/font&gt;&lt;code&gt;col3&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;mydata&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;col1,col2&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; NA는만 NA에 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;col3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 아직도 계획이 짜여져 있어야 합니다&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 기본적으로 데이터의 &quot;나머지&quot;, 즉 필터링된 집합에 &lt;em papago-id=&quot;35-1&quot;&gt;없는&lt;/em&gt; 점을 어떻게 플롯하시겠습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mydata&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&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;DataFrame&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;numpy 배열로 추출하는 대신 아래 예제와 같이 직접 matplotlib에 적용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df = pd.DataFrame(np.random.randn(10,2), columns=['col1','col2'])
df['col3'] = np.arange(len(df))**2 * 100 + 100

In [5]: df
Out[5]: 
       col1      col2  col3
0 -1.000075 -0.759910   100
1  0.510382  0.972615   200
2  1.872067 -0.731010   500
3  0.131612  1.075142  1000
4  1.497820  0.237024  1700
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;39&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;plt.scatter(df.col1, df.col2, s=df.col3)
# OR (with pandas 0.13 and up)
df.plot(kind='scatter', x='col1', y='col2', s=df.col3)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/FA5KP.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;40&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;colors = np.where(df.col3 &amp;gt; 300, 'r', 'k')
plt.scatter(df.col1, df.col2, s=120, c=colors)
# OR (with pandas 0.13 and up)
df.plot(kind='scatter', x='col1', y='col2', s=120, c=colors)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/rghSv.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;범례가 있는 산점도&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 전설을 가지고 산점도를 만드는 가장 쉬운 방법은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;plt.scatter&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 포인트 유형별로 한 번씩.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cond = df.col3 &amp;gt; 300
subset_a = df[cond].dropna()
subset_b = df[~cond].dropna()
plt.scatter(subset_a.col1, subset_a.col2, s=120, c='b', label='col3 &amp;gt; 300')
plt.scatter(subset_b.col1, subset_b.col2, s=60, c='r', label='col3 &amp;lt;= 300') 
plt.legend()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/tlibK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;h3&gt;&lt;em papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;갱신하다&lt;/font&gt;&lt;/em&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 알기로는 매트플롯리브는 NA x/y 좌표 또는 NA 스타일 설정(예: 색상/크기)으로 포인트를 건너뛸 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NA로 인해 건너뛴 점을 찾으려면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;isnull&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;법:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;df[df.col3.isnull()]&lt;/code&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;점 목록을 여러 유형으로 분할하려면 벡터화된 if-then-else 구현이며 선택적인 기본값을 사용하는 &lt;a href=&quot;http://docs.scipy.org/doc/numpy/reference/generated/numpy.select.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;47-1&quot;&gt;numpy&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;df['subset'] = np.select([df.col3 &amp;lt; 150, df.col3 &amp;lt; 400, df.col3 &amp;lt; 600],
                         [0, 1, 2], -1)
for color, label in zip('bgrm', [0, 1, 2, -1]):
    subset = df[df.subset == label]
    plt.scatter(subset.col1, subset.col2, s=120, c=color, label=str(label))
plt.legend()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/CtA9s.png&quot; alt=&quot;enter image description here&quot;&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;a href=&quot;https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.plot.scatter.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;48-1&quot;&gt;방법&lt;/a&gt;이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 사용하면, 그것은 아주 쉽습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df = pd.DataFrame(np.random.randn(10,2), columns=['col1','col2'])
df['col3'] = np.arange(len(df))**2 * 100 + 100
df.plot.scatter('col1', 'col2', df['col3'])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OUHpS.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OUHpS.png&quot; alt=&quot;plotting sizes in col3 to col1-col2&quot;&gt;&lt;/a&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;seaborn&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용가능&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;seaborn scatterplot&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3열을 다음과 같이 정의합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;hue&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;size&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업 코드:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import pandas as pd
import seaborn as sns
import numpy as np

#creating sample data 
sample_data={'col_name_1':np.random.rand(20),
      'col_name_2': np.random.rand(20),'col_name_3': np.arange(20)*100}
df= pd.DataFrame(sample_data)
sns.scatterplot(x=&quot;col_name_1&quot;, y=&quot;col_name_2&quot;, data=df, hue=&quot;col_name_3&quot;,size=&quot;col_name_3&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cl1LP.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cl1LP.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/14300137/making-matplotlib-scatter-plots-from-dataframes-in-pythons-pandas&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>DataFrame</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/989</guid>
      <comments>https://manycodes.tistory.com/989#entry989comment</comments>
      <pubDate>Sat, 28 Oct 2023 08:04:28 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 내부 조인 별칭</title>
      <link>https://manycodes.tistory.com/988</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;내부 조인과 별칭 값을 서로 덮어쓰지 않도록 어떻게 하면 되는지 아는 사람?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 코드를 보면 더 분명해 보일 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    SELECT  home, away, g.network, g.date_start 
    FROM    game g
    INNER JOIN team t ON (
        (t.importid = g.home) as home
        OR
        (t.importid = g.away) as away
    )
    ORDER BY date_start DESC 
    LIMIT 7
&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-0&quot;&gt;SOLVED&lt;/strong&gt; (아래 도움말이 완료된 후 최종 쿼리입니다)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    SELECT 
        home.market AS home_market, 
        away.market AS away_market, 
        g.network, 
        g.date_start

    FROM game AS g
    INNER JOIN team AS home ON (
        home.importid = g.home
    )
    INNER JOIN team AS away ON (
        away.importid = g.away
    )

    ORDER BY g.date_start DESC 
    LIMIT 7
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번 가입해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT home.*, away.*, g.network, g.date_start 
FROM game AS g
INNER JOIN team AS home
  ON home.importid = g.home
INNER JOIN team AS away
  ON away.importid = g.away
ORDER BY g.date_start DESC 
LIMIT 7
&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;SELECT  t.importid, 
        case 
            when t.importid = g.home 
            then 'home' 
            else 'away' 
        end as join_condition, 
        g.network, 
        g.date_start 
FROM    game g
INNER JOIN team t ON (t.importid = g.home OR t.importid = g.away)
ORDER BY date_start DESC 
LIMIT 7
&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;URL : https://stackoverflow.com/questions/10724324/mysql-inner-join-alias&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MySQL</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/988</guid>
      <comments>https://manycodes.tistory.com/988#entry988comment</comments>
      <pubDate>Sat, 28 Oct 2023 08:04:18 +0900</pubDate>
    </item>
    <item>
      <title>파일 트랙터 테스트 케이스 다운로드</title>
      <link>https://manycodes.tistory.com/987</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 트랙터 테스트 케이스 다운로드&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 어떤 종류의 파일이든 다운로드 할 수 있도록 트랙터 테스트 케이스를 작성하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li 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;/li&gt; 
 &lt;li papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1단계: Download Link(다운로드 링크) 클릭&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2단계: 파일 다운로드 여부 확인&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일이 올바르게 다운로드되었는지 여부를 확인하려면 어떻게 해야 합니까?&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;ol&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;다음 구성 설정을 따릅니다. https://stackoverflow.com/a/26127745/511069&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만들기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;function waitFileExists(fileAbsPath)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일이 완전히 다운로드 된 후에 기대하는 작업을 수행합니다. https://stackoverflow.com/a/27031924/511069&lt;/font&gt;&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;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/27193378/download-a-file-protractor-test-case&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>angularJS</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/987</guid>
      <comments>https://manycodes.tistory.com/987#entry987comment</comments>
      <pubDate>Sat, 28 Oct 2023 08:04:11 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트로 날짜 범위를 순환하기</title>
      <link>https://manycodes.tistory.com/986</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;Date()&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;for(loopDate = startDate; loopDate &amp;lt; endDate; loopDate += 1)
{

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 종류의 고리가 작동할까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 루프 카운터에 하루를 추가하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사합니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요한 경우 날짜를 다음 달로 롤오버하고 밀리초를 낭비하지 않는 방법으로 하루를 추가하는 방법이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일광 절약도 문제가 되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var now = new Date();
var daysOfYear = [];
for (var d = new Date(2012, 0, 1); d &amp;lt;= now; d.setDate(d.getDate() + 1)) {
    daysOfYear.push(new Date(d));
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em&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;new Date(d)&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;d&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;/em&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;톰 귈렌의 대답을 토대로.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var start = new Date(&quot;02/05/2013&quot;);
var end = new Date(&quot;02/10/2013&quot;);


var loop = new Date(start);
while(loop &amp;lt;= end){
   alert(loop);           

   var newDate = loop.setDate(loop.getDate() + 1);
   loop = new Date(newDate);
}
&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;a href=&quot;https://momentjs.com/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-1&quot;&gt;Moment.js&lt;/a&gt;를 사용할 수 있다면 더 간단한 답을 찾은 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;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;// cycle through last five days, today included
// you could also cycle through any dates you want, mostly for
// making this snippet not time aware
const currentMoment = moment().subtract(4, 'days');
const endMoment = moment().add(1, 'days');
while (currentMoment.isBefore(endMoment, 'day')) {
  console.log(`Loop at ${currentMoment.format('YYYY-MM-DD')}`);
  currentMoment.add(1, 'days');
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://cdn.jsdelivr.net/npm/moment@2/moment.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p 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&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 from = new Date(2012,0,1);
var to = new Date(2012,1,20);
    
// loop for every day
for (var day = from; day &amp;lt;= to; day.setDate(day.getDate() + 1)) {
   // your day is here
   console.log(day)
}&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;startDate 및 endDate가 실제로 날짜 개체인 경우 1970년 1월 1일 자정 이후 밀리초 단위로 변환할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var startTime = startDate.getTime(), endTime = endDate.getTime();
&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;86400000(1000*60*60*24)까지의 시간 - 하루 중 밀리초 수:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for(loopTime = startTime; loopTime &amp;lt; endTime; loopTime += 86400000)
{
    var loopDay=new Date(loopTime)
    //use loopDay as you wish
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;var start = new Date(&quot;2014-05-01&quot;); //yyyy-mm-dd
var end = new Date(&quot;2014-05-05&quot;); //yyyy-mm-dd

while(start &amp;lt;= end){

    var mm = ((start.getMonth()+1)&amp;gt;=10)?(start.getMonth()+1):'0'+(start.getMonth()+1);
    var dd = ((start.getDate())&amp;gt;=10)? (start.getDate()) : '0' + (start.getDate());
    var yyyy = start.getFullYear();
    var date = dd+&quot;/&quot;+mm+&quot;/&quot;+yyyy; //yyyy-mm-dd

    alert(date); 

    start = new Date(start.setDate(start.getDate() + 1)); //date increase by 1
}
&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&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 getDatesFromDateRange(from, to) {
  const dates = [];
  for (let date = from; date &amp;lt;= to; date.setDate(date.getDate() + 1)) {
    const cloned = new Date(date.valueOf());
    dates.push(cloned);
  }
  return dates;
}

const start = new Date(2019, 11, 31);
const end = new Date(2020, 1, 1);

const datesArray = getDatesFromDateRange(start, end);
console.dir(datesArray);&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;Tabare's Answer를 기준으로, 나는 마지막에 하루를 더 추가해야 했습니다, 왜냐하면 사이클이 전에 끊겼기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var start = new Date(&quot;02/05/2013&quot;);
var end = new Date(&quot;02/10/2013&quot;);
var newend = end.setDate(end.getDate()+1);
var end = new Date(newend);
while(start &amp;lt; end){
   alert(start);           

   var newDate = start.setDate(start.getDate() + 1);
   start = new Date(newDate);
}
&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-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;/**
 * @param {object} params
 * @param {Date} params.from
 * @param {Date} params.to
 * @param {number | undefined} params.incrementBy
 * @yields {Date}
 */
 function* iterateDate(params) {
    const increaseBy = Math.abs(params.incrementBy ?? 1);
    for(let current = params.from; current.getTime() &amp;lt;= params.to.getTime(); current.setDate(current.getDate() + increaseBy)) {
        yield new Date(current);
    }
}

for (const d of iterateDate({from: new Date(2021,0,1), to: new Date(2021,0,31), incrementBy: 1})) {
    console.log(d.toISOString());
}&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;밀리초의 효율적인 방법을 원하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var daysOfYear = [];
for (var d = begin; d &amp;lt;= end; d = d + 86400000) {
    daysOfYear.push(new Date(d));
}
&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;UI에서 시작일과 종료일을 가져와 컨트롤러의 스코프 변수에 저장했다고 가정해 보겠습니다.&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;vardayLabel = [];&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;새 날짜를 사용하지 않고 변수에 직접 할당하면 setDate 함수가 각 반복에서 원래 변수 값을 변경하기 때문에 새 &lt;strong papago-id=&quot;21-1&quot;&gt;날짜(시작&lt;/strong&gt; 변수&lt;strong papago-id=&quot;21-1&quot;&gt;)&lt;/strong&gt;를 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for (var d = new Date($scope.startDate); d &amp;lt;= $scope.endDate; d.setDate(d.getDate() + 1)) {
                dayLabel.push(new Date(d));
            }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자야르호의 대답에 근거해서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var loopDate = new Date();
loopDate.setTime(datFrom.valueOf());

while (loopDate.valueOf() &amp;lt; datTo.valueOf() + 86400000) {

    alert(loopDay);

    loopDate.setTime(loopDate.valueOf() + 86400000);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/4345045/loop-through-a-date-range-with-javascript&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>JavaScript</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/986</guid>
      <comments>https://manycodes.tistory.com/986#entry986comment</comments>
      <pubDate>Sat, 28 Oct 2023 08:04:05 +0900</pubDate>
    </item>
    <item>
      <title>C# http webrequest and javascript</title>
      <link>https://manycodes.tistory.com/985</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C# http webrequest and javascript&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹페이지의 데이터를 얻기 위해 C# HttpWebRequest를 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 페이지가 로드된 후 javascript/ajax를 사용하여 일부 데이터가 업데이트되어 응답 문자열에 입력되지 않는다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지의 모든 스크립트 실행이 완료될 때까지 웹 요청을 기다리는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아밋&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;그냥 좋은 생각이지만 .net이 브라우저에 있는 것처럼 웹페이지를 로드하는 방법이 있습니다: 시스템을 사용하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows.양식&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;WebBrowser wb = new WebBrowser();
wb.ScrollBarsEnabled = false;
wb.ScriptErrorsSuppressed = true;
wb.Navigate(url);
while (wb.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); }
wb.Document.DomDocument.ToString()
&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;이것은 아마도 프리 아약스 DOM을 제공할 것이지만, 아약스를 먼저 실행할 수 있는 방법이 있을 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 당신의 질문을 정확하게 해석한다면 당신의 문제에 대한 간단한 해결책은 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버에서 HTML을 스크랩하는 중인데 C# 코드가 실제 웹 브라우저가 아니기 때문에 클라이언트 스크립트를 실행하지 않습니다.&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;이렇게 하면 가져온 HTML에 포함되지 않은 정보에 액세스할 수 없습니다.&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;strong papago-id=&quot;10-0&quot;&gt;편집:&lt;/strong&gt; 원래 웹 사이트에서 오는 이러한 AJAX 호출이 얼마나 복잡한지는 모르겠지만, IE용 Firebug 또는 Fiddler를 사용하여 요청이 어떻게 이루어지는지 확인하여 C# 애플리케이션에서도 이러한 AJAX 호출을 호출할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 필요한 정보를 추가할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 그건 이론적인 해결책일 뿐입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 브라우저에서 웹 페이지를 열면 자바스크립트를 실행하고 페이지가 사용하는 추가 리소스(이미지, 스크립트 등)를 다운로드하는 브라우저입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;HttpWebRequest 자체는 이 작업을 수행하지 않으며 요청한 페이지의 html만 다운로드합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;javascript/ajax 코드를 자체적으로 실행하지 않습니다.&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;HttpWebRequest를 사용하여 페이지를 다운로드하고, 관련 ajax 정보에 대한 소스 코드를 프로그래밍적으로 검색한 다음 새로운 HttpWebRequest를 사용하여 해당 데이터를 풀다운합니다.&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;HttpWebRequest는 웹 브라우저를 에뮬레이트하는 것이 아니라 사용자가 가리키는 리소스를 다운로드할 뿐입니다.&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;자바스크립트를 통해 풀링되는 데이터의 URL을 가져오려면 FireBug와 같은 것을 사용하고 HttpWebRequest를 가리켜야 합니다.&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;HttpWebRequest&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;소스 코드에서 관련 AJAX 정보를 검색한 다음 새 코드를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HttpWebRequest&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 데이터를 끌어내릴 수 있을 겁니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://phantomjs.org/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;18-1&quot;&gt;팬텀J&lt;/a&gt;를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;a href=&quot;https://stackoverflow.com/questions/35267191/changing-localstorage-before-opening-the-page-in-phantomjs&quot; papago-id=&quot;18-3&quot;&gt;문제&lt;/a&gt;가 있었지만 문제 해결 방법을 찾지 못했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각에 가장 좋은 해결책은 &lt;a href=&quot;https://stackoverflow.com/questions/35267191/changing-localstorage-before-opening-the-page-in-phantomjs&quot; papago-id=&quot;18-5&quot;&gt;이것&lt;/a&gt;입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 솔루션은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var page = require('webpage').create();

page.open(&quot;https://sample.com&quot;, function(){
    page.evaluate(function(){
        var i = 0,
        oJson = jsonData,
        sKey;
        localStorage.clear();

        for (; sKey = Object.keys(oJson)[i]; i++) {
            localStorage.setItem(sKey,oJson[sKey])
        }
    });

    page.open(&quot;https://sample.com&quot;, function(){
        setTimeout(function(){
         page.render(&quot;screenshoot.png&quot;) 
            // Where you want to save it    
           console.log(page.content); //page source
            // You can access its content using jQuery
            var fbcomments = page.evaluate(function(){
                return $(&quot;body&quot;).contents().find(&quot;.content&quot;) 
            }) 
            phantom.exit();
        },10000)
    });     
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/516027/c-sharp-httpwebrequest-and-javascript&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>ajax</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/985</guid>
      <comments>https://manycodes.tistory.com/985#entry985comment</comments>
      <pubDate>Sat, 28 Oct 2023 08:03:57 +0900</pubDate>
    </item>
    <item>
      <title>반면 (1); C에 정의되지 않은 동작이 있습니까?</title>
      <link>https://manycodes.tistory.com/984</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반면 (1); C에 정의되지 않은 동작이 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/3593551/174614&quot; papago-id=&quot;1-1&quot;&gt;C++11에서는 Undefined Behavior &lt;/a&gt;이지만 C에서는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;while(1);&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정의되지 않은 동작입니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 명확한 행동입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C11에서 새로운 조항 6.8.5 ad 6이 추가되었습니다.&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;sup papago-id=&quot;4-1&quot;&gt;156)&lt;/sup&gt; 입출력 동작을 수행하지 않으며, 휘발성 객체에 접근하지 않으며, 본체 내에서 동기화 또는 원자 동작을 수행하지 않으며, 표현식을 제어하거나, (a for문의 경우) 표현식-3,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;종료할 이행 상황을 가정할 수 있습니다.&lt;sup papago-id=&quot;4-3&quot;&gt;157)&lt;/sup&gt;&lt;/font&gt;&lt;/p&gt; 
 &lt;hr&gt; 
 &lt;p&gt;&lt;sup papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;157)&lt;/font&gt;&lt;/sup&gt;&lt;sub papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 종료를 증명할 수 없는 경우에도 빈 루프를 제거하는 것과 같은 컴파일러 변환을 허용하기 위한 것입니다.&lt;/font&gt;&lt;/sub&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;이는 운영 체제와 같이 영원히 실행되어야 하는 반응형 프로그램을 위한 것입니다.&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;a = 1; while(a);
&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;/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;a = 1; while(a) while(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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 컴파일러는 외부 루프가 종료된다고 가정할 수 있으므로 내부 루프도 종료되어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그렇지 않으면 외부 루프가 종료될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 만약 당신이 정말 똑똑한 컴파일러를 가지고 있다면 a.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;while(1);&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;종료되지 않아야 하는 루프는 끝까지 그 주위에 그러한 비종단 루프를 가지고 있어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 만약 당신이 정말로 무한 루프를 원한다면, 당신은 읽거나 쓰는 것이 좋을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;volatile&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&gt;&lt;strong papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 조항이 실용적이지 않은 이유&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p 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;중간 표현(IR)에서, 상기 예시들에서의 상수와 변수의 차이는 상수 전파를 통해 쉽게 손실됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 조항의 의도는 컴파일러 작성자들이 다음과 같은 바람직한 변환을 적용할 수 있도록 하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;매우 드물지 않은 루프를 생각해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int f(unsigned int n, int *a)
{       unsigned int i;
        int s;
        
        s = 0;
        for (i = 10U; i &amp;lt;= n; i++)
        {
                s += a[i];
        }
        return s;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아키텍처상의 이유(예: 하드웨어 루프)로 인해 이 코드를 다음과 같이 변환하고자 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int f(unsigned int n, int *a)
{       unsigned int i;
        int s;
        
        s = 0;
        for (i = 0; i &amp;lt; n-9; i++)
        {
                s += a[i+10];
        }
        return s;
}
&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;조항 6.8.5 ad 6이 없으면 이것은 불가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;n&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대등한&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UINT_MAX&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 루프가 종료되지 않을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼에도 불구하고 이것이 이 코드의 작성자의 의도가 아니라는 것은 인간에게 꽤 분명합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조항 6.8.5 광고 6은 이제 이러한 변환을 허용합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이를 달성하는 방법은 IR에서 무한 루프의 구문적 요구사항을 유지하기가 어렵기 때문에 컴파일러 작성자에게는 그다지 실용적이지 않습니다.&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;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;n&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i&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;unsigned&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;signed int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정의되지 않은 동작을 제공하므로 이러한 이유로 변환이 정당화될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;효율적인 코드 그러나 사용으로 인한 이점&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;unsigned&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 더 큰 양의 범위는 차치하고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;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;assert(n &amp;lt; UINT_MAX)&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;루프나 프라마-C 같은 보장을 받기 전에 말입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 컴파일러는 종료를 &quot;증명&quot;할 수 있고 조항 6.8.5 ad 6에 의존할 필요가 없습니다.&lt;/font&gt;&lt;/font&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;추신: paxdiablo가 분명히 다른 버전을 보고 있기 때문에 2011년 4월 12일 초안을 보고 있습니다. 어쩌면 그의 버전이 더 새로운 것일지도 모릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그의 인용문에는 일정한 표현의 요소가 언급되어 있지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf&quot; rel=&quot;nofollow&quot; papago-id=&quot;32-1&quot;&gt;C99 표준 초안&lt;/a&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;33&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;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반복문은 제어식이 0과 동일하게 비교될 때까지 반복적으로 루프 본체라는 문을 실행하게 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당되는 경우 C++11에 지정된 것과 같은 제한이 거기에 나타나기를 기대합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 &quot;제약&quot;이라는 섹션이 있는데, 이 섹션 역시 그러한 제약에 대해 언급하지 않습니다.&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 papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 간단한 답변은 §5.1.2.3p6의 인용문으로, 적합한 구현의 최소 요구사항을 다음과 같이 설명합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;적합한 구현에 대한 최소한의 요구사항은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p 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;/p&gt; 
 &lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;— 상호작용 장치의 입력 및 출력 역학은 7.21.3에 명시된 대로 이루어져야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 요구 사항의 목적은 입력을 기다리는 프로그램 전에 실제로 프롬프트 메시지가 나타나도록 버퍼링되지 않거나 라인 버퍼링된 출력이 가능한 한 빨리 표시되도록 하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 프로그램의 관찰 가능한 행동입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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;기계 코드가 수행된 최적화로 인해 관찰 가능한 동작을 생성하지 못하는 경우 컴파일러는 C 컴파일러가 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 무한 루프만을 포함하는 프로그램의 종료 시점에서 관찰 가능한 동작은 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러한 루프가 종료될 수 있는 유일한 방법은 신호가 조기에 종료되도록 하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SIGTERM&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 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;/* unoptimised version */
int main() {
    for (;;);
    puts(&quot;The loop has ended&quot;);
}

/* optimised version */
int main() { }
&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;한 가지 가능성은 신호가 상승하고 longjmp가 호출되어 실행이 다른 위치로 점프할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;점프할 수 있는 유일한 장소는 루프 이전에 실행 중에 도달한 곳인 것 같습니다. 따라서 컴파일러가 신호가 상승하여 실행이 다른 곳으로 점프한다는 것을 알아차릴 수 있을 정도로 지능적이라면 루프(및 신호 상승)를 즉시 점프하기 위해 최적화할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 스레드가 수식에 들어가면 유효한 구현이 프로그램의 소유권을 메인 스레드에서 다른 스레드로 이전하고 메인 스레드를 종료할 수 있습니다.&lt;/font&gt;&lt;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&gt;&lt;/font&gt;&lt;code&gt;C11 6.8.5 Iteration statements /6&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제어 표현식이 상수 표현식이 아니며, 입출력 동작을 수행하지 않으며, 휘발성 객체에 접근하지 않으며, 본체 내에서 동기화 또는 원자 동작을 수행하지 않으며, 표현식을 제어하거나, (a for문의 경우) 표현식-3,&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;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;while(1);&lt;/code&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 일정한 식을 &lt;em papago-id=&quot;22-0&quot;&gt;사용&lt;/em&gt;하며, 구현은 종료될 것이라고 가정할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러는 그러한 루프를 완전히 제거할 수 있는 &lt;em papago-id=&quot;52-1&quot;&gt;자유&lt;/em&gt;는 표현식이 일정하지 않고 다른 모든 조건이 유사하게 충족되는 경우이며, 이는 루프가 종료된다는 것을 결정적으로 증명할 수 없더라도 말입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/16436237/is-while1-undefined-behavior-in-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/984</guid>
      <comments>https://manycodes.tistory.com/984#entry984comment</comments>
      <pubDate>Sat, 28 Oct 2023 08:03:50 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 성능 최적화: datetime 필드별 순서</title>
      <link>https://manycodes.tistory.com/983</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 성능 최적화: datetime 필드별 순서&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;블로그 게시물이 약 100,000개에 달하는 테이블이 있으며, 1:n 관계를 통해 50개의 피드가 있는 테이블에 연결되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;게시물 테이블의 datetime 필드에 따라 정렬된 select 문을 사용하여 두 테이블을 모두 쿼리하면 MySQL은 항상 filesort를 사용하므로 쿼리 시간이 매우 느립니다(1초 이상).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 다음과 같은 스키마입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;postings&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;표(simpl):&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;+---------------------+--------------+------+-----+---------+----------------+
| Field               | Type         | Null | Key | Default | Extra          |
+---------------------+--------------+------+-----+---------+----------------+
| id                  | int(11)      | NO   | PRI | NULL    | auto_increment |
| feed_id             | int(11)      | NO   | MUL | NULL    |                |
| crawl_date          | datetime     | NO   |     | NULL    |                |
| is_active           | tinyint(1)   | NO   | MUL | 0       |                |
| link                | varchar(255) | NO   | MUL | NULL    |                |
| author              | varchar(255) | NO   |     | NULL    |                |
| title               | varchar(255) | NO   |     | NULL    |                |
| excerpt             | text         | NO   |     | NULL    |                |
| long_excerpt        | text         | NO   |     | NULL    |                |
| user_offtopic_count | int(11)      | NO   | MUL | 0       |                |
+---------------------+--------------+------+-----+---------+----------------+
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 여기 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;feed&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| type        | int(11)      | NO   | MUL | 0       |                |
| title       | varchar(255) | NO   |     | NULL    |                |
| website     | varchar(255) | NO   |     | NULL    |                |
| url         | varchar(255) | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 실행에 1초 이상 걸리는 쿼리가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고하시기 바랍니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;post_date&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;필드에 인덱스가 있지만 MySQL은 이를 사용하여 게시물 테이블을 정렬하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT 
    `postings`.`id`, 
    UNIX_TIMESTAMP(postings.post_date) as post_date, 
    `postings`.`link`, 
    `postings`.`title`, 
    `postings`.`author`, 
    `postings`.`excerpt`, 
    `postings`.`long_excerpt`, 
    `feeds`.`title` AS feed_title, 
    `feeds`.`website` AS feed_website
FROM 
    (`postings`)
JOIN 
    `feeds` 
ON 
    `feeds`.`id` = `postings`.`feed_id`
WHERE 
    `feeds`.`type` = 1 AND 
    `postings`.`user_offtopic_count` &amp;lt; 10 AND 
    `postings`.`is_active` = 1
ORDER BY 
    `postings`.`post_date` desc
LIMIT 
    15  
&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&gt;&lt;code&gt;explain extended&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;이 쿼리의 명령어는 MySQL이 filsort:를 사용하고 있음을 보여줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;+----+-------------+----------+--------+---------------------------------------+-----------+---------+--------------------------+-------+-----------------------------+
| id | select_type | table    | type   | possible_keys                         | key       | key_len | ref                      | rows  | Extra                       |
+----+-------------+----------+--------+---------------------------------------+-----------+---------+--------------------------+-------+-----------------------------+
|  1 | SIMPLE      | postings | ref    | feed_id,is_active,user_offtopic_count | is_active | 1       | const                    | 30996 | Using where; Using filesort |
|  1 | SIMPLE      | feeds    | eq_ref | PRIMARY,type                          | PRIMARY   | 4       | feedian.postings.feed_id |     1 | Using where                 |
+----+-------------+----------+--------+---------------------------------------+-----------+---------+--------------------------+-------+-----------------------------+
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 할 때.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;order by&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;part, MySQL은 filesort합니다를 .&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL이 인덱스를 이용하여 데이터를 정렬하고 선택할 수 있도록 이 쿼리를 최적화하는 방법에 대한 아이디어가 있으면 알려주세요.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;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;postings (is_active, post_date)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(순서대로)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필터링할 때 둘 다 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;is_active&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주문은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;post_date&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;MySQL&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;REF&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;EXPLAIN EXTENDED&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/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;당신이 가지고 있는 것은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RANGE&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;user_offtopic_count&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 필터링 및 다른 필드별 정렬에서 모두 이 필드에 인덱스를 사용할 수 없는 이유입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;user_offtopic_count&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(즉, 몇 개의 행이 다음을 만족합니까?)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;user_offtopic_count &amp;lt; 10&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;user_offtopic_count&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;그리고 포스트_dates가 정렬되도록 합니다.&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;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;postings (is_active, user_offtopic_count)&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;RANGE&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;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 인덱스가 더 빠를지는 데이터 분포에 따라 달라집니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 인덱스를 모두 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FORCE&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;pre&gt;&lt;code&gt;CREATE INDEX ix_active_offtopic ON postings (is_active, user_offtopic_count);
CREATE INDEX ix_active_date ON postings (is_active, post_date);

SELECT 
    `postings`.`id`, 
    UNIX_TIMESTAMP(postings.post_date) as post_date, 
    `postings`.`link`, 
    `postings`.`title`, 
    `postings`.`author`, 
    `postings`.`excerpt`, 
    `postings`.`long_excerpt`, 
    `feeds`.`title` AS feed_title, 
    `feeds`.`website` AS feed_website
FROM 
    `postings` FORCE INDEX (ix_active_offtopic)
JOIN 
    `feeds` 
ON 
    `feeds`.`id` = `postings`.`feed_id`
WHERE 
    `feeds`.`type` = 1 AND 
    `postings`.`user_offtopic_count` &amp;lt; 10 AND 
    `postings`.`is_active` = 1
ORDER BY 
    `postings`.`post_date` desc
LIMIT 
    15

/* This should show RANGE access with few rows and keep the FILESORT */

SELECT 
    `postings`.`id`, 
    UNIX_TIMESTAMP(postings.post_date) as post_date, 
    `postings`.`link`, 
    `postings`.`title`, 
    `postings`.`author`, 
    `postings`.`excerpt`, 
    `postings`.`long_excerpt`, 
    `feeds`.`title` AS feed_title, 
    `feeds`.`website` AS feed_website
FROM 
    `postings` FORCE INDEX (ix_active_date)
JOIN 
    `feeds` 
ON 
    `feeds`.`id` = `postings`.`feed_id`
WHERE 
    `feeds`.`type` = 1 AND 
    `postings`.`user_offtopic_count` &amp;lt; 10 AND 
    `postings`.`is_active` = 1
ORDER BY 
    `postings`.`post_date` desc
LIMIT 
    15

/* This should show REF access with lots of rows and no FILESORT */
&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;MySQL에는 디스크의 레코드를 정렬하는 오래된 파일 정렬 알고리즘과 메모리에서 작동하는 새로운 버전의 두 가지 파일 정렬 알고리즘이 있습니다.&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;고정 너비 형식으로 변환된 정렬 전에 설정된 결과가 정렬 버퍼 OR보다 크거나 &lt;em papago-id=&quot;32-1&quot;&gt;텍스트&lt;/em&gt; 필드가 포함되어 있는 경우 디스크의 파일 속도가 느린 알고리즘(쿼리에 텍스트 필드가 있으므로 두 번째 조건이 충족됨)을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL이 is_active 열을 사용하기로 결정한 이유는 표면적으로 열이 다른 조인 및 조건으로 계속 진행되기 전에 행을 제거하는 데 가장 선택적이라고 생각하기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;post_date, feed_id 및 where 조건의 열(is_active, user_offtopic_count, post_date, feed_id)을 사용하여 복합 인덱스를 만드는 것을 먼저 제안합니다.&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;또한, MySQL에 인덱스 기능이 적용되어 있는 경우 MySQL은 인덱스를 사용하지 않는다는 점을 기억하는 것이 중요합니다.&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;다른 것으로 post_date.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 MySQL이 변경되지 않은 열로 순서를 정하도록 지시하고, 유닉스 타임스탬프를 선택할 수 있습니다.&lt;/font&gt;&lt;/p&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;[MySQL v8에서 사용] &lt;strong papago-id=&quot;36-1&quot;&gt;ORDER BY 절을 사용할 &lt;/strong&gt;때 큰 &lt;strong papago-id=&quot;36-1&quot;&gt;차이를 만들기 위해 합성 인덱스에서 열의 순서를 찾았습니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리가 열에 복합 인덱스를 사용하고 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SurveyId,IgnoreResponse,EndDate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(순으로) 그리고 1&lt;strong papago-id=&quot;37-1&quot;&gt;.5초&lt;/strong&gt; 이상의 쿼리 시간을 반환하고 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT JsonResponseV3, SurveyId
FROM survey
WHERE (
    (IgnoreResponse=0 OR IgnoreResponse IS NULL)
    AND
    (SurveyId = 'SV_xy3')
)
ORDER BY EndDate ASC LIMIT 25 -- where EndDate is a date time field
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(MySQL WorkBench 스크린샷 아래와 같이) 인덱스 변경 후 이동&lt;/font&gt;&lt;/font&gt;&lt;code&gt;EndDate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;색인화된 첫 번째 열)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;EndDate,SurveyId,IgnoreResponse&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리 시간이 &lt;strong papago-id=&quot;40-1&quot;&gt;0.016초&lt;/strong&gt;로 떨어졌습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qPZxi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qPZxi.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(참고: 인덱스를 다음과 같이 되돌린 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;EndDate&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;색인화된 마지막 열이며 쿼리 시간은 1.5초 이상으로 돌아갑니다.)&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/714950/mysql-performance-optimization-order-by-datetime-field&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MySQL</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/983</guid>
      <comments>https://manycodes.tistory.com/983#entry983comment</comments>
      <pubDate>Sat, 28 Oct 2023 08:03:43 +0900</pubDate>
    </item>
    <item>
      <title>쿼리 후 쿼리 집합을 필터링할 수 있습니까? 장고</title>
      <link>https://manycodes.tistory.com/982</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;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; everyone = User.objects.filter(is_active=True)  # this would of course return all users that's active
 not_deleted = User.objects.filter(is_active=True, is_deleted=False)  # return user that's active and not deleted
 is_deleted = User.objects.filter(is_active=True, is_deleted=True)  # return user that's active and is already deleted
&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;not_deleted&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;is_deleted&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;everyone&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;everyone&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 나서 어떻게든 걸러낼 겁니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;is_deleted=True&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;is_deleted=False&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&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;everyone&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;not_deleted&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;is_deleted&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;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;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예, 기존 쿼리 세트를 재사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;everyone = User.objects.filter(is_active=True)
active_not_deleted = everyone.filter(is_deleted=False)
active_is_deleted = everyone.filter(is_deleted=True)
&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;실제로 이 코드 블록은 Django QuerySets가 게으르게 평가되기 때문에 데이터베이스에 대한 쿼리를 실행하지도 않습니다.&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;everyone = User.objects.filter(is_active=True)  # Building SQL...
active_not_deleted = everyone.filter(is_deleted=False)  # Building SQL...
active_is_deleted = everyone.filter(is_deleted=True)  # Building SQL...

# Example of the whole queryset being evaluated
for user in everyone:
    # This will execute the query against the database to return the list of users
    # i.e. &quot;select * from user where is_active is True;&quot;
    print(user)

# Example of using iterator to evaluate one object at a time from the queryset.
for user in active_not_deleted.iterator():
    # This will execute the query for each result, so it doesn't
    # load everything at once and it doesn't cache the results.
    # &quot;select * from user where is_active is True and is_deleted is False limit 1 offset 0;&quot;
    # The offset is incremented on each loop and another query is sent to retrieve the next user in the list.
    print(user)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;읽기를 권장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.djangoproject.com/en/1.11/topics/db/queries/#querysets-are-lazy&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://docs.djangoproject.com/en/1.11/topics/db/queries/ #querysets-are-&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.djangoproject.com/en/1.11/ref/models/querysets/#iterator&quot; rel=&quot;noreferrer&quot; papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://docs.djangoproject.com/en/1.11/ref/models/querysets/ #반복자&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.djangoproject.com/en/1.11/topics/db/queries/#caching-and-querysets&quot; rel=&quot;noreferrer&quot; papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://docs.djangoproject.com/en/1.11/topics/db/queries/ # caching 앤 쿼리 세트&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 답변에 추가로, 당신은 하나의 질의를 한 다음, 당신이 정말 원한다면 파이썬에서 필터링할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리 집합이 아니기 때문에 목록에 대한 후속 필터링을 수행할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;everyone = User.objects.filter(is_active=True)
active_not_deleted = list(filter(lambda user: user.is_deleted is False), list(everyone))
active_is_deleted = list(filter(lambda user: user.is_deleted is True), list(everyone))
&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;everyone&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;active_not_deleted&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;active_is_deleted&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파이썬은 사용자 객체의 목록입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;everyone&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리 세트는 처음에 한 번만 평가됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;list(everyone)&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;h1 papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1. 체인필터법&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;not_deleted = User.objects.filter(active=True).filter(is_deleted=False)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@코리 매든은 이미 대답했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;User.objects.filter(active=True)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리 집합을 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;필터 방법을 추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;active_users.filter(is_deleted=False)&lt;/code&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2. Q방법으로&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;from django.db.models import Q

not_deleted = User.objects.filter(Q(active=True) &amp;amp; Q(is_deleted=False)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;복잡한 쿼리 세트를 보다 쉽게 관리할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자를 필터링하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ID가 3이 아니라고요? Q를 간단하게 예를들면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;User.objects.filter(Q(active=True) &amp;amp; ~Q(id = 3))&lt;/code&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 말에 대한 답은.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Q를 사용하든 사용하지 않든, 이것은 동일한 원시 쿼리를 갖습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT ... FROM ... 
WHERE (&quot;auth_user&quot;.&quot;active&quot; = True AND &quot;auth_user&quot;.&quot;is_deleted&quot; = False)
&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;데이터베이스 성능은 데이터를 추출하기 위해 데이터베이스를 얼마나 자주 두드리는지 또는 FK 관계를 통해 무언가를 추출할 때 '조인'과 같은 무거운 방법을 사용하는지와 관련이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 Q 또는 not을 사용해도 쿼리 문장이 같기 때문에 성능 차이가 나지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;user = User.objects.filter(active=True)
not_deleted = User.objects.filter(active=True).filter(is_deleted=False)

user = User.objects.filter(active=True)
not_deleted = user.filter(is_deleted=False)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성능 차이를 주지 않을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리 집합이 게으릅니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;user&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;not_deleted&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위와 같이 변수를 정의할 때 데이터베이스에 바로 도달하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든 각 변수에 대해 세 번을 칠 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최선의 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;active_users = User.objects.filter(active=True)
not_deleted = active_users.filter(is_deleted=False)
deleted = active_users.filter(is_deleted=True)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 제가 제대로 이해했다면, 당신의 질문에 대한 답은 '네'일 수도 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Queryset을 원하는 시간만큼 필터링할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;filter()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 쿼리 세트를 반환하므로 필터링 후 쿼리 세트가 필터링되고 새 &lt;a href=&quot;https://docs.djangoproject.com/en/1.11/ref/models/querysets/#methods-that-do-not-return-querysets&quot; papago-id=&quot;45-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;쿼리 세트를 반환하는 다른 메서드&lt;/a&gt; 및 다른 메서드를 기준으로 필터링 또는 순서 지정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 다음을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;active = User.objects.filter(active=True)
deleted = active.filter(is_deleted=True)
not_deleted = active.filter(is_deleted=False)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 모든 것은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;User.objects&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;이고 -는 Queryset입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;User.objects.filter&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;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/45228187/possible-to-filter-the-queryset-after-querying-django&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>MySQL</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/982</guid>
      <comments>https://manycodes.tistory.com/982#entry982comment</comments>
      <pubDate>Sat, 28 Oct 2023 08:03:34 +0900</pubDate>
    </item>
    <item>
      <title>Jquery Ajax - 막대한 문자열 값 게시</title>
      <link>https://manycodes.tistory.com/981</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Jquery Ajax - 막대한 문자열 값 게시&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3mb 정도의 큰 문자열을 올려야 하는데 url param이 아닌 php로 보낼 수 있나요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;url params로 보내면 url의 크기 제한에 도달합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 하면 이 문제를 해결할 수 있을까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;무슨 단서라도?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정말 감사해요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실 저는 이렇게 하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
 type:'POST',
.......
data:{string:3MB_string}
});
&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;저는 PHP와 jQuery를 사용하고 있고, 3mb base64 문자열을 간단한 url로 php로 보내고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;site.com/script.php&lt;/code&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;문자열이 File Reader API base64 이미지입니다.&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;이것은 문자열의 예이지만 이것은 크기 제한에 도달하지 않을 것입니다. 3mb가 아니기 때문에 3mb를 보여주는 것은 덜 문제가 됩니다. http://jsfiddle.net/QSyMc/&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;POST 요청을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
    url: '/script.php',
    type: 'POST',
    data: { value: 'some huge string here' },
    success: function(result) {
        alert('the request was successfully sent to the server');
    }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버측 스크립트에서 다음과 같은 값을 가져옵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$_POST[&quot;value&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;또한 허용되는 요청 크기를 늘려야 할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 당신의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.htaccess&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;php.ini&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;#set max post size
php_value post_max_size 20M
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용해보기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;processData&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 JSON에 대한 거짓과 문자열 표현.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;var data = { &quot;some&quot; : &quot;data&quot; };
$.ajax({
    type: &quot;POST&quot;,
    url: &quot;/script&quot;,
    processData: false,
    contentType: 'application/json',
    data: JSON.stringify(data),
    success: function(r) {
       console.log(r);
    }
});
&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://api.jquery.com/jQuery.ajax/&quot; papago-id=&quot;16-1&quot;&gt;jQuery.jax&lt;/a&gt; 설명서에서:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;17-0&quot;&gt;프로세스데이터&lt;/strong&gt;(기본값: true)&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;strong papago-id=&quot;19-1&quot;&gt;처리되고 쿼리 문자열로 변환&lt;/strong&gt;되며 기본 컨텐츠 유형인 &quot;application/x-www-form-urlencoded&quot;에 적합합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DOM 문서 또는 기타 처리되지 않은 데이터를 보내려면 이 옵션을 false로 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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;php.ini는 max_input_vars 필드에 변수 1200개로 제한을 둡니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 경우 post_max_size 금액보다 그 금액을 초과하고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 돌아가서 쿼리를 더 효율적으로 만들고 한계를 넘지 않도록 해야 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;php.ini 설정을 올릴 수도 있었지만 필수가 아닌 쿼리 매개 변수를 비활성화함으로써 더 나은 코드를 얻을 수 있었습니다.&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;POST 방법을 꼭 사용하셔야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열이 여전히 너무 크면 php.ini 파일을 확인하여 최대 POST 파라미터 크기를 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 값 값을 변경하려면 다음 중 하나를 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1. php.ini에서 값 변경&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;post_max_size=20M
upload_max_filesize=20M
&lt;/code&gt;&lt;/pre&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;2. 또는 이 코드를 .htaccess 파일에 추가합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;php_value post_max_size 20M
php_value upload_max_filesize 20M
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 것을 사용할지는 접근할 수 있는 것에 따라 달라집니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도해 보기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var str = &quot;YOUR STRING&quot;;
$.ajax({
    url: 'YOUR URL',
    type: 'POST',
    data: { mystring: str },
    success: function(result) {
        console.log(result);
    }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/17810063/jquery-ajax-post-huge-string-value&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>ajax</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/981</guid>
      <comments>https://manycodes.tistory.com/981#entry981comment</comments>
      <pubDate>Sat, 28 Oct 2023 08:03:27 +0900</pubDate>
    </item>
    <item>
      <title>워크시트 위치가 범위를 벗어납니다.연결이 닫혔습니다.EPLUS 사용시</title>
      <link>https://manycodes.tistory.com/980</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;font class=&quot;papago-parent&quot;&gt;EPLUS 사용시&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;저는 EPLUS 4.0.3을 사용하여 템플릿으로 XLSX 파일을 열려고 합니다(빈 XLSX 파일을 사용한 적도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿 파일(공백 또는 실제 파일)을 열지 않고 새 워크북을 작성하고 시트를 만들면 잘 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 템플릿 파일을 열고 새 워크시트를 만들면 잘 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿의 &lt;strong papago-id=&quot;2-1&quot;&gt;FIRST&lt;/strong&gt; 시트에 액세스하려고 할 때에만 다음 오류가 나타납니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;2-3&quot;&gt;&lt;em papago-id=&quot;2-3-0&quot;&gt;워크시트 위치가 범위를 벗어납니다.&lt;/em&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;workBook.Worksheets.First()&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;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&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;workBook.Worksheets[1]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 시트를 얻기 위해 0과 1을 모두 사용합니다.&lt;/font&gt;&lt;/font&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;내 코드:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    var existingTemplate = new FileInfo(_ExcelTemplateFilePath);
    using (ExcelPackage p = new ExcelPackage(existingTemplate)) {
    // Get the work book in the file
    ExcelWorkbook workBook = p.Workbook;
    ExcelWorksheet ws = workBook.Worksheets[1];
    // MY OTHER EXCEL CELL CODE HERE    
}}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 첫번째 시트와 엑셀 파일에 접속하는 방법을 아는 사람?&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;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;var oSheet = package.Workbook.Worksheets[&quot;My Worksheet Name&quot;];
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫번째 시트를 얻으려면 아래 코드를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    var xlWorkbook = new ExcelPackage(new FileInfo(@&quot;C:\ESD\EXCELDATAREADTEST.xlsx&quot;));

ExcelWorksheet workSheet = xlWorkbook.Workbook.Worksheets[1];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워크북의 올바른 위치를 가리키고 있는지 확인합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 방금 이와 같은 문제가 있었는데 문제는 EPLus가 지정된 범위의 스프레드시트를 초킹한다는 것입니다.&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;스프레드시트를 읽을 수 있도록 LibreOffice Calc를 사용하여 수행한 작업은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스프레드시트 복사본 만들기&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Libre Office에서 열기&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;font class=&quot;papago-parent&quot;&gt;일반적으로 &quot;A1&quot;을 읽습니다.&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;&quot;이름 관리&quot;를 선택합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전체 목록 강조 표시&lt;/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;삭제&quot; 클릭&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;이 단계를 마치면 스프레드시트를 저장/닫고 EPLus로 열 수 있었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var currentSheet = package.Workbook.Worksheets;
var workSheet = currentSheet.First();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시트에 알 수 없는 이름이 있을 수 있으며 이제 첫 번째 시트에 관심이 있기 때문입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지수를 ZERO로 시작하면 됩니다.&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;Excel Worksheet ws = workBook.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;워크시트[0];&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책 : &lt;strong papago-id=&quot;27-1&quot;&gt;_ExcelTemplateFilePath&lt;/strong&gt; 매개변수를 호출하거나 배치한 올바른 Excel 파일 경로를 제공하지 않기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이유: 파일을 잘못된 디렉토리에 배치하고 원하는 경로에서 호출하고 있지만 안타깝게도 그렇지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트 또는 솔루션의 현재 디렉터리에 엑셀 파일을 배치했다면 예를 들어보세요. (참고: Vs studio의 현재 디렉터리는 항상 &lt;strong papago-id=&quot;28-1&quot;&gt;\bin\&lt;/strong&gt;debug.netcoreapp public static FileInfo getfile = new FileInfo(디렉토리)입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;GetCurrentDirectory() + @&quot;\Login_Credentials.xlsx&quot;);&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;Excel 파일 경로가 정적이고 하드코드가 있는 e-g(@&quot;F:\task1 \TestTask\abc.xlsx&quot;)인 경우, 주어진 형식으로도 경로가 정확해야 파일에 액세스할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 파일 형식이 EPLUS가 원하는 것이 아니라는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;xlsx를 열고 워크북은 보고 워크시트는 보지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책은 원하는 형식으로 저장하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  Dim fiOriginal As System.IO.FileInfo
    Dim fiTemp As System.IO.FileInfo
    Dim strOriginalName As String
    Dim strTempName As String

Rem Get a temp name 
    strTempName = IO.Path.GetTempFileName()
    strTempName = strTempName &amp;amp; &quot;.xlsx&quot;

Rem Have EPPLUS save the original as a temp in its format
    fiOriginal = New System.IO.FileInfo(strOriginalName)
    Using pckSrc As New ExcelPackage(fiOriginal)
        pckSrc.SaveAs(fiTemp)
    End Using
    
Rem Process the temp or replace the original and see EPPLUS happy.
    fiOriginal = New System.IO.FileInfo(strTempName)
    Using pckSrc As New ExcelPackage(fiOriginal)
        Dim wBookSrc As ExcelWorkbook = pckSrc.Workbook
        Dim wkShtSrc As ExcelWorksheet = wBookSrc.Worksheets(0)
    
    End Using
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/29775107/worksheet-position-out-of-range-connection-closed-when-using-epplus&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Excel</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/980</guid>
      <comments>https://manycodes.tistory.com/980#entry980comment</comments>
      <pubDate>Sat, 28 Oct 2023 08:03:20 +0900</pubDate>
    </item>
    <item>
      <title>ng-selected는 어떻게 작동합니까?</title>
      <link>https://manycodes.tistory.com/979</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ng-selected는 어떻게 작동합니까?&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;Q2는 예상대로 선택되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;select name=&quot;quarter&quot; ng-model=&quot;Quarter&quot; &amp;gt;
    &amp;lt;option value=&quot;1&quot; &amp;gt;Q1&amp;lt;/option&amp;gt;
    &amp;lt;option value=&quot;2&quot; ng-selected=&quot;Quarter=='Q1'&quot;&amp;gt;Q2&amp;lt;/option&amp;gt;
    &amp;lt;option value=&quot;3&quot;&amp;gt;Q3&amp;lt;/option&amp;gt;
    &amp;lt;option value=&quot;4&quot;&amp;gt;4&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변화하는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'Q1'&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;'Q2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;' 제가 기대하는 대로 아무것도 선택하지 못합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 퍼팅합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng-selected=&quot;Quarter=='Q1'&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;삭제할 때까지 Q1을 선택하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng-selected=&quot;Quarter=='Q2&quot;&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;wtf. 어떻게 작동합니까?&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;옵션 요소에 ng-selected를 넣으면 ng-selected 값이 참일 때 옵션이 선택됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 분기가 Q1일 때 Q2 옵션이 선택됩니다.&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;Quarter에서 전달된 값을 선택하려면 선택 요소에 ng-selected를 넣어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;select name=&quot;quarter&quot; ng-model=&quot;Quarter&quot; ng-selected=&quot;Quarter&quot;
        ng-options=&quot;Quarter for Quarter in Quarters&quot; &amp;gt;
    {{Quarter}}
&amp;lt;/select&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.angularjs.org/api/ng/directive/select&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;선택 지시 문서&lt;/a&gt;를 살펴봅니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;select ng-model=&quot;hour&quot;&amp;gt;
    &amp;lt;option ng-selected=&quot;hour == $index&quot; ng-repeat=&quot;h in (((b=[]).length=24)&amp;amp;&amp;amp;b) track by $index&quot; ng-bind=&quot;$index&quot;&amp;gt;{{h}}&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;24시간 동안 선택을 원한다면 이렇게 할 수 있습니다.&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;&amp;lt;body ng-controller=&quot;MainCtrl&quot;&amp;gt;
  {{referenceNumber}}
    &amp;lt;select ng-model=&quot;referenceNumber&quot;&amp;gt;
            &amp;lt;option ng-selected=&quot;!referenceNumber&quot;&amp;gt;Default&amp;lt;/option&amp;gt;
            &amp;lt;option ng-repeat=&quot;number in numbers track by $index&quot; ng-value=&quot;number&quot;&amp;gt;{{number}}&amp;lt;/option&amp;gt;
        &amp;lt;/select&amp;gt;
  &amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;저는 ngSelected의 주요 이유 중 하나가 모델이 올바르게 설정되지 않았는지에 따라 기본값을 설정하기 위함이라고 생각합니다.&quot;라고 joshkurz는 2014년 3월 3일에 언급했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 올바른 방법은 오직 당신의 경우에만 ng-model에 의존하는 것입니다.&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;select ng-model=&quot;purchase.product&quot; name=&quot;purchase.product&quot; class=&quot;u-full-width&quot; ng-options=&quot;product.id as product.name for product in products&quot;&amp;gt;&amp;lt;/select&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조:&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;a href=&quot;http://plnkr.co/edit/xXq3b40nvqkjPlyCxZNG?p=preview&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://plnkr.co/edit/xXq3b40nvqkjPlyCxZNG?p=preview&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/angular/angular.js/issues/6528&quot; rel=&quot;noreferrer&quot; papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/angular/angular.js/issues/6528&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng-selected&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;directive는 true/false boolean 결과를 가져오는 부울 값 또는 식을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 가치만 전달하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 작동시키거나 또는 그것으로 이끄는 표현을 만들기 위해.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ng-model 과는 상관이 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&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;다음은 이러한 동작의 예입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;select name=&quot;quarter&quot; ng-model=&quot;Quarter&quot; &amp;gt;
    &amp;lt;option value=&quot;1&quot; &amp;gt;Q1&amp;lt;/option&amp;gt;
    &amp;lt;option value=&quot;2&quot; ng-selected=&quot;true&quot;&amp;gt;Q2&amp;lt;/option&amp;gt;
    &amp;lt;option value=&quot;3&quot;&amp;gt;Q3&amp;lt;/option&amp;gt;
    &amp;lt;option value=&quot;4&quot;&amp;gt;Q4&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 옵션 Q2가 기본적으로 선택됩니다.&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/15771629/how-does-ng-selected-work&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>angularJS</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/979</guid>
      <comments>https://manycodes.tistory.com/979#entry979comment</comments>
      <pubDate>Sat, 28 Oct 2023 08:03:13 +0900</pubDate>
    </item>
    <item>
      <title>블록 댓글 작성에 #if 0을 사용하는 이유는 무엇입니까?</title>
      <link>https://manycodes.tistory.com/978</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;블록 댓글 작성에 #if 0을 사용하는 이유는 무엇입니까?&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;if ( pwbuf ) sprintf(username,&quot;%s&quot;,pwbuf-&amp;gt;pw_name);
else sprintf(username,&quot;%d&quot;,user_id);
&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;#if 0
....
#endif
&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;hr&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;하지만 나는 여전히 이해할 수 없습니다. 프로그래밍 환경 도구나 좋아하는 텍스트 편집기의 매크로를 사용하여 &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;hr&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 &lt;strong papago-id=&quot;8-1&quot;&gt;C&lt;/strong&gt;에 경험이 없어서 이런 것들이 좋은 아이디어일 수도 있는 이유를 놓치고 있는 것일까요? 아니면 변명의 여지가 없는 것일까요? 그리고 이 코드가 얼마나 추한지에 대해 짜증을 느끼는 것은 정당한 것일까요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;#if 0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제거된 블록에 블록이 포함되어 있을 때 꽤 자주 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/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;한 줄 flow-control+문은 이해하기 쉽지만 개인적으로는 피하지만 (그리고 제가 작업한 코딩 지침의 대부분은 금지합니다.)&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;블록 댓글 대신 #if 0을 사용하는 이유&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;다음 사항이 있는 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#if 0
        silly();
        if(foo)
           bar();
        /* baz is a flumuxiation */
        baz = fib+3;
#endif
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 순진하게 교체한다면.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#if 0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;/&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#endif&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/* */&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;, 그것은 당신이 그것을 칠 때 구문 오류를 야기하면서 fluuxiation 후에 댓글이 바로 끝나도록 할 것입니다.&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;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;#endif&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에..&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;EDIT: 마지막 노트 하나, 종종 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#if 0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구문은 개발 중에 사용될 뿐이며, 특히 여러 버전이나 종속성 또는 하드웨어 플랫폼을 지원해야 하는 경우에 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font 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;#ifdef _COMPILED_WITHOUT_FEATURE_BAZ_
    much_code();
#endif
&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;그것은 세상에서 가장 예쁜 것은 아니지만, 제가 괜찮은 크기의 프로젝트를 수행할 때마다, 우리는 런타임 스위치, 컴파일 시간 상수(이것), 컴파일 시간 컴파일 결정(버전에 따라 다른 .cpp를 사용함), 그리고 때때로 템플릿 솔루션의 조합을 사용했습니다.&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;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 개발자이기는 하지만, 처음부터 일을 시작하는 것은..&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#if 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;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 papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일에서 제외되는 코드는 주석이 아닌 코드입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에는 현재 컴파일되지 않는 코드를 설명하는 주석이 포함되는 경우가 많습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;hr&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 상당한 리팩터의 중간에 있고 이 패턴을 많이 사용하고 있기 때문에 이것을 편집하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 리팩터의 일부로, 저는 널리 사용되는 타입을 제거하고 다른 타입으로 교체하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 그 결과는 아무것도 지어지지 않는다는 것입니다.&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;그래서 저의 첫 번째 단계는 컴파일되지 않는 모든 코드를 #iff-def-out하고, 그 코드를 부르는 모든 단위 테스트를 [무시]하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 모든 것이 구축되고 무시하지 않는 테스트가 모두 통과됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과적으로 다음과 같은 많은 기능이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public void MyFunction()
{
#if true
    throw new NotImplementedException(&quot;JT-123&quot;);
#else
    // all the existing code that won't compile
#endif
}
&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;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 모든 것을 실행하는 데 며칠이 걸릴 것이고, 이 #if가 모두 사라지면 이를 병합하기 위한 풀 요청을 만들지만, 이 과정에서 도움이 된다고 생각합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C 스타일 주석이 네스팅되지 않는 문제 외에도 코드 블록을 비활성화하는 문제가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#if 0&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C++ 스타일의 주석으로 대규모 코드 블록을 비활성화하는 것은 편집기 지원/매크로가 없으면 실행 불가능할 수 있는 반면, 어떤 편집기에서도 매우 쉽게 수행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 많은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#if 0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;토막이 나다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;else&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;차단도 가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 두 구현/알고리즘을 쉽게 전환할 수 있으며, 한 섹션을 대량 코멘트하고 다른 섹션을 대량 코멘트하는 것보다 오류 발생 가능성이 적습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 당신은 다음과 같이 더 읽기 쉬운 것을 사용하는 것이 좋을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#if DEBUG&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 경우에는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용하여 댓글을 차단하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;//&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 생각할 수 있는 한 가지 이유는 소스 제어 시스템에 코드를 확인하면 해당 코드 라인에 대한 마지막 편집자가 블레임 로그에 표시된다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주석이 사용자에게 귀속되기를 원할 수도 있지만, 동시에 코드 자체도 사용자에게 귀속됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 코드의 &quot;진짜&quot; 작성자에 대한 비난 로그를 확인해야 하는 경우 이전 개정판을 다시 살펴볼 수 있지만, 현재 개정판에서 해당 정보를 보존하면 시간을 절약할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&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;저기 꽤 관용적인 C군요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;뭐가 그렇게 문제인지 모르겠어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 아름다운 코드 조각은 아니지만 읽기 쉬우며 문맥이 없어도 무슨 일이 일어나고 있고 그 이유가 무엇인지 명확합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수 이름이 더 좋을 수도 있고, 그리고 아마도 사용하는 것이 더 안전할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;snprintf&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 아마도&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strncpy&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 더 나을 수도 있다고 생각한다면 어떤 모습을 원하십니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 약간의 변화를 줄 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char username[32];
strncpy(username, 30, (pwbuf ? pwbuf-&amp;gt;pw_name : user_id));
username[31] = '\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;자, 여기 제 것입니다.&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;em papago-id=&quot;50-1&quot;&gt;쓰지&lt;/em&gt; 않을 것이고, 그런 코드를 쓴 사람들은 덜 생각할 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사람들이 스코프 교정기 없이 도망쳐도 괜찮다고 생각하고 있다가 그것에 물린 횟수를 셀 수가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨트롤 문을 코드 블록과 같은 줄에 놓는 것은 더 좋지 않습니다. 들여쓰기가 없으면 읽기 중에 흐름 컨트롤을 보기가 더 어렵습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 년 동안 코딩을 해온 후에는 특정 시각적 단서에 의존할 수 있는 한 빠르고 정확하게 코드를 읽고 해석할 수 있는 것에 익숙해집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;특별한 경우&quot;를 위해 이러한 단서를 피하는 것은 독자가 아무 이유 없이 중단하고 더블테이크를 해야 한다는 것을 의미합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;#if (0)&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;, 반면, 개발 중에는 괜찮지만 코드가 &quot;stable&quot;(또는 최소한 교체)되면 제거해야 합니다.&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;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의미 있는 전처리기 기호 이름을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와, 저기!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;과민반응하지 마...&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 다른 무엇보다도 일관성 없는 간격 때문에 더 허술하다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;비록 그 진술들이 그것을 연장하고 있지만, 저는 그들의 IF와 같은 선에 짧은 진술을 하는 것이 더 낫다는 것을 알게 된 적이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;세로의 간결함을 위해서는 인라인 스타일이 더 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;쉽게 4줄, 더 많은 줄로 쪼개질 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (pwbuf) 
  sprintf(username,&quot;%s&quot;,pwbuf-&amp;gt;pw_name); 
else 
  sprintf(username,&quot;%d&quot;,user_id); 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개인적으로 저는 다음 스타일이 너무 장황해서 파일을 훑어보기가 어려워서 싫어요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (pwbuf) 
{
  sprintf(username,&quot;%s&quot;,pwbuf-&amp;gt;pw_name); 
}
else
{ 
  sprintf(username,&quot;%d&quot;,user_id); 
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이상의 점&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 모니터가 와이드 스크린이라서 요즘은 좀 신경이 쓰이지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (pwbuf) sprintf(username,&quot;%s&quot;,pwbuf-&amp;gt;pw_name);
else       sprintf(username,&quot;%d&quot;,user_id);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;항상 화면에 가로 공간이 너무 많고 세로 공간이 부족한 것 같습니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;#if 0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;; 코드에 이미 블록 주석이 있는 경우 사용하지 마십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/* */&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;kbd papago-id=&quot;26-3&quot;&gt;/&lt;/kbd&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 그렇지 않다면, 당신은 꽉 찼습니다. 코드를 완전히 삭제하세요!&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;if ( pwbuf ) sprintf(username,&quot;%s&quot;,pwbuf-&amp;gt;pw_name);
else sprintf(username,&quot;%d&quot;,user_id);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;관용적이고 간결합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;2~3번 이상 닿으면 브라켓으로 하고 다음 줄로 하겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;로깅 정보나 다른 조건을 추가하면 유지보수가 잘 되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#if 0
....
#endif
&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;font class=&quot;papago-parent&quot;&gt;또한 이런 종류의 코멘트를 차단하는 것과 관련된 컴파일 오류를 피할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/* line comment */
...
/* line comment again */
&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;C 블록 댓글은 둥지를 틀지 않기 때문에.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드의 대칭성을 지원하고 선이 너무 길어지지 않을 때 종종 더 간결한 스타일을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 작위적인 예를 들어보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (strcmp(s, &quot;foo&quot;) == 0)
{
    bitmap = 0x00000001UL;
    bit = 0;
}
else if (strcmp(s, &quot;bar&quot;) == 0)
{
    bitmap = 0x00000002UL;
    bit = 1;
}
else if (strcmp(s, &quot;baz&quot;) == 0)
{
    bitmap = 0x00000003UL;
    bit = 2;
}
else if (strcmp(s, &quot;qux&quot;) == 0)
{
    bitmap = 0x00000008UL;
    bit = 3;
}
else
{
    bitmap = 0;
    bit = -1;
}
&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;if      (strcmp(s, &quot;foo&quot;) == 0) { bitmap = 0x00000001UL; bit = 0;  }
else if (strcmp(s, &quot;bar&quot;) == 0) { bitmap = 0x00000002UL; bit = 1;  }
else if (strcmp(s, &quot;baz&quot;) == 0) { bitmap = 0x00000003UL; bit = 2;  }
else if (strcmp(s, &quot;qux&quot;) == 0) { bitmap = 0x00000008UL; bit = 3;  }
else                            { bitmap = 0;            bit = -1; }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;벌레들은 여러분의 얼굴로 달려들 가능성이 훨씬 더 높습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;면책 사항:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 예는 내가 말했듯이 작위적인 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;strcmp, magic number의 사용에 대해 자유롭게 논의하고 테이블 기반 접근 방식이 더 나을지 여부를 확인하십시오. ;)&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;#if는 별도로 작성된 조건을 확인하는 매크로이므로 '0'은 false를 나타내므로 '#if 0'과 '#endif' 사이에 작성된 코드 블록은 컴파일되지 않으므로 주석으로 처리할 수 있습니다.&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;그래서 기본적으로 프로그램에서 댓글을 작성할 때 0을 사용하면 #라고 말할 수 있습니다.&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;pre&gt;&lt;code&gt;#if 0
int a;
int b;
int c = a + b;
#endif
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;#if 0&quot;과 &quot;#endif&quot; 사이에 쓰여진 부분은 주석으로 간주됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;/* … */&quot;는 프로그램에서 댓글을 작성하는 데 사용될 수 있는데 왜 &quot;#if 0&quot;인가요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;답변 : #0은 중첩댓글에 사용할 수 있지만 &quot;/*&quot;에서 중첩댓글이 지원되지 않는 경우... */&quot; 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중첩 주석이란 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;중첩 주석은 주석 아래에 있는 주석을 의미하며 다음과 같은 다양한 경우에 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래와 같은 코드를 작성한 예를 들어 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/820Ow.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/820Ow.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금, 누군가가 당신의 코드를 검토하고 있고, 당신의 프로그램에 이 코드 전체를 언급하고 싶어합니다. 왜냐하면 그는 이 코드가 필요하지 않기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위한 일반적인 접근 방식은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yX54a.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yX54a.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 내용은 내포된 주석의 예시입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위 코드의 문제는 &lt;em papago-id=&quot;79-1&quot;&gt;&quot;/&quot; 뒤&lt;/em&gt;의 첫 번째 &lt;em papago-id=&quot;79-1&quot;&gt;&quot;/&quot;&lt;/em&gt;가 마주치는 순간 코멘트가 거기서 끝난다는 것입니다. 즉, 위 예에서 문장 int d = a-b;는 코멘트되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 &quot;if 0&quot;을 사용하여 해결됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sq7lq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sq7lq.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서는 #if 0을 사용하여 중첩 주석을 사용했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하는 몇 가지 이유를 말할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#if 0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;댓글은 둥지를 틀지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#if&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&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&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 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;#if 0&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;1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.와 함께&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;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;/*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;*/&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 의미있는 매크로를 넣을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,맘에 들다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ENABLE_FEATURE_FOO&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자동화된 포맷 도구는 내부의 코드를 포맷합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#if&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;차단하지만 주석 처리된 코드는 무시합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 쉽게 찾아갈 수 있습니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#if&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의견을 찾는 것보다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;100&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원래 코드를 터치하지 않고 그 주변에 줄만 추가하기 때문에 VCS에서 더 잘 재생됩니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;code&gt;#if 0 ... #endif&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오래된 C 코드에서는 꽤 흔합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 이유는 C 스타일의 댓글로 댓글을 달기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/* .... */&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;댓글이 둥지를 틀지 않아서 안 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;103&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적인 일이지만 현대 코드에 자리가 없다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;옛날에는 텍스트 편집자가 댓글의 큰 부분을 자동으로 차단할 수 없었기 때문에 그렇게 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 중요한 것은, 그들이 지금처럼 제대로 된 소스 코드 제어를 하지 못했다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;생산코드에 댓글이나 #ifdef'를 남겨도 변명의 여지가 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;104&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3630601/why-use-if-0-for-block-commenting-out&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/978</guid>
      <comments>https://manycodes.tistory.com/978#entry978comment</comments>
      <pubDate>Mon, 23 Oct 2023 21:59:06 +0900</pubDate>
    </item>
    <item>
      <title>JSON RESTful 서비스를 C/C++에서 구현하는 방법</title>
      <link>https://manycodes.tistory.com/977</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JSON RESTful 서비스를 C/C++에서 구현하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 C/C++에서 JSON Restful 웹 서비스를 하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 XML serialization/deserialization에는 적합하지만 JSON에는 적합하지 않은 Axis2/C와 Staff를 사용해 보았습니다.&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://herbsutter.com/2012/04/30/c-libraries-casablanca/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-3&quot;&gt;허브 서터의 블로그&lt;/a&gt;에 소개된 &lt;a href=&quot;http://msdn.microsoft.com/en-us/devlabs/casablanca&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-1&quot;&gt;카사블랑카&lt;/a&gt;를 보고 싶을지도 모릅니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;c로 휴식 서비스를 만드는 것을 지원하는 라이브러리는 소수입니다. 예를 들어 &lt;a href=&quot;https://github.com/Stiffstream/restinio&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-1&quot;&gt;restinio&lt;/a&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;restinio/all.hpp&amp;gt;
int main()
{
    restinio::run(
        restinio::on_this_thread()
        .port(8080)
        .address(&quot;localhost&quot;)
        .request_handler([](auto req) {
            return req-&amp;gt;create_response().set_body(&quot;Hello, World!&quot;).done();
        }));
    return 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;C/C++ Restful API를 구축하기 위해 https://github.com/babelouest/ulfius 훌륭한 라이브러리를 사용해 보십시오. 모든 플랫폼을 지원할 수 있습니다: Linux, FreeBSD, Windows 등.&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://code.google.com/p/ffead-cpp/&quot; rel=&quot;nofollow&quot; papago-id=&quot;5-1&quot;&gt;당신&lt;/a&gt;은 ffeed-cpp를 볼 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;json 및 restfull 웹 서비스 지원 외에도 더 많은 기능이 포함되어 있습니다.&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++ 웹 서비스를 위해 다음 스택을 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/ipkn/crow&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;7-0&quot;&gt;ipkn/crow&lt;/a&gt; C++ 마이크로 웹 프레임워크&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;json serialization/deserialization을 위한 &lt;a href=&quot;https://github.com/nlohmann/json&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;8-0&quot;&gt;nlohmann/json&lt;/a&gt;.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://oatpp.io/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;9-1&quot;&gt;귀리++&lt;/a&gt; 보기&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 포함합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL 매개변수 매핑을 사용한 URL 라우팅&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Swagger-UI 끝점 주석 지원.&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;JSON 지원을 통한 객체 매핑.&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;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-cpp prettyprint-override&quot;&gt;&lt;code&gt;ENDPOINT(&quot;GET&quot;, &quot;users/{name}&quot;, getUserByName, PATH(String, name)) {
  auto userDto = UserDto::createShared();
  userDto-&amp;gt;name = name;
  return createDtoResponse(Status::CODE_200, userDto);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컬:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-sh prettyprint-override&quot;&gt;&lt;code&gt;$ curl http://localhost:8000/users/john
{&quot;name&quot;:&quot;john&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;a href=&quot;https://github.com/sprinfall/webcc&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;16-1&quot;&gt;웹씨씨&lt;/a&gt;를 보고 싶어할지도 모릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Boost 기반의 임베디드 목적을 위한 경량 C++ HTTP 클라이언트 및 서버 라이브러리입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아시오 (1.66+).&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;/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;AXIS2/C에서 JSON의 지원을 해결한 &lt;a href=&quot;https://issues.apache.org/jira/browse/AXIS2C-683?page=com.atlassian.jira.plugin.system.issuetabpanels%3aall-tabpanel&quot; papago-id=&quot;20-1&quot; rel=&quot;nofollow&quot;&gt;JIRA 프로젝트&lt;/a&gt;가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 제 프로젝트를 실행했고 작가(오징어 협약)와 함께 관리했지만 여전히 독자와 함께 관리하려고 노력하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&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;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JSON과 JSONPath는 새로운 &lt;a href=&quot;http://www.genivia.com/doc/xml-rpc-json/html&quot; rel=&quot;nofollow&quot; papago-id=&quot;23-3&quot;&gt;코드 생성기와 새로운 JSON API&lt;/a&gt;를 사용하여 C와 C++ &lt;a href=&quot;http://www.cs.fsu.edu/~engelen/soap.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;23-1&quot;&gt;insoap&lt;/a&gt; 모두에서 지원되어 신속하게 시작할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 JSON, &lt;a href=&quot;http://www.genivia.com/doc/xml-rpc-json/html/index.html#cpp-rpc&quot; papago-id=&quot;24-1&quot; rel=&quot;nofollow&quot;&gt;JSON-RPC &lt;/a&gt;및&lt;a href=&quot;http://www.genivia.com/doc/xml-rpc-json/html/index.html#cpp-rpc&quot; papago-id=&quot;24-1&quot; rel=&quot;nofollow&quot;&gt; REST 예가&lt;/a&gt; 포함되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모리 관리는 자동으로 이루어집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;json.org 스니펫을 예로 들어보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{ &quot;menu&quot;: {
    &quot;id&quot;: &quot;file&quot;,
    &quot;value&quot;: &quot;File&quot;,
    &quot;popup&quot;: {
      &quot;menuitem&quot;: [
        {&quot;value&quot;: &quot;New&quot;, &quot;onclick&quot;: &quot;CreateNewDoc()&quot;},
        {&quot;value&quot;: &quot;Open&quot;, &quot;onclick&quot;: &quot;OpenDoc()&quot;},
        {&quot;value&quot;: &quot;Close&quot;, &quot;onclick&quot;: &quot;CloseDoc()&quot;}
      ]
    }
  }
}
&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;gsoap 명령어&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jsoncpp -M menu.json&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JSON 값을 채우기 위해 다음 코드를 생성합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;value x(ctx);
x[&quot;menu&quot;][&quot;id&quot;] = &quot;file&quot;;
x[&quot;menu&quot;][&quot;value&quot;] = &quot;File&quot;;
x[&quot;menu&quot;][&quot;popup&quot;][&quot;menuitem&quot;][0][&quot;value&quot;] = &quot;New&quot;;
x[&quot;menu&quot;][&quot;popup&quot;][&quot;menuitem&quot;][0][&quot;onclick&quot;] = &quot;CreateNewDoc()&quot;;
x[&quot;menu&quot;][&quot;popup&quot;][&quot;menuitem&quot;][1][&quot;value&quot;] = &quot;Open&quot;;
x[&quot;menu&quot;][&quot;popup&quot;][&quot;menuitem&quot;][1][&quot;onclick&quot;] = &quot;OpenDoc()&quot;;
x[&quot;menu&quot;][&quot;popup&quot;][&quot;menuitem&quot;][2][&quot;value&quot;] = &quot;Close&quot;;
x[&quot;menu&quot;][&quot;popup&quot;][&quot;menuitem&quot;][2][&quot;onclick&quot;] = &quot;CloseDoc()&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;파싱된 JSON 값과 JSONPath 코드를 판독하는 것도 이 도구를 통해 생성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집&lt;/font&gt;&lt;/strong&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;strong papago-id=&quot;30-1&quot;&gt;jsoncpp 명령줄&lt;/strong&gt; 코드 생성기는 .json 파일을 템플릿으로 사용하여 JSON 데이터를 읽고 쓰기 위한 API 코드를 보여주는데, 이는 JSON 데이터를 채우고 추출하기 위한 API 코드 작성 시간을 절약하는 데 유용하다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JSONPath 쿼리 코드도 이 도구로 생성할 수 있습니다.&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;C의 웹 서비스의 경우 ulfius, civetweb과 같은 라이브러리를 활용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/babelouest/ulfius&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://github.com/babelouest/ulfius&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/civetweb/civetweb/blob/master/docs/Embedding.md&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/civetweb/civetweb/blob/master/docs/Embedding.md&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C++의 웹 서비스의 경우 libhv, restbed와 같은 라이브러리를 활용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/ithewei/libhv&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;https://github.com/ithewei/libhv&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/Corvusoft/restbed&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/Corvusoft/restbed&lt;/font&gt;&lt;/a&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/9788572/ways-to-implement-a-json-restful-service-in-c-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>C</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/977</guid>
      <comments>https://manycodes.tistory.com/977#entry977comment</comments>
      <pubDate>Mon, 23 Oct 2023 21:58:56 +0900</pubDate>
    </item>
    <item>
      <title>Jquery 데이터 테이블이 삭제/재작성</title>
      <link>https://manycodes.tistory.com/976</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;json call을 통해 datable을 다시 로드하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 DataTables-1.10.9와 jquery-2.1.4를 사용해 왔습니다.&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;datatable 내에서 .ajax API로 결제를 시도했지만 아무 것도 없었기 때문에 예전에 고소했던 방식을 시도해보려고 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML이 테이블에 추가되었을 때 깨지면 괜찮아 보입니다(이것으로 보면 이전 데이터가 제거되고 새로운 데이터가 표시됨을 의미합니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 $('#tbl송금목록').dataTable({...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;}); 명령이 다시 실행됩니다. 새 데이터가 아닌 이전 데이터를 'reload'합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 테이블을 사용하지 않으면 원시 테이블에 올바른 데이터가 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//----------------------------------------------------------------------------------------
function fncOpenRemittancesRead(pFrRem,pToRem) {

    wsUrl = &quot;../Json/OpenRemittances.asp&quot;   +
                    &quot;?qryDatabase=&quot;         + encodeURIComponent(wsDatabase)    +
                    &quot;&amp;amp;qryFrRemittance=&quot; + encodeURIComponent(pFrRem)            +
                    &quot;&amp;amp;qryToRemittance=&quot; + encodeURIComponent(pToRem);

    $('body').addClass('waiting');
    $.getJSON(wsUrl, function(data) {
        fncOpenRemittancesFill(data);
        $('body').removeClass('waiting');
    });
}

//----------------------------------------------------------------------------------------
function fncOpenRemittancesFill(pData) {
    var wsHtml = '';

    $('#tblRemittanceList tbody').empty();

    for (var i = 0; i &amp;lt; pData.length; i++) {
        wsHtml += '&amp;lt;tr&amp;gt;';
        wsHtml += '&amp;lt;td&amp;gt;' + trim(pData[i].col_1) + '&amp;lt;/td&amp;gt;';
        wsHtml += '&amp;lt;td&amp;gt;' + trim(pData[i].col_2) + '&amp;lt;/td&amp;gt;';
        wsHtml += '&amp;lt;td&amp;gt;' + trim(pData[i].col_3) + '&amp;lt;/td&amp;gt;';
        wsHtml += '&amp;lt;td&amp;gt;' + fncFormatDate(pData[i].col_4,4) + '&amp;lt;/td&amp;gt;';
        wsHtml += '&amp;lt;td&amp;gt;' + fncFormatNumber(pData[i].col_5,2,&quot;N&quot;) + '&amp;lt;/td&amp;gt;';
        wsHtml += '&amp;lt;td&amp;gt;' + trim(pData[i].col_6) + '&amp;lt;/td&amp;gt;';
        wsHtml += '&amp;lt;td&amp;gt;' + fncFormatNumber(pData[i].col_7,2,&quot;N&quot;) + '&amp;lt;/td&amp;gt;';
        wsHtml += '&amp;lt;td&amp;gt;' + trim(pData[i].col_8) + '&amp;lt;/td&amp;gt;';
        wsHtml += '&amp;lt;/tr&amp;gt;';
    }

    $('#tblRemittanceList &amp;gt; tbody:last').append(wsHtml);

    $('#tblRemittanceList').dataTable({
          &quot;autoWidth&quot;:false
        , &quot;destroy&quot;:true
        , &quot;info&quot;:false
        , &quot;JQueryUI&quot;:true
        , &quot;ordering&quot;:true
        , &quot;paging&quot;:false
        , &quot;scrollY&quot;:&quot;500px&quot;
        , &quot;scrollCollapse&quot;:true
    });

}
&lt;/code&gt;&lt;/pre&gt;&lt;h3 papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원인&lt;/font&gt;&lt;/h3&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;옵션 때문에 DataTables가 테이블을 파괴하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;destroy:true&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;h3 papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;솔루션 1위&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제거한다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;destroy:true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;option 및 destroy 후 API 메서드로 테이블을 조작합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;if ( $.fn.DataTable.isDataTable('#tblRemittanceList') ) {
  $('#tblRemittanceList').DataTable().destroy();
}

$('#tblRemittanceList tbody').empty();

// ... skipped ...

$('#tblRemittanceList').dataTable({
      &quot;autoWidth&quot;:false, 
      &quot;info&quot;:false, 
      &quot;JQueryUI&quot;:true, 
      &quot;ordering&quot;:true, 
      &quot;paging&quot;:false, 
      &quot;scrollY&quot;:&quot;500px&quot;, 
      &quot;scrollCollapse&quot;:true
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;솔루션 #2&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제거한다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;destroy:true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블 내용을 지우고 테이블 데이터를 추가한 다음 테이블을 다시 그리기 위해 테이블 사용을 삭제 및 재생성하는 대신 옵션을 선택합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 페이지 초기화 시 DataTables를 초기화해야 합니다.&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;다음과 같이 retrieve 옵션을 사용하여 데이터 테이블을 초기화할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var table = $('#myTable').DataTable( {
                        dom: 'Bfrtip',
                        retrieve: true, ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 치우고 파괴해야 하는 것보다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#myTable').DataTable().clear().destroy();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 데이터 테이블을 재생성할 때까지:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; var table = $('#myTable').DataTable( {
                        dom: 'Bfrtip',
                        retrieve: true,
&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;여기서 Retrieve 튜토리얼을 확인하십시오. https://datatables.net/reference/option/retrieve&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;그냥 destroy () 메서드를 사용하여 테이블을 다음과 같이 파괴합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#experience-table').DataTable().destroy();
&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;다음 예제와 같이 다시 initial화합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var table= $('#experience-table').DataTable({
                    processing: true,
                    serverSide: true,
                    ajax: '{{url('employee/experience/list/experience')}}'+'/'+emp_id,
                    columns: [
                        { data: 'emp_no', name: 'emp_no' },
                        { data: 'position', name: 'position' },
                        { data: 'organization', name: 'organization' },
                        { data: 'duration', name: 'duration' },
                        { data: 'action', name: 'action' },
                    ],
                    searching: false


                });
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;datatable refresh
$('#Clienttbl').dataTable().fnClearTable();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/32713612/jquery-datatables-destroy-re-create&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>ajax</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/976</guid>
      <comments>https://manycodes.tistory.com/976#entry976comment</comments>
      <pubDate>Mon, 23 Oct 2023 21:58:49 +0900</pubDate>
    </item>
    <item>
      <title>MariaDB: Select the fields from one column in one table that are not in a subset of another column from another table</title>
      <link>https://manycodes.tistory.com/975</link>
      <description>&lt;h2 papago-id=&quot;0&quot;&gt;MariaDB: Select the fields from one column in one table that are not in a subset of another column from another table&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;strong papago-id=&quot;0-0&quot;&gt;업데이트&lt;/strong&gt;: 다음을 사용하는 답변 제공 안 함&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NOT EXISTS&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. &lt;a href=&quot;http://www.techonthenet.com/mariadb/exists.php&quot; rel=&quot;nofollow&quot; papago-id=&quot;1-1&quot;&gt;MariaDB&lt;/a&gt;에 따르면 &quot;MariaDB의 EXIST 조건을 사용하는 SQL 문은 외부 쿼리 테이블의 모든 행에 대해 하위 쿼리가 재실행되므로 매우 비효율적입니다.&quot;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 쿼리는 &lt;em papago-id=&quot;1-3&quot;&gt;&lt;strong papago-id=&quot;1-3-0&quot;&gt;많이&lt;/strong&gt;&lt;/em&gt; 사용될 것이므로 효율적이어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블이 두개 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;following&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;CREATE TABLE `following` (
 `follower` int(1) unsigned NOT NULL,
 `followee` int(1) unsigned NOT NULL,
 PRIMARY KEY (`follower`,`followee`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
&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;association_record&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;CREATE TABLE `association_record` (
 `user_id` int(1) unsigned NOT NULL,
 `post_id` int(1) unsigned NOT NULL,
 `answer_id` int(1) unsigned NOT NULL,
 `date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`user_id`,`post_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
&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;follower&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;followee&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'5' 가 없는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;association_record&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;88'이라는 글과 함께.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 SQL은 다른 게시물을 읽고 생각해낸 것이지만 원하는 결과를 얻지는 못합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select f.follower
from following f
left outer join association_record a
on f.follower = a.user_id
where f.followee = 5
and a.post_id = 88
and a.user_id is null
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;select f.follower from following f, response_record r where f.follower = r.user_id and f.followee = 5 and r.post_id = 88 and r.user_id is null
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot;&gt;try this&lt;/p&gt;&lt;p papago-id=&quot;12&quot;&gt;To make things easier, it is better to start step by step. &lt;/p&gt; 
&lt;p papago-id=&quot;13&quot;&gt;So, we need people who follows user '5'? Here is the query.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select follower from following where followee = 5;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot;&gt;Now we need to know wich users have a record on post '88'.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select user_id from association_record where post_id=88;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot;&gt;Now we need fixing both queries in some way. Let's do it:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select follower from following where followee = 5 and not exists (select user_id from association_record where post_id=88 and user_id=follower);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot;&gt;And that's it. Here you have your query explained. &lt;/p&gt;&lt;p papago-id=&quot;17&quot;&gt;Here was the query that did it:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT f.follower
FROM following f
LEFT OUTER JOIN association_record a
ON f.follower = a.user_id
AND a.poll_id = 88
WHERE f.followee = 5
AND a.user_id is null
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot;&gt;Forgot to post the solution to my question after I solved it, and now a month later, I end up having a similar problem but without any reference to the original solution; didn't need it anymore.&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot;&gt;Almost had to resolve the whole issue again from scratch; which would have been tough being that I never understood how the solution worked. Luckily, MySQL workbench keeps a log of all the queries ran from it, and trying queries to answer this question was one of the few times I've used it.&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot;&gt;Moral of the story, don't forget to post your solution; you might be doing it for yourself.&lt;/p&gt;&lt;p papago-id=&quot;21&quot;&gt;Method 2: Using join&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT follower
FROM following, association_record
WHERE follower=user_id
  AND followee = 5
  AND post_id=88
  AND user_id = null;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot;&gt;Some SQL engines use != and some use &amp;lt;&amp;gt;. Try both if you have trouble.&lt;/p&gt;&lt;p papago-id=&quot;23&quot;&gt;ReferenceURL : &lt;a href=&quot;https://stackoverflow.com/questions/37084178/mariadb-select-the-fields-from-one-column-in-one-table-that-are-not-in-a-subset&quot; target=&quot;_blank&quot; papago-id=&quot;23-1&quot;&gt;https://stackoverflow.com/questions/37084178/mariadb-select-the-fields-from-one-column-in-one-table-that-are-not-in-a-subset&lt;/a&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>mariadb</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/975</guid>
      <comments>https://manycodes.tistory.com/975#entry975comment</comments>
      <pubDate>Mon, 23 Oct 2023 21:58:41 +0900</pubDate>
    </item>
    <item>
      <title>Oracle의 동적 테이블 파티셔닝</title>
      <link>https://manycodes.tistory.com/974</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;font class=&quot;papago-parent&quot;&gt;날짜 필드에서 인덱스를 사용할 계획입니다. 특정 기간 동안 모든 레코드를 일괄 복구할 것이기 때문입니다(예: 다음날 자정에 모든 레코드 검색).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 시스템에서는 레코드의 수가 방대하고 성능이 중요한 문제이기 때문에 더 이상 필요하지 않은 파티션을 생성하고 잘라낼 수 있도록 테이블을 동적으로 분할할 수 있는 방법이 있는지 알고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 오늘의 레코드 처리를 마친 후 다음 날에 사용할 파티션을 만들고 나머지 데이터로 채우는 방법은 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;11g에서 INTERVAL 파티션을 정의할 수 있으며 Oracle은 기존 범위에 키가 맞지 않는 새 레코드를 얻으면 자동으로 새 파티션을 만듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 아주 멋진 기능입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.oracle.com/technetwork/database/options/partitioning/twp-partitioning-11gr2-2009-09-130569.pdf&quot; rel=&quot;noreferrer&quot; title=&quot;Oracle 백서—Oracle Database 11g Release 2와의 파티션(경고: PDF)&quot; papago-id=&quot;3-1&quot; papago-attr-id=&quot;2&quot;&gt;자세히&lt;/a&gt; 알아보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 가지 주의해야 할 점은 Enterprise Edition 라이센스에 추가로 파티셔닝을 추가로 사용할 수 있다는 점입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 그것은 사용하기에 싸지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/dynamic.htm#i14500&quot; papago-id=&quot;5-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;동적 SQL&lt;/a&gt;을 사용하여 파티션을 만들거나 자르는 프로세스를 자동화할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/dynamic.htm#sthref1557&quot; papago-id=&quot;5-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;EXECUCT REMITED&lt;/a&gt;를 사용하여 절차를 작성하거나 또는 EXECUCT REMITED를 사용하여 예약합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DBMS_SCHEDULER&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 10g 기능이며 보다 더 다용도적입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DBMS_JOB&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;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DDL에 자신이 있을 때 먼저 수동으로 파티션 문을 만들고 나중에 프로세스를 자동화하는 것이 좋을 것입니다. &lt;a href=&quot;http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_3001.htm#CJAHHIBI&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;8-1&quot;&gt;ALTER TABLE 문에 대한 설명서&lt;/a&gt;에서 모든 synthax를 찾을 수 있을 것입니다.&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;SYSDATE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오프셋도 있고요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 연결된 문자열로 대체 매개 변수를 만들어야 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SYSDATE&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;COLUMN temp_var new_value partition_name_01;
SELECT 'TABLE_NAME_' || TO_CHAR(SYSDATE - 3, 'YYYYMMDD') AS temp_var FROM dual;
COLUMN temp_var new_value partition_date_01;
SELECT TO_CHAR(SYSDATE - 3, 'SYYYY-MM-DD') || ' 00:00:00' AS temp_var FROM dual;
COLUMN temp_var new_value partition_name_02;
SELECT 'TABLE_NAME_' || TO_CHAR(SYSDATE - 2, 'YYYYMMDD') AS temp_var FROM dual;
COLUMN temp_var new_value partition_date_02;
SELECT TO_CHAR(SYSDATE - 2, 'SYYYY-MM-DD') || ' 00:00:00' AS temp_var FROM dual;
COLUMN temp_var new_value partition_name_03;
SELECT 'TABLE_NAME_' || TO_CHAR(SYSDATE - 1, 'YYYYMMDD') AS temp_var FROM dual;
COLUMN temp_var new_value partition_date_03;
SELECT TO_CHAR(SYSDATE - 1, 'SYYYY-MM-DD') || ' 00:00:00' AS temp_var FROM dual;
COLUMN temp_var new_value partition_name_04;
SELECT 'TABLE_NAME_' || TO_CHAR(SYSDATE, 'YYYYMMDD') AS temp_var FROM dual;
COLUMN temp_var new_value partition_date_04;
SELECT TO_CHAR(SYSDATE, 'SYYYY-MM-DD') || ' 00:00:00' AS temp_var FROM dual;
CREATE TABLE TABLE_NAME
(
   SEQ_NO                 NUMBER NOT NULL,
   INSERT_DATE            DATE NOT NULL,
   FIRST_NAME             VARCHAR2 (256 BYTE),
   LAST_NAME              VARCHAR2 (256 BYTE),
   ID_NUM                 NUMBER,
   ID_STATUS              NUMBER
)

PARTITION BY RANGE
   (INSERT_DATE)
   SUBPARTITION BY LIST
      (ID_STATUS)
      SUBPARTITION TEMPLATE (
         SUBPARTITION SP1 VALUES (0) TABLESPACE &amp;amp;tblspce,
         SUBPARTITION SP2 VALUES (1) TABLESPACE &amp;amp;tblspce,
         SUBPARTITION SP3 VALUES (2) TABLESPACE &amp;amp;tblspce)

   (
   PARTITION &amp;amp;partition_name_01
      VALUES LESS THAN
      (TO_DATE ('&amp;amp;partition_date_01',
                   'SYYYY-MM-DD HH24:MI:SS',
                   'NLS_CALENDAR=GREGORIAN')),

   PARTITION &amp;amp;partition_name_02
      VALUES LESS THAN
      (TO_DATE ('&amp;amp;partition_date_02',
                   'SYYYY-MM-DD HH24:MI:SS',
                   'NLS_CALENDAR=GREGORIAN')),

   PARTITION &amp;amp;partition_name_03
      VALUES LESS THAN
      (TO_DATE ('&amp;amp;partition_date_03',
                   'SYYYY-MM-DD HH24:MI:SS',
                   'NLS_CALENDAR=GREGORIAN')),
sysdate

   PARTITION &amp;amp;partition_name_04
      VALUES LESS THAN
      (TO_DATE ('&amp;amp;partition_date_04',
                   'SYYYY-MM-DD HH24:MI:SS',
                   'NLS_CALENDAR=GREGORIAN')))

ENABLE ROW MOVEMENT;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자동으로 처리해주는 제품이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Partition Manager for Oracle은 오래된 데이터 삭제 및 보관, 통계 복사본 등 조직 보존을 기반으로 자동 파티션 관리 기능을 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.xyrosoft.com 에서 사용해 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2191780/dynamic-table-partitioning-in-oracle&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Oracle</category>
      <author>manycodes</author>
      <guid isPermaLink="true">https://manycodes.tistory.com/974</guid>
      <comments>https://manycodes.tistory.com/974#entry974comment</comments>
      <pubDate>Mon, 23 Oct 2023 21:58:34 +0900</pubDate>
    </item>
  </channel>
</rss>