<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>sourcejob</title>
    <link>https://sourcejob.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Mon, 11 May 2026 00:19:43 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>sourcejob</managingEditor>
    <item>
      <title>두 테이블 이상의 조건에서 최대 절전 모드로 대량 삽입</title>
      <link>https://sourcejob.tistory.com/1231</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 테이블 이상의 조건에서 최대 절전 모드로 대량 삽입&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터베이스에 URL 목록이 없거나 다른 테이블에 없는 조건으로 삽입하고 싶습니다.&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;현재 제 시도는 매우 느립니다. 모든 요청은 100ms - 500ms가 걸릴 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for(URL url : urls) {
 if (this.urlToEditService.findByUrl(newUrl).size() == 0 &amp;amp;&amp;amp;
     this.rawPageService.findByUrl(newUrl).size() == 0) {

      UrlToEdit urlToEdit = new UrlToEdit(newUrl);
      urlToEditService.save(urlToEdit);
 }
}

&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 boolean save(UrlToEdit urlToEdit) {
        Transaction transaction = null;
        try (Session session = factory.openSession()) {
            transaction = session.beginTransaction();
            session.save(urlToEdit);
            transaction.commit();
        } catch (Exception e) {
            if (transaction != null) {
                transaction.rollback();
            }
            e.printStackTrace();
            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;font papago-translate=&quot;translated&quot;&gt;열린 부분과 닫힌 부분이 목 부분이라는 것을 상상할 수 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;EDIT1: 코드를 조금 변경하여 &lt;a href=&quot;https://stackoverflow.com/questions/7349464/bulk-insert-or-update-with-hibernate&quot;&gt;다음 답변&lt;/a&gt;을 바탕으로 한 트랜잭션에 저장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;List&amp;lt;URLToEdit&amp;gt; list = new ArrayList();
for(URL url : urls) {
 if (this.urlToEditService.findByUrl(newUrl).size() == 0 &amp;amp;&amp;amp;
     this.rawPageService.findByUrl(newUrl).size() == 0) {

      list.add( new UrlToEdit(newUrl));
 }
}

&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;public boolean save(List&amp;lt;URLToEdit&amp;gt; urlToEditList) {
        Transaction transaction = null;
        
        int counter = 0;

        try (Session session = factory.openSession()) {
            transaction = session.beginTransaction();
            for (UrlToEdit urlToEdit : urlToEditList) {
                     session.save(urlToEdit);
                     counter++;

                     if(counter &amp;gt; 20) { 
                         counter = 0;
                         session.flush();
                         session.clear();
                     }
            }
            transaction.commit();
        } catch (Exception e) {
            if (transaction != null) {
                transaction.rollback();
            }
            e.printStackTrace();
            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;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/62686730/bulk-insert-in-hibernate-under-conditions-over-two-tables&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1231</guid>
      <comments>https://sourcejob.tistory.com/1231#entry1231comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:34:37 +0900</pubDate>
    </item>
    <item>
      <title>MERGE 테이블, 일치 시 아무것도 수행하지 않음</title>
      <link>https://sourcejob.tistory.com/1230</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MERGE 테이블, 일치 시 아무것도 수행하지 않음&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;DOMAINS&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열이 있는 두 개의 다른 스키마에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ID&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;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;code&gt;CODE&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DESCRIPTION&lt;/code&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;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;code&gt;ID&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새로운 것에 대해서는 아무런 합병도 않고&lt;/font&gt;&lt;/font&gt;&lt;code&gt;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;code&gt;ID&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구태의연한 도식에서&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;MERGE INTO domains a
     USING ( SELECT id, name, code, description 
               FROM &amp;lt;Old Schema 6.1&amp;gt;.domains@db_mig_61_to_74 ) b
        ON ( a.name = b.name )
      WHEN MATCHED **&amp;lt;do nothing&amp;gt;**
      WHEN NOT MATCHED THEN INSERT( a.id, a.name, a.code, a.description ) 
                            VALUES( b.id, b.name, b.code, b.description );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 부분을 어떻게 해석할 수 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;do nothing&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위의 질문에서?&lt;/font&gt;&lt;/font&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;p&gt;&lt;code&gt;WHEN MATCHED THEN UPDATE ...&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(&lt;em&gt;사용은 허용되지만(Oracle은 Hurl이 되지&lt;/em&gt; 않음)&lt;em&gt; 영향이 없으므로&lt;/em&gt;, &lt;em&gt;일치&lt;/em&gt;하는 경우에 &lt;em&gt;대해 아무것도 변경하고 싶지 않으므로, 이러한 사용은 중복됩니다.)&lt;/em&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;code&gt;WHEN MATCHED THEN UPDATE SET a.id = b.id&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;WHEN NOT MATCHED THEN INSERT...&lt;/code&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(&lt;em&gt;예:Oracle은 구문을 지원합니다.&lt;/em&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt; &lt;/em&gt;아래 &lt;em&gt;데모 참조&lt;/em&gt;)&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 사례에 대해 다음과 같이 진행합니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; CREATE TABLE domains( 
                           id          INT, 
                           name        VARCHAR2(50), 
                           code        VARCHAR2(50), 
                           description VARCHAR2(50)
                         );

SQL&amp;gt; INSERT INTO domains VALUES(1,'Domain A','D.A.','This is Domain A');

SQL&amp;gt; MERGE INTO domains a USING 
     (SELECT 2 id, 'Domain A' name, 'D.A.' code, 'This is Domain A' description 
        FROM domains) b
          ON ( a.name = b.name )
        WHEN NOT MATCHED THEN INSERT( a.id, a.name, a.code, a.description ) 
                              VALUES( b.id, b.name, b.code, b.description );

SQL&amp;gt; SELECT * FROM domains;

ID  NAME        CODE    DESCRIPTION
--  --------   -----  ----------------
1   Domain A    D.A.  This is Domain A

SQL&amp;gt; DELETE domains;

SQL&amp;gt; INSERT INTO domains VALUES(1,'Domain A','D.A.','This is Domain A');
-- we're deleting and inserting the same row again

SQL&amp;gt; MERGE INTO domains a USING       
 (SELECT 2 id, 'Domain B' name, 'D.B.' code, 'This is Domain B' description 
    FROM domains) b
      ON ( a.name = b.name )
    WHEN NOT MATCHED THEN INSERT( a.id, a.name, a.code, a.description ) 
                          VALUES( b.id, b.name, b.code, b.description );


SQL&amp;gt; SELECT * FROM domains;

ID  NAME        CODE    DESCRIPTION
--  --------   -----  ----------------
1   Domain A    D.A.  This is Domain A
2   Domain B    D.B.  This is Domain B
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;kbd&gt;&lt;a href=&quot;https://dbfiddle.uk/rvGWTblX&quot; rel=&quot;nofollow noreferrer&quot;&gt;Demo&lt;/a&gt;&lt;/kbd&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;그건&lt;/strong&gt; 그렇고, 그 다음에 나오는 부분은.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;USING&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;키워드는 하위 &lt;em&gt;&lt;strong&gt;쿼리&lt;/strong&gt;&lt;/em&gt;가 아니라 &lt;em&gt;&lt;strong&gt;테이블&lt;/strong&gt;&lt;/em&gt; 또는 &lt;em&gt;&lt;strong&gt;보기&lt;/strong&gt;&lt;/em&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;MERGE INTO domains ds       --&amp;gt; &quot;ds&quot; : &quot;domains&quot; source
     USING v_domains dt     --&amp;gt; &quot;dt&quot; : &quot;domains&quot; target
        ON ( ds.name = dt.name )
      WHEN NOT MATCHED THEN INSERT( ds.id, ds.name, ds.code, ds.description ) 
                            VALUES( dt.id, dt.name, dt.code, dt.description )
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음을 통해 뷰를 작성한 후 위의 문장과 동일하게 사용될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE OR REPLACE VIEW v_domains AS
SELECT 2 id, 'Domain A' name, 'D.A.' code, 'This is Domain A' description 
  FROM domains
&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;Oracle SQL 구문은 다음을 지원하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;when matched then 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;/p&gt; 
&lt;pre&gt;&lt;code&gt;drop table ft purge;
create table ft (c1 number, c2 varchar2(10));

drop table ld purge;
create table ld (c1 number, c2 varchar2(10));

insert into ft values (1,'a');
insert into ld values (1,'b');
insert into ld values (2,'c');
commit;

merge into ft 
using ld
on (ft.c1 = ld.c1) 
when not matched then
insert (c1,c2) values (ld.c1,ld.c2);

select * from ft;

C1  C2
--- ---
1   a
2   c

2 rows selected.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용하지 않는 이유&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;A로 합치다&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;B를 이용하여&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;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;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;...&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 확인한 바로는...&lt;/font&gt;&lt;/p&gt;&lt;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/49848995/merge-table-do-nothing-when-matched&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1230</guid>
      <comments>https://sourcejob.tistory.com/1230#entry1230comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:34:30 +0900</pubDate>
    </item>
    <item>
      <title>TypeError: 정의되지 않은(mariaDB, ExpressJs) 속성 'findAll'을 읽을 수 없습니다.</title>
      <link>https://sourcejob.tistory.com/1229</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;TypeError: 정의되지 않은(mariaDB, ExpressJs) 속성 'findAll'을 읽을 수 없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;TypeError: 정의되지 않은 속성 'findAll'을 읽을 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;code&gt;findAll&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수는 오류를 만들지만,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Connection&lt;/code&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;managers&lt;/code&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;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;app.js&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모델들&lt;/font&gt;&lt;/font&gt;&lt;ul&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;index.js&lt;/font&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마리아야.&lt;/font&gt;&lt;/font&gt;&lt;ul&gt; 
     &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;manager.model.js&lt;/font&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;통&lt;/font&gt;&lt;/font&gt;&lt;ul&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;www.js&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;models/index.js&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;const { Sequelize } = require('sequelize');

const manager = new Sequelize({
    dialect: 'mariadb',
    host: '127.0.0.1',
    port: '13306',
    username: 'xxx',
    password: 'xxx',
    database: 'test',
    timezone: 'Asia/Seoul'
});

require('./maria/manager.model')(manager);

module.exports=manager;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;models/ maria/ manager.model.js&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;const { DataTypes } = require('sequelize');

module.exports = (sequelize) =&amp;gt; {
     sequelize.define('manager', {
        id: {
            allowNull: false,
            autoIncrement: true,
            primaryKey: true,
            type: DataTypes.INTEGER
        },
        name: {
            allowNull: false,
            type: DataTypes.STRING,
        }
    }, {timestamps: true }).sync({force:false});
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;app.js&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;const express = require('express');
const app = express();

const db = require('./models');
console.log(`Checking database connection...`);

// It works!
db.authenticate().then(()=&amp;gt;{
  console.log('Database connection OK!');
});

// It makes error!
const find_test = db.manager.findAll();
console.log(find_test);

&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;manager&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변수 ? 당신의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;manager&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;variable에 연결 sequelize가 포함되어 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 목적은 테이블을 요청하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;manager&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;const { DataTypes } = require('sequelize');

module.exports = (sequelize) =&amp;gt; {
     return sequelize.define('manager', {
        id: {
            allowNull: false,
            autoIncrement: true,
            primaryKey: true,
            type: DataTypes.INTEGER
        },
        name: {
            allowNull: false,
            type: DataTypes.STRING,
        }
    }, {timestamps: 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;const { Sequelize } = require('sequelize');

const manager = new Sequelize({
    dialect: 'mariadb',
    host: '127.0.0.1',
    port: '13306',
    username: 'xxx',
    password: 'xxx',
    database: 'test',
    timezone: 'Asia/Seoul'
});

const myTable = require('./maria/manager.model')(manager);

module.exports= {
  manager, myTable
};
&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;const express = require('express');
const app = express();

const { manager, myTable }= require('./models');
console.log(`Checking database connection...`);

// It works!
manager.authenticate().then(()=&amp;gt;{
  console.log('Database connection OK!');
});


const find_test = myTable.findAll();
console.log(find_test);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 파일에서 마지막으로 내보낸 새 변수를 가져오십시오! 그리고 Enjoy!&lt;/font&gt;&lt;/p&gt;&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;app.js&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;후속작으로 삼다&lt;/font&gt;&lt;/font&gt;&lt;ul&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모델들&lt;/font&gt;&lt;/font&gt;&lt;ul&gt; 
     &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;manager.model.js&lt;/font&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;index.js&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;app.js&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const maria = require('./sequelize');
const { models } = require('./sequelize');

console.log(`Checking database connection...`);
maria.authenticate()
    .then(()=&amp;gt;{
      console.log('Database connection OK!');
    });

const test = models.manager.findOne()

&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;sequelize/index.js&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const { Sequelize } = require('sequelize');

const maria = new Sequelize({
    dialect: 'mariadb',
    host: '127.0.0.1',
    port: '13306',
    username: 'xxxx',
    password: 'xxxx',
    database: 'test',
    timezone: 'Asia/Seoul'
});

require('./models/manager.model')(maria)

module.exports=maria;
&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/63256698/typeerror-cannot-read-property-findall-of-undefined-mariadb-expressjs&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1229</guid>
      <comments>https://sourcejob.tistory.com/1229#entry1229comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:34:22 +0900</pubDate>
    </item>
    <item>
      <title>재현 가능한 좋은 Apache Spark 예제를 만드는 방법</title>
      <link>https://sourcejob.tistory.com/1228</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;재현 가능한 좋은 Apache Spark 예제를 만드는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 &lt;a class=&quot;post-tag&quot; href=&quot;/questions/tagged/pyspark&quot; rel=&quot;tag&quot; title=&quot;'pyspark' 태그가 지정된 질문 표시합니다.&quot; papago-attr-id=&quot;3&quot;&gt;pyspark&lt;/a&gt; 및 &lt;a class=&quot;post-tag&quot; href=&quot;/questions/tagged/spark-dataframe&quot; rel=&quot;tag&quot; title=&quot;spark-데이터 프레임' 태그가 지정된 질문을 보여주기&quot; papago-attr-id=&quot;4&quot;&gt;spark-dataframe&lt;/a&gt; 태그를 사용하여 몇 가지 질문을 읽는 데 상당한 시간을 보냈습니다. 포스터가 질문을 제대로 이해하기에 충분한 정보를 제공하지 못한다는 사실을 자주 알게 되었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 &lt;a href=&quot;https://stackoverflow.com/help/mcve&quot;&gt;보통&lt;/a&gt; MCVE를 올려달라고 요청하지만 때로는 샘플 입출력 데이터를 보여주도록 요청하는 것은 이를 뽑는 것과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아마도 문제의 일부는 사람들이 스파크 데이터 프레임을 위한 MCVE를 쉽게 만드는 방법을 모른다는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples&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;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쉽게 다시 만들 수 있는 작은 샘플 데이터를 제공합니다.&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최소한 포스터는 데이터 프레임과 코드에 몇 개의 행과 열을 제공하여 쉽게 만들 수 있도록 해야 합니다.&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;hr&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 다음과 같은 데이터 프레임을 가지고 있습니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-python prettyprint-override&quot;&gt;&lt;code&gt;+-----+---+-----+----------+
|index|  X|label|      date|
+-----+---+-----+----------+
|    1|  1|    A|2017-01-01|
|    2|  3|    B|2017-01-02|
|    3|  5|    A|2017-01-03|
|    4|  7|    B|2017-01-04|
+-----+---+-----+----------+
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 코드로 만들 수 있습니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-python prettyprint-override&quot;&gt;&lt;code&gt;df = sqlCtx.createDataFrame(
    [
        (1, 1, 'A', '2017-01-01'),
        (2, 3, 'B', '2017-01-02'),
        (3, 5, 'A', '2017-01-03'),
        (4, 7, 'B', '2017-01-04')
    ],
    ('index', 'X', 'label', 'date')
)
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원하는 출력을 표시합니다.&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구체적인 질문을 하고 원하는 결과물을 보여주십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 열을 만들려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/em&gt;&lt;/font&gt; &lt;code&gt;'is_divisible'&lt;/code&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가치가 있는.&lt;/font&gt;&lt;/em&gt;&lt;/font&gt; &lt;code&gt;'yes'&lt;/code&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 그 달의 날에&lt;/font&gt;&lt;/em&gt;&lt;/font&gt; &lt;code&gt;'date'&lt;/code&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;+ 7일은 열에 있는 값으로 나눕니다.&lt;/font&gt;&lt;/em&gt;&lt;/font&gt;&lt;code&gt;'X'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, &lt;em&gt;그리고&lt;/em&gt;&lt;/font&gt;&lt;/font&gt; &lt;code&gt;'no'&lt;/code&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇지 않다면요?&lt;/font&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원하는 출력:&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-python prettyprint-override&quot;&gt;&lt;code&gt;+-----+---+-----+----------+------------+
|index|  X|label|      date|is_divisible|
+-----+---+-----+----------+------------+
|    1|  1|    A|2017-01-01|         yes|
|    2|  3|    B|2017-01-02|         yes|
|    3|  5|    A|2017-01-03|         yes|
|    4|  7|    B|2017-01-04|          no|
+-----+---+-----+----------+------------+
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출력을 얻는 방법을 설명합니다.&lt;/font&gt;&lt;/h3&gt; 
&lt;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;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 1행에서 X = 1 및 날짜 = 2017-01-01입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재까지 7일을 더하면 2017-01-08이 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 달의 요일은 8이고 8은 1로 나눌 수 있기 때문에 '네'라고 대답합니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마찬가지로 마지막 행 X = 7 및 날짜 = 2017-01-04의 경우.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;날짜에 7을 더하면 11이 이달의 날로 계산됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;11% 7은 0이 아니기 때문에 '아니오'라고 대답합니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기존 코드를 공유합니다.&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작동하지 않더라도 코드의 &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;(*스파크 컨텍스트 생성을 위해 코드를 생략할 수 있지만, 모든 가져오기를 포함해야 합니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 열을 추가하는 방법을 알고 있습니다.&lt;/font&gt;&lt;/em&gt; &lt;code&gt;date&lt;/code&gt; &lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;7일을 더 추가했는데 이달의 날을 정수로 구하는 데 어려움을 겪고 있습니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-python prettyprint-override&quot;&gt;&lt;code&gt;from pyspark.sql import functions as f
df.withColumn(&quot;next_week&quot;, f.date_add(&quot;date&quot;, 7))
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;버전, 가져오기 및 구문 강조 표시 사용&lt;/font&gt;&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/users/4685471/desertnaut&quot;&gt;데저트넛&lt;/a&gt;이 쓴 이 &lt;a href=&quot;https://stackoverflow.com/a/48427953/5858851&quot;&gt;답변&lt;/a&gt;의 자세한 내용.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성능 튜닝 게시물의 경우 실행 계획을 포함합니다.&lt;/font&gt;&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/users/3269809/alper-t-turker&quot;&gt;알퍼트&lt;/a&gt;가 쓴 이 &lt;a href=&quot;https://stackoverflow.com/a/48428198/5858851&quot;&gt;답변&lt;/a&gt;의 자세한 내용&lt;a href=&quot;https://stackoverflow.com/users/3269809/alper-t-turker&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/users/3269809/alper-t-turker&quot;&gt; 터커&lt;/a&gt;.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컨텍스트에 표준화된 이름을 사용하는 데 도움이 됩니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스파크 출력 파일 구문 분석&lt;/font&gt;&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/users/5741205/maxu&quot;&gt;MaxU&lt;/a&gt;는 이 &lt;a href=&quot;https://stackoverflow.com/a/48454013/5858851&quot;&gt;답변&lt;/a&gt;에서 Spark 출력 파일을 DataFrame으로 파싱하는 데 도움이 되는 유용한 코드를 제공했습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 노트들.&lt;/font&gt;&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/help/how-to-ask&quot;&gt;질문하는 방법&lt;/a&gt;과 &lt;a href=&quot;https://stackoverflow.com/help/mcve&quot;&gt;최소&lt;/a&gt;, &lt;a href=&quot;https://stackoverflow.com/help/mcve&quot;&gt;완료 및 검증 가능한 예제를 만드는 방법&lt;/a&gt;을 먼저 읽어 보십시오.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위에 링크된 이 질문에 대한 다른 답변을 읽어 보십시오.&lt;/font&gt;&lt;/li&gt; 
 &lt;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;font papago-translate=&quot;translated&quot;&gt;SO에 계신 분들은 자원봉사자니까 예쁘게 물어보세요.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성능튜닝&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성능 튜닝과 관련된 질문일 경우 다음 정보를 포함하여 주시기 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행계획&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;확장 실행 계획&lt;/strong&gt;을 포함하는 것이 가장 좋습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Python의 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;df.explain(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 class=&quot;lang-scala prettyprint-override&quot;&gt;&lt;code&gt;df.explain(true)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;또는&lt;/strong&gt; 통계와 &lt;strong&gt;함께 확장&lt;/strong&gt; 실행 &lt;strong&gt;계획&lt;/strong&gt;을 세울 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Python의 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;print(df._jdf.queryExecution().stringWithStats())
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스칼라:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-scala prettyprint-override&quot;&gt;&lt;code&gt;df.queryExecution.stringWithStats
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모드 및 클러스터 정보&lt;/font&gt;&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;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;local&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;client&lt;/code&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;클러스터 관리자(해당하는 경우) - 없음(로컬 모드), 독립 실행형, YRAN, Mesos, Kubernetes.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 구성 정보(코어 수, 실행기 메모리)&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;타이밍정보&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;속도&lt;/em&gt;가 느리다는 것은 상대적인 현상입니다. 특히 &lt;em&gt;distrib&lt;/em&gt;되지 않은 애플리케이션을 포팅하거나 대기 시간이 짧을 것으로 예상되는 경우 더욱 그렇습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다양한 작업 및 스테이지에 대한 정확한 타이밍은 Spark UI에서 가져올 수 있습니다(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sc.uiWebUrl&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jobs&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면 스파크 REST UI.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컨텍스트에 표준화된 이름 사용&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 컨텍스트에 대해 확립된 이름을 사용하면 문제를 신속하게 재현할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;sc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;- …을 위하여&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SparkContext&lt;/code&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;sqlContext&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;- …을 위하여&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SQLContext&lt;/code&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;spark&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;- …을 위하여&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SparkSession&lt;/code&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;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유형 정보 제공(&lt;strong&gt;Scala&lt;/strong&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;선호하다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;val lines: RDD[String] = sc.textFile(&quot;path&quot;)
val words: RDD[String] = lines.flatMap(_.split(&quot; &quot;))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위에&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;val lines = sc.textFile(&quot;path&quot;)
val words = lines.flatMap(_.split(&quot; &quot;))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로 사용되는 도구는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;code&gt;spark-shell&lt;/code&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;:t&lt;/code&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;scala&amp;gt; val rdd = sc.textFile(&quot;README.md&quot;)
rdd: org.apache.spark.rdd.RDD[String] = README.md MapPartitionsRDD[1] at textFile at &amp;lt;console&amp;gt;:24

scala&amp;gt; :t rdd
org.apache.spark.rdd.RDD[String]
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인텔 iJ 아이디어&lt;/font&gt;&lt;/p&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;translated&quot;&gt;이미 제공된 내용에 대한 몇 가지 추가 제안 사항:&lt;/font&gt;&lt;/p&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Spark 버전 포함&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스파크는 1.x 시절처럼 빠르게 진화하고 있지는 않지만 여전히 진화하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작업 버전을 포함하는 것이 항상 좋습니다(특히 약간 오래된 버전을 사용하는 경우).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;개인적으로, 저는 &lt;em&gt;항상&lt;/em&gt; 다음과 같이 대답을 시작합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-python prettyprint-override&quot;&gt;&lt;code&gt;spark.version
# u'2.2.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 class=&quot;lang-python prettyprint-override&quot;&gt;&lt;code&gt;sc.version
# u'2.2.0'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Python 버전을 포함하는 것도 결코 나쁘지 않은 생각입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가져온 항목을 모두 포함합니다.&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Spark SQL 및 데이터 프레임에 대한 질문이 엄격하지 않은 경우(예: 기계 학습 작업에서 데이터 프레임을 사용하고자 하는 경우) 수입품에 대해 명시적으로 설명하십시오. 이 &lt;a href=&quot;https://stackoverflow.com/questions/48383466/how-do-i-get-perplexity-and-log-likelihood-in-spark-lda/48384063#48384063&quot;&gt;질문&lt;/a&gt;을 참조하십시오.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(현재 제거된) 의견에서 광범위하게 교환한 후에야 OP에 수입품이 추가되었습니다 (그리고 이러한 잘못된 수입품이 문제의 근본 원인임이 밝혀졌습니다).&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;왜냐하면, 예를 들면, 이 LDA는&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-python prettyprint-override&quot;&gt;&lt;code&gt;from pyspark.mllib.clustering import LDA
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 이 &lt;em&gt;LDA&lt;/em&gt;와 다릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-python prettyprint-override&quot;&gt;&lt;code&gt;from pyspark.ml.clustering import LDA
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫 번째는 기존 RDD 기반 API(이전의 Spark MLlib)에서 나온 것이고, 두 번째는 새로운 데이터 프레임 기반 API(Spark ML)에서 나온 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드 강조 포함&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자, 이것은 주관적인 것임을 고백하겠습니다: PySpark 질문에 다음과 같이 태그를 붙여서는 안 된다고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;python&lt;/code&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;기본적&lt;/em&gt;으로, 문제는,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;python&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;태그는 자동으로 코드 강조 표시를 제공합니다(이것이 PySpark 질문에 사용하는 사람들의 주된 이유라고 생각합니다).&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;&amp;lt;!-- language-all: lang-python --&amp;gt;&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 게시물 어딘가에, 당신의 첫번째 코드 조각 전에.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;[업데이트: 다음에 대한 자동 구문 강조 표시를 &lt;a href=&quot;https://meta.stackoverflow.com/questions/362624/automatic-syntax-highlighting-for-spark-python-r-apis-pyspark-sparkr&quot;&gt;요청&lt;/a&gt;했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pyspark&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sparkr&lt;/code&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;이 작은 도우미 기능은 스파크 출력 파일을 DataFrame으로 구문 분석하는 데 도움이 될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PySpark:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from pyspark.sql.functions import *

def read_spark_output(file_path):
    step1 = spark.read \
             .option(&quot;header&quot;,&quot;true&quot;) \
             .option(&quot;inferSchema&quot;,&quot;true&quot;) \
             .option(&quot;delimiter&quot;,&quot;|&quot;) \
             .option(&quot;parserLib&quot;,&quot;UNIVOCITY&quot;) \
             .option(&quot;ignoreLeadingWhiteSpace&quot;,&quot;true&quot;) \
             .option(&quot;ignoreTrailingWhiteSpace&quot;,&quot;true&quot;) \
             .option(&quot;comment&quot;,&quot;+&quot;) \
             .csv(&quot;file://{}&quot;.format(file_path))
    # select not-null columns
    step2 = t.select([c for c in t.columns if not c.startswith(&quot;_&quot;)])
    # deal with 'null' string in column
    return step2.select(*[when(~col(col_name).eqNullSafe(&quot;null&quot;), col(col_name)).alias(col_name) for col_name in step2.columns])
&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;// read Spark Output Fixed width table:
def readSparkOutput(filePath: String): org.apache.spark.sql.DataFrame = {
  val step1 = spark.read
    .option(&quot;header&quot;, &quot;true&quot;)
    .option(&quot;inferSchema&quot;, &quot;true&quot;)
    .option(&quot;delimiter&quot;, &quot;|&quot;)
    .option(&quot;parserLib&quot;, &quot;UNIVOCITY&quot;)
    .option(&quot;ignoreLeadingWhiteSpace&quot;, &quot;true&quot;)
    .option(&quot;ignoreTrailingWhiteSpace&quot;, &quot;true&quot;)
    .option(&quot;comment&quot;, &quot;+&quot;)
    .csv(filePath)

  val step2 = step1.select(step1.columns.filterNot(_.startsWith(&quot;_c&quot;)).map(step1(_)): _*)

  val columns = step2.columns
  columns.foldLeft(step2)((acc, c) =&amp;gt; acc.withColumn(c, when(col(c) =!= &quot;null&quot;, col(c))))
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;용도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df = read_spark_output(&quot;file:///tmp/spark.out&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;PS: &lt;strong&gt;pyspark&lt;/strong&gt;의 경우,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;eqNullSafe&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에서 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;spark 2.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;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/48427185/how-to-make-good-reproducible-apache-spark-examples&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>dataframe</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1228</guid>
      <comments>https://sourcejob.tistory.com/1228#entry1228comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:34:14 +0900</pubDate>
    </item>
    <item>
      <title>Wordpress SlideDeck2 플러그인 Role Scoper 플러그인과 Confilct</title>
      <link>https://sourcejob.tistory.com/1227</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Wordpress SlideDeck2 플러그인 Role Scoper 플러그인과 Confilct&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;워드프레스 v3.3.2를 설치하고 슬라이드데크2 플러그인을 설치하였습니다.&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;그 후 롤 스코퍼 플러그인 버전 1.3.57을 설치했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 내 사이트의 슬라이드 쇼(SlideDeck2)는 프레임이 보이고 이미지가 보이지 않는 경우에만 로그아웃된 경우 로그인한 사용자만 볼 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Role Scoper 플러그인을 비활성화하면 슬라이드 쇼가 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 슬라이드 쇼는 로그인되어 있거나 Role Scoper 플러그인이 활성화되어 있지 않은 경우에만 표시됩니다.&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;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 플러그인 모두 활성화&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;크롬으로 웹사이트 열기&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;F12를 쳐서 개발자 도구를 엽니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;콘솔 창으로 이동&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제를 암시하는 오류가 발생하고 있습니까?&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;역할 범위 사용 안 함&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2-4단계 실행&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;1-5단계를 실행하고 오류를 제거합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/13598547/wordpress-slidedeck2-plugin-confilct-with-role-scoper-plugin&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1227</guid>
      <comments>https://sourcejob.tistory.com/1227#entry1227comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:34:05 +0900</pubDate>
    </item>
    <item>
      <title>!중요한것이 성능에 안좋은가요?</title>
      <link>https://sourcejob.tistory.com/1226</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;!중요한것이 성능에 안좋은가요?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 그들이 싫어요. CSS의 계단식 특성을 무시하고, 주의 깊게 사용하지 않으면 추가하는 루프에 빠지게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&lt;/code&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;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편집&lt;/font&gt;&lt;/strong&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 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;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;EDIT 2&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;볼트클락은 만약 2개가 있다면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&lt;/code&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;strong&gt;Firefox의 CSS 파서&lt;/strong&gt;를 보고 CSS 규칙 &lt;strong&gt;덮어쓰기&lt;/strong&gt;를 처리하는 것이 관련 루틴이라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단지 &quot;중요&quot;에 대한 단순한 점검인 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  if (aIsImportant) {
    if (!HasImportantBit(aPropID))
      changed = PR_TRUE;
    SetImportantBit(aPropID);
  } else {
    // ...
  }
&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;    /**
     * Transfer the state for |aPropID| (which may be a shorthand)
     * from |aFromBlock| to this block.  The property being transferred
     * is !important if |aIsImportant| is true, and should replace an
     * existing !important property regardless of its own importance
     * if |aOverrideImportant| is true.
     * 
     * ...
     */
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;blockquote&gt; 
 &lt;ol&gt; 
  &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파이어폭스는 수동으로 작성된 하향식 파서를 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 경우 모두 각 CSS 파일은 StyleSheet 개체로 구문 분석되며 각 개체에는 CSS 규칙이 포함됩니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 Firefox는 끝 값을 포함하는 스타일 컨텍스트 트리를 만듭니다(모든 규칙을 올바른 순서로 적용한 후).&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;/ol&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/OE5Gq.png&quot; alt=&quot;CSS Parser Firefox&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://taligarsiel.com/Projects/howbrowserswork1.htm#CSS_parsing&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보낸이: http://taligarsiel.com/Projects/howbrowserswork1.htm#CSS_parsing&lt;/font&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위에서 설명한 객체 모델의 경우 파서가 다음과 같은 영향을 받는 규칙을 표시할 수 있다는 것을 쉽게 알 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;많은 비용을 들이지 않고도 쉽게.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성능 저하는 다음에 대한 좋은 논거가 &lt;strong&gt;아닙니다&lt;/strong&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&lt;/code&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;나는 그렇게 생각하지 않는다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&lt;/code&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;!important&lt;/code&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;strong&gt;정말&lt;/strong&gt; 까다롭게 굴었다면 이렇게 말할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CSS 파일에 11개의 바이트를 추가합니다. 이것은 많지 않지만, 꽤 많은 양이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&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;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 생각뿐입니다만, 안타깝게도 제가 생각하기에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&lt;/code&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;!important&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;하나의 작은 1x1 GIF가 중요한 GIF보다 웹 페이지에서 더 많은 성능 히트를 기록할 것입니다.&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 뒤에서 벌어지고 있는 일은 CSS가 처리되는 동안 브라우저가 이를 읽고,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;attribute, 브라우저는 다시 돌아가서 다음과 같이 정의된 스타일을 적용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&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;http://www.ishmaelsanchez.com/using-important-your-css&quot; rel=&quot;nofollow 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;translated&quot;&gt;CSS에서 !important를 사용하는 것은 보통 개발자의 자기애적이고 이기적이거나 게으른 것을 의미합니다.&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;!important&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 흔들 CSS가 작동하지 않아요...&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;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 나서.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&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;/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;!important&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단지 CSS를 잘 관리하지 못했기 때문입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성능 문제보다 더 나쁜 설계 문제가 많이 발생하지만 다른 속성을 우선시하기 때문에 추가 코드 라인을 많이 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 우리의 CSS는 쓸모없는 코드들로 어수선해집니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신 우리가 해야 할 일은 우선 CSS를 매우 잘 관리하고 속성이 서로 덮어쓰지 않도록 하는 것입니다.&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;em&gt;있습니다&lt;/em&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&lt;/code&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;img src=&quot;https://i.stack.imgur.com/2usfA.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성능에 상관없이 나쁜 관행이기 때문에 사용하지 않는 것에 동의합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저만 그런 이유로, 저는 그들을 이용하는 것을 피하겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&lt;/code&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;효과가 있을지는 몰라도 너무 작아서 절대 눈치채면 안 되고 걱정하면 안 &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;눈에 띄기에 충분할 정도로 의미가 있는 경우 코드에 단순한 문제보다 더 큰 문제가 발생할 가능성이 높습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&lt;/code&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;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;!important&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한 브라우저에서는 성능이 떨어지지만 다른 브라우저에서는 성능이 정말 좋습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아마 다음 버전에서는 반대의 결과가 나올 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 제 요점은 웹 개발자로서 우리가 사용하고 있는 언어의 개별 구문 구조의 성능 영향에 대해 생각(또는 생각)해서는 안 된다는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우리는 이러한 구문 구조를 사용해야 합니다. 왜냐하면 구문 구조는 우리가 원하는 것을 달성하기 위한 올바른 방법이기 때문입니다. 왜냐하면 그것들이 수행되는 방식 때문이 아니기 때문입니다.&lt;/font&gt;&lt;/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;개별 CSS 구성 수준으로 넘어가기 전에 해결해야 할 훨씬 더 큰 문제가 있을 것이 거의 확실합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성능에 눈에 띄게 영향을 미치지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 코드의 유지보수성이 저하되므로 장기적으로 성능이 저하될 가능성이 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용해야만 했던 것&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&lt;/code&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://stackoverflow.com/questions/13607568/twitter-bootstrap-override-a-in-navbar/13607839#13607839&quot;&gt;이유&lt;/a&gt;로 이 &lt;a href=&quot;https://stackoverflow.com/questions/13607568/twitter-bootstrap-override-a-in-navbar/13607839#13607839&quot;&gt;스택 질문&lt;/a&gt;에 대한 &lt;a href=&quot;https://stackoverflow.com/questions/13607568/twitter-bootstrap-override-a-in-navbar/13607839#13607839&quot;&gt;답&lt;/a&gt;을 참조하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&lt;/code&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;!important&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;javascript 함수를 작성하는 것 외에 인라인 css를 재정의할 수 있는 유일한 방법입니다(조금이라도 성능에 영향을 미칩니다).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 인라인 CSS를 재정의해야 할 경우 실제로 성능 &lt;strong&gt;&lt;em&gt;시간&lt;/em&gt;&lt;/strong&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;파서는 사용 여부에 관계없이 각 속성에 대해 !important를 확인해야 합니다. 따라서 여기서 성능 차이는 0입니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;속성을 덮어쓸 때 구문 분석기는 덮어쓰는 속성이 !important인지 확인해야 하므로 여기서 성능 차이는 다시 0이 됩니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;덮어쓰는 속성이 !!important이면 !important를 사용하지 않기 위해 -1의 성능 히트인 속성을 덮어써야 합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;덮어쓰는 속성이 !important이면 !important를 사용할 때 +1의 성능 부스트인 속성 덮어쓰기를 생략합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 속성이 !important이면 덮어쓰는 속성이 !important 또는 !important - 성능 차이 0임에도 불구하고 구문 분석에서 덮어씁니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 !important는 구문 분석기가 다른 경우에는 건너뛸 수 없는 많은 속성을 건너뛸 수 있기 때문에 성능이 더 우수합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;@ryan가 아래에서 언급하듯이, 인라인 CSS를 무시하고 자바스크립트를 사용하지 않는 유일한 방법은...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 불필요한 퍼포먼스 히트를 피할 수 있는 또 다른 방법은&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;음... 알고보니 중요한건 중요한거지!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 또,&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;!important 를 사용하면 개발자가 많은 시간을 절약할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;때때로 전체 CSS를 다시 디자인하는 것으로부터 당신을 구해줍니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;때때로 html이나 부모 cs 파일이 당신의 통제에 있지 않기 때문에 당신의 생명을 구할 수 있습니다.&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;그리고 때때로 브라우저는 셀렉터에 너무 구체적이지 않으면서 올바른 속성을 선택하지 않기 때문에 !important를 사용하는 것이 정말 중요해지고 CSS에 수많은 특정 CSS 셀렉터를 쓰지 않아도 됩니다. 따라서 !important를 쓰기 위해 바이트를 더 사용하더라도 다른 곳에서 바이트를 절약할 수 있다고 생각합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CSS 셀렉터가 지저분해질 수도 있다는 건 우리 모두 알고 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;그래서 저&lt;/strong&gt;는 !&lt;strong&gt;important를 사용하면 개발자들&lt;/strong&gt;이 행복해질 수 &lt;strong&gt;있다고 생각합니다. 저는 그것이 매우 중요하다고 생각&lt;/strong&gt;합니다 :D&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;!important&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;그러나 CSS가 다음으로 가득 차 있는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&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;결과적으로 CSS는 비대해지고(&lt;em&gt;이&lt;/em&gt;로 인해 성능이 저하됨) 유지보수가 어려워집니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/rzGss.jpg&quot; alt=&quot;Important CSS rule meme&quot;&gt; &lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;효율적인 CSS를 작성하려면 필요한 &lt;em&gt;만큼&lt;/em&gt;만 구체적으로 작성하고 &lt;a href=&quot;http://thesassway.com/advanced/modular-css-an-example&quot; rel=&quot;nofollow noreferrer&quot;&gt;모듈형 CSS&lt;/a&gt;를 작성해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ID(해시 포함) 사용, 선택자 체인 또는 선택자 자격 부여를 자제하는 것이 좋습니다.&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;앞에 붙은 ID&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;CSS에서는 &lt;a href=&quot;http://jsfiddle.net/RKEJE/&quot; rel=&quot;nofollow noreferrer&quot;&gt;255 클래스가 ID를 재정의하지 않을&lt;/a&gt; 정도로 특정적입니다(fiddle by: &lt;a href=&quot;https://stackoverflow.com/questions/2809024/points-in-css-specificity#answer-11934505&quot;&gt;@Faust&lt;/a&gt;).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ID도 더 깊은 루티드 문제가 있지만 고유해야 하므로 중복된 스타일에 다시 사용할 수 없으므로 반복되는 스타일로 선형 CSS를 작성하게 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 프로젝트마다 규모에 따라 영향을 미치지만, 유지보수성이 크게 저하되고, 경우에 따라서는 성능도 저하됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떻게 특정성을 추가할 수 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 체인, 한정 또는 ID(즉,&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;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;eg1-foo&quot;&amp;gt;
    &amp;lt;p class=&quot;eg1-bar&quot;&amp;gt;foobar&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&quot;eg2-foo&quot;&amp;gt;
    &amp;lt;p id=&quot;eg2-bar&quot;&amp;gt;foobar&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;eg3-foo&quot;&amp;gt;
    &amp;lt;p class=&quot;eg3-foo&quot;&amp;gt;foobar&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CSS&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.eg1-foo {
    color: blue;
}
.eg1-bar {
    color: red;
}
[id='eg2-foo'] {
    color: blue;
}
[id='eg2-bar'] {
    color: red;
}
.eg3-foo {
    color: blue;
}
.eg3-foo.eg3-foo {
    color: red;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;kbd&gt;&lt;strong&gt;&lt;a href=&quot;http://jsfiddle.net/gJ8gW/&quot; rel=&quot;nofollow noreferrer&quot;&gt;JSFiddle&lt;/a&gt;&lt;/strong&gt;&lt;/kbd&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;첫 번째 예와 두 번째 예는 동일하게 작동하고, 첫 번째 예는 말 그대로 클래스이며, 두 번째 예는 속성 선택기입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클래스와 Attribute selector의 특정성이 동일합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.eg1/2-bar&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의 색상을 상속하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.eg1/2-foo&lt;/code&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 papago-translate=&quot;translated&quot;&gt;예선:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ul.class&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 연쇄:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ul .class&lt;/code&gt; &lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 기술을 뭐라고 부를지는 모르겠지만 의도적인 행동이고 &lt;a href=&quot;http://www.w3.org/TR/css3-selectors/#specificity&quot; rel=&quot;nofollow noreferrer&quot;&gt;W3C에 의해 문서화&lt;/a&gt;되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동일한 단순 셀렉터가 반복적으로 발생하는 것이 허용되며 특이성이 증가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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;a href=&quot;https://stackoverflow.com/questions/13743671/is-important-bad-for-performance/24943801#comment-18887438&quot;&gt;@BoltClock이 지적&lt;/a&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;아래 예제에서는 둘 다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.foo&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.bar&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동일한 특수성을 가지므로 동작은 CSS의 계단식 특성으로 되돌아갑니다. 따라서 CSS에서 선언된 마지막 규칙은 우선 순위를 주장합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.foo&lt;/code&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;HTML&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div&amp;gt;
    &amp;lt;p class=&quot;foo bar&quot;&amp;gt;foobar&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CSS&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.bar {
    color: blue !important;
}
.foo {
    color: red !important;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;kbd&gt;&lt;strong&gt;&lt;a href=&quot;http://jsfiddle.net/Cd5x6/&quot; rel=&quot;nofollow noreferrer&quot;&gt;JSFiddle&lt;/a&gt;&lt;/strong&gt;&lt;/kbd&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/13743671/is-important-bad-for-performance&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>CSS</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1226</guid>
      <comments>https://sourcejob.tistory.com/1226#entry1226comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:33:59 +0900</pubDate>
    </item>
    <item>
      <title>jQuery datepicker 년수 표시됨</title>
      <link>https://sourcejob.tistory.com/1225</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery datepicker 년수 표시됨&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery datepicker를 사용하면 표시되는 연도 범위를 어떻게 변경합니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery UI 사이트에는 기본값이 &quot;현재 연도가 표시되기 이전과 이후 10년&quot;이라고 나와 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 이것을 생일 선물로 사용하고 싶은데 오늘로부터 10년 전은 좋지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery datepicker로 이것을 할 수 있습니까 아니면 다른 솔루션을 사용해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;datepicker 데모 링크 : http://jqueryui.com/demos/datepicker/ # dropdown-month-year&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;날짜 선택 제한&quot; 섹션이 나타납니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;드롭다운을 사용하여 &quot;를 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Year dropdown shows last 20 years&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot; 데모 및 히트 보기 소스:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#restricting&quot;).datepicker({ 
    yearRange: &quot;-20:+0&quot;, // this is the option you're looking for
    showOn: &quot;both&quot;, 
    buttonImage: &quot;templates/images/calendar.gif&quot;, 
    buttonImageOnly: 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;-20&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-100&lt;/code&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;$( &quot;.datefield&quot; ).datepicker({
    changeMonth: true,
    changeYear: true,
    yearRange:'-90:+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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;yearRange: &quot;1901:2012&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 하지 않는 것이 바람직하지만, 이는 완벽하게 유효한 옵션입니다. (그리고 &quot;1963: 1984&quot;와 같은 카탈로그의 특정 연도를 정당하게 찾고 있는 경우 유용합니다.)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;생년월일(및 제가 사용하는 것)에 완벽한 것은 Shog9이 말한 것과 유사하지만, 좀 더 구체적인 DOB 예를 들어보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.datePickerDOB&quot;).datepicker({ 
    yearRange: &quot;-122:-18&quot;, //18 years or older up to 122yo (oldest person ever, can be sensibly set to something much smaller in most cases)
    maxDate: &quot;-18Y&quot;, //Will only allow the selection of dates more than 18 years ago, useful if you need to restrict this
    minDate: &quot;-122Y&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;@Shog9이 게시한 내용 외에 쇼데이 이전: 콜백 기능에서 개별적으로 날짜를 제한할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;날짜를 지정하고 부울 배열을 반환하는 함수를 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;$(&quot;.selector&quot;).datepicker({ beforeShowDay: nationalDays}) 
natDays = [[1, 26, 'au'], [2, 6, 'nz'], [3, 17, 'ie'], [4, 27, 'za'], 
[5, 25, 'ar'], [6, 6, 'se'], [7, 4, 'us'], [8, 17, 'id'], [9, 7, 
'br'], [10, 1, 'cn'], [11, 22, 'lb'], [12, 12, 'ke']]; 
function nationalDays(date) { 
    for (i = 0; i &amp;lt; natDays.length; i++) { 
      if (date.getMonth() == natDays[i][0] - 1 &amp;amp;&amp;amp; date.getDate() == 
natDays[i][1]) { 
        return [false, natDays[i][2] + '_day']; 
      } 
    } 
  return [true, '']; 
} 
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt; $(&quot;#DateOfBirth&quot;).datepicker({
        yearRange: &quot;-100:+0&quot;,
        changeMonth: true,
        changeYear: true,
    });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;yearRange: '1950:2013', // 하드 코딩된 연도 범위 지정 또는 이 방식&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연도 범위: &quot;-100:+0&quot;, // 최근 100년&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;au, nz, ie 등은 국가 날짜가 표시되는 국가의 국가 코드입니다(호주, 뉴질랜드, 아일랜드 등).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드에서 보는 바와 같이, 이 값들은 '_day'와 결합되어 CSS 스타일로 그날에 적용되기 위해 다시 전달됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해당 스타일은 해당 날짜의 텍스트를 이동하여 해당 국가의 국기 이미지로 대체하는 아래와 같은 형태의 쇼입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.au_day {
  text-indent: -9999px;
  background: #eee url(au.gif) no-repeat center;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 스타일과 함께 반환되는 'false' 값은 이 날짜를 선택할 수 없음을 나타냅니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것도 효과가 있을지도 모른다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(function () {
    $(&quot;.DatepickerInputdob&quot;).datepicker({
        dateFormat: &quot;d M yy&quot;,
        changeMonth: true,
        changeYear: true,
        yearRange: '1900:+0',
        defaultDate: '01 JAN 1900'
    });
&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/269545/jquery-datepicker-years-shown&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1225</guid>
      <comments>https://sourcejob.tistory.com/1225#entry1225comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:33:50 +0900</pubDate>
    </item>
    <item>
      <title>소계외세 표시, 우커머스 체크아웃 시 소계외세를 별도의 행으로 추가</title>
      <link>https://sourcejob.tistory.com/1224</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;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;php the line&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;td&amp;gt;&amp;lt;?php wc_cart_totals_subtotal_html(); ?&amp;gt;&amp;lt;/td&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;부름을 받습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것에서 세금의 비율(21%)을 빼고 싶습니다( / 121 * 100).&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;strong&gt;업데이트됨:&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;먼저, 참고로, 우커머스 템플릿은 &lt;a href=&quot;https://docs.woocommerce.com/document/template-structure/&quot; rel=&quot;nofollow noreferrer&quot;&gt;활성화된 테마를 통해 재정의&lt;/a&gt;됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;템플릿을 복사한 후&lt;/font&gt;&lt;/font&gt;&lt;code&gt;checkout/review-order.php&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테마에 위치한 &quot;wocommerce&quot; 하위 폴더&lt;em&gt;(위의 링크된 설명서에 설명되어 있음&lt;/em&gt;)로&lt;em&gt;,&lt;/em&gt; 이 템플릿을 열고 편집한 후 다음 코드 블록(행 58~61)을 교체합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;tr class=&quot;cart-subtotal&quot;&amp;gt;
    &amp;lt;th&amp;gt;&amp;lt;?php _e( 'Subtotal', 'woocommerce' ); ?&amp;gt;&amp;lt;/th&amp;gt;
    &amp;lt;td&amp;gt;&amp;lt;?php wc_cart_totals_subtotal_html(); ?&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&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;tr class=&quot;cart-subtotal&quot;&amp;gt;
    &amp;lt;th&amp;gt;&amp;lt;?php printf( __( 'Subtotal %s', 'woocommerce' ), '&amp;lt;small&amp;gt;(excl. tax)&amp;lt;small&amp;gt;' );?&amp;gt;&amp;lt;/th&amp;gt;
    &amp;lt;td&amp;gt;&amp;lt;?php echo wc_price( WC()-&amp;gt;cart-&amp;gt;get_subtotal() ); ?&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;

&amp;lt;tr class=&quot;cart-subtotal-tax&quot;&amp;gt;
    &amp;lt;th&amp;gt;&amp;lt;?php _e( 'Subtotal tax', 'woocommerce' ); ?&amp;gt;&amp;lt;/th&amp;gt;
    &amp;lt;td&amp;gt;&amp;lt;?php echo wc_price( WC()-&amp;gt;cart-&amp;gt;get_subtotal_tax() ); ?&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&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;a href=&quot;https://i.stack.imgur.com/te0EY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/te0EY.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;WC 설정의 Tax 옵션으로 이동하여 &lt;strong&gt;Tax&lt;/strong&gt; 옵션과 &lt;strong&gt;함께 입력한 가격&lt;/strong&gt;이 'Yes, I will inding price in tax intensive tax'로 설정되어 있는지 확인합니다.&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;/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/53872130/show-subtotal-excl-tax-add-subtotal-tax-as-separate-row-on-woocommerce-checkou&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1224</guid>
      <comments>https://sourcejob.tistory.com/1224#entry1224comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:33:43 +0900</pubDate>
    </item>
    <item>
      <title>jQuery 5초 후 자동 숨김 요소</title>
      <link>https://sourcejob.tistory.com/1223</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery 5초 후 자동 숨김 요소&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery를 사용하여 폼 로드 후 5초 후 웹 페이지에 요소를 자동으로 숨길 수 있습니까?&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;successMessage&quot;&amp;gt;Project saved successfully!&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;5초 후에 사라져버리고 싶다고 생각하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery UI와 hide effect를 살펴보았지만 원하는 대로 작동하는 데 약간 어려움을 겪고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
        $(function() {
            function runEffect() {

                var selectedEffect = 'blind';

                var options = {};

                $(&quot;#successMessage&quot;).hide(selectedEffect, options, 500);
            };

            $(&quot;#successMessage&quot;).click(function() {
                runEffect();
                return false;
            });
        });
    &amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클릭 기능을 제거하고 5초 후 runEffect()를 호출하는 타임아웃 방식을 추가했으면 합니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$('#selector').delay(5000).fadeOut('slow');
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;$(function() {
    // setTimeout() function will be fired after page is loaded
    // it will wait for 5 sec. and then will fire
    // $(&quot;#successMessage&quot;).hide() function
    setTimeout(function() {
        $(&quot;#successMessage&quot;).hide('blind', {}, 500)
    }, 5000);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;참고&lt;/strong&gt;: jQuery 기능을 set 안에서 작동시키기 위해서는 내부에 포장해야 합니다. 시간 제한은 내부에 포장을 해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function() { ... }
&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;setTimeout(function() {
  $('#successMessage').fadeOut('fast');
}, 30000); // &amp;lt;-- time in milliseconds
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이걸 썼다면 30초 후에 디브가 숨겨집니다.&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;div 텍스트가 사라진 후 다시 표시해야 할 수도 있으니 참고하시기 바랍니다.&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;$('#element_id').empty().show().html(message).delay(3000).fadeOut(300);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery를 사용하는 경우 setTimeout을 사용할 필요가 없으며 최소한 요소를 자동으로 숨기지 않아도 됩니다.&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;setTimeout(function(){
    $(&quot;.message-class&quot;).trigger(&quot;click&quot;);
}, 5000);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트 클릭에 애니메이션 효과를 적용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.message-class&quot;).click(function() {
    //your event-code
});
&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;이펙트 함수를 실행할 때 setTimeout을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function runEffect() {
    setTimeout(function(){
        var selectedEffect = 'blind';
        var options = {};
        $(&quot;#successMessage&quot;).hide(selectedEffect, options, 500)
     }, 5000);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery(&quot;.success_mgs&quot;).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;show(); setTimeout(function(){ jQuery(.success_mgs&quot;).hide();},5000);&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클릭 후 타임아웃을 설정할 수 있는 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.selectorOnWhichEventCapture&quot;).on('click', function() {
    setTimeout(function(){
        $(&quot;.selector&quot;).doWhateverYouWantToDo();
    }, 5000);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;//5000  = 5초 = 5000밀리섹&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/683363/jquery-autohide-element-after-5-seconds&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1223</guid>
      <comments>https://sourcejob.tistory.com/1223#entry1223comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:33:36 +0900</pubDate>
    </item>
    <item>
      <title>x마일 반경 내의 다른 행에 대한 mySQL 경도 및 위도 쿼리</title>
      <link>https://sourcejob.tistory.com/1222</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;x마일 반경 내의 다른 행에 대한 mySQL 경도 및 위도 쿼리&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 현재 대략 10,000개의 행으로 채워진 데이터베이스를 가지고 있습니다.&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;그러나 아래의 예에서 저는 반경 25마일 이내에 있는 것들을 찾으려고 노력하고 있는데, 이는 모두 대부분의 경우에 효과가 있는 것으로 보입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대부분의 결과는 25마일 기준 내에서 산출되지만, 86마일에서 800마일 사이에서 크게 빗나간 결과를 얻고 있습니다.&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;여기는 제 센터 lat/lon입니다: 37.2790669,-121.874722 = 산호세, 캘리포니아 산호세에서 33.016928,-116.846046 = 산호세에서 약 355마일 떨어진 캘리포니아 샌디에이고입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 쿼리는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT *,(((acos(sin(($lat*pi()/180)) * sin((`latitude`*pi()/180))+cos(($lat*pi()/180))
* cos((`latitude`*pi()/180)) * cos((($lon - `longitude`)*pi()/180))))*180/pi())*60*1.1515)
AS `distance` FROM `geo_locations` HAVING `distance` &amp;lt;= 25 ORDER BY `distance` ASC&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;SELECT
    `id`,
    (
        6371 *
        acos(
            cos( radians( :lat ) ) *
            cos( radians( `lat` ) ) *
            cos(
                radians( `long` ) - radians( :long )
            ) +
            sin(radians(:lat)) *
            sin(radians(`lat`))
        )
    ) `distance`
FROM
    `location`
HAVING
    `distance` &amp;lt; :distance
ORDER BY
    `distance`
LIMIT
    25
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;:lat&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;:long&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자가 통과한 포인트는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lat&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;long&lt;/code&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;:거리는 마일 단위로 측정되며, 코드 작동 버전에서는 :거리가 실제로 10-50마일 범위의 드롭다운에서 당겨집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 해결책을 위해 조셴도 덕분에 3959(지구 중심에서 지표까지의 거리를 마일로 환산하면)를 6371(킬로미터 환산 시 3959마일)로 바꾸면 킬로미터로 코드를 바꿀 수 있습니다.&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/8994718/mysql-longitude-and-latitude-query-for-other-rows-within-x-mile-radius&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1222</guid>
      <comments>https://sourcejob.tistory.com/1222#entry1222comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:33:29 +0900</pubDate>
    </item>
    <item>
      <title>장고 1.7에서 초기 마이그레이션에서 다시 마이그레이션하는 방법은 무엇입니까?</title>
      <link>https://sourcejob.tistory.com/1221</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;장고 1.7에서 초기 마이그레이션에서 다시 마이그레이션하는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;몇몇 모델로 새로운 앱을 만들었는데 몇몇 모델들이 잘 생각되지 않는다는 것을 알게 되었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 코드를 실행하지 않았기 때문에 데이터베이스를 마지막으로 양호한 상태로 마이그레이션하고 더 나은 모델로 마이그레이션을 다시 수행하는 것이 현명합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 경우 마지막으로 좋은 상태는 새 앱이 존재하지 않는 데이터베이스입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;장고 1.7에서 초기 마이그레이션에서 다시 마이그레이션하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인&lt;/font&gt;&lt;/font&gt;&lt;code&gt;South&lt;/code&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;python manage.py migrate &amp;lt;app&amp;gt; zero
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어느 쪽이 맑아질까요?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;app&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마이그레이션 기록에서 모든 테이블을 삭제합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;app&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;장고 1.7 마이그레이션에서 이를 수행하는 방법은 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Django 1.7+에서도 동일한 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;python manage.py migrate &amp;lt;app&amp;gt; zero
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 지워집니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;app&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마이그레이션 기록에서 모든 테이블을 삭제합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;app&amp;gt;&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자세한 내용은 &lt;a href=&quot;https://docs.djangoproject.com/en/stable/ref/django-admin/#django-admin-migrate&quot; rel=&quot;noreferrer&quot;&gt;장고 문서&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;버전 번호를 사용할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;python manage.py migrate &amp;lt;app&amp;gt; 0002
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출처 : https://docs.djangoproject.com/en/1.7/ref/django-admin/ &lt;a href=&quot;https://docs.djangoproject.com/en/1.7/ref/django-admin/#django-admin-migrate&quot;&gt;#django-admin-&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/25606879/how-to-migrate-back-from-initial-migration-in-django-1-7&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>python</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1221</guid>
      <comments>https://sourcejob.tistory.com/1221#entry1221comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:33:23 +0900</pubDate>
    </item>
    <item>
      <title>애플리케이션을 종료하고 홈 화면을 표시하는 방법?</title>
      <link>https://sourcejob.tistory.com/1220</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;애플리케이션을 종료하고 홈 화면을 표시하는 방법?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;홈 페이지에 애플리케이션을 통한 탐색을 위한 버튼이 있는 애플리케이션이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 페이지에는 &quot;EX&quot; 버튼이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IT&quot;를 클릭하면 사용자가 애플리케이션 아이콘이 있는 전화기의 홈 화면으로 이동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 어떻게 그럴 수 있을까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안드로이드의 디자인은 애플리케이션을 선택적으로 종료하는 것을 선호하지 않고 OS에서 관리합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;홈 응용프로그램을 해당 용도에 따라 불러올 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
&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;애플리케이션에서 여러 가지 활동(예: 10개)이 있고 이 활동에서 직접 나가야 한다고 가정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우리가 할 수 있는 일은 의도를 만들고 뿌리 활동으로 가서 의도에 플래그를 설정하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 의도에 부울과 같은 추가적인 것을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;intent.putExtra(&quot;EXIT&quot;, 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;그런 다음 root activity에서 다음의 값을 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 그 통화에 따르면 (),은.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;onCreate()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;근활성의&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (getIntent().getBooleanExtra(&quot;EXIT&quot;, false)) {
 finish();
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;System.exit(0);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아마도 당신이 찾고 있는 것일 겁니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전체 응용프로그램을 닫고 홈 화면으로 이동합니다.&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;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;    Intent intent = new Intent(this, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra(&quot;Exit me&quot;, true);
    startActivity(intent);
    finish();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 MainActivity on Create() 메서드에서 이를 추가하여 MainActivity를 마칩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    setContentView(R.layout.main_layout);

    if( getIntent().getBooleanExtra(&quot;Exit me&quot;, false)){
        finish();
        return; // add this to prevent from doing unnecessary stuffs
    }
&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;finish();&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 Destroy for Removing Force close의 아래 줄을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
&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;finish()&lt;/code&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;=&amp;gt; open manifest.xml 파일을 사용하여 이 작업을 수행하고 속성을 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안드로이드:noHistory=&quot;true&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 활동에 대하여.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;activity
    android:name=&quot;com.example.shoppingapp.AddNewItems&quot;
    android:label=&quot;&quot; 
    android:noHistory=&quot;true&quot;&amp;gt;
&amp;lt;/activity&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;font papago-translate=&quot;translated&quot;&gt;이 경우 BackPressed() 메서드를 재정의해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로 이 방법은 스택의 상위 활동을 엽니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);

}
&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;뒤로 버튼을 눌러 해당 활동을 종료하고 BackPressed() 메서드의 내부에 있는 활동 스택.call finish() 메서드를 추가하지 않을 수도 있습니다.&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;@Override
public void onBackPressed() {
  finish();
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Android 애플리케이션을 종료하지 않는 것이 좋습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자세한 내용은 이 &lt;a href=&quot;https://stackoverflow.com/questions/2033914/quitting-an-application-is-that-frowned-upon/2034238#2034238&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 papago-translate=&quot;translated&quot;&gt;예를 들어, 만약 당신이 하지 않는다면.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;return;&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;또한 Create with return 에서 편집해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;super.onCreate()를 실행하지 않으면 런타임 오류가 발생합니다.)&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;MainActivity&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ChildActivity&lt;/code&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;Inside Child Activity는 다음을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Intent intent = new Intent(ChildActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra(&quot;EXIT&quot;, true);
startActivity(intent);
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;@Override
public void onCreate(Bundle savedInstanceState) {

    mContext = getApplicationContext();

    super.onCreate(savedInstanceState);

    if (getIntent().getBooleanExtra(&quot;EXIT&quot;, false)) {
        finish();
        return;
    }
    // your current codes
    // your current codes
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;FinishAffinity 메서드를 사용하여 앱과 관련된 스택의 모든 작업을 닫는 방법도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참조: https://stackoverflow.com/a/27765687/1984636&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해당 활동의 Destroy()에 대한 완료를 호출하면 해당 활동이 호출되고 활동 스택의 이전 활동으로 돌아갑니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서.. 종료를 위해 finish()를 호출하지 마십시오.&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;일부 활동.java&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; @Override
    public void onBackPressed() {
            Intent newIntent = new Intent(this,QuitAppActivity.class);
            newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(newIntent);
            finish();
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;AppActivity.java 종료&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      finish();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 당신이 한 일은 스택과 런치에서 모든 활동을 지웁니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;QuitAppActivity&lt;/code&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;moveTaskToBack(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;onClickedListener&lt;/code&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;finish();&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;onDestroy()&lt;/code&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;android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
&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;도움이 되었으면 좋겠습니다. 2가지 활동으로 소규모 데모를 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫번째 활동&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class MainActivity extends Activity implements OnClickListener{
    private Button secondActivityBtn;
    private SharedPreferences pref;
    private SharedPreferences.Editor editer;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        secondActivityBtn=(Button) findViewById(R.id.SecondActivityBtn);
        secondActivityBtn.setOnClickListener(this);

        pref = this.getSharedPreferences(&quot;MyPrefsFile&quot;, MODE_PRIVATE);
        editer = pref.edit();

        if(pref.getInt(&quot;exitApp&quot;, 0) == 1){
            editer.putInt(&quot;exitApp&quot;, 0);
            editer.commit();
            finish();
        }
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.SecondActivityBtn:
            Intent intent= new Intent(MainActivity.this, YourAnyActivity.class);
            startActivity(intent);
            break;
        default:
            break;
        }
    }
}
&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 class YourAnyActivity extends Activity implements OnClickListener {
    private Button exitAppBtn;
    private SharedPreferences pref;
    private SharedPreferences.Editor editer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_any);

        exitAppBtn = (Button) findViewById(R.id.exitAppBtn);
        exitAppBtn.setOnClickListener(this);

        pref = this.getSharedPreferences(&quot;MyPrefsFile&quot;, MODE_PRIVATE);
        editer = pref.edit();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.exitAppBtn:
            Intent main_intent = new Intent(YourAnyActivity.this,
                    MainActivity.class);
            main_intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(main_intent);
            editer.putInt(&quot;exitApp&quot;,1);
            editer.commit();
            break;
        default:
            break;
        }
    }
}
&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;public interface Observer {
public void update(Subject subject);
}
&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 class Subject {
private List&amp;lt;Observer&amp;gt; observers = new ArrayList&amp;lt;Observer&amp;gt;();

public void attach(Observer observer){
    observers.add(observer);
}

public void detach(Observer observer){
    observers.remove(observer);
}

protected void notifyObservers(){
    for(Observer observer : observers){
        observer.update(this);
    }
}
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하위 제목이 종료 방법을 구현합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class ApplicationSubject extends Subject {
public void exit(){
    notifyObservers();
}
}
&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 class MyApplication extends Application {

private static ApplicationSubject applicationSubject;

public ApplicationSubject getApplicationSubject() {
            if(applicationSubject == null) applicationSubject = new ApplicationSubject();
    return applicationSubject;
}
&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;public abstract class BaseActivity extends Activity implements Observer {

public MyApplication app;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    app = (MyApplication) this.getApplication();
    app.getApplicationSubject().attach(this);
}

@Override
public void finish() {
    // TODO Auto-generated method stub
            app.getApplicationSubject().detach(this);
    super.finish();
}

/**
 * exit the app
 */
public void close() {
    app.getApplicationSubject().exit();
};

@Override
public void update(Subject subject) {
    // TODO Auto-generated method stub
    this.finish();
}

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시험해 보겠습니다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class ATestActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    close(); //invoke 'close'
}
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;애플리케이션을 종료하려면 이 코드를 당신의 기능 아래에 놓습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public void yourFunction()
{
finishAffinity();   
moveTaskToBack(true);

}



//For an instance, if you want to exit an application on double click of a 
//button,then the following code can be used.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK &amp;amp;&amp;amp; event.getRepeatCount() == 2) {
        // do something on back.
        From Android 16+ you can use the following:

        finishAffinity();
        moveTaskToBack(true);
    }

    return super.onKeyDown(keyCode, event);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;100%는 잘 작동합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;클릭시 앱 종료(Method) 코드입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    Button exit = (Button)findViewById(R.id.exitbutton);

    exit.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View view) {

            finish();
            android.os.Process.killProcess(android.os.Process.myPid());
            System.exit(1);
            Toast.makeText(getApplicationContext(), &quot;Closed Completely and Safely&quot;, Toast.LENGTH_LONG).show();

        }
    });
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어쩌면 내 코드가 도움이 될 수도 있습니다(Main_Activity.java):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    @Override
    protected void onDestroy() {
        super.onDestroy();
        this.finish();
        exit(0);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
        switch(keyCode)    {
            case KeyEvent.KEYCODE_BACK:
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle(&quot;My application&quot;).setMessage(&quot;Keep playing?&quot;).setIcon(R.drawable.icon);
                // Go to backgroung
                builder.setPositiveButton(&quot;OK&quot;, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) { moveTaskToBack(true); }
                });
                // Exit from app calling protected void onDestroy()
                builder.setNegativeButton(&quot;CLOSE APPLICATION&quot;, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) { onDestroy(); }
                });
                // Close this dialog
                builder.setNeutralButton(&quot;CANCEL&quot;, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) { dialog.cancel(); }
                });
                AlertDialog dialog = builder.create();
                dialog.show();
                return true;
        }
        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;finish();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(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;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;finish();&lt;/code&gt; &lt;code&gt;moveTaskToBack(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;System.exit(1);&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지원을 그만두기 위해서 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public void onBackPressed() {
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    alertDialogBuilder.setTitle(&quot;Exit Application?&quot;);
    alertDialogBuilder
            .setMessage(&quot;Click yes to exit!&quot;)
            .setCancelable(false)
            .setPositiveButton(&quot;Yes&quot;,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            finish();
                            moveTaskToBack(true);
                            android.os.Process.killProcess(android.os.Process.myPid());
                            System.exit(1);
                        }
                    })

            .setNegativeButton(&quot;No&quot;, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                    dialog.cancel();
                }
            });

    AlertDialog alertDialog = alertDialogBuilder.create();
    alertDialog.show();
}
&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;strong&gt;예:&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public void onBackPressed()
{
    moveTaskToBack(true);
    android.os.Process.killProcess(android.os.Process.myPid());
    System.exit(1);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/3226495/how-to-exit-from-the-application-and-show-the-home-screen&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Android</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1220</guid>
      <comments>https://sourcejob.tistory.com/1220#entry1220comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:33:17 +0900</pubDate>
    </item>
    <item>
      <title>대용량 My ISAM 테이블의 안정성은 얼마나 안정적입니까?</title>
      <link>https://sourcejob.tistory.com/1219</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대용량 My ISAM 테이블의 안정성은 얼마나 안정적입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 갑자기 추락한 7GB My ISAM 테이블을 가지고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수리는 할 수 있었지만 지금은 걱정이 되고 몇 가지 질문이 있습니다. - 크기가 커져 앞으로 테이블 충돌이 더 늘어날 것으로 예상해도 될까요?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(또는 크기는 충돌 위험과 관련이 없음) - My ISAM 테이블이 너무 심하게 손상되어 복구할 수 없는 위험이 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 이상 데이터를 복구할 수 없는 상태에서 충돌이 발생하기 쉬웠던 오래된 dBase를 기억합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 이제는 제 ISAM이 좀 더 안정적이 됐으면 좋겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;교통이 보통 수준이고, 140개 정도 연결되어 있습니다&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://dev.mysql.com/doc/refman/5.7/en/table-size-limit.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://dev.mysql.com/doc/refman/5.7/en/table-size-limit.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;OS 파일 크기 제한 및 최대 크기 256개에 따라 다름&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위의 TB 참조.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;My ISAM 테이블을 7GB 이상 실행했는데 20GB 이상이었던 것 같습니다.&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;이미 언급한 바와 같이 My ISAM은 사실상 크기 제한이 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 본 가장 큰 My ISAM 테이블은 330GB의 데이터였습니다.&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;em&gt;서버&lt;/em&gt;가 다운되면 MyISAM은 인덱스를 손상시키는 경우가 많습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 해결하기 위해서는 &lt;em&gt;보통&lt;/em&gt; &quot;수리&quot;가 필요합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만, 만약 그것이 여러 줄의 중간에 있다면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;INSERT&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;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;DELETE&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 행 중 일부는 수정되었을 수 있지만 다른 행은 수정되지 않았습니다.&lt;/font&gt;&lt;font 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;InnoDB는 위의 문제를 회피합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 한 가지 단점이 있습니다. 7GB는 15GB-20GB가 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;디스크 공간이 있다면 &lt;a href=&quot;https://mariadb.com/kb/en/mariadb/converting-tables-from-myisam-to-innodb/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;변환&lt;/em&gt;&lt;/a&gt;하는 것을 적극 추천합니다. (네, MariaDB는 다른 엔진들을 많이 지원하지만 Oracle은 InnoDB에 의해 모든 것을 제거하고 있지만 대부분은 좁은 니치를 위한 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;귀사의 데이터에 대한 자세한 정보가 없다면 InnoDB 이외의 것은 추천하지 않겠습니다.)&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/44500776/how-reliable-is-the-stability-of-large-myisam-table&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1219</guid>
      <comments>https://sourcejob.tistory.com/1219#entry1219comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:33:04 +0900</pubDate>
    </item>
    <item>
      <title>llvm.bc 파일을 사람이 읽을 수 있는 .ll 파일로 변환하는 중</title>
      <link>https://sourcejob.tistory.com/1218</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;llvm.bc 파일을 사람이 읽을 수 있는 .ll 파일로 변환하는 중&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;바이너리 llvm 비트코드(extension .bc) 파일에서 인간이 읽을 수 있는 llvm 비트코드(extension .ll)를 생성하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 모든 &lt;a href=&quot;http://llvm.org/docs/CommandGuide/index.html&quot; rel=&quot;noreferrer&quot;&gt;allvm 명령어&lt;/a&gt;에 대한 유용한 링크가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론. 뻔하지.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;llvm-dis&lt;/code&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/10070635/converting-llvm-bc-file-to-human-readable-ll-file&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1218</guid>
      <comments>https://sourcejob.tistory.com/1218#entry1218comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:32:58 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드와 오라클 데이터베이스를 연결하는 가장 좋은 방법은 무엇입니까?</title>
      <link>https://sourcejob.tistory.com/1217</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;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;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://www.oracle.com/technetwork/database/database-mobile-server/overview/index.html&quot;&gt;Oracle Database Mobile Server&lt;/a&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;a href=&quot;http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html&quot;&gt;JDBC Drivers&lt;/a&gt;(JDBC Drivers)를 다운로드하여 연결합니다. (권장되지 않음, 안전하지 않음 - 특히 공중 연결의 경우)&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Android Application에서는 Oracle 데이터베이스에 직접 액세스할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle Database와 연결하려면 PHP, .net 또는 Java에서 웹 서비스를 만들어야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 웹 서비스를 만든 후에는 응용 프로그램을 웹 서비스와 연결해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것이 Oracle Database와 연결하는 가장 간단한 방법입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Android에서는 SQLiteDatabase와 직접 연결만 가능합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 당신이 MYSQL이나 Oracle과 연결하기를 원한다면 그것이 PHP에 있을 것인지 아닌지 당신이 웹 서비스를 만들어야 하는 것은 필요합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;NET 또는 JSP..&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;JDBC 연결을 통해서도 가능하지만 정확한 예는 없었습니다...&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안드로이드 앱과 오라클 db를 직접 연결하는 방법은 없다고 생각합니다. 이를 위해서는 php나 java 또는 .net 서비스를 웹 서비스해야 합니다. mephp에 따르면 안드로이드 앱과 외부 데이터베이스를 연결하는 가장 좋은 방법입니다. 이를 위해서는 호스트 하나의 php 페이지가 필요합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 페이지는 오라클 데이터베이스와 직접 연결됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안드로이드 앱과 php 페이지를 연결하려면 안드로이드 앱 개발에서 쉽게 할 수 있는 json 파싱이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 오라클과 함께 SAP-Sybase(Middle wire)를 사용하는 강력한 3-Tier 아키텍처도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JTDS 드라이버로 Sybase DB를 ORACLE에 연결합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 안드로이드에서 생성 코드를 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고: &lt;a href=&quot;http://www.oracle.com/technetwork/developer-tools/sql-developer/thirdparty-095608.html&quot; rel=&quot;nofollow&quot;&gt;SQL Server&lt;/a&gt; 및 &lt;a href=&quot;http://www.oracle.com/technetwork/developer-tools/sql-developer/thirdparty-095608.html&quot; rel=&quot;nofollow&quot;&gt;Sybase 데이터베이스&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;웹 서비스를 작성하고 동일한 수준의 보안을 유지하는 것보다 간단한 방법이 있습니다. 3계층 아키텍처를 사용하는 Virtual JDBC Driver를 사용합니다. JDBC 코드는 HTTP를 통해 JDBC 코드(구성 및 보안)를 필터링하는 원격 서블릿으로 전송된 후 Oracle JDBC Driver로 전달됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;결과는 HTTP를 통해 다시 전송됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 기술을 사용하는 일부 무료 소프트웨어가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그냥 구글 &quot;Android JDBC Driver over HTTP&quot;.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;LAN을 통한 Android와의 오라클 데이터베이스&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;&amp;lt;permission
        android:name=&quot;info.android.permission.MAPS_RECEIVE&quot;
        android:protectionLevel=&quot;signature&quot; /&amp;gt;

    &amp;lt;uses-permission android:name=&quot;info.android.permission.MAPS_RECEIVE&quot; /&amp;gt;
    &amp;lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&amp;gt;
    &amp;lt;uses-permission android:name=&quot;android.permission.ACCESS_NETWORK_STATE&quot; /&amp;gt;
    &amp;lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&amp;gt;
    &amp;lt;uses-permission android:name=&quot;android.permission.ACCESS_COARSE_LOCATION&quot; /&amp;gt;
    &amp;lt;uses-permission android:name=&quot;android.permission.ACCESS_FINE_LOCATION&quot; /&amp;gt;
    &amp;lt;uses-permission android:name=&quot;com.google.android.providers.gsf.permission.READ_GSERVICES&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;pre&gt;&lt;code&gt;    package example.com.myapplication;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import android.os.StrictMode;

    public class MainActivity extends AppCompatActivity {

    private static final String DEFAULT_DRIVER = &quot;oracle.jdbc.driver.OracleDriver&quot;;
    private static final String DEFAULT_URL = &quot;jdbc:oracle:thin:@192.168.0.1:1521:xe&quot;;
    private static final String DEFAULT_USERNAME = &quot;system&quot;;
    private static final String DEFAULT_PASSWORD = &quot;oracle&quot;;

    private Connection connection;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (android.os.Build.VERSION.SDK_INT &amp;gt; 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }

        TextView tv = (TextView) findViewById(R.id.hello);


                try {
                    this.connection = createConnection();
                    e.Log(&quot;Connected&quot;);
                    Statement stmt=connection.createStatement();

                    ResultSet rs=stmt.executeQuery(&quot;select * from cat&quot;);
                    while(rs.next()) {
                        System.out.println(&quot;hello : &quot; + rs.getString(1));
                    }
                    connection.close();
                }
                catch (Exception e) {
                    e.Log(&quot;&quot;+e);
                    e.printStackTrace();
                }
            }

            public static Connection createConnection(String driver, String url, String username, String password) throws ClassNotFoundException, SQLException {

                Class.forName(driver);
                return DriverManager.getConnection(url, username, password);
            }

            public static Connection createConnection() throws ClassNotFoundException, SQLException {
                return createConnection(DEFAULT_DRIVER, DEFAULT_URL, DEFAULT_USERNAME, DEFAULT_PASSWORD);
            }
        }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;전제 조건은 다음과 같습니다. 참고로 종속성 libojdbc14.jar를 추가할 필요는 없습니다. 단지 ojdbc14.jar를 당신의 JAVA_에 복사합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HOME jre -&amp;gt; lib -&amp;gt; ext &amp;amp; paste here ojdbc14.jar 그런 다음 cmd/terminal make any simple java program http://www.javatpoint.com/example-to-connect-to-the-oracle-database 을 통해 jdbc 연결을 수동으로 확인합니다.&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/8894665/what-is-the-best-way-to-connect-between-android-and-oracle-database&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1217</guid>
      <comments>https://sourcejob.tistory.com/1217#entry1217comment</comments>
      <pubDate>Sun, 5 Nov 2023 11:32:52 +0900</pubDate>
    </item>
    <item>
      <title>Java 프로그램에서 PowerShell 명령 실행</title>
      <link>https://sourcejob.tistory.com/1216</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Java 프로그램에서 PowerShell 명령 실행&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PowerShell Command&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;Java&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그램.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 이것을 어떻게 하는지 안내해 줄 수 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 명령은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize&lt;/code&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;자바 프로그램은 다음과 같이 작성해야 합니다. 여기 Nirman's Tech Blog를 기반으로 한 샘플이 있습니다. 기본 아이디어는 PowerShell 프로세스를 호출하는 명령을 다음과 같이 실행하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class PowerShellCommand {

 public static void main(String[] args) throws IOException {

  //String command = &quot;powershell.exe  your command&quot;;
  //Getting the version
  String command = &quot;powershell.exe  $PSVersionTable.PSVersion&quot;;
  // Executing the command
  Process powerShellProcess = Runtime.getRuntime().exec(command);
  // Getting the results
  powerShellProcess.getOutputStream().close();
  String line;
  System.out.println(&quot;Standard Output:&quot;);
  BufferedReader stdout = new BufferedReader(new InputStreamReader(
    powerShellProcess.getInputStream()));
  while ((line = stdout.readLine()) != null) {
   System.out.println(line);
  }
  stdout.close();
  System.out.println(&quot;Standard Error:&quot;);
  BufferedReader stderr = new BufferedReader(new InputStreamReader(
    powerShellProcess.getErrorStream()));
  while ((line = stderr.readLine()) != null) {
   System.out.println(line);
  }
  stderr.close();
  System.out.println(&quot;Done&quot;);

 }

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파워셸 스크립트를 실행하려면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String command = &quot;powershell.exe  \&quot;C:\\Pathtofile\\script.ps\&quot; &quot;;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바퀴를 다시 만들 필요가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 &lt;a href=&quot;https://github.com/profesorfalken/jPowerShell&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;7-1&quot;&gt;jPowerShell&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;String command = &quot;Get-ItemProperty &quot; +
                &quot;HKLM:\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* &quot; +
                &quot;| Select-Object DisplayName, DisplayVersion, Publisher, InstallDate &quot; +
                &quot;| Format-Table –AutoSize&quot;;

System.out.println(PowerShell.executeSingleCommand(command).getCommandOutput());
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 명령을 사용하여 powershell.exe를 호출할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String[] commandList = {&quot;powershell.exe&quot;, &quot;-Command&quot;, &quot;dir&quot;};  

        ProcessBuilder pb = new ProcessBuilder(commandList);  

        Process p = pb.start();  
&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;명령에서 -ExecutionPolicy RemoteSigned를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열 cmd = &quot;cmd/cowershell - 실행 정책 원격 서명됨 -noprofile -non interactive C:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;\Users\File.ps1&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/29545611/executing-powershell-commands-in-java-program&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PowerShell</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1216</guid>
      <comments>https://sourcejob.tistory.com/1216#entry1216comment</comments>
      <pubDate>Tue, 31 Oct 2023 21:09:36 +0900</pubDate>
    </item>
    <item>
      <title>Woocommerce 후크에서 함수 제거</title>
      <link>https://sourcejob.tistory.com/1215</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Woocommerce 후크에서 함수 제거&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 아마 제게 문을 열어줄 것입니다. 왜냐하면 제가 놓치고 있는 무언가가 있기 때문입니다. 그래서 WooCommerce 101을 부탁드립니다.&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;WooCommerce 템플릿 아카이브 제품의 일부입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;php는 코드를 포함합니다;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;?php
            /**
             * woocommerce_before_shop_loop hook.
             *
             * @hooked woocommerce_result_count - 20
             * @hooked woocommerce_catalog_ordering - 30
             */
            do_action( 'woocommerce_before_shop_loop' );
        ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해, 그리고 문서를 읽음으로써, 이는 다음과 같은 것을 암시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;remove_action( 'woocommerce_before_shop_loop', 'woocommerce_result_count', 20 );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반환된 제품 범주에서 결과 수를 제거해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않을 뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뭐가 잘못됐나요?&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;a href=&quot;https://codex.wordpress.org/Function_Reference/remove_action&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-1&quot;&gt;설명서&lt;/a&gt;를 읽어보시라고 말씀드리려 했는데 중요한 부분이 빠져있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;remove_action()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;직접 호출할 수 없으며 자체를 작업 후크에 추가해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업을 제거하기 전에 작업 후크가 있어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우에는 동일한 후크를 사용하지만 우선 순위는 이전입니다(기본값은 10이며 1을 사용했습니다).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function so_38878702_remove_hook(){
   remove_action( 'woocommerce_before_shop_loop', 'woocommerce_result_count', 20 );
}
add_action( 'woocommerce_before_shop_loop', 'so_38878702_remove_hook', 1 );
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;remove result count&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Woocommerce의 액션 -&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_action('woocommerce_before_shop_loop', 'remove_result_count' );
    function remove_result_count()
    {
         remove_action( 'woocommerce_before_shop_loop', 'woocommerce_result_count', 20);
      
    }
&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;strong papago-id=&quot;10-1&quot;&gt;코드&lt;/strong&gt;를 사용합니다&lt;strong papago-id=&quot;10-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;10-1&quot;&gt;php&lt;/strong&gt; 파일.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;11-0&quot;&gt;중요&lt;/strong&gt;:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;후크를 제거하려면 후크가 추가되었을 때 $function_to_remove 및 $priority 인수가 일치해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 필터와 작업 모두에 적용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;탈거 실패에 대한 경고는 없습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;http://codex.wordpress.org/Function_Reference/remove_action&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://codex.wordpress.org/Function_Reference/remove_action&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 wooCommerce &lt;strong papago-id=&quot;13-1&quot;&gt;Action과 Filter Hook&lt;/strong&gt;을 얻을 수 있습니다 -&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://docs.woothemes.com/wc-apidocs/hook-docs.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://docs.woothemes.com/wc-apidocs/hook-docs.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/38878702/removing-functions-from-woocommerce-hooks&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1215</guid>
      <comments>https://sourcejob.tistory.com/1215#entry1215comment</comments>
      <pubDate>Tue, 31 Oct 2023 21:09:30 +0900</pubDate>
    </item>
    <item>
      <title>PowerShell 바로 가기에서 &amp;quot;기본&amp;quot; 색상으로 powershell.exe를 시작하려면 어떻게 해야 합니까?</title>
      <link>https://sourcejob.tistory.com/1214</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell 바로 가기에서 &quot;기본&quot; 색상으로 powershell.exe를 시작하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;미리 설치된 바로 가기 중 하나에서 시작하면 PowerShell 창의 멋진 파란색이 마음에 듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 수동으로 powershell.exe를 실행하면 이러한 색상이 표시되지 않고 검정/흰색이 표시됩니다. :(&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;바로 가기(.lnk) 파일에 기본 설정이 설정되어 있기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/AzKyT.png&quot; alt=&quot;PowerShell shortcut colour settings&quot;&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;탐색기 컨텍스트 메뉴에 &quot;PowerShell Prompt Here&quot; 항목이 있는데, 일반적인 바로 가기와 동일한 좋은 색상을 사용하여 PowerShell을 실행했으면 합니다. 검은색은 썩고, 다른 색상의 창이 있으면 혼란스럽습니다(특히 일부 올드스쿨 명령 창이 자주 열려 검은색이기도 합니다!).&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;ol&gt; 
 &lt;li papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell 내에서 색상을 설정하면 특정 값(ConsoleColor enum)만 허용되는 것으로 보이며, 이 값 중 어떤 값도 기본 바로 가기의 값과 일치하지 않습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PS 프로파일 내에서 색상을 설정하면 나중에 작성된 텍스트만 새 배경 색상을 나타냅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;cls&quot;를 추가하면 시작할 때 원래 색상이 역겨운 플래시가 발생합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바로 가기와 동일한 설정을 사용하는 명령줄(즉, 레지스트리에 탐색기 컨텍스트 메뉴 항목으로 포함할 수 있음)에서 PowerShell을 시작할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$profile로 표시된 프로필 스크립트를 편집하고 원하는 색상을 직접 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# set regular console colors
[console]::backgroundcolor = &quot;darkmagenta&quot;
[console]::foregroundcolor = &quot;darkyellow&quot;

# set special colors

$p = $host.privatedata

$p.ErrorForegroundColor    = &quot;Red&quot;
$p.ErrorBackgroundColor    = &quot;Black&quot;
$p.WarningForegroundColor  = &quot;Yellow&quot;
$p.WarningBackgroundColor  = &quot;Black&quot;
$p.DebugForegroundColor    = &quot;Yellow&quot;
$p.DebugBackgroundColor    = &quot;Black&quot;
$p.VerboseForegroundColor  = &quot;Yellow&quot;
$p.VerboseBackgroundColor  = &quot;Black&quot;
$p.ProgressForegroundColor = &quot;Yellow&quot;
$p.ProgressBackgroundColor = &quot;DarkCyan&quot;

# clear screen
clear-host
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 정말 쉬운 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1. 추가.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PATHEXT 변수에 LNK를 적용합니다.&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시작 -&amp;gt; &quot;sysdm.cpl&quot; 실행 -&amp;gt; 고급 -&amp;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;시스템 변수에서 아래로 스크롤하고 PATHEXT를 두 번 클릭합니다.&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;아래 그림과 같이 .LNK를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/tEY0s.png&quot; alt=&quot;Path Extension&quot;&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2 기본 &quot;Windows Powershell.lnk&quot; 복사&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;Copy-Item &quot;C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Windows PowerShell\Windows PowerShell.lnk&quot; &quot;C:\Windows\System32\powershell.lnk&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3. 실행 프롬프트에서 &quot;powershell&quot;을 입력하면 기본 콘솔 색상/구성이 나타납니다.&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C:에서 .lnk를 추가로 사용자 정의할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;\Windows\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;32번 시스템이 마음에 듭니다.&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;허용 가능한 확장명 목록에 .lnk를 추가했기 때문에 이 작업은 사용할 수 있습니다. 그리고 c:\windows\system32는 기본적으로 검색 경로(PATH 시스템 변수)의 첫 번째 항목입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;cmd.exe를 통해 콘솔을 시작하는 경우에는 콘솔을 사용자 지정하지 않습니다.&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;19&quot;&gt;4. To make this work from the &quot;Run Powershell Here&quot; context menu, save this as a .reg file and import it:&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\PowerShellHere\command]
@=&quot;C:\\WINDOWS\\system32\\cmd.exe /c start powershell -NoExit \&quot;cd '%1';(get-host).ui.rawui.windowtitle = 'Oompa Loompa'\&quot;&quot;

[HKEY_CLASSES_ROOT\Directory\shell\PowerShellHere\command]
@=&quot;C:\\WINDOWS\\system32\\cmd.exe /c start powershell -NoExit \&quot;cd '%1';(get-host).ui.rawui.windowtitle = 'Oompa Loompa'\&quot;&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot;&gt;I am using cmd.exe to call &quot;start&quot; which will launch the powershell.lnk and pass the current working directory as an argument. Doesn't seem to work from the address bar yet. I should have gone home 45mins ago, but your problem was fun to solve! :) &lt;/p&gt; 
&lt;p papago-id=&quot;21&quot;&gt;Bonus Points: You can thread the commands sent to Powershell. So, if you are looking to modify the Powershell console's title attribute:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;\&quot;cd '%1';(get-host).ui.rawui.windowtitle = 'Oompa Loompa'&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot;&gt;Simply add a semicolon between commands. &lt;/p&gt; 
&lt;p papago-id=&quot;23&quot;&gt;Happy shelling&lt;/p&gt;&lt;p papago-id=&quot;24&quot;&gt;I found it very useful to use &lt;a href=&quot;https://github.com/lukesampson/concfg&quot; rel=&quot;noreferrer&quot; papago-id=&quot;24-1&quot;&gt;concfg tool&lt;/a&gt; and &lt;a href=&quot;https://github.com/lukesampson/scoop&quot; rel=&quot;noreferrer&quot; papago-id=&quot;24-3&quot;&gt;scoop&lt;/a&gt; to install colors and fonts for Powershell:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;25&quot;&gt;Install scoop: &lt;/p&gt; &lt;pre&gt;&lt;code&gt;iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;26&quot;&gt;Install concfg:&lt;/p&gt; &lt;pre&gt;&lt;code&gt;scoop install concfg
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;27&quot;&gt;Install &lt;a href=&quot;https://github.com/lukesampson/concfg/blob/master/preset_examples/README.md#solarized&quot; rel=&quot;noreferrer&quot; papago-id=&quot;27-1&quot;&gt;Solarized theme&lt;/a&gt;:&lt;/p&gt; &lt;pre&gt;&lt;code&gt;concfg import solarized
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;28&quot;&gt;That's it, thanks to the authors!&lt;/p&gt;&lt;p papago-id=&quot;29&quot;&gt;The correct way to do this is with the Registry&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cd hkcu:/console
$0 = '%systemroot%_system32_windowspowershell_v1.0_powershell.exe'
ni $0 -f
sp $0 ColorTable00 0x00562401
sp $0 ColorTable07 0x00f0edee
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;30&quot;&gt;Click the system menu (PowerShell icon in the top-left of the window) and click Defaults. You can change the default colors here and it will be respected by the PowerShell Prompt Here command.&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot;&gt;From: &lt;a href=&quot;https://superuser.com/a/523017/109736&quot; papago-id=&quot;31-1&quot;&gt;https://superuser.com/a/523017/109736&lt;/a&gt;&lt;/p&gt;&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;달려.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;regedit&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;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추적하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HKEY_CURRENT_USER &amp;gt; CONSOLE&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;/li&gt; 
 &lt;li papago-id=&quot;36&quot;&gt;Delete the folder&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;37&quot;&gt;Restart your Powershell, the color scheme must have reset to defaults.&lt;/p&gt; 
&lt;p papago-id=&quot;38&quot;&gt;Note: If you have any other settings related to PowerShell (or Command Prompt, Git Bash etc) which you might want to keep, please further explore Console Folder to delete appropriate keys&lt;/p&gt;&lt;p papago-id=&quot;39&quot;&gt;This was my solution (setting the colors in a script that launches as system). May be more than you need (see my own answer):&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://superuser.com/questions/891519/using-psexec-to-launch-powershell-session-as-system-with-specific-window-attribu&quot; papago-id=&quot;40&quot;&gt;https://superuser.com/questions/891519/using-psexec-to-launch-powershell-session-as-system-with-specific-window-attribu&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;41&quot;&gt;Based on @rex-hardin excellent &lt;a href=&quot;https://stackoverflow.com/a/13690899/1034782&quot; papago-id=&quot;41-1&quot;&gt;answer&lt;/a&gt;, I improved the regedit content here to add an icon, and use the PowerShell native arguments to start in the right path.&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot;&gt;The context-menu is enabled when right-clicking on a directory background, and when right-clicking directly on a directory icon.&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot;&gt;Of course, we also run a console with blue background exactly like the default one.&lt;/p&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1. 추가&quot;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.LNK&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;&quot; 까지 확장.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%PATHEXT%&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;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 시스템이 다음과 같이 파일을 실행할 수 있게 해줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.lnk&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확장명(바로 가기의 숨겨진 확장명)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2&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;2. 시스템32에 기본 PowerShell 바로 가기 링크를 다음과 같이 복사합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;powershell&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;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 허용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;powershell&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;system32&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;%PATH%&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 papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;탐색기(copy+rename) 또는 아래 명령줄을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Copy-Item &quot;C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Windows PowerShell\Windows PowerShell.lnk&quot; &quot;C:\Windows\System32\powershell.lnk&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&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;3. 아래 코드를 a에 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;powershell_here.reg&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;/h2&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;powershell_here.reg&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\directory\background\shell\PowerShell]
@=&quot;PowerShell Here&quot;
&quot;Icon&quot;=&quot;%SystemRoot%\\system32\\WindowsPowerShell\\v1.0\\powershell.exe&quot;

[HKEY_CLASSES_ROOT\directory\background\shell\PowerShell\command]
@=&quot;cmd.exe /c start powershell -NoExit -NoProfile -Command Set-Location -LiteralPath '%V'&quot;

[HKEY_CLASSES_ROOT\directory\shell\PowerShell]
@=&quot;PowerShell here&quot;
&quot;Icon&quot;=&quot;%SystemRoot%\\system32\\WindowsPowerShell\\v1.0\\powershell.exe&quot;

[HKEY_CLASSES_ROOT\directory\shell\PowerShell\command]
@=&quot;cmd.exe /c start powershell -NoExit -NoProfile -Command Set-Location -LiteralPath '%L'&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/57CUl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/57CUl.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 7 Pro 64비트의 탐색기 또는 Total Commander 또는 Double Commander에서 현재 폴더에 있는 기본 파란색과 흰색으로 파워셸을 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;별메뉴 -&amp;gt; 검색 PowerShell 링크 -&amp;gt; 우클릭 -&amp;gt; 속성 -&amp;gt; 바로가기 탭(기본적으로 열리는 것) -&amp;gt; 수정 시작 : -&amp;gt; %CD%&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GWiZo.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GWiZo.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;61-1&quot;&gt;ps.bat&lt;/strong&gt;라는 이름의 배치 파일을 시스템 PATH에 있는 폴더 어딘가에 생성합니다(&lt;em papago-id=&quot;61-3&quot;&gt;이러한&lt;/em&gt; 폴더가 없으면 C&lt;em papago-id=&quot;61-3&quot;&gt;:\run\cli&lt;/em&gt;라고 하고 PATH 시스템 환경 변수에 추가합니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 배치 파일에는 다음 명령이 포함되어야 합니다.&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시작 &quot; &quot; &quot;C:\ProgramData\Microsoft\&quot;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows\시작 메뉴\프로그램\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;부속품\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows PowerShell\Windows PowerShell.lnk&quot;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&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;이제 현재 폴더가 표시된 탐색기의 경로 표시줄이나 Total Commander 또는 Double Commander의 명령줄 상자에 ps를 입력하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 10에서는 시작 메뉴에서 PowerShell 바로 가기를 수정할 필요가 없으며 위의 ps.bat 파일에는 다음 명령만 포함될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;start %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/13690223/how-can-i-launch-powershell-exe-with-the-default-colours-from-the-powershell-s&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PowerShell</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1214</guid>
      <comments>https://sourcejob.tistory.com/1214#entry1214comment</comments>
      <pubDate>Tue, 31 Oct 2023 21:09:23 +0900</pubDate>
    </item>
    <item>
      <title>페이지를 스크롤하지 않고 위치 해시를 제거하려면 어떻게 해야 합니까?</title>
      <link>https://sourcejob.tistory.com/1213</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;window.location&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;scroll를 맨 위로 올려놓게 하지 않는 것 말입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 점프를 일으키지 않고 해시를 수정할 수 있어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이것을 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('&amp;lt;a href=&quot;#123&quot;&amp;gt;').text('link').click(function(e) {
  e.preventDefault();
  window.location.hash = this.hash;
}).appendTo('body');

$('&amp;lt;a href=&quot;#&quot;&amp;gt;').text('unlink').click(function(e) {
  e.preventDefault();
  window.location.hash = '';
}).appendTo('body');
&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;여기서 라이브 예시 보기: http://jsbin.com/asobi&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 '&lt;strong papago-id=&quot;5-1&quot;&gt;링크&lt;/strong&gt;'를 클릭하면 해시 태그가 페이지 점프 없이 수정되므로 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 사용자가 '&lt;strong papago-id=&quot;6-1&quot;&gt;연결&lt;/strong&gt; 해제'를 클릭하면 has 태그가 제거되고 페이지가 스크롤을 통해 맨 위로 이동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 부작용 없이 해시를 제거해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더미 해시만 넣으시면 스크롤 할 수 있는 매치가 없어서 스크롤이 안 될 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a href=&quot;#A4J2S9F7&quot;&amp;gt;No jumping&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a href=&quot;#_&quot;&amp;gt;No jumping&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;&quot;#&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 자체로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;_top&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 페이지 상단으로 스크롤합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 몇 개의 사이트에서 다음을 사용합니다. NO PAGE JUPS!&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;HTML5 브라우저를 위한 깔끔한 주소 표시줄, 오래된 브라우저를 위한 #.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#logo a').click(function(e){
    window.location.hash = ''; // for older browsers, leaves a # behind
    history.pushState('', document.title, window.location.pathname); // nice and clean
    e.preventDefault(); // no page reload
});
&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;window.location의 해시 속성은 몇 가지 면에서 바보같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 그 중 하나이며, 다른 하나는 다른 get 및 set 값이 서로 다르다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;window.location.hash = &quot;hello&quot;;  // url now reads *.com#hello
alert(window.location.hash);   // shows &quot;#hello&quot;, which is NOT what I set.
window.location.hash = window.location.hash; // url now reads *.com##hello
&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;해시 속성을 &quot;&quot;로 설정하면 해시 표시도 제거되므로 페이지가 리디렉션됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL의 해시 부분의 값을 ''로 설정하여 해시 표시를 남기므로 새로 고치지 않으려면 다음과 같이 기록합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;window.location.href = window.location.href.replace(/#.*$/, '#');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 번 설정하면 페이지를 새로 고치지 않고 해시 마크를 완전히 제거할 수 있는 방법은 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트 2012:&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;Blazeminger와 thinkdj가 지적했듯이 기술이 향상되었습니다.&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;if ( window.history &amp;amp;&amp;amp; window.history.pushState ) { 
    window.history.pushState('', '', window.location.pathname) 
} else { 
    window.location.href = window.location.href.replace(/#.*$/, '#'); 
}
&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;오래된 게시물이지만 솔루션을 공유하고 싶었습니다. JS에서 처리하는 프로젝트의 모든 링크는 href=&quot;#_js&quot; 특성을 가지고 있으며(또는 해당 목적으로만 사용하려는 이름) 페이지 초기화 시 다음 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('body').on('click.a[href=&quot;#_js&quot;]', function() {
    return false;
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 잘 될 겁니다&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;window.location을 설정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;hash to empty 또는 존재하지 않는 앵커 이름. 항상 페이지를 맨 위로 이동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 방지하는 유일한 방법은 윈도우의 스크롤 위치를 잡고 해시 변경 후 해당 위치로 다시 설정하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 페이지를 다시 칠해야 하지만(피할 수 없음) 단일 js 프로세스에서 실행되므로(이론적으로) 위/아래로 점프하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('&amp;lt;a href=&quot;#123&quot;&amp;gt;').text('link').click(function(e) {
    e.preventDefault();
    window.location.hash = this.hash;
}).appendTo('body');

$('&amp;lt;a href=&quot;#&quot;&amp;gt;').text('unlink').click(function(e) {
    e.preventDefault();
    var pos = $(window).scrollTop(); // get scroll position
    window.location.hash = '';
    $(window).scrollTop(pos); // set scroll position back
}).appendTo('body');
&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('&amp;lt;a href=&quot;#&quot;&amp;gt;').text('unlink').click(function(e) {
    e.preventDefault();
    var st = parseInt($(window).scrollTop())
    window.location.hash = '';
    $('html,body').css( { scrollTop: st });  
});
&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&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;return false;&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;이벤트 핸들러에서? jQuery는 당신이 그것을 할 때 특별한 것을 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 비슷하지만, AFAIK는 더 영향력이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;e.preventDefault&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;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 papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;html&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;tabs&quot;&amp;gt;
  &amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;#content1&quot;&amp;gt;Tab 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;#content2&quot;&amp;gt;Tab 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;#content3&quot;&amp;gt;Tab 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;content content1&quot;&amp;gt;
    &amp;lt;p&amp;gt;1. Content goes here&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;content content2&quot;&amp;gt;
    &amp;lt;p&amp;gt;2. Content goes here&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;content content3&quot;&amp;gt;
    &amp;lt;p&amp;gt;3. Content goes here&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;js&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function tabs(){
  $(&quot;.content&quot;).hide();

  if (location.hash !== &quot;&quot;) {
    $('.tabs ul li:has(a[href=&quot;' + location.hash + '&quot;])').addClass(&quot;active&quot;);
    var hash = window.location.hash.substr(1);
    var contentClass = &quot;.&quot; + hash;
    $(contentClass).fadeIn();
  } else {
    $(&quot;.tabs ul li&quot;).first().addClass(&quot;active&quot;);
    $('.tabs').next().css(&quot;display&quot;, &quot;block&quot;);
  }
}
tabs();

$(&quot;.tabs ul li&quot;).click(function(e) {
  $(&quot;.tabs ul li&quot;).removeAttr(&quot;class&quot;);
  $(this).addClass(&quot;active&quot;);
  $(&quot;.content&quot;).hide();
  var contentClass = &quot;.&quot; + $(this).find(&quot;a&quot;).attr(&quot;href&quot;).substr(1);
  $(contentClass).fadeIn();
  window.location.hash = $(this).find(&quot;a&quot;).attr(&quot;href&quot;);
  e.preventDefault();
  return false;
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해시가 없는 URL입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;a href=&quot;http://output.jsbin.com/tojeja&quot; rel=&quot;nofollow&quot; papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/a&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;닻으로 점프하지 않는 해시태그가 있는 URL.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;a href=&quot;http://output.jsbin.com/tojeja#content1&quot; rel=&quot;nofollow&quot; papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2295845/how-can-i-remove-the-location-hash-without-causing-the-page-to-scroll&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1213</guid>
      <comments>https://sourcejob.tistory.com/1213#entry1213comment</comments>
      <pubDate>Tue, 31 Oct 2023 21:09:14 +0900</pubDate>
    </item>
    <item>
      <title>C에서 ENUM을 함수 인수로 전달하는 방법</title>
      <link>https://sourcejob.tistory.com/1212</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C에서 ENUM을 함수 인수로 전달하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 다음과 같이 선언된 열거형을 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;typedef enum 
{
   NORMAL = 0,           
   EXTENDED              

} CyclicPrefixType_t;

CyclicPrefixType_t cpType;  
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 인수로 하는 함수가 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;fun(CyclicPrefixType_t cpType);  
&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;void fun(CyclicPrefixType_t cpType);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 고치죠?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그것이 옳지 않다고 생각합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바로 그 &lt;em papago-id=&quot;5-1&quot;&gt;방법&lt;/em&gt;입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

typedef enum {
    NORMAL = 31414,
    EXTENDED
} CyclicPrefixType_t;

void func (CyclicPrefixType_t x) {
    printf (&quot;%d\n&quot;, x);
}

int main (void) {
    CyclicPrefixType_t cpType = EXTENDED;
    func (cpType);
    return 0;
}
&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;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;(이 경우 31415) 예상대로.&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;FWIW (약간 혼란을 주는...) 다음도 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

enum CyclicPrefixType_t {
    NORMAL = 31414,
    EXTENDED
};

void func (enum CyclicPrefixType_t x) {
    printf (&quot;%d\n&quot;, x);
}

int main (void) {
    enum CyclicPrefixType_t cpType = EXTENDED;
    func (cpType);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/q/385023/32453&quot; papago-id=&quot;9-1&quot;&gt;보아하니&lt;/a&gt; 유산 &lt;a href=&quot;https://stackoverflow.com/q/385023/32453&quot; papago-id=&quot;9-1&quot;&gt;C&lt;/a&gt;인 것 같네요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/4654655/how-to-pass-enum-as-function-argument-in-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1212</guid>
      <comments>https://sourcejob.tistory.com/1212#entry1212comment</comments>
      <pubDate>Tue, 31 Oct 2023 21:09:06 +0900</pubDate>
    </item>
    <item>
      <title>PowerShell을 사용하여 클립보드로 파이프 출력</title>
      <link>https://sourcejob.tistory.com/1211</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell을 사용하여 클립보드로 파이프 출력&lt;/font&gt;&lt;/h2&gt;
&lt;h1&gt;&lt;strong papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 2020년 10월 23일&lt;/font&gt;&lt;/strong&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/64473408/288393&quot; papago-id=&quot;2-1&quot;&gt;포스트노트의 답&lt;/a&gt;을 보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;h1&gt;&lt;strong papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 2015년 5월 14일&lt;/font&gt;&lt;/strong&gt;&lt;/h1&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;3년 후에, 저의 것을 공유하려고 생각했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ClipboardModule&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;Add-Type -AssemblyName System.Windows.Forms

Function Get-Clipboard {
    param([switch]$SplitLines)

    $text = [Windows.Forms.Clipboard]::GetText();
    
    if ($SplitLines) {
        $xs = $text -split [Environment]::NewLine
        if ($xs.Length -gt 1 -and -not($xs[-1])) {
            $xs[0..($xs.Length - 2)]
        } else {
            $xs
        }
    } else {
        $text
    }
}

function Set-Clipboard {
    $in = @($input)

    $out = 
        if ($in.Length -eq 1 -and $in[0] -is [string]) { $in[0] }
        else { $in | Out-String }
    
    if ($out) {
        [Windows.Forms.Clipboard]::SetText($out);
    } else {
        # input is nothing, therefore clear the clipboard
        [Windows.Forms.Clipboard]::Clear();
    }
}


function GetSet-Clipboard {
    param([switch]$SplitLines, [Parameter(ValueFromPipeLine=$true)]$ObjectSet)

    if ($input) {
        $ObjectSet = $input;
    }

    if ($ObjectSet) {
        $ObjectSet | Set-Clipboard
    } else {
        Get-Clipboard -SplitLines:$SplitLines
    }
}

Set-Alias cb GetSet-Clipboard

Export-ModuleMember -Function *-* -Alias *
&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;cb&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;GetSet-Clipboard&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클립보드를 가져오거나 설정할 수 있는 두 가지 방법이 있기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cb                # gets the contents of the clipboard
&quot;john&quot; | cb       # sets the clipboard to &quot;john&quot;
cb -s             # gets the clipboard and splits it into lines
&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;WMF 5.0이 있는 경우 PowerShell에는 두 가지 새로운 cmdlet이 포함되어 있습니다.&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;clipboard랑 세트...&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;b papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 해결책은 질문 대신에 살펴보세요.&lt;/font&gt;&lt;/b&gt;&lt;/p&gt; 
&lt;p&gt;&lt;del papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책은 다음과 같습니다.&lt;/font&gt;&lt;/del&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Add-Type -AssemblyName 'System.Windows.Forms'

filter Set-Clipboard {
    begin {
        $cp = @()
    }
    process {
        $_ | Tee-Object -Variable 'cp0'
        $cp = $cp + @($cp0);
    }
    end {
        $str = ($cp | Out-String).ToString();

        [Windows.Forms.Clipboard]::Clear();

        if ( ($str -ne $null) -and ($str -ne '') ) {
            [Windows.Forms.Clipboard]::SetText( $str )
        }

        $cp = @()
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 배열된 모든 개체가 수집됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$cp&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. &lt;a href=&quot;http://technet.microsoft.com/en-us/library/hh849937.aspx&quot; rel=&quot;nofollow&quot; papago-id=&quot;6-1&quot;&gt;Tee-Object&lt;/a&gt;를 사용하여 현재 요소를 리디렉션합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$_&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 다음 프로세스와 배열에 저장하기 위해,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$cp&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 마지막으로 프로세스가 완료되면 클립보드의 텍스트를 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 방법으로 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dir -Recurse | Set-Clipboard | Select 'Name'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 효과가 있는 것 같습니다.&lt;/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;function Set-Clipboard-Func {
    $str = $input | Out-String

    [Windows.Forms.Clipboard]::Clear();

    if ( ($str -ne $null) -and ($str -ne '') ) {
        [Windows.Forms.Clipboard]::SetText( $str )
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;20-0&quot;&gt;파워셸 버전 6.1&lt;/strong&gt;에서는 이 명령어가 제거되어 더 이상 내장되어 있지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 &lt;a href=&quot;https://www.powershellgallery.com/packages/ClipboardText&quot; papago-id=&quot;21-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;클립보드&lt;/a&gt;를 설치해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.powershellgallery.com/packages/ClipboardText&quot; papago-id=&quot;21-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;문자 패키지&lt;/a&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파워셸의 콘솔 유형에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Install-Module -Name ClipboardText
&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; Set-ClipboardText &quot;hello clipboard&quot;
 Get-ClipboardText
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/PowerShell/PowerShell/issues/3618&quot; papago-id=&quot;23-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;다음&lt;/a&gt;은 Powershell의 유지 관리자가 클립보드를 사용하도록 리디렉션하는 &lt;a href=&quot;https://github.com/PowerShell/PowerShell/issues/3618&quot; papago-id=&quot;23-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;github 문제&lt;/a&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자 패키지.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PSv7의 네이티브 클립 cmdlets&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$Host
# Results
&amp;lt;#
Name             : ConsoleHost
Version          : 7.0.3
InstanceId       : 54be9bfd-799d-4213-a13a-22403c1d9ed8
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : en-US
CurrentUICulture : en-US
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
DebuggerEnabled  : True
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace
#&amp;gt;

Get-Command -Name '*clip*'|Format-Table -a
# Results
&amp;lt;#
CommandType Name                         Version        Source
----------- ----                         -------        ------
Function    Get-Clipboard                1.3.6          PowerShellCookbook
Function    Set-Clipboard                1.3.6          PowerShellCookbook
Function    Start-ClipboardHistoryViewer 0.0            ModuleLibrary
Cmdlet      Get-Clipboard                7.0.0.0        Microsoft.PowerShell.Management
Cmdlet      Set-Clipboard                7.0.0.0        Microsoft.PowerShell.Management
Cmdlet      Set-UDClipboard              2.9.0          UniversalDashboard
Application clip.exe                     10.0.19041.1   C:\WINDOWS\system32\clip.exe
Application ClipRenew.exe                10.0.19041.1   C:\WINDOWS\system32\ClipRenew.exe
Application ClipUp.exe                   10.0.19041.488 C:\WINDOWS\system32\ClipUp.exe
Application rdpclip.exe                  10.0.19041.423 C:\WINDOWS\system32\rdpclip.exe
#&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;get-clipboard
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트를 순차적으로 입력할 때 줄 바꿈 문자를 생략합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[System.Windows.Forms.Clipboard]::GetText()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;종전과 같이&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 &lt;strong papago-id=&quot;27-1&quot;&gt;Get-Clipboard&lt;/strong&gt;와 &lt;strong papago-id=&quot;27-3&quot;&gt;Set-Clipboard&lt;/strong&gt;가 PSv7에 내장되었습니다. 프로필에 다음 기능을 포함할 수 있습니다. &quot;C:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;\Users&amp;lt;USER_&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ID&amp;gt;\문서\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows PowerShell\Microsoft.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파워쉘&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ISE_profile.ps1&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function To-Notepad {
    param(
        [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
        [object]
        $InputObject
    )
  begin   { $objs = @() }
  process { $objs += $InputObject }
  end {
        $old = Get-clipboard # store current value
        $objs | out-string -width 1000 | Set-Clipboard
        &amp;amp; &quot;notepad2&quot; /c
        sleep -mil 500
        $old | Set-Clipboard # restore the original value
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 다음과 같이 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dir -Path C:\Temp | To-Notepad
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/13127578/pipe-output-to-the-clipboard-using-powershell&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PowerShell</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1211</guid>
      <comments>https://sourcejob.tistory.com/1211#entry1211comment</comments>
      <pubDate>Tue, 31 Oct 2023 21:08:59 +0900</pubDate>
    </item>
    <item>
      <title>C에서 EOF까지 스캔프를 어떻게 읽습니까?</title>
      <link>https://sourcejob.tistory.com/1210</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C에서 EOF까지 스캔프를 어떻게 읽습니까?&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;나는 이것을 가지고 있지만 일단 그것이 추정되는 EOF에 도달하면 루프를 반복하고 다시 스캔합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int main(void)
{
        char words[16];

        while(scanf(&quot;%15s&quot;, words) == 1)
           printf(&quot;%s\n&quot;, words);

        return 0;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;while(scanf(&quot;%15s&quot;, words) != EOF)
&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;scanf&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;EOF&lt;/code&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;15&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;형식 문자열에서는 최대 15자를 읽을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 단어 배열은 크기가 커야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;16&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;15 +1&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;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;char). 그럼 다음과 같이 선언합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char words[16];
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스캔프는 항상 가치보다 훨씬 더 문제가 많습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 여러분이 하려는 일을 하는 두 가지 더 나은 방법이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 첫번째 것은 당신의 코드를 다소 직역한 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 더 길지만 스캔프와는 달리 이것을 보고 이것이 무엇을 하는지 명확하게 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;ctype.h&amp;gt;
int main(void)
{
    char buf[1024], *p, *q;
    while (fgets(buf, 1024, stdin))
    {
        p = buf;
        while (*p)
        {
            while (*p &amp;amp;&amp;amp; isspace(*p)) p++;
            q = p;
            while (*q &amp;amp;&amp;amp; !isspace(*q)) q++;
            *q = '\0';
            if (p != q)
                puts(p);
            p = q;
        }
    }
    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 또 다른 버전이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;검사로 이것이 무엇을 하는지 확인하는 것은 조금 어렵지만, 한 줄이 1024자보다 길면 끊어지지 않기 때문에 제가 제작에 사용할 코드입니다. (&lt;em papago-id=&quot;11-1&quot;&gt;음&lt;/em&gt;, 실제로 제작에 사용할 코드는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tr -s '[:space:]' '\n'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 이것이 바로 그와 같은 것을 구현하는 방법입니다.)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;ctype.h&amp;gt;
int main(void)
{
    int ch, lastch = '\0';
    while ((ch = getchar()) != EOF)
    {
        if (!isspace(ch))
            putchar(ch);
        if (!isspace(lastch))
            putchar('\n');
        lastch = ch;
    }
    if (lastch != '\0' &amp;amp;&amp;amp; !isspace(lastch))
        putchar('\n');
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드가 한 단어를 읽을 때까지 루프를 한 다음 종료합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 여러 단어를 입력하면 첫 번째 단어를 읽고 종료되는 반면 빈 입력을 입력하면 영원히 순환됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 경우든 초기화되지 않은 메모리에서 임의의 가비지만 인쇄합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 분명히 당신이 원하는 것이 아닌데, 당신이 원하는 것은 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 단어(존재하는 경우)만 읽고 인쇄하려면 다음을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (scanf(&quot;%15s&quot;, word) == 1)
    printf(&quot;%s\n&quot;, word);
&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;pre&gt;&lt;code&gt;while (scanf(&quot;%15s&quot;, word) == 1)
    printf(&quot;%s\n&quot;, word);
&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;char word[16];
&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;다른 사람들은 얼마나 많은 아이템이 스캔되었는지를 확인하는 대신 EOF 테스트를 제안했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;EOF가 없는 한 스캔f가 일치하지 않을 수는 없지만 다른 경우(정수 읽기 시도 등)에는 스캔f가 EOF에 도달하지 않고는 아무것도 일치하지 않고(입력이 숫자가 아닌 경우) 0을 반환하는 경우에는 괜찮습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집하다&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 실행할 때 잘 작동하는 코드와 일치하도록 질문을 변경하신 것 같습니다. EOF에 도달할 때까지 단어를 읽고 종료합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 코드에 다른 일이 일어나고 있습니다. 아마도 David가 제안한 대로 입력을 하는 방법과 관련이 있을 것입니다.&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;EOF&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Enter 키를 눌러 도달하는 것이 아니라 콘솔에서 &lt;kbd papago-id=&quot;20-3&quot;&gt;Z&lt;/kbd&gt;+ 키를 눌러 도달합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 표시기인 &quot;^Z&quot;를 인쇄합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;EOF&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;. 이 글을 읽을 때의 함수의 동작(the&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;EOF&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;kbd papago-id=&quot;22-3&quot;&gt;Z&lt;/kbd&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;div class=&quot;s-table-container&quot;&gt; 
 &lt;table class=&quot;s-table&quot;&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th style=&quot;text-align: center;&quot; papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능.&lt;/font&gt;&lt;/th&gt; 
    &lt;th style=&quot;text-align: center;&quot; papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;산출량&lt;/font&gt;&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align: center;&quot;&gt;&lt;code&gt;scanf(...)&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align: center;&quot;&gt;&lt;code&gt;EOF&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align: center;&quot;&gt;&lt;code&gt;gets(&amp;lt;variable&amp;gt;)&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align: center;&quot;&gt;&lt;code&gt;NULL&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align: center;&quot;&gt;&lt;code&gt;feof(stdin)&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align: center;&quot;&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align: center;&quot;&gt;&lt;code&gt;getchar()&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align: center;&quot;&gt;&lt;code&gt;EOF&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/div&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;EOF&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;1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예제에서는 두 개의 다른 변수 이름을 사용했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;words&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;word&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 신고만 한&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;words&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;, 길이를 선언하지 않았습니다. 15자에 16자를 더해서 읽어 들여야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NUL&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성격.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 좋은 방법은...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int main()
{
    char str[100];
    scanf(&quot;[^EOF]&quot;,str);
    printf(&quot;%s&quot;,str);
    return 0;     
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C 사용자의 경우에도 이 기능이 적용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;while ( gets(str) != NULL )
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3764014/how-do-you-read-scanf-until-eof-in-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1210</guid>
      <comments>https://sourcejob.tistory.com/1210#entry1210comment</comments>
      <pubDate>Tue, 31 Oct 2023 21:08:50 +0900</pubDate>
    </item>
    <item>
      <title>페이지 속도 인사이트 Google Retackcha에 사용되지 않는 자바스크립트 제거</title>
      <link>https://sourcejob.tistory.com/1209</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지 속도 인사이트 Google Retackcha에 사용되지 않는 자바스크립트 제거&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;Google 페이지 Speed Insights에서 좋은 점수를 받는 사이트가 있지만 이 파일에 대해 &quot;사용하지 않는 자바스크립트 제거&quot;라는 성능 문제가 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.gstatic.com/recaptcha/releases/2diXFiiA9NsPIBTU15LG6xPf/recaptcha__en.js&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://www.gstatic.com/recaptcha/releases/2diXFiiA9NsPIBTU15LG6xPf/recaptcha__en.js&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 인비저블 캡차 플러그인을 제거하고 이 코드 라인을 함수에 추가하려고 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;php:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_action('wp_print_scripts', function () {
    if ( is_home() ){
        wp_dequeue_script( 'google-recaptcha' );
        wp_dequeue_script( 'google-invisible-recaptcha' );
    }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 아직도 오류가 납니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 스크립트를 홈 페이지에 로드하는 것을 제거하기 위해 제가 할 수 있는 일이 있을까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 사이트는 최신 버전의 워드프레스를 사용하고 있습니다.&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;add_action( 'wp_enqueue_scripts', 'mytheme_deregister_scripts' );
function mytheme_deregister_scripts() {
  if( is_home() || is_front_page() ) :
    wp_deregister_script('google-invisible-recaptcha');
  endif;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/62334094/page-speed-insights-remove-unused-javascript-for-google-recaptcha&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1209</guid>
      <comments>https://sourcejob.tistory.com/1209#entry1209comment</comments>
      <pubDate>Tue, 31 Oct 2023 21:08:43 +0900</pubDate>
    </item>
    <item>
      <title>정수에 필요한 바이트 수를 결정하는 방법은?</title>
      <link>https://sourcejob.tistory.com/1208</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;pre&gt;&lt;code&gt;e.g.

int: 10 = 1 byte
int: 257 = 2 bytes;
int: 18446744073709551615 (UINT64_MAX) = 8 bytes;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추신: 이것은 수백만 번 호출될 해시 함수를 위한 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 바이트 크기가 2의 거듭제곱일 필요는 없습니다.&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;    int bytes;
    if (hash &amp;lt;= UINT32_MAX) 
    {
        if (hash &amp;lt; 16777216U)
        {
            if (hash &amp;lt;= UINT16_MAX)
            {
                if (hash &amp;lt;= UINT8_MAX) bytes = 1;
                else bytes = 2;
            }
            else bytes = 3;
        }
        else bytes = 4;
    } 
    else if (hash &amp;lt;= UINT64_MAX) 
    {
        if (hash &amp;lt; 72057594000000000ULL) 
        {
            if (hash &amp;lt; 281474976710656ULL) 
            {
                if (hash &amp;lt; 1099511627776ULL) bytes = 5;
                else bytes = 6;
            }
            else bytes = 7;
        }
        else bytes = 8;
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분 56비트 밸브를 사용한 속도 차이는 Thomas Pornin의 답변과 비교했을 때 미미했습니다(그러나 측정 가능했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 비교 가능한 __builtin_clzl을 사용하여 솔루션을 테스트하지 않았습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int n = 0;
while (x != 0) {
    x &amp;gt;&amp;gt;= 8;
    n ++;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 다음과 같이 가정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&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;10&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;또한 대부분의 가변 크기 인코딩은 파일이나 스트림에서 인코딩이 멈추는 위치를 알기 위해 길이 필드나 터미네이터가 필요합니다(보통 정수를 인코딩하고 크기를 고려할 때 인코딩된 개체에 두 개 이상의 정수가 있습니다).&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 두 가지만 있으면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적인 크기에만 관심이 있는 경우.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(실제로 서명되지 않은 값이 있다고 가정할 경우) 다음을 고려합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (val &amp;lt; 0x10000) {
    if (val &amp;lt; 0x100) // 8 bit
    else // 16 bit
} else {
    if (val &amp;lt; 0x100000000L) // 32 bit
    else // 64 bit
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 크기에 대해 검정해야 하는 경우 중간 점을 선택한 다음 중첩 검정을 수행하면 어떤 경우에도 검정 수가 매우 낮게 유지됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이 경우 테스트를 재귀적 함수로 만드는 것이 코드를 단순하게 유지하는 더 나은 옵션이 될 수 있습니다.&lt;/font&gt;&lt;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;바이트를 8비트라고 가정할 때 정수 x를 나타내려면 [log2(x) / 8] + [x] = floor(x)인 1바이트가 필요합니다.&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;알겠습니다, 바이트 크기가 반드시 2의 거듭제곱이 아닌 것 같네요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;바이트 크기 b를 고려합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;공식은 여전히 [log2(x) / b] + 1입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 로그를 계산하려면 룩업 테이블(속도별 최선의 방법)을 사용하거나 정수에 대해서도 매우 빠른 이진 검색을 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 중요한 면에서 첫 번째 '1' 비트의 위치를 찾는 기능 (&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;clz&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;bsr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)는 일반적으로 간단한 CPU 명령이므로(로그를&lt;sub papago-id=&quot;19-1&quot;&gt;2&lt;/sub&gt; 건드릴 필요가 없으므로, 필요한 바이트 수를 얻으려면 이를 8로 나눌 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;gcc에서는 다음과 같은 작업을 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;limits.h&amp;gt;
int bytes_needed(unsigned long long x) {
   int bits_needed = sizeof(x)*CHAR_BIT - __builtin_clzll(x);
   if (bits_needed == 0)
      return 1;
   else
      return (bits_needed + 7) / 8;
}
&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;(MSVC에서는 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/fbxyd7zd%28VS.85%29.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;20-1&quot;&gt;intinsic&lt;/a&gt;을 사용합니다.)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 log2(N)과 동일한 가장 높은 비트 세트를 얻은 다음 cheel(log2(N))에서 필요한 바이트를 얻을 수 있습니다.&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;다음은 http://graphics.stanford.edu/ ~&lt;a href=&quot;http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogObvious&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;22-1&quot;&gt;seander/bithacks.html#IntegerLogObious&lt;/a&gt;에서 복사한 가장 높은 비트 집합의 위치를 얻기 위한 몇 가지 비트 해킹이며, 이러한 알고리즘의 작동 방식에 대한 자세한 내용은 URL을 클릭하면 됩니다.&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;64비트 IEEE 플로트가 있는 정수의 정수 로그베이스 2 찾기&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int v; // 32-bit integer to find the log base 2 of
int r; // result of log_2(v) goes here
union { unsigned int u[2]; double d; } t; // temp

t.u[__FLOAT_WORD_ORDER==LITTLE_ENDIAN] = 0x43300000;
t.u[__FLOAT_WORD_ORDER!=LITTLE_ENDIAN] = v;
t.d -= 4503599627370496.0;
r = (t.u[__FLOAT_WORD_ORDER==LITTLE_ENDIAN] &amp;gt;&amp;gt; 20) - 0x3FF;
&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 찾기&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;static const char LogTable256[256] = 
{
#define LT(n) n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n
    -1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
    LT(4), LT(5), LT(5), LT(6), LT(6), LT(6), LT(6),
    LT(7), LT(7), LT(7), LT(7), LT(7), LT(7), LT(7), LT(7)
};

unsigned int v; // 32-bit word to find the log of
unsigned r;     // r will be lg(v)
register unsigned int t, tt; // temporaries

if (tt = v &amp;gt;&amp;gt; 16)
{
  r = (t = tt &amp;gt;&amp;gt; 8) ? 24 + LogTable256[t] : 16 + LogTable256[tt];
}
else 
{
  r = (t = v &amp;gt;&amp;gt; 8) ? 8 + LogTable256[t] : LogTable256[v];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;O(lg(N)) 연산에서 N비트 정수의 로그베이스 2 찾기&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;unsigned int v;  // 32-bit value to find the log2 of 
const unsigned int b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000};
const unsigned int S[] = {1, 2, 4, 8, 16};
int i;

register unsigned int r = 0; // result of log2(v) will go here
for (i = 4; i &amp;gt;= 0; i--) // unroll for speed...
{
  if (v &amp;amp; b[i])
  {
    v &amp;gt;&amp;gt;= S[i];
    r |= S[i];
  } 
}


// OR (IF YOUR CPU BRANCHES SLOWLY):

unsigned int v;          // 32-bit value to find the log2 of 
register unsigned int r; // result of log2(v) will go here
register unsigned int shift;

r =     (v &amp;gt; 0xFFFF) &amp;lt;&amp;lt; 4; v &amp;gt;&amp;gt;= r;
shift = (v &amp;gt; 0xFF  ) &amp;lt;&amp;lt; 3; v &amp;gt;&amp;gt;= shift; r |= shift;
shift = (v &amp;gt; 0xF   ) &amp;lt;&amp;lt; 2; v &amp;gt;&amp;gt;= shift; r |= shift;
shift = (v &amp;gt; 0x3   ) &amp;lt;&amp;lt; 1; v &amp;gt;&amp;gt;= shift; r |= shift;
                                        r |= (v &amp;gt;&amp;gt; 1);


// OR (IF YOU KNOW v IS A POWER OF 2):

unsigned int v;  // 32-bit value to find the log2 of 
static const unsigned int b[] = {0xAAAAAAAA, 0xCCCCCCCC, 0xF0F0F0F0, 
                                 0xFF00FF00, 0xFFFF0000};
register unsigned int r = (v &amp;amp; b[0]) != 0;
for (i = 4; i &amp;gt; 0; i--) // unroll for speed...
{
  r |= ((v &amp;amp; b[i]) != 0) &amp;lt;&amp;lt; i;
}
&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;sub papago-id=&quot;26-1&quot;&gt;2&lt;/sub&gt; 취하여 비트 수를 구한 후 8로 나누어 바이트 수를 구합니다.&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;x의 로그는&lt;sub papago-id=&quot;27-1&quot;&gt;n&lt;/sub&gt; 다음과 같은 공식으로 구할 수 있습니다.&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;log(x) = log(x) / log(n)&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3 papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트:&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 정말 빨리 해야 하기 때문에, &lt;a href=&quot;http://graphics.stanford.edu/%7Eseander/bithacks.html#IntegerLogObvious&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;30-1&quot;&gt;비트 트위들링 핵스&lt;/a&gt;는 로그&lt;sub papago-id=&quot;30-3&quot;&gt;2&lt;/sub&gt;(x)를 빠르게 계산할 수 있는 몇 가지 방법이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;룩업 테이블 접근법이 당신의 요구에 맞을 것 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 바이트 수가 나옵니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 엄밀하게 가장 효율적인 것은 아니지만, 적혈구에 포함된 에너지로 작동하는 나노봇을 프로그래밍하지 않는 한, 그것은 문제가 되지 않을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int count = 0;
while (numbertotest &amp;gt; 0)
{
  numbertotest &amp;gt;&amp;gt;= 8;
  count++;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열 크기에 필요한 경우 컴파일 시 템플릿 메타 프로그래밍 코드를 작성하여 파악할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;template&amp;lt;unsigned long long N&amp;gt; struct NBytes
{ static const size_t value = NBytes&amp;lt;N/256&amp;gt;::value+1; };
template&amp;lt;&amp;gt; struct NBytes&amp;lt;0&amp;gt; 
{ static const size_t value = 0; };

int main()
{
    std::cout &amp;lt;&amp;lt; &quot;short = &quot; &amp;lt;&amp;lt; NBytes&amp;lt;SHRT_MAX&amp;gt;::value &amp;lt;&amp;lt; &quot; bytes\n&quot;;
    std::cout &amp;lt;&amp;lt; &quot;int = &quot; &amp;lt;&amp;lt; NBytes&amp;lt;INT_MAX&amp;gt;::value &amp;lt;&amp;lt; &quot; bytes\n&quot;;
    std::cout &amp;lt;&amp;lt; &quot;long long = &quot; &amp;lt;&amp;lt; NBytes&amp;lt;ULLONG_MAX&amp;gt;::value &amp;lt;&amp;lt; &quot; bytes\n&quot;;
    std::cout &amp;lt;&amp;lt; &quot;10 = &quot; &amp;lt;&amp;lt; NBytes&amp;lt;10&amp;gt;::value &amp;lt;&amp;lt; &quot; bytes\n&quot;;
    std::cout &amp;lt;&amp;lt; &quot;257 = &quot; &amp;lt;&amp;lt; NBytes&amp;lt;257&amp;gt;::value &amp;lt;&amp;lt; &quot; bytes\n&quot;;
    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;short = 2 bytes
int = 4 bytes
long long = 8 bytes
10 = 1 bytes
257 = 2 bytes
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 이것이 원래 질문에 대답하는 것이 아니라는 것을 알고 있지만, 이 페이지에 착륙할 때 사람들이 검색할 관련 질문에 대답합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바닥((log2(N)) / 8) + 1) 바이트&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;nb_bytes = floor(log(x)/log(256))+1 만약 log2를 사용한다면, log2(256) == 8이므로&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;바닥(log2(x)/8)+1&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;결과값이 자신의 값보다 커질 때까지 256개의 거듭제곱값을 올려야 합니다.&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;예: (C#에서 테스트됨)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;long long limit = 1;
int byteCount;

for (byteCount = 1; byteCount &amp;lt; 8; byteCount++) {
    limit *= 256;
    if (limit &amp;gt; value)
        break;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바이트 크기만 2의 거듭제곱(65,537이 3을 반환하지 않으려면)으로 바꾸기&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;byteCount++&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;byteCount *= 2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 간단한 공식을 휴대용으로 구현한 것이라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;limits.h&amp;gt;
#include &amp;lt;math.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;

int main(void) {
    int i;
    unsigned int values[] = {10, 257, 67898, 140000, INT_MAX, INT_MIN};

    for ( i = 0; i &amp;lt; sizeof(values)/sizeof(values[0]); ++i) {
        printf(&quot;%d needs %.0f bytes\n&quot;,
                values[i],
                1.0 + floor(log(values[i]) / (M_LN2 * CHAR_BIT))
              );
    }
    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;10개 필요 1바이트&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;257 2바이트 필요&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;67898은 3바이트가 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1,40000은 3바이트가 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;2147483647 4바이트 필요&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;-2147483648 4바이트 필요&lt;/font&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속도의 부족과 부동 소수점 라이브러리를 연결할 필요성 여부 및 정도는 필요에 따라 달라집니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이 질문이 이런 유형의 답을 요구하지 않았다는 것을 알고 있지만, 가장 적은 수의 문자를 사용하여 해결책을 찾는 사람들의 경우, 이것은 길이 변수의 선언을 포함하여 17자 또는 25자의 길이 변수에 할당합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//Assuming v is the value that is being counted...
int l=0;
for(;v&amp;gt;&amp;gt;l*8;l++);
&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;a href=&quot;https://stackoverflow.com/a/7374309&quot; papago-id=&quot;49-1&quot;&gt;SoapBox의 아이디어&lt;/a&gt;에 기반을 두고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;불행하게도 그의 해결책은 정확하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 스피릿을 채택했고 여기 32비트 버전이 있습니다. 64비트 체크는 원한다면 쉽게 적용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수는 지정된 정수를 저장하는 데 필요한 바이트 수를 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;unsigned short getBytesNeeded(unsigned int value)
{
    unsigned short c = 0; // 0 =&amp;gt; size 1

    c |= !!(value &amp;amp; 0xFF00); // 1 =&amp;gt; size 2
    c |= (!!(value &amp;amp; 0xFF0000)) &amp;lt;&amp;lt; 1; // 2 =&amp;gt; size 3
    c |= (!!(value &amp;amp; 0xFF000000)) &amp;lt;&amp;lt; 2; // 4 =&amp;gt; size 4

    static const int size_table[] = { 1, 2, 3, 3, 4, 4, 4, 4 };
    return size_table[c];
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각각 8번씩 int 8비트를 오른쪽으로 이동하고 아직도 있는지 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비트가 남습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;중지하기 전에 이동하는 횟수는 필요한 바이트 수입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단히 말해, 필요한 최소 바이트 수는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ceil(min_bits/8)&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;min_bits&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;(i+1)&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;/p&gt;&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위한 다양한 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션 1번.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; int numBytes = 0;
 do {
     numBytes++;
 } while (i &amp;gt;&amp;gt;= 8);
 return (numBytes);
&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 papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만, 그것은 가장 빠르지 않을 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 일련의 if 문을 시도해 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;32비트 정수의 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if ((upper = (value &amp;gt;&amp;gt; 16)) == 0) {
    /* Bit in lower 16 bits may be set. */
    if ((high = (value &amp;gt;&amp;gt; 8)) == 0) {
        return (1);
    }
    return (2);
}

/* Bit in upper 16 bits is set */
if ((high = (upper &amp;gt;&amp;gt; 8)) == 0) {
    return (3);
}
return (4);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;64비트 정수의 경우 if 문의 다른 수준이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 루틴의 속도가 당신이 말하는 것처럼 중요하다면, 함수 호출로 원한다면 어셈블러에서 이 작업을 수행하는 것이 가치가 있을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 스택 프레임을 생성하거나 파괴하는 것을 방지할 수 있으며, 중요한 경우 몇 번의 추가 클럭 주기를 절약할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조금 기본적이지만 출력이 제한적이기 때문에 중단점을 미리 계산하고 case statement를 사용할 수는 없나요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;런타임에 계산할 필요가 없고 비교 횟수가 제한됩니다.&lt;/font&gt;&lt;/p&gt;&lt;h3 papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;32비트 해시만 사용하면 어떨까요?&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 어디에서나 거의 최고 속도로 작동할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 큰 해시가 필요한지에 대해 저는 다소 혼란스럽습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;4바이트 해시가 작동한다면 항상 사용하는 것이 어떨까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호화 사용을 제외하고, 어쨌든 버킷이 2개&lt;sup papago-id=&quot;67-1&quot;&gt;32&lt;/sup&gt; 이상인 해시 테이블을 가진 사람은 누구입니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://graphics.stanford.edu/~seander/bithacks.html&quot; papago-id=&quot;68-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;숀 앤더슨의 &quot;비트 트위들링 핵스&quot; 페이지&lt;/a&gt;에는 이런 것들을 위한 훌륭한 요리법들이 많이 있습니다&lt;a href=&quot;http://graphics.stanford.edu/~seander/bithacks.html&quot; papago-id=&quot;68-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;.&lt;/a&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;이 코드에는 분기가 0개이므로 일부 시스템에서는 더 빠를 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 일부 시스템(GPGPU)에서는 동일한 워프의 스레드에서 동일한 명령을 실행하는 것이 중요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드는 입력 값에 상관없이 항상 동일한 명령 수이다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;inline int get_num_bytes(unsigned long long value) // where unsigned long long is the largest integer value on this platform
{
    int size = 1; // starts at 1 sot that 0 will return 1 byte

    size += !!(value &amp;amp; 0xFF00);
    size += !!(value &amp;amp; 0xFFFF0000);
    if (sizeof(unsigned long long) &amp;gt; 4) // every sane compiler will optimize this out
    {
        size += !!(value &amp;amp; 0xFFFFFFFF00000000ull);
        if (sizeof(unsigned long long) &amp;gt; 8)
        {
            size += !!(value &amp;amp; 0xFFFFFFFFFFFFFFFF0000000000000000ull);
        }
    }

    static const int size_table[] = { 1, 2, 4, 8, 16 };
    return size_table[size];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;g++ -O3는 다음을 생성합니다(iff가 최적화되었는지 확인).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;xor    %edx,%edx
test   $0xff00,%edi
setne  %dl
xor    %eax,%eax
test   $0xffff0000,%edi
setne  %al
lea    0x1(%rdx,%rax,1),%eax
movabs $0xffffffff00000000,%rdx
test   %rdx,%rdi
setne  %dl
lea    (%rdx,%rax,1),%rax
and    $0xf,%eax
mov    _ZZ13get_num_bytesyE10size_table(,%rax,4),%eax
retq
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 이렇게 복잡해요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 생각해낸 것은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;bytesNeeded = (numBits/8)+((numBits%8) != 0);&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;numBits&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;나머지가 있으면 8 + 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;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에는 이미 많은 답이 있지만, 만약 당신이 숫자를 미리 안다면, c++에서 당신은 a를 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;template&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프리프로세서를 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;template &amp;lt;unsigned long long N&amp;gt;
struct RequiredBytes {
    enum : int { value = 1 + (N &amp;gt; 255 ? RequiredBits&amp;lt;(N &amp;gt;&amp;gt; 8)&amp;gt;::value : 0) };
};

template &amp;lt;&amp;gt;
struct RequiredBytes&amp;lt;0&amp;gt; {
    enum : int { value = 1 };
};

const int REQUIRED_BYTES_18446744073709551615 = RequiredBytes&amp;lt;18446744073709551615&amp;gt;::value; // 8
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 비트 버전의 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;template &amp;lt;unsigned long long N&amp;gt;
struct RequiredBits {
    enum : int { value = 1 + RequiredBits&amp;lt;(N &amp;gt;&amp;gt; 1)&amp;gt;::value };
};

template &amp;lt;&amp;gt;
struct RequiredBits&amp;lt;1&amp;gt; {
    enum : int { value = 1 };
};

template &amp;lt;&amp;gt;
struct RequiredBits&amp;lt;0&amp;gt; {
    enum : int { value = 1 };
};

const int REQUIRED_BITS_42 = RequiredBits&amp;lt;42&amp;gt;::value; // 6
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2274428/how-to-determine-how-many-bytes-an-integer-needs&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1208</guid>
      <comments>https://sourcejob.tistory.com/1208#entry1208comment</comments>
      <pubDate>Tue, 31 Oct 2023 21:08:37 +0900</pubDate>
    </item>
    <item>
      <title>jquery - .done (),의 사용 .done () .다음으로 () 및 .ajax 요청을 지정된 순서로 수행하기 위한 () 시</title>
      <link>https://sourcejob.tistory.com/1207</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jquery - .done (),의 사용 .done () .다음으로 () 및 .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;저는 jquery에서 Promise에 대한 많은 글을 읽고 여러 ajax 요청을 할 때 &quot;callback hell&quot;을 피했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 모든 것을 읽고도 무엇을 사용해야 하는지에 대한 간단한 답이 없다고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.done()&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;.then()&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;.when()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;- 요청을 연쇄한다는 측면에서&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 제 요점을 설명하기 위해 가장 기본적인 예를 만들려고 노력했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 코드는 내가 원하는 대로 정확히 작동하지만, 이것에 의존하는 유일한 것은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.done()&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;.then()&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;.when()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이에 들어맞습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 3개의 PHP 스크립트를 만들고 PHP의 &lt;a href=&quot;http://php.net/manual/en/function.sleep.php&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-1&quot;&gt;sleep&lt;/a&gt; method를 사용하여 이 스크립트들이 완료되는 데 걸리는 시간을 인위적으로 지연시켰습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지연 시간은 다음과 같이 설정됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;r1.php&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;/li&gt; 
 &lt;li&gt;&lt;code&gt;r2.php&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;- 1초&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;r3.php&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;- 3초&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트 자체는 다음과 같이 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
    // r1.php
    echo &quot;starting r1.php \n&quot;;
    sleep(5); // Delay execution. Varies as described above for each script
    echo &quot;ending r1.php \n&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;r2.php&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;r3.php&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;r1.php&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 우리가 그들을 순서대로 운영하고 싶다면 어떻게 해야 할까요?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;r1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.php,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;r2.php&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;r3.php&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)와 jquery가 각각의 ajax 요청이 이루어질 때까지 기다렸다가 다음으로 넘어가도록 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 만약 무언가가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;r2.php&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과에 따라 달라집니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;r1.php&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기타.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;$(document).ready(function() {
   $.ajax({
        url: 'ajax/r1.php',
        method: 'get'
   }).done(function(response1) {
       console.log('After r1.php\n');
       console.log(response1);

       $.ajax({
            url: 'ajax/r2.php',
            method: 'get'
       }).done(function(response2) {
           console.log('After r2.php\n');
           console.log('response1:' + response1);
           console.log(response2);

           $.ajax({
                url: 'ajax/r3.php',
                method: 'get'
           }).done(function(response3) {
               console.log('After r3.php\n');
               console.log('response1:' + response1);
               console.log('response2:' + response2);
               console.log(response3);
           });

       });
   });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;});&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보시다시피 요청은 순서대로 완료되고 있으며 각 PHP 스크립트에 지정된 시간이 소요됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HRXFw.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HRXFw.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;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 콜백이 실행되고 있는 범위 때문에 예를 들어 다음과 같이 액세스할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;response1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(산출량&lt;/font&gt;&lt;/font&gt;&lt;code&gt;r1.php&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;처리하는 콜백에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;r3.php&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kPQqk.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kPQqk.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;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 &lt;strong papago-id=&quot;32-0&quot;&gt;질문은:&lt;/strong&gt; 어떤 상황에서 다음과 같은 기능이 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.done()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;( 등)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.then()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.when()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;- 수많은 자료에서 언급되는 것) 실제로 이런 종류의 일을 할 필요가 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;언제가 필요하겠습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.then()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.when()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 종류의 시나리오에 대해서요?&lt;/font&gt;&lt;/font&gt;&lt;/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&gt;&lt;/font&gt;&lt;code&gt;.done()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;약속과 호환됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;교체까지 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.done()&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;.then()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 코드에서 그리고 결과는 정확히 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 다음 내용을 모두 읽었지만 jquery와 함께 ajax 요청을 실행하는 방법에 대한 문제를 복잡하게 만들고 있다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/5436327/jquery-deferreds-and-promises-then-vs-done&quot; papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery는 연기하고 약속 - .then() vs.done()&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/16026942/how-do-i-chain-three-asynchronous-calls-using-jquery-promises&quot; papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery 약속을 사용하여 3개의 비동기 호출을 연결하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/a&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://medium.com/coding-design/writing-better-ajax-8ee4a7fb95f&quot; rel=&quot;noreferrer&quot; papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://medium.com/coding-design/writing-better-ajax-8ee4a7fb95f&lt;/font&gt;&lt;/a&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 초보자들이 이해할 수 있는 방식으로 설명해 주실 수 있나요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 &lt;strong papago-id=&quot;46-1&quot;&gt;jquery 3.2.1&lt;/strong&gt;을 사용하고 있어서 바닐라 자바스크립트가 아닌 jquery만의 응답을 원합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 &lt;a href=&quot;https://stackoverflow.com/questions/51929634/jquery-using-done-successively-is-giving-the-same-results-as-then-don&quot; papago-id=&quot;47-1&quot;&gt;원래&lt;/a&gt; 이 질문을 했는데 단어가 잘못 쓰여 코드가 충분히 포함되지 않은 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 정확한 문제를 설명하기 위해 여기에 주어진 코드를 조롱했습니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;.done()&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;method는 Promise가 해결할 때만 호출됩니다(대략).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.fail()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;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;.then()&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;method는 해결된 콜백과 거부된 콜백을 받아들이며, 다음과 같이 done/fail을 함께 사용하는 것과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax().then(resolvedCallback(), rejectedCallback());
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 해당합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax().done(sucess()).fail(failure());
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 차이는 그 몇 배나 된다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.then()&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;보다 복잡한 약속 해결을 위해 보다 쉽게 체인으로 연결할 수 있습니다.&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;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.when()&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;메소드를 사용하면 일부 논리를 Promise/Delivered/Nable로 캡슐화하여 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.then()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.done()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.fail()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행하려는 복잡하거나 오래 실행되는 논리가 있고 쉽게 약속/연기된 논리로 감싸야 하는 경우에 유용합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 읽기 쉽게 해줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.when(function(){/*I do something that takes a while*/})
 .then(function(){/*I succeed*/},
       function(){/*I fail*/})
 .then( ... )
 .then( ... )
 ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음에 체인을 끝낼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.always()&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&gt;&lt;strong papago-id=&quot;63&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;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;으로.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.when()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 우리는 코드 대기 유닛을 가지고 진행하기 전에 많은 것들을 완료할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function fetchMe(url) {
    return $.ajax({
        url: url,
        method: 'get'
   });
}

$.when(fetchMe('ajax/r1.php'), fetchMe('ajax/r2.php'), fetchMe('ajax/r3.php'))
 .then(function(r1, r2, r3) { // Resolve
    console.log('response1: ' + r1.data);
    console.log('response2: ' + r2.data);
    console.log('response3: ' + r3.data);
 }, function(){ // Reject!
    console.log('Something broke!');
 });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fetchMe()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$.ajax()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;호출. 사용하기&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.when()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 우리는 스크립트에 이 세 가지가 모두 완료될 때까지 기다리라고 말합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.then()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 해결 메서드의 입력은 지연된 항목을 순서대로 가져옵니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.when()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 거기서 우리는 요청으로부터 데이터를 가져올 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해봐도 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$.Deffered&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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 papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서: https://api.jquery.com/category/deferred-object/&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유사한 문제:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/1151598/how-to-make-all-ajax-calls-sequential&quot; papago-id=&quot;75-1&quot;&gt;모든 AJAX 호출을 순차적으로 수행하는 방법은?&lt;/a&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/51933513/jquery-usage-of-done-then-and-when-for-making-ajax-requests-in-a-giv&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Ajax</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1207</guid>
      <comments>https://sourcejob.tistory.com/1207#entry1207comment</comments>
      <pubDate>Tue, 31 Oct 2023 21:08:25 +0900</pubDate>
    </item>
    <item>
      <title>&amp;quot;JDBC 드라이버 인스턴스화 할 수 없음&amp;quot; 플라이웨이 명령줄 오류 수정 방법?</title>
      <link>https://sourcejob.tistory.com/1206</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;JDBC 드라이버 인스턴스화 할 수 없음&quot; 플라이웨이 명령줄 오류 수정 방법?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 플라이웨이에 처음입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;윈도우 64비트에서 플라이웨이 3.2.1을 사용하고 있는데 로컬 오라클 데이터베이스 설치(11g)로 명령줄 도구를 사용해 보았습니다.&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;오류: JDBC 드라이버를 인스턴스화할 수 없습니다. oracle.jdbc.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오라클 드라이버&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 무엇을 잘못했나요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;flyway.conf에서 나의 jdbc url과 사용자 이름과 비밀번호를 구성했습니다.&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;미리 고마워요 Matze&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;Oracle의 경우 드라이버 하위 디렉토리에 jdbc 드라이버 jar를 넣어야 합니다.&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;a href=&quot;https://flywaydb.org/documentation/database/oracle&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;6-1&quot;&gt;여기&lt;/a&gt;에 기록되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;0-0&quot;&gt;요약: http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html&lt;/strong&gt; 로 이동하여 필요한 Oracle JDBC 드라이버 버전을 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 &quot;ojdbc6.jar&quot; 파일을 다운로드하여 해당 파일을&lt;/font&gt;&lt;/font&gt;&lt;code&gt;drivers&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Flyway가 설치된 곳 아래에 폴더가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 번에 Flyway를 실행할 때는 이를 자동으로 픽업해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/30033149/how-to-fix-unable-to-instantiate-jdbc-driver-flyway-command-line-error&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1206</guid>
      <comments>https://sourcejob.tistory.com/1206#entry1206comment</comments>
      <pubDate>Tue, 31 Oct 2023 21:08:17 +0900</pubDate>
    </item>
    <item>
      <title>match_parent width가 RecyclerView에서 작동하지 않습니다.</title>
      <link>https://sourcejob.tistory.com/1205</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;match_parent width가 RecyclerView에서 작동하지 않습니다.&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;내 RecyclerView 및 항목의 부모 너비는 match_parent width이지만 결과는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZuYls.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;view
    class=&quot;android.support.v7.widget.RecyclerView&quot;
    android:layout_width=&quot;match_parent&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;항목:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
xmlns:tools=&quot;http://schemas.android.com/tools&quot;
xmlns:fab=&quot;http://schemas.android.com/apk/res-auto&quot;
android:id=&quot;@+id/ll_itm&quot;
android:orientation=&quot;horizontal&quot;
android:layout_width=&quot;match_parent&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전체:&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;
xmlns:tools=&quot;http://schemas.android.com/tools&quot;
xmlns:fab=&quot;http://schemas.android.com/apk/res-auto&quot;
android:id=&quot;@+id/ll_itm&quot;
android:orientation=&quot;horizontal&quot;
android:layout_width=&quot;match_parent&quot;
android:layout_height=&quot;wrap_content&quot;
android:weightSum=&quot;100&quot;
android:gravity=&quot;right&quot;
&amp;gt;


&amp;lt;Button
    android:layout_width=&quot;0dp&quot;
    android:layout_weight=&quot;15&quot;
    android:layout_height=&quot;fill_parent&quot;
    android:text=&quot;ملاحظات&quot;
    android:id=&quot;@+id/button&quot; /&amp;gt;

&amp;lt;LinearLayout
    android:layout_width=&quot;0dp&quot;
    android:layout_height=&quot;fill_parent&quot;
    android:layout_weight=&quot;20&quot;
    android:gravity=&quot;center&quot;
    &amp;gt;
    &amp;lt;LinearLayout
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:orientation=&quot;horizontal&quot;
        &amp;gt;

        &amp;lt;com.getbase.floatingactionbutton.FloatingActionButton
            android:layout_width=&quot;fill_parent&quot;
            android:layout_height=&quot;fill_parent&quot;
            fab:fab_plusIconColor=&quot;#ff56ff83&quot;
            fab:fab_colorNormal=&quot;@color/d_red&quot;
            fab:fab_colorPressed=&quot;#ff5c86ff&quot;
            fab:fab_size=&quot;mini&quot;
            fab:fab_icon=&quot;@drawable/ic_remove_white&quot;
            android:id=&quot;@+id/fab_rmv&quot; /&amp;gt;
        &amp;lt;esfandune.ir.elmikarbordiardakan.other.CustomTxtView
            android:layout_weight=&quot;25&quot;
            android:layout_width=&quot;0dp&quot;
            android:layout_height=&quot;fill_parent&quot;
            android:textAppearance=&quot;?android:attr/textAppearanceLarge&quot;
            android:text=&quot;0&quot;
            android:gravity=&quot;right|center_vertical&quot;
            android:id=&quot;@+id/txt_takhir_itm&quot; /&amp;gt;
        &amp;lt;com.getbase.floatingactionbutton.FloatingActionButton
            android:layout_width=&quot;fill_parent&quot;
            android:layout_height=&quot;fill_parent&quot;
            fab:fab_plusIconColor=&quot;@color/colorprimarylight&quot;
            fab:fab_colorNormal=&quot;@color/colorprimarydark&quot;
            fab:fab_colorPressed=&quot;@color/colorprimary&quot;
            fab:fab_size=&quot;mini&quot;
            fab:fab_icon=&quot;@drawable/ic_add_white&quot;
            android:id=&quot;@+id/fab_add&quot; /&amp;gt;

    &amp;lt;/LinearLayout&amp;gt;
&amp;lt;/LinearLayout&amp;gt;
    &amp;lt;Spinner
        android:layout_width=&quot;0dp&quot;
        android:layout_height=&quot;fill_parent&quot;
        android:layout_weight=&quot;10&quot;
        android:id=&quot;@+id/sp_nomre_itm&quot;

        android:entries=&quot;@array/degrees&quot;/&amp;gt;


&amp;lt;LinearLayout
    android:layout_width=&quot;0dp&quot;
    android:layout_height=&quot;fill_parent&quot;
    android:layout_weight=&quot;10&quot;
    android:gravity=&quot;center&quot;
    &amp;gt;
    &amp;lt;!--LinearLayout baraye ine ke nameshod fab ro weight behosh dad--&amp;gt;
    &amp;lt;com.getbase.floatingactionbutton.FloatingActionButton
        android:layout_width=&quot;fill_parent&quot;
        android:layout_height=&quot;fill_parent&quot;
        fab:fab_plusIconColor=&quot;#ff56ff83&quot;
        fab:fab_colorNormal=&quot;@color/d_green&quot;
        fab:fab_colorPressed=&quot;@color/d_orange&quot;
        fab:fab_size=&quot;normal&quot;
        fab:fab_icon=&quot;@drawable/ic_done_white&quot;
        android:id=&quot;@+id/fab_hazr&quot; /&amp;gt;



&amp;lt;/LinearLayout&amp;gt;
&amp;lt;esfandune.ir.elmikarbordiardakan.other.CustomTxtView
    android:layout_weight=&quot;5&quot;
    android:layout_width=&quot;0dp&quot;
    android:layout_height=&quot;fill_parent&quot;
    android:textAppearance=&quot;?android:attr/textAppearanceLarge&quot;
    android:text=&quot;100&quot;
    android:gravity=&quot;right|center_vertical&quot;
    android:id=&quot;@+id/txt_ghybtNumber_itm&quot; /&amp;gt;

&amp;lt;esfandune.ir.elmikarbordiardakan.other.CustomTxtView
        android:layout_weight=&quot;30&quot;
        android:layout_width=&quot;0dp&quot;
        android:layout_height=&quot;fill_parent&quot;
        android:textAppearance=&quot;?android:attr/textAppearanceLarge&quot;
        android:text=&quot;عباسعلی ملاحسینی اردکانی&quot;
        android:gravity=&quot;right|center_vertical&quot;
        android:id=&quot;@+id/txt_title_itm&quot;
    android:layout_marginRight=&quot;10dp&quot;
    /&amp;gt;

&amp;lt;view
    android:layout_width=&quot;0dp&quot;
    android:layout_height=&quot;fill_parent&quot;
    android:layout_weight=&quot;10&quot;
    class=&quot;de.hdodenhof.circleimageview.CircleImageView&quot;
    android:id=&quot;@+id/view&quot;
    android:src=&quot;@drawable/mmrdf&quot;
   /&amp;gt;
&amp;lt;/LinearLayout&amp;gt;
&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&gt;&lt;/font&gt;&lt;code&gt;onCreateViewHolder&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;inflate&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;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 다음으로 바꿉니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;parent&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;onCreateViewHolder&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 서명.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;View rootView = LayoutInflater.from(context).inflate(R.layout.itemLayout, parent, false);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째 파라미터가 필요한 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 팽창에 대한 뷰 참조를 얻으면 다음을 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;View rootView = LayoutInflater.from(context).inflate(R.layout.itemLayout, null, false);
RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
rootView.setLayoutParams(lp);
return new RecyclerViewHolder(rootView);
&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;CreateView의 Inside&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;보기를 부풀리는 어댑터의 홀더(...) 메서드입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ViewGroup을 상위 그룹으로 정의해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;onCreateView의 첫 번째 매개 변수에서 얻을 수 있습니다.&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;ViewGroup을 통과하는 두 번째 매개 변수의 아래 줄을 참조하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 보기가 해당 상위 보기와 자동으로 일치합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;rowView=inflater.inflate(R.layout.home_custom_list, parent,false);
&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;public View onCreateViewHolder(ViewGroup parent, int position) {
    // TODO Auto-generated method stub
    View rowView;
        LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        rowView=inflater.inflate(R.layout.home_custom_list, parent,false);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 a를 사용하고 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FrameLayout&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MATCH_PARENT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;폭에 대하여 그리고 a와 같은 행동을 보고 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&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;LinearLayoutManager&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;onCreateViewHolder&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    // create a new view
    View v = LayoutInflater.from(parent.getContext())
                           .inflate(R.layout.note_layout, parent, false);
    v.setLayoutParams(new RecyclerView.LayoutParams(
          ((RecyclerView) parent).getLayoutManager().getWidth(),
          context.getResources()
                 .getDimensionPixelSize(R.dimen.note_item_height)));

    return new ViewHolder(v);
}
&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;루트 액티비티 레이아웃으로 ConstraintLayout을 사용하기 때문에 액티비티 레이아웃 파일에 문제가 있습니다.&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;?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;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;&amp;gt;

    &amp;lt;include
        android:id=&quot;@+id/toolBar&quot;
        layout=&quot;@layout/toolbar_layout&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot; /&amp;gt;

    &amp;lt;FrameLayout
        android:id=&quot;@+id/fragment_container&quot;
        android:layout_width=&quot;0dp&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:background=&quot;@color/accent&quot;
        app:layout_constraintLeft_toLeftOf=&quot;parent&quot;
        app:layout_constraintRight_toRightOf=&quot;parent&quot;
        app:layout_constraintTop_toBottomOf=&quot;@id/toolBar&quot; /&amp;gt;
&amp;lt;/android.support.constraint.ConstraintLayout&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이게 통했어요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 대신합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   View view = View.inflate(parent.getContext(), R.layout.row_timeline, null);
   return new TimeLineViewHolder(view, viewType);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이로써&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; View rootView = LayoutInflater.from(context).inflate(R.layout.row_timeline, null, false);
        RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        rootView.setLayoutParams(lp);
        return new TimeLineViewHolder(rootView, viewType);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어댑터의 항목에 대한 레이아웃 파라미터를 설정할 때 이를 시도해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; View viewHolder= LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item, parent, false);
 viewHolder.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT));
 ViewOffersHolder viewOffersHolder = new ViewOffersHolder(viewHolder);
 return viewOffersHolder;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 경우, 문제는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML 선언,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;layout_width&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;match_constraints를 의미하는 0dp로 변경했을 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;match_parent&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 모든 것을 채우기 시작했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;너비:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;androidx.recyclerview.widget.RecyclerView
            android:id=&quot;@+id/recyclerView&quot;
            android:layout_width=&quot;0dp&quot;  &amp;lt;-- changed this to &quot;match_parent&quot;
            android:layout_height=&quot;0dp&quot;
            android:layout_marginBottom=&quot;45dp&quot;
            android:background=&quot;@android:color/transparent&quot;
            app:layout_constraintBottom_toBottomOf=&quot;parent&quot;
            app:layout_constraintHeight_default=&quot;wrap&quot;
            app:layout_constraintHeight_max=&quot;360dp&quot;
            app:layout_constraintHeight_min=&quot;60dp&quot;
            app:layout_constraintLeft_toLeftOf=&quot;parent&quot;
            app:layout_constraintRight_toRightOf=&quot;parent&quot;
            app:layout_constraintTop_toBottomOf=&quot;@id/header&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단순히 루트에 높이와 너비가 0인 더미 뷰를 추가하는 것이 효과적이었습니다.&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;androidx.core.widget.NestedScrollView xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot;&amp;gt;

    &amp;lt;LinearLayout
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;match_parent&quot;
        android:orientation=&quot;vertical&quot;
        tools:context=&quot;.screen.gallery.GalleryFragment&quot;&amp;gt;

        &amp;lt;!----DUMMY VIEW-----&amp;gt;
        &amp;lt;View
            android:layout_width=&quot;match_parent&quot;
            android:layout_height=&quot;0dp&quot;
            /&amp;gt;

      
        &amp;lt;androidx.recyclerview.widget.RecyclerView
            android:id=&quot;@+id/navigationList&quot;
            android:layout_width=&quot;match_parent&quot;
            android:layout_height=&quot;match_parent&quot;
            android:layout_weight=&quot;1&quot;
          /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리사이클러 뷰에 사용되는 복합 뷰에 선형 레이아웃과 제약 조건 레이아웃을 사용할 때도 동일한 문제에 직면했지만 해당 복합 뷰에 대해 상대 레이아웃으로 변경할 때는 작동했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; myInflatedRowLayout.getLayoutParams().width = vg.getWidth();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 그것을 대체하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MATCH_PARENT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 너비로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&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;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 한동안 이 문제에 갇혀 있었는데, 저에게 효과가 있었던 해결책은 match_parent와 함께 2개의 뷰를 배치하고, 하나는 내부에 배치하는 것이었습니다.&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;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;RelativeLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;match_parent&quot;
    android:background=&quot;#F00&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    android:layout_height=&quot;match_parent&quot;&amp;gt;

&amp;lt;/RelativeLayout&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사람들이 언급한 것처럼 상대적인 레이아웃이고, 저는 상위 보기를 통과하고 있지만 인플레이터에서 거짓이지만, 그것은 전혀 나타나지 않을 것입니다(확인할 빨간색 배경).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 내가 이렇게 했을 때는&lt;/font&gt;&lt;/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;RelativeLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;match_parent&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    android:layout_height=&quot;match_parent&quot;&amp;gt;

    &amp;lt;androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width=&quot;match_parent&quot;
        android:background=&quot;#0F0&quot;
        android:layout_height=&quot;match_parent&quot;/&amp;gt;

&amp;lt;/RelativeLayout&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;녹색 배치가 나타나 전체 공간을 차지했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 match_parent가 있는 메인 뷰 안에 어린이 뷰가 있는 것만으로도 문제가 해결됩니다. 이유를 모르겠습니다.&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;wrap_content&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;android:layout_weight=&quot;1&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;update: 중복된 것이 많습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;layout_weight&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;것으로 요.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 다 만들어요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wrap_content&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;' 그리고 그들 중 한 명만이 추가됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;layout_weight=1&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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 보기.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 빈 공간을 모두 차지하게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/30691150/match-parent-width-does-not-work-in-recyclerview&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Android</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1205</guid>
      <comments>https://sourcejob.tistory.com/1205#entry1205comment</comments>
      <pubDate>Tue, 31 Oct 2023 21:08:11 +0900</pubDate>
    </item>
    <item>
      <title>Http에 매개변수를 추가하는 방법NameValuePair를 사용하여 POST를 사용한 URL 연결</title>
      <link>https://sourcejob.tistory.com/1204</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Http에 매개변수를 추가하는 방법&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NameValuePair를 사용하여 POST를 사용한 URL 연결&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;strong papago-id=&quot;1-1&quot;&gt;POST&lt;/strong&gt;를 같이 하려고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HttpURLConnection&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;HttpPost&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;post.setEntity(new UrlEncodedFormEntity(nvp));
&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;nvp = new ArrayList&amp;lt;NameValuePair&amp;gt;();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 데이터를 저장하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 추가하는 방법을 찾을 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ArrayList&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;HttpURLConnection&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;HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
https.setHostnameVerifier(DO_NOT_VERIFY);
http = https;
http.setRequestMethod(&quot;POST&quot;);
http.setDoInput(true);
http.setDoOutput(true);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https와 http 조합이 어색한 이유는 인증서를 &lt;em papago-id=&quot;8-1&quot;&gt;확인하지 말아야&lt;/em&gt; 하기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그건 문제없지만 서버를 잘 올려놓습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 저는 논쟁과 함께 글을 올리기 위해 그것이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;무슨 생각 있어요?&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중복 고지 사항:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2012년 당시에는 &lt;strong papago-id=&quot;11-1&quot;&gt;HTTP POST&lt;/strong&gt; 요청에 파라미터가 어떻게 삽입되는지 전혀 몰랐습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 매달리고 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NameValuePair&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;이 질문은 중복된 것처럼 보일 수 있지만, 2012년 나의 자신은 그 &lt;em papago-id=&quot;12-1&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/4205980/java-sending-http-parameters-via-post-method-easily&quot; papago-id=&quot;12-1-0&quot;&gt;다른&lt;/a&gt;&lt;/em&gt; 질문을 읽었고 그것은 &lt;strong papago-id=&quot;12-3&quot;&gt;사용&lt;/strong&gt;하지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NameValuePair&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;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;URL url = new URL(&quot;http://yoururl.com&quot;);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod(&quot;POST&quot;);
conn.setDoInput(true);
conn.setDoOutput(true);

List&amp;lt;NameValuePair&amp;gt; params = new ArrayList&amp;lt;NameValuePair&amp;gt;();
params.add(new BasicNameValuePair(&quot;firstParam&quot;, paramValue1));
params.add(new BasicNameValuePair(&quot;secondParam&quot;, paramValue2));
params.add(new BasicNameValuePair(&quot;thirdParam&quot;, paramValue3));

OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
        new OutputStreamWriter(os, &quot;UTF-8&quot;));
writer.write(getQuery(params));
writer.flush();
writer.close();
os.close();

conn.connect();
&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;private String getQuery(List&amp;lt;NameValuePair&amp;gt; params) throws UnsupportedEncodingException
{
    StringBuilder result = new StringBuilder();
    boolean first = true;

    for (NameValuePair pair : params)
    {
        if (first)
            first = false;
        else
            result.append(&quot;&amp;amp;&quot;);

        result.append(URLEncoder.encode(pair.getName(), &quot;UTF-8&quot;));
        result.append(&quot;=&quot;);
        result.append(URLEncoder.encode(pair.getValue(), &quot;UTF-8&quot;));
    }

    return result.toString();
}
&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;NameValuePair가 더 이상 사용되지 않기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 코드를 공유할 생각입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public String  performPostCall(String requestURL,
            HashMap&amp;lt;String, String&amp;gt; postDataParams) {

        URL url;
        String response = &quot;&quot;;
        try {
            url = new URL(requestURL);

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(15000);
            conn.setConnectTimeout(15000);
            conn.setRequestMethod(&quot;POST&quot;);
            conn.setDoInput(true);
            conn.setDoOutput(true);


            OutputStream os = conn.getOutputStream();
            BufferedWriter writer = new BufferedWriter(
                    new OutputStreamWriter(os, &quot;UTF-8&quot;));
            writer.write(getPostDataString(postDataParams));

            writer.flush();
            writer.close();
            os.close();
            int responseCode=conn.getResponseCode();

            if (responseCode == HttpsURLConnection.HTTP_OK) {
                String line;
                BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
                while ((line=br.readLine()) != null) {
                    response+=line;
                }
            }
            else {
                response=&quot;&quot;;

            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return response;
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;....&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  private String getPostDataString(HashMap&amp;lt;String, String&amp;gt; params) throws UnsupportedEncodingException{
        StringBuilder result = new StringBuilder();
        boolean first = true;
        for(Map.Entry&amp;lt;String, String&amp;gt; entry : params.entrySet()){
            if (first)
                first = false;
            else
                result.append(&quot;&amp;amp;&quot;);

            result.append(URLEncoder.encode(entry.getKey(), &quot;UTF-8&quot;));
            result.append(&quot;=&quot;);
            result.append(URLEncoder.encode(entry.getValue(), &quot;UTF-8&quot;));
        }

        return result.toString();
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요 없는 경우에는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ArrayList&amp;lt;NameValuePair&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개변수의 경우, 이것은 더 짧은 해결책으로 사용하여 쿼리 문자열을 구축합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Uri.Builder&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;URL url = new URL(&quot;http://yoururl.com&quot;);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod(&quot;POST&quot;);
conn.setDoInput(true);
conn.setDoOutput(true);

Uri.Builder builder = new Uri.Builder()
        .appendQueryParameter(&quot;firstParam&quot;, paramValue1)
        .appendQueryParameter(&quot;secondParam&quot;, paramValue2)
        .appendQueryParameter(&quot;thirdParam&quot;, paramValue3);
String query = builder.build().getEncodedQuery();

OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
            new OutputStreamWriter(os, &quot;UTF-8&quot;));
writer.write(query);
writer.flush();
writer.close();
os.close();

conn.connect();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한가지 해결책은 당신만의 파라미터를 문자열로 만드는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 제가 최근 프로젝트에 사용하고 있는 실제 방법입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;hashtable에서 namevalue pair로 변경해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private static String getPostParamString(Hashtable&amp;lt;String, String&amp;gt; params) {
    if(params.size() == 0)
        return &quot;&quot;;

    StringBuffer buf = new StringBuffer();
    Enumeration&amp;lt;String&amp;gt; keys = params.keys();
    while(keys.hasMoreElements()) {
        buf.append(buf.length() == 0 ? &quot;&quot; : &quot;&amp;amp;&quot;);
        String key = keys.nextElement();
        buf.append(key).append(&quot;=&quot;).append(params.get(key));
    }
    return buf.toString();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파라마 게시:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
writer.write(getPostParamString(req.getPostParams()));
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 필요한 것을 정확히 찾은 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사람들에게 도움이 될지도 모릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;25-1&quot;&gt;UrlEncodedFormEntity&lt;/em&gt; 메서드를 사용할 수 있습니다&lt;em papago-id=&quot;25-1&quot;&gt;.&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;25-1&quot;&gt;writeTo(OutputStream)&lt;/em&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nvp); 
http.connect();

OutputStream output = null;
try {
  output = http.getOutputStream();    
  formEntity.writeTo(output);
} finally {
 if (output != null) try { output.close(); } catch (IOException ioe) {}
}
&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;승인된 응답은 다음 위치에서 ProtocolException을 발생시킵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;OutputStream os = conn.getOutputStream();&lt;/code&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;URL 연결 개체에 대한 출력을 활성화하지 않기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책에는 다음과 같은 내용이 포함되어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;conn.setDoOutput(true);&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;효과를 내기 위해서 입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;너무 늦지 않았다면 내 코드를 공유하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Utils.java:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static String buildPostParameters(Object content) {
        String output = null;
        if ((content instanceof String) ||
                (content instanceof JSONObject) ||
                (content instanceof JSONArray)) {
            output = content.toString();
        } else if (content instanceof Map) {
            Uri.Builder builder = new Uri.Builder();
            HashMap hashMap = (HashMap) content;
            if (hashMap != null) {
                Iterator entries = hashMap.entrySet().iterator();
                while (entries.hasNext()) {
                    Map.Entry entry = (Map.Entry) entries.next();
                    builder.appendQueryParameter(entry.getKey().toString(), entry.getValue().toString());
                    entries.remove(); // avoids a ConcurrentModificationException
                }
                output = builder.build().getEncodedQuery();
            }
        }

        return output;
    }

public static URLConnection makeRequest(String method, String apiAddress, String accessToken, String mimeType, String requestBody) throws IOException {
        URL url = new URL(apiAddress);
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        urlConnection.setDoInput(true);
        urlConnection.setDoOutput(!method.equals(&quot;GET&quot;));
        urlConnection.setRequestMethod(method);

        urlConnection.setRequestProperty(&quot;Authorization&quot;, &quot;Bearer &quot; + accessToken);        

        urlConnection.setRequestProperty(&quot;Content-Type&quot;, mimeType);
        OutputStream outputStream = new BufferedOutputStream(urlConnection.getOutputStream());
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, &quot;utf-8&quot;));
        writer.write(requestBody);
        writer.flush();
        writer.close();
        outputStream.close();            

        urlConnection.connect();

        return urlConnection;
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주 활동.java:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    new APIRequest().execute();
}

private class APIRequest extends AsyncTask&amp;lt;Void, Void, String&amp;gt; {

        @Override
        protected Object doInBackground(Void... params) {

            // Of course, you should comment the other CASES when testing one CASE

            // CASE 1: For FromBody parameter
            String url = &quot;http://10.0.2.2/api/frombody&quot;;
            String requestBody = Utils.buildPostParameters(&quot;'FromBody Value'&quot;); // must have '' for FromBody parameter
            HttpURLConnection urlConnection = null;
            try {
                urlConnection = (HttpURLConnection) Utils.makeRequest(&quot;POST&quot;, url, null, &quot;application/json&quot;, requestBody);                    
                InputStream inputStream;
                // get stream
                if (urlConnection.getResponseCode() &amp;lt; HttpURLConnection.HTTP_BAD_REQUEST) {
                    inputStream = urlConnection.getInputStream();
                } else {
                    inputStream = urlConnection.getErrorStream();
                }
                // parse stream
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                String temp, response = &quot;&quot;;
                while ((temp = bufferedReader.readLine()) != null) {
                    response += temp;
                }
                return response;
            } catch (IOException e) {
                e.printStackTrace();
                return e.toString();
            } finally {
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
            }

            // CASE 2: For JSONObject parameter
            String url = &quot;http://10.0.2.2/api/testjsonobject&quot;;
            JSONObject jsonBody;
            String requestBody;
            HttpURLConnection urlConnection;
            try {
                jsonBody = new JSONObject();
                jsonBody.put(&quot;Title&quot;, &quot;BNK Title&quot;);
                jsonBody.put(&quot;Author&quot;, &quot;BNK&quot;);
                jsonBody.put(&quot;Date&quot;, &quot;2015/08/08&quot;);
                requestBody = Utils.buildPostParameters(jsonBody);
                urlConnection = (HttpURLConnection) Utils.makeRequest(&quot;POST&quot;, url, null, &quot;application/json&quot;, requestBody);                    
                ...
                // the same logic to case #1
                ...
                return response;
            } catch (JSONException | IOException e) {
                e.printStackTrace();
                return e.toString();
            } finally {
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
            }           

            // CASE 3: For form-urlencoded parameter
            String url = &quot;http://10.0.2.2/api/token&quot;;
            HttpURLConnection urlConnection;
            Map&amp;lt;String, String&amp;gt; stringMap = new HashMap&amp;lt;&amp;gt;();
            stringMap.put(&quot;grant_type&quot;, &quot;password&quot;);
            stringMap.put(&quot;username&quot;, &quot;username&quot;);
            stringMap.put(&quot;password&quot;, &quot;password&quot;);
            String requestBody = Utils.buildPostParameters(stringMap);
            try {
                urlConnection = (HttpURLConnection) Utils.makeRequest(&quot;POST&quot;, url, null, &quot;application/x-www-form-urlencoded&quot;, requestBody);
                ...
                // the same logic to case #1
                ...
                return response;
            } catch (Exception e) {
                e.printStackTrace();
                return e.toString();
            } finally {
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
            }                  
        }

        @Override
        protected void onPostExecute(String response) {
            super.onPostExecute(response);
            // do something...
        }
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PrintWriter를 사용하면 훨씬 더 쉬운 방법이 있습니다(&lt;a href=&quot;https://ihofmann.wordpress.com/2013/01/23/android-sending-post-requests-with-parameters/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;32-1&quot;&gt;여기&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;// set up URL connection
URL urlToRequest = new URL(urlStr);
HttpURLConnection urlConnection = (HttpURLConnection)urlToRequest.openConnection();
urlConnection.setDoOutput(true);
urlConnection.setRequestMethod(&quot;POST&quot;);
urlConnection.setRequestProperty(&quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded&quot;);

// write out form parameters
String postParamaters = &quot;param1=value1&amp;amp;param2=value2&quot;
urlConnection.setFixedLengthStreamingMode(postParameters.getBytes().length);
PrintWriter out = new PrintWriter(urlConnection.getOutputStream());
out.print(postParameters);
out.close();

// connect
urlConnection.connect();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;AsyncTask&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;JSONObect&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;POST&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class PostMethodDemo extends AsyncTask&amp;lt;String , Void ,String&amp;gt; {
        String server_response;

        @Override
        protected String doInBackground(String... strings) {
            URL url;
            HttpURLConnection urlConnection = null;

            try {
                url = new URL(strings[0]);
                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setDoOutput(true);
                urlConnection.setDoInput(true);
                urlConnection.setRequestMethod(&quot;POST&quot;);

                DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream ());

                try {
                    JSONObject obj = new JSONObject();
                    obj.put(&quot;key1&quot; , &quot;value1&quot;);
                    obj.put(&quot;key2&quot; , &quot;value2&quot;);

                    wr.writeBytes(obj.toString());
                    Log.e(&quot;JSON Input&quot;, obj.toString());
                    wr.flush();
                    wr.close();
                } catch (JSONException ex) {
                    ex.printStackTrace();
                }
                urlConnection.connect();

                int responseCode = urlConnection.getResponseCode();

                if(responseCode == HttpURLConnection.HTTP_OK){
                    server_response = readStream(urlConnection.getInputStream());
                }

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Log.e(&quot;Response&quot;, &quot;&quot; + server_response);
        }
    }

    public static String readStream(InputStream in) {
        BufferedReader reader = null;
        StringBuffer response = new StringBuffer();
        try {
            reader = new BufferedReader(new InputStreamReader(in));
            String line = &quot;&quot;;
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return response.toString();
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도해 보기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(&quot;your url&quot;);
List&amp;lt;NameValuePair&amp;gt; nameValuePairs = new ArrayList&amp;lt;NameValuePair&amp;gt;(3);
nameValuePairs.add(new BasicNameValuePair(&quot;user_name&quot;, &quot;Name&quot;));
nameValuePairs.add(new BasicNameValuePair(&quot;pass&quot;,&quot;Password&quot; ));
nameValuePairs.add(new BasicNameValuePair(&quot;user_email&quot;,&quot;email&quot; ));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);

String ret = EntityUtils.toString(response.getEntity());
Log.v(&quot;Util response&quot;, ret);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가할 수 있는 개수는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nameValuePairs&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요에 따라서&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 목록에 있는 숫자를 언급하는 것도 잊지 마세요.&lt;/font&gt;&lt;/font&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;POST/PUT/DEELETE/GET Restful 메서드를 사용자 지정 헤더 또는 json 데이터로 호출하려면 다음 Async 클래스를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class HttpUrlConnectionUtlity extends AsyncTask&amp;lt;Integer, Void, String&amp;gt; {
private static final String TAG = &quot;HttpUrlConnectionUtlity&quot;;
Context mContext;
public static final int GET_METHOD = 0,
        POST_METHOD = 1,
        PUT_METHOD = 2,
        HEAD_METHOD = 3,
        DELETE_METHOD = 4,
        TRACE_METHOD = 5,
        OPTIONS_METHOD = 6;
HashMap&amp;lt;String, String&amp;gt; headerMap;

String entityString;
String url;
int requestType = -1;
final String timeOut = &quot;TIMED_OUT&quot;;

int TIME_OUT = 60 * 1000;

public HttpUrlConnectionUtlity (Context mContext) {
    this.mContext = mContext;
    this.callback = callback;
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
}

@Override
protected String doInBackground(Integer... params) {
    int requestType = getRequestType();
    String response = &quot;&quot;;
    try {


        URL url = getUrl();
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        urlConnection = setRequestMethod(urlConnection, requestType);
        urlConnection.setConnectTimeout(TIME_OUT);
        urlConnection.setReadTimeout(TIME_OUT);
        urlConnection.setDoOutput(true);
        urlConnection = setHeaderData(urlConnection);
        urlConnection = setEntity(urlConnection);

        if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
            response = readResponseStream(urlConnection.getInputStream());
            Logger.v(TAG, response);
        }
        urlConnection.disconnect();
        return response;


    } catch (ProtocolException e) {
        e.printStackTrace();
    } catch (SocketTimeoutException e) {
        return timeOut;
    } catch (IOException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        Logger.e(TAG, &quot;ALREADY CONNECTED&quot;);
    }
    return response;
}

@Override
protected void onPostExecute(String response) {
    super.onPostExecute(response);

    if (TextUtils.isEmpty(response)) {
        //empty response
    } else if (response != null &amp;amp;&amp;amp; response.equals(timeOut)) {
        //request timed out 
    } else    {
    //process your response
   }
}


private String getEntityString() {
    return entityString;
}

public void setEntityString(String s) {
    this.entityString = s;
}

private String readResponseStream(InputStream in) {
    BufferedReader reader = null;
    StringBuffer response = new StringBuffer();
    try {
        reader = new BufferedReader(new InputStreamReader(in));
        String line = &quot;&quot;;
        while ((line = reader.readLine()) != null) {
            response.append(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return response.toString();
}

private HttpURLConnection setEntity(HttpURLConnection urlConnection) throws IOException {
    if (getEntityString() != null) {
        OutputStream outputStream = urlConnection.getOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, &quot;UTF-8&quot;));
        writer.write(getEntityString());
        writer.flush();
        writer.close();
        outputStream.close();
    } else {
        Logger.w(TAG, &quot;NO ENTITY DATA TO APPEND ||NO ENTITY DATA TO APPEND ||NO ENTITY DATA TO APPEND&quot;);
    }
    return urlConnection;
}

private HttpURLConnection setHeaderData(HttpURLConnection urlConnection) throws UnsupportedEncodingException {
    urlConnection.setRequestProperty(&quot;Content-Type&quot;, &quot;application/json&quot;);
    urlConnection.setRequestProperty(&quot;Accept&quot;, &quot;application/json&quot;);
    if (getHeaderMap() != null) {
        for (Map.Entry&amp;lt;String, String&amp;gt; entry : getHeaderMap().entrySet()) {
            urlConnection.setRequestProperty(entry.getKey(), entry.getValue());
        }
    } else {
        Logger.w(TAG, &quot;NO HEADER DATA TO APPEND ||NO HEADER DATA TO APPEND ||NO HEADER DATA TO APPEND&quot;);
    }
    return urlConnection;
}

private HttpURLConnection setRequestMethod(HttpURLConnection urlConnection, int requestMethod) {
    try {
        switch (requestMethod) {
            case GET_METHOD:
                urlConnection.setRequestMethod(&quot;GET&quot;);
                break;
            case POST_METHOD:
                urlConnection.setRequestMethod(&quot;POST&quot;);
                break;
            case PUT_METHOD:
                urlConnection.setRequestMethod(&quot;PUT&quot;);
                break;
            case DELETE_METHOD:
                urlConnection.setRequestMethod(&quot;DELETE&quot;);
                break;
            case OPTIONS_METHOD:
                urlConnection.setRequestMethod(&quot;OPTIONS&quot;);
                break;
            case HEAD_METHOD:
                urlConnection.setRequestMethod(&quot;HEAD&quot;);
                break;
            case TRACE_METHOD:
                urlConnection.setRequestMethod(&quot;TRACE&quot;);
                break;
        }
    } catch (ProtocolException e) {
        e.printStackTrace();
    }
    return urlConnection;
}

public int getRequestType() {
    return requestType;
}

public void setRequestType(int requestType) {
    this.requestType = requestType;
}

public URL getUrl() throws MalformedURLException {
    return new URL(url);
}

public void setUrl(String url) {
    this.url = url;
}

public HashMap&amp;lt;String, String&amp;gt; getHeaderMap() {
    return headerMap;
}

public void setHeaderMap(HashMap&amp;lt;String, String&amp;gt; headerMap) {
    this.headerMap = headerMap;
}   }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용도는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    HttpUrlConnectionUtlity httpMethod = new HttpUrlConnectionUtlity (mContext);
    JSONObject jsonEntity = new JSONObject();

    try {
        jsonEntity.put(&quot;key1&quot;, value1);
        jsonEntity.put(&quot;key2&quot;, value2);

    } catch (JSONException e) {
        e.printStackTrace();
    }
    httpMethod.setUrl(YOUR_URL_STRING);
    HashMap&amp;lt;String, String&amp;gt; headerMap = new HashMap&amp;lt;&amp;gt;();
    headerMap.put(&quot;key&quot;,value);
    headerMap.put(&quot;key1&quot;,value1);
    httpMethod.setHeaderMap(headerMap);
    httpMethod.setRequestType(WiseConnectHttpMethod.POST_METHOD); //specify POST/GET/DELETE/PUT
    httpMethod.setEntityString(jsonEntity.toString());
    httpMethod.execute();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 경우, 나는 String url과 hashmap의 매개변수를 사용하는 Post request를 만들기 위해 이와 같은 기능을 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; public  String postRequest( String mainUrl,HashMap&amp;lt;String,String&amp;gt; parameterList)
{
    String response=&quot;&quot;;
    try {
        URL url = new URL(mainUrl);

        StringBuilder postData = new StringBuilder();
        for (Map.Entry&amp;lt;String, String&amp;gt; param : parameterList.entrySet())
        {
            if (postData.length() != 0) postData.append('&amp;amp;');
            postData.append(URLEncoder.encode(param.getKey(), &quot;UTF-8&quot;));
            postData.append('=');
            postData.append(URLEncoder.encode(String.valueOf(param.getValue()), &quot;UTF-8&quot;));
        }

        byte[] postDataBytes = postData.toString().getBytes(&quot;UTF-8&quot;);




        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod(&quot;POST&quot;);
        conn.setRequestProperty(&quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded&quot;);
        conn.setRequestProperty(&quot;Content-Length&quot;, String.valueOf(postDataBytes.length));
        conn.setDoOutput(true);
        conn.getOutputStream().write(postDataBytes);

        Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), &quot;UTF-8&quot;));

        StringBuilder sb = new StringBuilder();
        for (int c; (c = in.read()) &amp;gt;= 0; )
            sb.append((char) c);
        response = sb.toString();


    return  response;
    }catch (Exception excep){
        excep.printStackTrace();}
    return response;
}
&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;org.apache.http.client를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;HttpClient 또한 아래와 같이 보다 쉽게 읽을 수 있는 방법으로 이 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(&quot;http://www.yoursite.com/script.php&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도 내에 삽입할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Add your data
List&amp;lt;NameValuePair&amp;gt; nameValuePairs = new ArrayList&amp;lt;NameValuePair&amp;gt;(2);
nameValuePairs.add(new BasicNameValuePair(&quot;id&quot;, &quot;12345&quot;));
nameValuePairs.add(new BasicNameValuePair(&quot;stringdata&quot;, &quot;AndDev is Cool!&quot;));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;45-2&quot;&gt;Http&lt;/strong&gt;에 대한 &lt;strong papago-id=&quot;45-0&quot;&gt;매개&lt;/strong&gt; 변수&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;45-6&quot;&gt;NameValuePair&lt;/strong&gt; with &lt;strong papago-id=&quot;45-8&quot;&gt;OutPut&lt;/strong&gt;을 사용하여 &lt;strong papago-id=&quot;45-4&quot;&gt;POST&lt;/strong&gt;를 사용한 URL &lt;strong papago-id=&quot;45-2&quot;&gt;연결&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        try {
        URL url = new URL(&quot;https://yourUrl.com&quot;);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        conn.setUseCaches(false);
        conn.setDoInput(true);
        conn.setDoOutput(true);

        conn.setRequestMethod(&quot;POST&quot;);

        conn.setRequestProperty(&quot;Content-Type&quot;, &quot;application/json&quot;);

        JSONObject data = new JSONObject();
        data.put(&quot;key1&quot;, &quot;value1&quot;);
        data.put(&quot;key2&quot;, &quot;value2&quot;);

        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data.toString());
        wr.flush();
        wr.close();

        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();
        System.out.println(response.toString());
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 다음과 같은 것을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SchemeRegistry sR = new SchemeRegistry();
sR.register(new Scheme(&quot;https&quot;, SSLSocketFactory.getSocketFactory(), 443));

HttpParams params = new BasicHttpParams();
SingleClientConnManager mgr = new SingleClientConnManager(params, sR);

HttpClient httpclient = new DefaultHttpClient(mgr, params);

HttpPost httppost = new HttpPost(url);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

HttpResponse response = httpclient.execute(httppost);
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;JSONObject params = new JSONObject();
try {
   params.put(key, val);
}catch (JSONException e){
   e.printStackTrace();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 제가 POST를 통해 &quot;params&quot;(JSONObject)를 통과하는 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;connection.getOutputStream().write(params.toString().getBytes(&quot;UTF-8&quot;));
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/9767952/how-to-add-parameters-to-httpurlconnection-using-post-using-namevaluepair&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Android</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1204</guid>
      <comments>https://sourcejob.tistory.com/1204#entry1204comment</comments>
      <pubDate>Tue, 31 Oct 2023 21:08:00 +0900</pubDate>
    </item>
    <item>
      <title>WordPress 3.5 이후에도 Media_upload_tabs 필터를 사용하여 미디어 관리자에 탭을 추가해야 합니까?</title>
      <link>https://sourcejob.tistory.com/1203</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WordPress 3.5 이후에도 Media_upload_tabs 필터를 사용하여 미디어 관리자에 탭을 추가해야 합니까?&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;WordPress 3.5 이후, 이전 미디어 관리자 필터 (&lt;/font&gt;&lt;/font&gt;&lt;code&gt;media_upload_tabs&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)는 여전히 작동 중이지만 UI가 이전에 사용했던 ThickBox에서 멀어졌습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;탭을 추가하는 새로운 접근 방식을 제안하는 정보를 찾을 수 없었고 워드프레스가 탭을 추가하는 기존 방식을 고수할 것인지, 아니면 앞으로 새로운 방식으로 전환할 것인지 궁금합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;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;질문을 통해 정확히 무엇을 하려는 것인지 알 수는 없지만, 미디어 매니저가 현재 jQuery와 자바스크립트에 매우 의존하고 있기 때문에 예전 방식으로 기능을 구현하는 데 어려움을 겪을 수 있기 때문에 커뮤니티에서 많은 비판이 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/14051836/should-we-still-use-the-media-upload-tabs-filter-to-add-tabs-in-the-media-manage&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1203</guid>
      <comments>https://sourcejob.tistory.com/1203#entry1203comment</comments>
      <pubDate>Tue, 31 Oct 2023 21:07:40 +0900</pubDate>
    </item>
    <item>
      <title>jQuery를 사용하여 문자열에서 마지막 문자를 삭제하는 방법?</title>
      <link>https://sourcejob.tistory.com/1202</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&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;123-4-&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;4&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;123-&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;strong papago-id=&quot;3-1&quot;&gt;jQuery&lt;/strong&gt;를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;평이한 자바스크립트로 시도해 볼 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;1234&quot;.slice(0,-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;음의 두 번째 매개 변수는 마지막 문자에서 오프셋이므로 -2를 사용하여 마지막 2개 문자 등을 제거할 수 있습니다.&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;왜 jQuery를 사용합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;str = &quot;123-4&quot;; 
alert(str.substring(0,str.length - 1));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery가 포함된 서브스트레이트:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//example test element
 $(document.createElement('div'))
    .addClass('test')
    .text('123-4')
    .appendTo('body');

//using substring with the jQuery function html
alert($('.test').html().substring(0,$('.test').html().length - 1));
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@skajfes와 @GollezTrol이 사용하기에 가장 좋은 방법을 제공했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 개인적으로 'slice()'를 더 좋아합니다.&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;//-----------------------------------------
// @param begin  Required. The index where 
//               to begin the extraction. 
//               1st character is at index 0
//
// @param end    Optional. Where to end the
//               extraction. If omitted, 
//               slice() selects all 
//               characters from the begin 
//               position to the end of 
//               the string.
var str = '123-4';
alert(str.slice(0, -1));
&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;alert('123-4-'.substr(0, 4)); // outputs &quot;123-&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열의 처음 4자를 반환합니다(조정).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;4&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;이 페이지는 Google에서 &quot;마지막 문자 제거 jquery&quot;를 검색할 때 먼저 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전의 모든 답이 맞지만, 왠지 내가 원하는 것을 빠르고 쉽게 찾을 수 있도록 도와주지 못했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뭔가 부족한 느낌이 듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;복제하는 경우 사과합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('selector').each(function(){ 
  var text = $(this).html();
  text = text.substring(0, text.length-1);
  $(this).html(text);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('selector').each(function(){ 
  var text = $(this).html();
  text = text.slice(0,-1);
  $(this).html(text);
})
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/4308934/how-to-delete-last-character-from-a-string-using-jquery&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1202</guid>
      <comments>https://sourcejob.tistory.com/1202#entry1202comment</comments>
      <pubDate>Tue, 31 Oct 2023 21:07:34 +0900</pubDate>
    </item>
    <item>
      <title>CSS 이전 또는 이후의 SVG 채우기 색상 변경</title>
      <link>https://sourcejob.tistory.com/1201</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS 이전 또는 이후의 SVG 채우기 색상 변경&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;SVG 그래픽을 이렇게 넣었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a::before { content: url(filename.svg); }
&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;태그 위를 마우스로 가리키면 지금처럼 SVG 파일을 새로 로드하지 않고 SVG가 채우기 색상을 변경하기를 원합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a:hover::before { content: url(filename_white.svg); }
&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;자바스크립트, jQuery 또는 내가 모르는 순수한 CSS를 사용하여 이것을 달성할 수 있습니까?&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;strong papago-id=&quot;5-1&quot;&gt;SVG 마스크&lt;/strong&gt;와 배경색을 사용한 해결 방법을 적용하면 실제로 가능합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;false&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;p:after {
  width: 48px;
  height: 48px;
  display: inline-block;
  content: '';
  -webkit-mask: url(https://gh.max.ax/heart.svg) no-repeat 50% 50%;
  mask: url(https://gh.max.ax/heart.svg) no-repeat 50% 50%;
  -webkit-mask-size: cover;
  mask-size: cover;
}

.red:after {
  background-color: red;
}

.green:after {
  background-color: green;
}

.blue:after {
  background-color: blue;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;p class=&quot;red&quot;&amp;gt;red heart&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;green&quot;&amp;gt;green heart&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;blue&quot;&amp;gt;blue heart&amp;lt;/p&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;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로 SVG DOM 자체를 수정하는 것이 아니라 배경색을 변경하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 이미지 또는 그라디언트를 배경으로 사용할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h2 papago-id=&quot;7&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;strike papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;J씨가 말씀하신 것처럼.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://caniuse.com/#feat=css-masks&quot; papago-id=&quot;8-1&quot; rel=&quot;noreferrer&quot;&gt;안타깝게&lt;/a&gt;도 이 &lt;a href=&quot;https://caniuse.com/#feat=css-masks&quot; papago-id=&quot;8-1&quot; rel=&quot;noreferrer&quot;&gt;기능은 널리 지원되지 않습니다&lt;/a&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/strike&gt;&lt;/p&gt;
&lt;strike&gt; 
&lt;/strike&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;6년 만에 프리픽스 사용에 대한 지지도가 &lt;a href=&quot;https://caniuse.com/#feat=css-masks&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;97%&lt;/a&gt;로 상승했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;content&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;property는 &amp;lt;img&amp;gt; 요소에서 svg와 기능적으로 동등한 (비 exposed) 마크업을 생성합니다.&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;다음과 같은 이유로 svg 문서 내부의 요소에 스타일을 적용할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스타일은 문서 간에 캐스케이드할 수 없습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&amp;lt;img&amp;gt;를 사용할 때(또는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;content&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 또는 svg를 참조하는 CSS 이미지 속성) svg 문서가 보안 문제로 인해 브라우저에 노출되지 않습니다.&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;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비슷한 질문이지만,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;background-image&lt;/code&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/13391873/can-you-modify-a-loaded-svg-background-image-with-css&quot; papago-id=&quot;5-2&quot;&gt;여기저기에&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서, 당신이 원하는 것을 하기 위해서는 어떻게든 위의 두 가지 점을 극복해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인라인 svg 사용, 필터(&amp;lt;img&amp;gt;에 적용) 사용, 또는 질문에서와 같이 다양한 svg 파일(또는 데이터 URI) 생성과 같은 다양한 옵션이 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설정 없이 @&lt;a href=&quot;https://stackoverflow.com/a/42317014/725866&quot; papago-id=&quot;6-1&quot;&gt;lmaoooooo의 답변&lt;/a&gt;과 유사한 기법&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display: inline-block&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;display: inline&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;:after&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;또한 클립 경로를 사용하여 Safari에서 배경색이 새는 것을 방지합니다(이 기능의 유용성은 이미지/라인 높이/등에 따라 다름).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;a[target=&quot;_blank&quot;]:after {
  background-color: currentColor;
  content: &quot;&quot;;
  padding: 0 0.5em;
  margin: 0 0.125rem;
  -webkit-mask-image: url(&quot;data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 2048 2048'%3E%3Cpath d='M1792 256v640h-128V475l-851 850-90-90 850-851h-421V256h640zm-512 1007h128v529H256V640h529v128H384v896h896v-401z'/%3E%3C/svg%3E&quot;);
  mask-image: url(&quot;data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 2048 2048'%3E%3Cpath d='M1792 256v640h-128V475l-851 850-90-90 850-851h-421V256h640zm-512 1007h128v529H256V640h529v128H384v896h896v-401z'/%3E%3C/svg%3E&quot;);
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
  clip-path: padding-box inset(0.28125em 0);
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;Lorem ipsum sumit dolar &amp;lt;a href=&quot;#&quot; target=&quot;_blank&quot;&amp;gt;hello world&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 하는 다른 방법이 방법이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;필터를 가지고 놀면 가능합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콘텐츠에 svg url을 추가하고 색상을 변경하기만 하면 됩니다.&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;a href=&quot;https://caniuse.com/?search=hue-rotate&quot; papago-id=&quot;26-1&quot; rel=&quot;noreferrer&quot;&gt;캔&lt;/a&gt;에 의하면&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이유 &lt;a href=&quot;https://caniuse.com/?search=hue-rotate&quot; papago-id=&quot;26-1&quot; rel=&quot;noreferrer&quot;&gt;모든&lt;/a&gt; 인기 형제들의 지지를 받고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;p:after {
  width: 48px;
  height: 48px;
  content: url(https://gh.max.ax/heart.svg);
}

.red:after {
  filter: hue-rotate(14deg);
}

.green:after {
  filter: hue-rotate(120deg);
}

.blue:after {
  filter: hue-rotate(210deg);
}

.black:after {
  filter: grayscale(100%);
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;p class=&quot;red&quot;&amp;gt;red heart&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;green&quot;&amp;gt;green heart&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;blue&quot;&amp;gt;blue heart&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;black&quot;&amp;gt;black heart&amp;lt;/p&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;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/21509982/change-svg-fill-color-in-before-or-after-css&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1201</guid>
      <comments>https://sourcejob.tistory.com/1201#entry1201comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:00:08 +0900</pubDate>
    </item>
    <item>
      <title>ggplot2를 사용할 때 지속적으로 잘못된 그래픽 상태 오류가 발생함</title>
      <link>https://sourcejob.tistory.com/1200</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ggplot2를 사용할 때 지속적으로 잘못된 그래픽 상태 오류가 발생함&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 제 데이터 프레임과 코드가 괜찮다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실, 저는 최대한 기본적인 것들을 만들기 위해 데이터 프레임의 일부와 대부분의 그래핑 코드를 제거했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래도 이해가 갑니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Error in .Call.graphics(C_palette2, .Call(C_palette2, NULL)) : 
  invalid graphics state
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 뭐가 잘못됐나요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; date   trt var val
1/8/2008    cc  sw5 0.2684138
1/8/2008    cc  sw15    0.2897586
1/8/2008    cc  sw5 0.2822414
2/8/2008    cc  sw5 0.2494583
2/8/2008    cc  sw5 0.2692917
2/8/2008    cc  sw15    0.2619167
2/8/2008    cc  sw5 0.204375
3/8/2008    cc  sw5 0.2430625
3/8/2008    cc  sw5 0.2654375
3/8/2008    cc  sw5 0.2509583
3/8/2008    cc  sw5 0.2055625
1/8/2008    ccw sw15    0.2212414
1/8/2008    ccw sw5 0.3613448
1/8/2008    ccw sw5 0.2607586
2/8/2008    ccw sw5 0.2087917
2/8/2008    ccw sw15    0.3390417
2/8/2008    ccw sw5 0.2436458
2/8/2008    ccw sw5 0.290875
3/8/2008    ccw sw5 0.20175
3/8/2008    ccw sw15    0.328875
3/8/2008    ccw sw5 0.2328958
3/8/2008    ccw sw5 0.2868958
&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;df&amp;lt;-df[order(as.Date(df$date,format=&quot;%d/%m/%Y&quot;)),,drop=FALSE]
&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;ggplot(data = df,aes(x = date,y = val)) + 
 geom_point(aes(group = trt))
&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;dev.off()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 다시 줄거리를 실행하는 겁니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아까 그래픽을 좀 내보내서 그래픽 장치가 엉망이 되어서 리셋이 안 된 것 같아요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 나에게 효과가 있었고 ggplot2를 재설치하는 것보다 간단합니다.&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;gg 플롯 차트와 플롯 차트를 동일한 세션에서 혼합할 때 이러한 현상이 발생한다는 것을 확인했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Paul이 제안한 'dev.off' 솔루션을 사용하면 문제가 해결됩니다.&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;ggplot2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 사용 중인 R 버전과 설치된 버전 사이에 비호환성이 있을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ggplot2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 또는 설치하는 동안 문제가 발생했을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ggplot2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전에 문제를 일으켰습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ggplot2를 다시 설치할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책: 이전에 작동하지 않았던 플롯으로 돌아갑니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 콘솔 출력을 예로 들어 보겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그림 여백(그림을 표시하는 창)이 너무 작아서 쌍(마이너스 내부) 그림을 표시할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 다음 q plot을 작성하려고 했을 때 R은 여전히 이전 오류에 걸려 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;pairs(마이너스 내부) plot.new()의 오류 : 그림 여백이 너무 큰 q plot(표본).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유형, BAE, 데이터= minus&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내부, geom=&quot;boxplot&quot;) .Call.graphics(C_palette2, .Call(C_palette2, NULL)의 오류: 잘못된 그래픽 상태&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플롯 창을 확장하고 쌍(마이너스 내부) 플롯을 다시 실행하여 첫 번째 오류를 수정했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 흠, 효과가 있었군요.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쌍(마이너스 내부) q 그림(표본)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유형, BAE, 데이터= minus&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;안쪽, 지오엠=&quot;상자 그림&quot;)&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콘솔의 모든 플롯을 지운 다음 플롯 영역이 제가 만들고 있는 것을 수용할 수 있을 정도로 넓도록 함으로써 이 문제를 해결했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;R(메뉴&amp;gt;세션&amp;gt;Restart R 또는 ⌘⇧F10)을 다시 시작하고 코드를 다시 실행하면 문제가 해결되었습니다.&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;또한 RStudio를 사용하는 경우 쉽게 해결할 수 있는 방법은 플롯 창/영역의 크기를 드래그하여 확장하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 현재 플롯 창이 플롯을 표시하는 데 필요한 크기보다 작기 때문에 이 문제가 발생했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;화풀이를 해 보다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x11()&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;win.graph()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결할 수 있을 겁니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;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/20155581/persistent-invalid-graphics-state-error-when-using-ggplot2&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>R</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1200</guid>
      <comments>https://sourcejob.tistory.com/1200#entry1200comment</comments>
      <pubDate>Thu, 26 Oct 2023 21:00:01 +0900</pubDate>
    </item>
    <item>
      <title>포인터 + 1이 4를 추가하는 이유</title>
      <link>https://sourcejob.tistory.com/1199</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포인터 + 1이 4를 추가하는 이유&lt;/font&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;
int main(void){
  int *ptr,a,b;
  a = ptr;
  b = ptr + 1;
  printf(&quot;the vale of a,b is %x and %x respectively&quot;,a,b);

  int c,d;
  c = 0xff;
  d = c + 1;
  printf(&quot;the value of c d are %x and %x respectively&quot;,c,d);
  return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;산출값은.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;the vale of a,b is 57550c90 and 57550c94 respectively
the value of c d are ff and 100 respectively%  
&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;ptr + 1로 밝혀졌는데, 왜 이런 식으로 행동하는 거지?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포인터가 배열과 호환되도록 설계되었기 때문에:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;*(pointer + offset)
&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;pointer[offset]
&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;sizeof(pointer base type)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;- bytes 크기의 블록.&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 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;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 4바이트이고 그것의 주소는 1000이고 1001은 실제로 그것의 두번째 바이트입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 1002는 세번째 바이트이고 1003은 네번째 바이트입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;크기 이후로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러마다 다를 수 있습니다. 포인터를 증가시킬 때 당신이 어떤 중간 지점의 주소를 얻을 수 없는 것이 필수적입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;Basile Starynkvitch가 지적한 바와 같이, 이 금액은 다음과 같이 결정될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 멤버가 가리키는 속성입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;주소는 순차적이지만 개체의 포인터는 해당 개체를 수용하는 데 필요한 실제 메모리 공간을 고려해야 한다는 사실을 잊기 쉽습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포인터 산술은 까다로운 과목입니다.&lt;/font&gt;&lt;font 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;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뾰족한 원소&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단답형&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;sizeof(T)&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;T&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;그래서.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&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;sizeof(int)&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;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜요?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;무엇보다도, 표준은 그것을 요구합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 동작이 (C와의 호환성을 제외하고) 유용한 이유는 배열 또는 A와 같은 연속 메모리를 사용하는 데이터 구조를 가지고 있을 때입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;std::vector&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 포인터에 하나를 추가하기만 하면 배열의 다음 항목으로 이동할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨테이너의 n번째 항목으로 이동하려면 그냥 추가하면 됩니다.&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&gt;&lt;/font&gt;&lt;code&gt;firstAddress + 2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보다 훨씬 간단합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;firstAddress + (sizeof(T) * 2)&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;sizeof(int)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;4(아닌지도 모른다)이고 코드를 쓰는 것과 같은.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;firstAddress + (4 * 2)&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&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;myArray[4]&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;myArray + 4&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫첫 포인트&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이것이 배열 인덱스가 0에서 시작하는 이유입니다. 첫 번째 요소(즉, myArray는 배열의 첫 번째 요소를 가리키는 포인트)를 얻기 위해 0을 더하고 n을 얻으면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 번에 한 바이트씩 옮기려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;sizeof(char)&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;크기가 1바이트로 보장되므로 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char*&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;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포인터는 개체가 할당된 메모리 표시의 특정 바이트를 가리킬 때 사용됩니다(기술적으로는 아무 곳이나 가리킬 수 있지만 그렇게 사용됩니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;포인터 산술을 수행하면 가리키는 개체의 크기에 따라 연산이 수행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 경우, 각각 4바이트의 크기를 가진 정수를 가리키는 포인터입니다.&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&gt;&lt;code&gt;p&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이. . . .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;p+n&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;code&gt;(unsigned char *)p + n * sizeof *p&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(왜냐하면)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof(unsigned char) == 1&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#define N   3

int
main(void)
{
    int i;
    int *p = &amp;amp;i;
    printf(&quot;%p\n&quot;, (void *)p);
    printf(&quot;%p\n&quot;, (void *)(p + N));
    printf(&quot;%p\n&quot;, (void *)((unsigned char *)p + N * sizeof *p));
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/11598361/why-a-pointer-1-add-4-actually&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1199</guid>
      <comments>https://sourcejob.tistory.com/1199#entry1199comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:59:54 +0900</pubDate>
    </item>
    <item>
      <title>jQuery.jax()에서 반환된 데이터를 필터링하려면 어떻게 해야 합니까?</title>
      <link>https://sourcejob.tistory.com/1198</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery.jax()에서 반환된 데이터를 필터링하려면 어떻게 해야 합니까?&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;jQuery.ajax()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법, 정확하게 필요한 것을 얻기 위해 반환되는 데이터를 필터링하는 데 어려움을 겪고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 사용하기 쉽다는 것을 압니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.load()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 아마 다른 jQuery AJAX 메소드들을 사용할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.ajax()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구체적으로&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 나는 이것이 효과가 있다는 것을 알고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var title = $(data).filter('title'); // Returns the page title
&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;하지만 id=&quot;foo&quot;를 가진 div의 내용을 원하는 경우에는 어떻게 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var foo = $(data).filter('#foo'); // None of these work
var foo = $(data).find('#foo');   //
var foo = $('#foo', data);        //
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이상적으로, 저는 타이틀, 디브 또는 jQuery가 선택할 수 있는 다른 요소를 선택하는 데 사용할 수 있는 일반 jQuery 선택기를 통과할 수 있는 한 가지 방법을 원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 내 자신의 아약스 함수에 어떤 문자열도 전달할 수 있도록 하기 위한 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;myApp.ajax({
    url: 'myPage.html',
    filterTitle: 'title',
    filterContent: '#main-content'
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 도움이라도 주시면 대단히 감사하겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;filter()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;find()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;검색한 HTML 페이지의 구조에 따라 달라집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 이 페이지가 검색된 페이지일 경우:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;

&amp;lt;html&amp;gt;

&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Foo&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;

&amp;lt;body&amp;gt;
    &amp;lt;div id=&quot;wrap&quot;&amp;gt;
        &amp;lt;div id=&quot;header&quot;&amp;gt;
            &amp;lt;h1&amp;gt;Foo&amp;lt;/h1&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div id=&quot;body&quot;&amp;gt; content &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div id=&quot;tooltip&quot;&amp;gt; tooltip &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;

&amp;lt;/html&amp;gt;  
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;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;&amp;lt;body&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;code&gt;#wrap&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;#tooltip&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;filter()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;#header&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;&amp;lt;h1&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#body&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;find()&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;당신은 당신의 요소가 아이인지 아닌지 모릅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니어도 다음과 같은 &quot;hack&quot;를 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;$(&quot;&amp;lt;div&amp;gt;&quot;).html(data).find( selector );&lt;/code&gt; &lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 해결책을 사용하면 항상 다음을 통해 요소를 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;find()&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;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jQuery.load&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메소드는 다음 코드를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// If successful, inject the HTML into all the matched elements
if ( status === &quot;success&quot; || status === &quot;notmodified&quot; ) {
  // See if a selector was specified
  self.html( selector ?
    // Create a dummy div to hold the results
    jQuery(&quot;&amp;lt;div /&amp;gt;&quot;)
      // inject the contents of the document in, removing the scripts
      // to avoid any 'Permission Denied' errors in IE
      .append(res.responseText.replace(rscript, &quot;&quot;))

      // Locate the specified elements
      .find(selector) :

    // If not, just inject the full result
    res.responseText );
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 자신이 생성한 DIV에 전체 응답을 추가한 다음 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;find(selector)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 위에&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 당신은 다음과 같은 것을 보고 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var foo = $('&amp;lt;div /&amp;gt;').html(data).find('#foo'); // This looks like it'll work!
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery의 관점에서 보면 약간의 해킹!&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;@Matt 덕분에 이렇게 작동할 수 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
    type: &quot;GET&quot;,
    url: url,
    dataType: 'html',
    success: function(data) {
        $('#foo').html(
            $('&amp;lt;div /&amp;gt;').html(data).find('#foo').html()
        );
    }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전체가 제공하는 특별한 기능이 필요 없는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$.ajax&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법, 당신은 줘야합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$.load()&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&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.load() 메서드는 $.get()과는 달리 원격 문서의 삽입할 부분을 지정할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 url 매개 변수에 대한 특별한 구문을 사용하여 이루어집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열에 하나 이상의 공백 문자가 포함된 경우 첫 번째 공백 뒤에 오는 문자열 부분은 로드할 내용을 결정하는 jQuery Selector로 간주됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;$('#result').load('ajax/test.html #container');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://api.jquery.com/load/#loading-page-fragments&quot; rel=&quot;nofollow&quot; papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://api.jquery.com/load/ #로딩페이지-&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(data).filter(&quot;#foo&quot;).text();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML 내용을 반환하는 ajax 호출의 결과를 필터링하는 데 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/4245231/how-do-i-filter-the-returned-data-from-jquery-ajax&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Ajax</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1198</guid>
      <comments>https://sourcejob.tistory.com/1198#entry1198comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:59:47 +0900</pubDate>
    </item>
    <item>
      <title>예외 가져오기 &amp;quot;IlgalStateException:SaveInstanceState 이후에는 이 작업을 수행할 수 없습니다.&amp;quot;</title>
      <link>https://sourcejob.tistory.com/1197</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예외 가져오기 &quot;IlgalStateException:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SaveInstanceState 이후에는 이 작업을 수행할 수 없습니다.&quot;&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 라이브 안드로이드 애플리케이션을 가지고 있고 시장에서 스택 추적을 받았는데 애플리케이션 코드에서 발생하지 않는 이유를 알 수 없지만 애플리케이션의 일부 또는 다른 이벤트로 인해 발생합니다(추정).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프래그먼트를 사용하고 있지는 않지만, 프래그먼트 매니저의 레퍼런스가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 누군가가 이런 종류의 문제를 피하기 위해 몇몇 숨겨진 사실들을 밝힐 수 있다면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1109)
at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:399)
at android.app.Activity.onBackPressed(Activity.java:2066)
at android.app.Activity.onKeyDown(Activity.java:1962)
at android.view.KeyEvent.dispatch(KeyEvent.java:2482)
at android.app.Activity.dispatchKeyEvent(Activity.java:2274)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1668)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1720)
at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1258)
at android.app.Activity.dispatchKeyEvent(Activity.java:2269)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1668)
at android.view.ViewRoot.deliverKeyEventPostIme(ViewRoot.java:2851)
at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2824)
at android.view.ViewRoot.handleMessage(ViewRoot.java:2011)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:132)
at android.app.ActivityThread.main(ActivityThread.java:4025)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:491)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
at dalvik.system.NativeStart.main(Native Method)  
&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;strong papago-id=&quot;3-3&quot;&gt;API &lt;/strong&gt;&amp;lt; &lt;strong papago-id=&quot;3-3&quot;&gt;11&lt;/strong&gt;, &lt;strong papago-id=&quot;3-7&quot;&gt;API &lt;/strong&gt;&amp;gt; &lt;strong papago-id=&quot;3-7&quot;&gt;11&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 class=&quot;papago-parent&quot;&gt;저는 그들이 내부에서 무엇을 바꾸었는지 정말 알 수가 없었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Activity&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;saveInstance&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 이 문제를 해결한 방법은 이렇습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
protected void onSaveInstanceState(Bundle outState) {
    //No call for super(). Bug on API Level &amp;gt; 11.
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 단지 전화를 하지 않을 뿐입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.super()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 모든게 잘 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 당신의 시간을 절약할 수 있기를 바랍니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;9-0&quot;&gt;편집:&lt;/b&gt; 좀 더 조사한 결과 지원 패키지의 알려진 &lt;a href=&quot;http://code.google.com/p/android/issues/detail?id=19917&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-2&quot;&gt;버그&lt;/a&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;outState&lt;/code&gt; &lt;code&gt;Bundle&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;@Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putString(&quot;WORKAROUND_FOR_BUG_19917_KEY&quot;, &quot;WORKAROUND_FOR_BUG_19917_VALUE&quot;);
    super.onSaveInstanceState(outState);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;12-0&quot;&gt;EDIT2:&lt;/b&gt; 이 문제는 다음에 트랜잭션을 수행하려는 경우에도 발생할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Activity&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;code&gt;commitAllowingStateLoss()&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;14-0&quot;&gt;EDIT3:&lt;/b&gt; 내가 기억하는 바로는 위의 솔루션들은 초기 지원.v4 라이브러리들의 문제들을 해결하고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 여전히 문제가 있는 경우 &lt;a href=&quot;https://stackoverflow.com/users/844882/alex-lockwood&quot; papago-id=&quot;14-4&quot;&gt;@AlexLockwood&lt;/a&gt; 블로그: &lt;a href=&quot;http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html&quot; papago-id=&quot;14-6&quot; rel=&quot;noreferrer&quot;&gt;Fragment Transactions &lt;/a&gt;&amp;amp; &lt;a href=&quot;http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html&quot; papago-id=&quot;14-6&quot; rel=&quot;noreferrer&quot;&gt;Activity State Loss&lt;/a&gt;도 읽어봐야 &lt;b papago-id=&quot;14-2&quot;&gt;합니다&lt;/b&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;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splited&quot;&gt;&lt;b papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 하지 마십시오.&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt; &lt;code&gt;commit()&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;onPause()&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;onStop()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;허니컴 이후에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;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;Activity&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;b papago-id=&quot;21-1&quot;&gt;사용&lt;/b&gt;&lt;/font&gt;&lt;/font&gt; &lt;code&gt;onCreate()&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;onResumeFragments()&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;onPostResume()&lt;/code&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비동기 콜백 메서드 내에서 트랜잭션 수행 안 함&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;commitAllowingStateLoss()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;궁여지책으로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&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;이 문제의 원인이 무엇인지에 대한 Android 소스 코드를 살펴보니 플래그 mStateSaved in&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FragmentManagerImpl&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;class(Activity에서 사용 가능한 인스턴스)의 값이 true입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;호출 시 백스택이 저장(SaveAllState)되면 true로 설정됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Activity#onSaveInstanceState&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 후 에서 전화가 .&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그 후 활동에서 전화가 걸려온 내용&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스레드에서 사용 가능한 재설정 방법을 사용하여 이 플래그를 재설정하지 않음&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FragmentManagerImpl#noteStateNotSaved()&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;dispatch()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p 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;h2 papago-id=&quot;33&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;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 무엇보다도:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;34-1&quot;&gt;알렉스 락우드 기사&lt;/a&gt;를 광고하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 지금까지 해온 일을 보면 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상태 정보를 보관할 필요가 없는 단편 및 활동에 대해서는 &lt;a href=&quot;http://developer.android.com/reference/android/app/FragmentTransaction.html#commitAllowingStateLoss%28%29&quot; papago-id=&quot;35-1&quot; rel=&quot;noreferrer&quot;&gt;commit&lt;/a&gt;을 호출합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://developer.android.com/reference/android/app/FragmentTransaction.html#commitAllowingStateLoss%28%29&quot; papago-id=&quot;35-1&quot; rel=&quot;noreferrer&quot;&gt;상태&lt;/a&gt; 손실을 허용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서에서 가져온 내용:&lt;/font&gt;&lt;/p&gt; 
  &lt;blockquote&gt; 
   &lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;활동 상태가 저장된 후에 커밋을 실행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나중에 활동 상태를 복원해야 할 경우 커밋이 손실될 수 있기 때문에 위험하므로 UI 상태가 사용자의 상태에서 예기치 않게 변경되어도 무방한 경우에만 사용해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프래그먼트에 읽기 전용 정보가 표시되는 경우 사용해도 괜찮은 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 편집 가능한 정보를 표시하더라도 콜백 메소드를 사용하여 편집된 정보를 유지합니다.&lt;/font&gt;&lt;/p&gt; 
  &lt;/blockquote&gt; &lt;/li&gt; 
 &lt;li&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;/li&gt; 
&lt;/ol&gt; 
&lt;h2 papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;권장되지 않는 방법:&lt;/font&gt;&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&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;위에 언급된 Ovidiu Latcu와 같이, 전화하지 마세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;super.onSaveInstanceState()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 의미합니다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 하지만 이것은 당신이 파편 상태와 함께 전체 활동 상태를 잃게 된다는 것을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&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;onBackPressed&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;finish()&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;. 응용 프로그램이 프래그먼트 API를 사용하지 않는 경우에는 이 방법이 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;super.onBackPressed&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 대한 요구가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FragmentManager#popBackStackImmediate()&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;Fragments API를 모두 사용하고 있고 활동 상태가 중요/중요한 경우 reflection API를 사용하여 호출을 시도할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FragmentManagerImpl#noteStateNotSaved()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도 있습니다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 하지만 이건 해킹이고, 아니면 누군가는 이것이 해결책이라고 말할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마음에 들지 않지만, 저 같은 경우는 사용하지 않는 코드를 사용하는 레거시 앱의 코드를 가지고 있기 때문에 상당히 허용됩니다 (&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TabActivity&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;LocalActivityManager&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래는 반사를 사용하는 코드입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    invokeFragmentManagerNoteStateNotSaved();
}

@SuppressWarnings({ &quot;rawtypes&quot;, &quot;unchecked&quot; })
private void invokeFragmentManagerNoteStateNotSaved() {
    /**
     * For post-Honeycomb devices
     */
    if (Build.VERSION.SDK_INT &amp;lt; 11) {
        return;
    }
    try {
        Class cls = getClass();
        do {
            cls = cls.getSuperclass();
        } while (!&quot;Activity&quot;.equals(cls.getSimpleName()));
        Field fragmentMgrField = cls.getDeclaredField(&quot;mFragments&quot;);
        fragmentMgrField.setAccessible(true);

        Object fragmentMgr = fragmentMgrField.get(this);
        cls = fragmentMgr.getClass();

        Method noteStateNotSavedMethod = cls.getDeclaredMethod(&quot;noteStateNotSaved&quot;, new Class[] {});
        noteStateNotSavedMethod.invoke(fragmentMgr, new Object[] {});
        Log.d(&quot;DLOutState&quot;, &quot;Successful call for noteStateNotSaved!!!&quot;);
    } catch (Exception ex) {
        Log.e(&quot;DLOutState&quot;, &quot;Exception on worka FM.noteStateNotSaved&quot;, ex);
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;건배!&lt;/font&gt;&lt;/p&gt;&lt;p&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;onSaveInstanceState()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부름을 받습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 일이 일어날 수 있는 한 가지 이유는, 만약 당신이 그 일을 떠난다면,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AsyncTask&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(또는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Thread&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;활동이 중지되면 실행됩니다.&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;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;onSaveInstanceState()&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;는 시스템이 리소스에 대한 활동을 회수하고 나중에 다시 생성할 경우 잠재적으로 손실될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조각을 표시하기 전에 postResume&lt;strong papago-id=&quot;59-1&quot;&gt;()&lt;/strong&gt;에서 super&lt;strong papago-id=&quot;59-1&quot;&gt;.&lt;/strong&gt;를 호출하거나 postResume()을 호출한 후에 postResume() 메서드에서 코드를 이동하면 됩니다.&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;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전화를 걸 때도 이 문제가 발생할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dismiss()&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;화면이 잠겨 있고 활동 + 대화상자의 인스턴스 상태가 저장된 후 대화상자 조각에 저장됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;dismissAllowingStateLoss()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;말 그대로 내가 대화를 무시할 때마다 나는 더 이상 대화 상태에 관심이 없기 때문에, 이것은 해도 괜찮습니다. 당신은 실제로 어떤 상태도 잃지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;짧고 효과적인 솔루션:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 단계를 따릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;65-0&quot;&gt;1단계&lt;/strong&gt; : 각 프래그먼트에서 SaveInstanceState 상태를 재정의합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 거기서 슈퍼 메소드를 제거합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public void onSaveInstanceState(Bundle outState) {
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;66-0&quot;&gt;2단계&lt;/strong&gt; : 단편 작업 중 커밋() 대신 커밋AllowingStateLoss()를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;fragmentTransaction.commitAllowingStateLoss();
&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;라이프사이클 상태가 Android 지원 lib v26.1.0부터 시작되는 이러한 충돌을 방지하는 데 도움이 될 수 있다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)){
  // Do fragment's transaction commit
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 다음을 시도할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Fragment.isStateSaved()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 https://developer.android.com/reference/android/support/v4/app/Fragment.html#isStateSaved() 에서 더 많은 정보를 보실 수 있습니다.&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;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되기를 바랍니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1) 글로벌 &quot;static&quot; FragmentManager / FragmentTransaction이 없습니다.&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;2) Create에서는 항상 Fragment Manager를 다시 초기화합니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 샘플 :-&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public abstract class FragmentController extends AnotherActivity{
protected FragmentManager fragmentManager;
protected FragmentTransaction fragmentTransaction;
protected Bundle mSavedInstanceState;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mSavedInstanceState = savedInstanceState;
    setDefaultFragments();
}

protected void setDefaultFragments() {
    fragmentManager = getSupportFragmentManager();
    //check if on orientation change.. do not re-add fragments!
    if(mSavedInstanceState == null) {
        //instantiate the fragment manager

        fragmentTransaction = fragmentManager.beginTransaction();

        //the navigation fragments
        NavigationFragment navFrag = new NavigationFragment();
        ToolbarFragment toolFrag = new ToolbarFragment();

        fragmentTransaction.add(R.id.NavLayout, navFrag, &quot;NavFrag&quot;);
        fragmentTransaction.add(R.id.ToolbarLayout, toolFrag, &quot;ToolFrag&quot;);
        fragmentTransaction.commitAllowingStateLoss();

        //add own fragment to the nav (abstract method)
        setOwnFragment();
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;onActivityForResult() 메서드에서 fragment를 표시하려고 하면 항상 다음과 같은 문제가 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 활동이 일시 중지되고 중지되었습니다. 즉, SaveInstanceState()가 이미 호출되었음을 의미합니다(Honeycomb 이전 장치와 Honeycomb 이후 장치 모두에 대해).&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만일의 경우 프래그먼트를 표시/숨기기 위해 트랜잭션을 수행했고, 이로 인해 이 LegalState Exception이 발생합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&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;ol&gt; 
 &lt;li papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 작업이 수행되었는지 여부를 결정하기 위한 추가 값(예: 카메라에서 사진 촬영 - isPhotoTaken) - 필요한 트랜잭션의 양에 따라 부울 값 또는 정수 값이 될 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Resume Fragments() method를 오버라이드하여 내 값을 확인하고 프래그먼트 트랜잭션을 수행한 후 필요한 값을 확인했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 ResumeFragments() 메서드에서 상태가 반환되었기 때문에 SaveInstanceState 이후 commit()가 수행되지 않았습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;on configuration이 변경되어 문제를 해결하였습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android 활동 수명 주기에 따라 intent(카메라 intent 또는 다른 intent)를 명시적으로 호출하면 활동이 일시 중지되고 저장된 인스턴스가 호출됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;장치를 활동이 활성화된 위치가 아닌 다른 위치로 회전할 때 fragment commit와 같은 fragment 작업을 수행하면 불법 상태 예외가 발생합니다.&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;이 문제를 해결하기 위해 다음 작업을 수행했습니다. 1-활동의 저장된 인스턴스 메서드를 재정의하고 현재 화면 방향(세로 또는 가로)을 결정한 다음 활동이 일시 중지되기 전에 화면 방향을 설정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 활동이 다른 활동에 의해 회전된 경우에 대비하여 화면 회전을 잠급니다. 2-활동 재개 방법을 재정의하고 지금 방향 모드를 센서로 설정하여 onsaved 메서드가 호출된 후 제대로 회전을 처리하도록 설정합니다.&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;이 코드를 작업에 복사/붙여넣어 처리할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
protected void onSaveInstanceState(Bundle outState) {       
    super.onSaveInstanceState(outState);

    Toast.makeText(this, &quot;Activity OnResume(): Lock Screen Orientation &quot;, Toast.LENGTH_LONG).show();
    int orientation =this.getDisplayOrientation();
    //Lock the screen orientation to the current display orientation : Landscape or Potrait
    this.setRequestedOrientation(orientation);
}

//A method found in stackOverflow, don't remember the author, to determine the right screen orientation independently of the phone or tablet device 
public int getDisplayOrientation() {
    Display getOrient = getWindowManager().getDefaultDisplay();

    int orientation = getOrient.getOrientation();

    // Sometimes you may get undefined orientation Value is 0
    // simple logic solves the problem compare the screen
    // X,Y Co-ordinates and determine the Orientation in such cases
    if (orientation == Configuration.ORIENTATION_UNDEFINED) {
        Configuration config = getResources().getConfiguration();
        orientation = config.orientation;

        if (orientation == Configuration.ORIENTATION_UNDEFINED) {
        // if height and widht of screen are equal then
        // it is square orientation
            if (getOrient.getWidth() == getOrient.getHeight()) {
                orientation = Configuration.ORIENTATION_SQUARE;
            } else { //if widht is less than height than it is portrait
                if (getOrient.getWidth() &amp;lt; getOrient.getHeight()) {
                    orientation = Configuration.ORIENTATION_PORTRAIT;
                } else { // if it is not any of the above it will defineitly be landscape
                    orientation = Configuration.ORIENTATION_LANDSCAPE;
                }
            }
        }
    }
    return orientation; // return value 1 is portrait and 2 is Landscape Mode
}

@Override
public void onResume() {
    super.onResume();
    Toast.makeText(this, &quot;Activity OnResume(): Unlock Screen Orientation &quot;, Toast.LENGTH_LONG).show();
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
} 
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 문제가 발생했습니다. 불법 상태 예외를 얻지만 커밋할 모든 호출을 커밋으로 바꿉니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;상태 손실()을 허용해도 도움이 되지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;범인은 DialogFragment.show()로 전화를 걸었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에워싸고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;try {
    dialog.show(transaction, &quot;blah blah&quot;);
}
catch(IllegalStateException e) {
    return;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;85&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것도 해냈습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋아요, 대화상자를 보여주지는 못하겠지만, 이 경우에는 괜찮았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 앱에서 프래그먼트 매니저에게 처음 전화를 걸었던 곳은 그곳뿐이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;beginTransaction()이지만 commit()을 호출한 적이 없어서 &quot;commit()&quot;을 찾을 때 찾지 못했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;재미있는 것은 사용자가 앱을 절대 떠나지 않는다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에 살인자는 애드몹의 간교성 광고가 나타났습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;88&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 문제에 대한 나의 해결책은&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프래그먼트 추가 메서드의 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ...
    guideMapFragment = (SupportMapFragment)a.getSupportFragmentManager().findFragmentById(R.id.guideMap);
    guideMap = guideMapFragment.getMap();
    ...
}

@Override
public void onDestroyView() {
    SherlockFragmentActivity a = getSherlockActivity();
    if (a != null &amp;amp;&amp;amp; guideMapFragment != null) {
        try {
            Log.i(LOGTAG, &quot;Removing map fragment&quot;);
            a.getSupportFragmentManager().beginTransaction().remove(guideMapFragment).commit();
            guideMapFragment = null;
        } catch(IllegalStateException e) {
            Log.i(LOGTAG, &quot;IllegalStateException on exit&quot;);
        }
    }
    super.onDestroyView();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;90&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나쁠 수도 있지만 더 좋은 것을 찾을 수 없었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;91&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제가 생겼어요.&lt;/font&gt;&lt;font 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;92&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 스택 추적 및 예외 메시지는 commit()에 관한 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1341)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1352)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;93&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이 예외는 onBackPressed()로 인해 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(Unknown Source)
at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(Unknown Source)
at android.support.v4.app.FragmentActivity.onBackPressed(Unknown Source)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모두 checkStateLoss()로 인해 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private void checkStateLoss() {
    if (mStateSaved) {
        throw new IllegalStateException(
                &quot;Can not perform this action after onSaveInstanceState&quot;);
    }
    if (mNoTransactionsBecause != null) {
        throw new IllegalStateException(
                &quot;Can not perform this action inside of &quot; + mNoTransactionsBecause);
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;95&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SaveInstanceState에 있는 후 mStateSaved가 true가 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;96&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 문제는 거의 일어나지 않습니다.&lt;/font&gt;&lt;font 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;97&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://code.google.com/p/android/issues/detail?can=2&amp;amp;start=0&amp;amp;num=100&amp;amp;q=&amp;amp;colspec=ID%20Status%20Priority%20Owner%20Summary%20Stars%20Reporter%20Opened&amp;amp;groupby=&amp;amp;sort=&amp;amp;id=25517&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;97-1&quot;&gt;25517호&lt;/a&gt;를 찾았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 상황에서 발생했을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;99&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Back 키는 SaveInstanceState 이후에 호출되지만 새 작업이 시작되기 전에 호출됩니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/29557314/on-back-button-illegalstateexception-can-not-perform-this-action-after-onsavei&quot; papago-id=&quot;100&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드에서 onStop() 사용&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 문제의 근원이 무엇인지 잘 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 못난 방법을 썼습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public void onBackPressed() {

    try{
        super.onBackPressed();
    }catch (IllegalStateException e){
        // can output some information here
        finish();
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 앱에도 같은 문제가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 문제를 해결했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;super.onBackPressed();&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지난 수업에서 전화를 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;commitAllowingStateLoss()&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;105&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 새 방향과 관련된 리소스를 로드할 수 있도록 화면을 돌리면 onSaveInstance가 호출됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;106&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 사용자가 화면을 회전한 후 뒤로 버튼을 눌렀을 수 있습니다(이 사용자가 앱을 사용하는 동안 전화기를 더듬었을 수도 있기 때문입니다)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;107&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결하기 위한 또 다른 라이프사이클 방법은 최신 출시된 라이프사이클-ktx를 kotlin과 함께 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lifecycleScope.launchWhenResumed {
    // your code with fragment or dialogfragment
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;108&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;109&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 선택할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lifecycleScope.launchWhenCreated
// or
lifecycleScope.launchWhenStarted
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;110&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상황에 맞게 말입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;111&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파괴가 오면 코드가 취소됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;112&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구글 문서 링크: https://developer.android.com/kotlin/ktx#lifecycle&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;113&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://chris-alexander.co.uk/on-engineering/dev/android-fragments-within-fragments/ 읽기&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;114&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기사.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;fragment.isResume() 검사를 수행하면 SaveInstanceState 메서드를 사용하여 DestroyView에 액세스할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;115&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 문제로 하루 동안 모든 기사, 블로그 및 스택 오버플로를 분석한 결과 간단한 해결책을 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저장된 InstanceState를 전혀 사용하지 마십시오. 코드 한 줄이 있는 조건입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프래그먼트 코드에 대해:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(null);
    .....
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;116&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프래그먼트를 로드하려고 할 때 작업 상태가 onPause()로 변경될 때마다 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 데이터를 가져와 작업에 로드하려고 할 때 사용자가 일부 버튼을 클릭하고 다음 작업으로 이동할 때 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;117&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 가지 방법으로 해결할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;118&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;transaction.commit을 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;transaction.commit() 대신 StateLoss()를 허용하여 단편을 로드하지만 수행된 커밋 작업이 손실될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;119&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;120&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프래그먼트를 로드할 때 활동이 재개 상태이고 일시 중지 상태가 되지 않는지 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;부울을 만들고 활동이 Pause() 상태로 진행되지 않는지 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public void onResume() {
    super.onResume();
    mIsResumed = true;
}

@Override
public void onPause() {
    mIsResumed = false;
    super.onPause();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;121&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프래그먼트를 로드하는 동안 액티비티가 존재하는지 확인하고 액티비티가 포그라운드인 경우에만 로드합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if(mIsResumed){
 //load the fragment
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;122&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사합니다 @gunar 하지만 더 좋은 방법이 있다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;123&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서에 따르면:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;pre&gt;&lt;code&gt; * If you are committing a single transaction that does not modify the
 * fragment back stack, strongly consider using
 * {@link FragmentTransaction#commitNow()} instead. This can help avoid
 * unwanted side effects when other code in your app has pending committed
 * transactions that expect different timing.
 *
 * @return Returns true if there were any pending transactions to be
 * executed.
 */
public abstract boolean executePendingTransactions();
&lt;/code&gt;&lt;/pre&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 을 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;commitNow&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;pre&gt;&lt;code&gt;fragmentTransaction.commit();
FragmentManager.executePendingTransactions()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;126&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;127&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우에는 AlertDialogs 및 ProgressDialog를 fragment로 사용하고 있었는데 Fragment Manager를 요청할 때 오류가 발생하기도 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;128&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 몇 가지 유사한 게시물을 혼합하는 방법을 발견했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;129&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 솔루션은 3단계 솔루션으로, 모두 FragmentActivity에 대해 수행됩니다(이 경우 GenericActivity라고 함).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private static WeakReference&amp;lt;GenericActivity&amp;gt; activity = null; //To avoid bug for fragments: Step 1 of 3

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    //To avoid bug for fragments: Step 2 of 3
    activity = new WeakReference&amp;lt;GenericActivity&amp;gt;(this);
}

@Override
public FragmentManager getSupportFragmentManager(){
    //To avoid bug for fragments: Step 3 of 3
    if (this == activity.get()) {
        return super.getSupportFragmentManager();
    }
    return activity.get().getSupportFragmentManager();
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;130&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 프래그먼트에서 start activity를 사용하면 이 예외가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;131&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;start activity를 결과에 사용하도록 변경하면 예외가 사라집니다 :)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;132&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 쉽게 수정할 수 있는 방법은 startActivityForResult api :)를 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;133&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지도 조각 작업에서 인텐트 선택을 취소하기 위해 뒤로 버튼을 누를 때 이 예외가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;onResume()의 코드(프래그먼트 초기화 및 커밋 트랜잭션)를 onStart()로 교체하여 해결하였으며, 현재 앱은 정상적으로 동작하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;134&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 Android 4.2에서 수정되었으며 지원 라이브러리의 소스로도 수정되었습니다.[*]&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;135&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원인(및 해결 방법)에 대한 자세한 내용은 Google 버그 보고서(http://code.google.com/p/android/issues/detail?id=19917 를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;136&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지원 라이브러리를 사용하는 경우 이 버그에 대해 오랫동안 걱정할 필요가 없습니다.[*].&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 지원 라이브러리의 Fragment Manager를 사용하지 않고 직접 API를 사용하는 경우(즉, 지원 라이브러리의 Fragment Manager를 사용하지 않는 경우) Android 4.2 이하의 API를 대상으로 하는 경우 해결 방법 중 하나를 시도해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;137&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[*] 작성 당시 Android SDK Manager는 여전히 이 버그가 나타나는 이전 버전을 배포하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;138&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;138-0&quot;&gt;편집&lt;/strong&gt; 나는 분명히 여기에 해명을 덧붙이려고 합니다. 왜냐하면 나는 누가 이 답변을 반대했든 간에 분명히 혼란스러웠기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;139&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;139-1&quot;&gt;이 예외를 삭제할 &lt;/strong&gt;수&lt;strong papago-id=&quot;139-1&quot;&gt; 있는&lt;/strong&gt; 몇 &lt;strong papago-id=&quot;139-1&quot;&gt;가지 다른(그러나&lt;/strong&gt; 관련된)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 제 답변은 질문에서 논의된 구체적인 사례, 즉 안드로이드의 버그가 수정된 것을 언급하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 이유로 이 예외가 발생하는 경우, 프래그먼트 상태가 저장된 후에 프래그먼트를 추가/제거하기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 상황에 처한 경우 &quot;&lt;a href=&quot;https://stackoverflow.com/questions/17847775/nested-fragments-illegalstateexception-can-not-perform-this-action-after-onsa&quot; papago-id=&quot;139-3&quot;&gt;Nested Fragments &lt;/a&gt;- IrgalState &lt;a href=&quot;https://stackoverflow.com/questions/17847775/nested-fragments-illegalstateexception-can-not-perform-this-action-after-onsa&quot; papago-id=&quot;139-3&quot;&gt;Exception &lt;/a&gt;&quot;Can't&lt;a href=&quot;https://stackoverflow.com/questions/17847775/nested-fragments-illegalstateexception-can-not-perform-this-action-after-onsa&quot; papago-id=&quot;139-3&quot;&gt; perform this action on SaveInstanceState&lt;/a&gt;&quot;가 도움이 될 수 있습니다&lt;a href=&quot;https://stackoverflow.com/questions/17847775/nested-fragments-illegalstateexception-can-not-perform-this-action-after-onsa&quot; papago-id=&quot;139-3&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;140&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제에 대한 해결책은 좀 더 연구한 후에 당신의 프래그먼트 커밋을 온 이력서에 하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;141&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출처 : https://wenchaojames.wordpress.com/2013/01/12/illegalstateexception-from-onactivityresult/&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;142&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 사용 사례:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;청취자를 단편적으로 사용하여 어떤 일이 발생했음을 활동에 알렸습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;콜백 방식으로 새로운 프래그먼트 커밋을 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 처음부터 완벽하게 잘 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 방향 변경 시 저장된 인스턴스 상태로 작업이 다시 생성됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 프래그먼트가 다시 생성되지 않으면 프래그먼트에 리스너가 있음을 의미하며, 이는 오래된 파괴된 활동입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든 콜백 메소드는 작업 시 트리거됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파괴된 활동으로 연결되어 문제가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책은 현재 라이브 활동으로 청취자를 단편적으로 재설정하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 문제가 해결됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;143&quot; papago-translate=&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;144&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 오류 예외로 &quot;onBackPressed()&quot;를 실행 파일에 넣었습니다(보기를 사용할 수 있음).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;myView.post(new Runnable() {
                    @Override
                    public void run() {
                        onBackPressed()
                    }
                });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;145&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 그런지는 모르겠지만, 효과는 있어요!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;146&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;활동이 일시 중지되었을 때 fragmentManager.popBackStackImmediate()를 호출할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;활동이 완료되지 않았지만 일시 중지되었으며 포그라운드가 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;popBackStackImmediate() 전에 활동이 일시 중지되었는지 여부를 확인해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;147&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아주 흥미로운 것을 발견했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 앱에 전화기의 갤러리를 열 수 있는 옵션이 있는데 기기가 어떤 앱을 사용할지 묻습니다. 거기서 대화상자에서 떨어진 회색 영역을 클릭하면 이 문제가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업이 일시 중지에서 SaveInstanceState에서 다시 Resume으로 어떻게 진행되는지 확인했습니다. CreateView에서는 방문하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이력서에서 거래를 하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 제가 하게 된 것은 일시 중지에서는 무효화되지만 CreateView에서는 진실이라는 플래그를 설정하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;플래그가 Resume에 참이면 on Commit을 수행하고, 그렇지 않으면 commit을 수행합니다.&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;저는 sdk version 23이라는 장치를 가지고 있고, 이 문제는 없지만, 21이라는 다른 장치를 가지고 있고, 거기에 그것이 보입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;148&quot; papago-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/7469082/getting-exception-illegalstateexception-can-not-perform-this-action-after-onsa&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Android</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1197</guid>
      <comments>https://sourcejob.tistory.com/1197#entry1197comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:59:40 +0900</pubDate>
    </item>
    <item>
      <title>게시 시 Wordpress 게시 상태 수정</title>
      <link>https://sourcejob.tistory.com/1196</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;게시 시 Wordpress 게시 상태 수정&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;관리자 패널 게시물 편집 페이지에서 사용자 지정 게시물 유형의 필드를 확인하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 &quot;Publish&quot;를 클릭하면 POST 데이터에서 필드의 유효성을 검사하고, 데이터가 테스트를 통과하지 못하면 post_status를 &quot;pending&quot;으로 변경합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 경우 관리자 공지사항 영역의 페이지에 오류도 추가하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 wp_insert_post 동작에 후크를 추가하여 사용해 왔습니다. 이는 또한 우리 자신의 데이터를 저장합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;연산 순서는 잘 모르겠지만 wp_insert_post 이벤트가 먼저 발생한 다음 후크를 통해 함수가 호출된다고 가정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 포스트 퍼블리싱 작업을 하는 것이 워드프레스 기능이기 때문에 데이터 검증을 할 때쯤 워드프레스는 이미 '퍼블리싱' 상태로 게시물을 저장해 놓았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 해야 할 일은 해당 업데이트를 방지하거나 상태를 다시 &quot;보류 중&quot;으로 변경하는 것이지만 API 내에서 이를 수행할 방법을 찾는 데는 거의 성공하지 못하고 있습니다.&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;1. admin user edits post data and clicks &quot;Publish&quot;
2. via wp_insert_post, my data validation and post meta save routine is called
3. If data passes validation, post status is &quot;published&quot;
4. Otherwise, post status set to &quot;pending&quot; &amp;amp; message shown in admin notice area
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가가 이런 짓을 한 것은 확실하지만, 광범위한 구글 검색은 저를 겉보기에는 전혀 무관해 보이는 똑같은 페이지로 이끌 뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 여기서 올바른 방향을 가르쳐 줄 수 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;미리 감사드립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 Richard ML이 옳았습니다. wp_insert_post_data filter에 연결하면 admin post 편집 페이지 필드의 유효성을 검사할 수 있는 적절한 위치가 제공되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 나머지 해결책이 무엇인지, 구체적으로 관리자 알림 영역에 이유를 보고하기 위해 이 내용을 업데이트합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우선 admin 페이지는 리디렉션의 결과이므로 데이터를 출력하거나 필드를 설정할 수 없으며 admin_notice 작업을 다시 렌더링할 때는 이미 사라집니다.&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;오류를 표시해야 한다고 판단되면 set_option()을 사용하여 고유한 이름을 가진 블로그 옵션을 추가하는 것이 유효성 검사 필터 기능입니다('publish_errors'를 사용했습니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드는 &quot;error&quot; 클래스가 있는 div의 HTML 코드여야 합니다.&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;또한 'admin_notice'에 대한 액션 훅을 추가해야 하는데, 이는 'errors_publish' 옵션이 있는지 확인하는 기능을 가리키며, 이를 찾으면 페이지에 출력한 후 delete_option으로 삭제합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포스트 데이터를 데이터베이스에 삽입하기 전에 필터를 사용하여 검사하고 수정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&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;Wordpress 리디렉션에 쿼리 문자열 변수를 간단히 추가할 수 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_filter('wp_insert_post_data', 'my_post_data_validator', '99');
function my_post_data_validator($data) {
  if ($data['post_type'] == 'post') {
    // If post data is invalid then
    $data['post_status'] = 'pending';
    add_filter('redirect_post_location', 'my_post_redirect_filter', '99');
  }
  return $data;
}

function my_post_redirect_filter($location) {
  remove_filter('redirect_post_location', __FILTER__, '99');
  return add_query_arg('my_message', 1, $location);
}

add_action('admin_notices', 'my_post_admin_notices');
function my_post_admin_notices() {
  if (!isset($_GET['my_message'])) return;
  switch (absint($_GET['my_message'])) {
    case 1:
      $message = 'Invalid post data';
      break;
    default:
      $message = 'Unexpected error';
  }
  echo '&amp;lt;div id=&quot;notice&quot; class=&quot;error&quot;&amp;gt;&amp;lt;p&amp;gt;' . $message . '&amp;lt;/p&amp;gt;&amp;lt;/div&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/5007748/modifying-wordpress-post-status-on-publish&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1196</guid>
      <comments>https://sourcejob.tistory.com/1196#entry1196comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:59:26 +0900</pubDate>
    </item>
    <item>
      <title>inside spring-boot--application.yml-특수문자 사용법 #</title>
      <link>https://sourcejob.tistory.com/1195</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;inside spring-boot--application.yml-특수문자 사용법 #&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;# sign as comment 를 사용한 yaml 파일&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;YAML의 댓글은 이런 식입니다.&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;################
# SCALAR TYPES #
###############
&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;blockquote&gt; 
 &lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;root#&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;비밀번호로 하지만 댓글로 사용하는 yaml 파일, 어떻게 건너뛸 수 있나요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;spring:
   #data source connection
  datasource:
    url: jdbc:mysql://localhost:3306/vaquarkhan
    username: rootadmin
    password: root#
&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;YAML의 특수 문자 목록을 탈출해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;:, {, }, [, ], ,, &amp;amp;, *, #, ?, |, -, &amp;lt;, &amp;gt;, =, !, %, @, `
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열을 인용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;root#&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;백슬래시(back slash)를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;root\#
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따옴표를 사용할 수 있을 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;spring:
   #data source connection
  datasource:
    url: jdbc:mysql://localhost:3306/vaquarkhan
    username: rootadmin
    password: 'root#'
&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;  spring:
      #data source connection
        datasource:
          url: jdbc:mysql://localhost:3306/vaquarkhan
          username: rootadmin
          password: 'root#'
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/50672043/inside-spring-boot-application-yml-how-to-use-special-character&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Spring-boot</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1195</guid>
      <comments>https://sourcejob.tistory.com/1195#entry1195comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:59:19 +0900</pubDate>
    </item>
    <item>
      <title>텍스트 상자에 레이블이 아닌 값을 자동으로 적용</title>
      <link>https://sourcejob.tistory.com/1194</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 상자에 레이블이 아닌 값을 자동으로 적용&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자동 완성을 제대로 작동시키는 데 문제가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 보기엔 다 괜찮아 보이지만..&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
$(function () {
    $(&quot;#customer-search&quot;).autocomplete({
        source: 'Customer/GetCustomerByName',
        minLength: 3,
        select: function (event, ui) {
            $(&quot;#customer-search&quot;).val(ui.item.label);
            $(&quot;#selected-customer&quot;).val(ui.item.label);
        }
    });
});
&amp;lt;/script&amp;gt;
&amp;lt;div&amp;gt;
&amp;lt;input id=&quot;customer-search&quot; /&amp;gt;
 &amp;lt;/div&amp;gt;
@Html.Hidden(&quot;selected-customer&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 드롭다운에서 항목을 선택하면 값이 레이블 대신 텍스트 상자에 적용됩니다.&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;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;select&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;input&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;ui.item.value&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;em papago-id=&quot;3-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;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단순반품&lt;/font&gt;&lt;/font&gt;&lt;code&gt;false&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 콜&lt;/font&gt;&lt;/font&gt;&lt;code&gt;event.preventDefault()&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;focus&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예방하기 위한 행사&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ui.item.value&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;input&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#customer-search&quot;).autocomplete({
    /* snip */
    select: function(event, ui) {
        event.preventDefault();
        $(&quot;#customer-search&quot;).val(ui.item.label);
        $(&quot;#selected-customer&quot;).val(ui.item.label);
    },
    focus: function(event, ui) {
        event.preventDefault();
        $(&quot;#customer-search&quot;).val(ui.item.label);
    }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/strong&gt; &lt;a href=&quot;http://jsfiddle.net/andrewwhitaker/LCv8L/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://jsfiddle.net/andrewwhitaker/LCv8L/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;18-1&quot;&gt;&lt;i papago-id=&quot;18-1-0&quot;&gt;선택&lt;/i&gt;&lt;/b&gt; 및 &lt;b papago-id=&quot;18-3&quot;&gt;&lt;i papago-id=&quot;18-3-0&quot;&gt;포커스&lt;/i&gt;&lt;/b&gt; 콜백 함수 안에서 입력 요소를 &quot;id&quot;로 참조하는 대신 &lt;b papago-id=&quot;18-5&quot;&gt;&lt;i papago-id=&quot;18-5-0&quot;&gt;다음&lt;/i&gt;&lt;/b&gt;과 같은 선택기를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(this).val(ui.item.label);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 요소에 대해 자동 완성을 할당할 때, 즉 클래스별로 유용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.className&quot;).autocomplete({
...
    focus: function(event, ui) {
        event.preventDefault();
        $(this).val(ui.item.label);
    }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저 같은 경우에는 숨겨진 입력에 다른 필드 'id'를 기록해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 ajax call에서 반환된 데이터에 다른 필드를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{label:&quot;Name&quot;, value:&quot;Value&quot;, id:&quot;1&quot;}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 목록 하단에 '새로 만들기' 링크를 추가했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;create new(새로 만들기)'를 클릭하면 modal(모달)이 팝업되고 거기서 새 항목을 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#vendorName').autocomplete
    (
        {
            source: &quot;/Vendors/Search&quot;,
            minLength: 2,
            response: function (event, ui)
            {
                ui.content.push
                ({
                    label: 'Add a new Name',
                    value: 'Add a new Name'
                });
            },
            select: function (event, ui)
            {
                $('#vendorId').val(ui.item.id);
            },
            open: function (event, ui)
            {
                var createNewVendor = function () {
                    alert(&quot;Create new&quot;);
                }
                $(&quot;.ui-autocomplete&quot;).find(&quot;a&quot;).last().attr('data-toggle', 'modal').addClass('highLight');
                $(&quot;.ui-autocomplete&quot;).find(&quot;a&quot;).last().attr('href', '#modal-form').addClass('highLight');
            }
        }
    );
&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;요점은 'label'과 'value' 이외에 추가 데이터 필드를 추가할 수 있다는 것입니다.&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;&amp;lt;div id=&quot;modal-form&quot; class=&quot;modal fade&quot; aria-hidden=&quot;true&quot;&amp;gt;
&amp;lt;div class=&quot;modal-dialog&quot;&amp;gt;
    &amp;lt;div class=&quot;modal-content&quot;&amp;gt;
        &amp;lt;div class=&quot;modal-body&quot;&amp;gt;
            &amp;lt;div class=&quot;row&quot;&amp;gt;

            &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/7642855/autocomplete-applying-value-not-label-to-textbox&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1194</guid>
      <comments>https://sourcejob.tistory.com/1194#entry1194comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:59:13 +0900</pubDate>
    </item>
    <item>
      <title>Visual Studio 2010으로 C를 개발하는 방법은?</title>
      <link>https://sourcejob.tistory.com/1193</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Visual Studio 2010으로 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;Visual Studio 2010으로 순수 ANSIC을 개발할 수 있는 방법이 있습니까?&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;MSDN에서는 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/45aft37a.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-1&quot;&gt;ANSIC Compliance&lt;/a&gt;라는 몇 가지 정보를 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1단계는 컴파일러가 C++ 코드가 아닌 C 코드를 생성하도록 설정하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트의 속성에서 이 작업을 수행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C/C++ 헤더를 펼친 후 &quot;Advanced&quot;를 클릭합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Compile As 속성을 &quot;C Code로 Compile&quot;(명령줄에 스위치를 지정하는 것과 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/032xwy55.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;0-1&quot;&gt;동일&lt;/a&gt;)로 설정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 이름을 지정하는 것이 훨씬 더 쉽습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;*.c&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내선&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째 단계는 마이크로소프트의 ANSI 표준 확장 기능을 비활성화하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이들은 및 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/0k0w269d.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-1&quot;&gt;컴파일러 스위치&lt;/a&gt;에 의해 제어됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트의 Properties(속성)에서도 찾을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/Za&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러가 ANSI 표준을 준수하지 않는 언어 구문에 대한 오류를 내보내게 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/Ze&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;switch는 Microsoft 관련 확장 기능을 활성화합니다. 이 확장 기능이 &lt;em papago-id=&quot;4-1&quot;&gt;꺼져&lt;/em&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;비록 마이크로소프트가 C99 표준을 &lt;em papago-id=&quot;8-1&quot;&gt;완전히&lt;/em&gt; 지원하지는 않는다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://connect.microsoft.com/VisualStudio/feedback/details/485416/support-c99&quot; papago-id=&quot;8-3&quot; rel=&quot;noreferrer&quot;&gt;MS Connect에 대한&lt;/a&gt; 이 &lt;a href=&quot;http://connect.microsoft.com/VisualStudio/feedback/details/485416/support-c99&quot; papago-id=&quot;8-3&quot; rel=&quot;noreferrer&quot;&gt;버그 보고서&lt;/a&gt;, VC++ &lt;a href=&quot;http://blogs.msdn.com/b/vcblog/archive/2007/11/05/iso-c-standard-update.aspx&quot; papago-id=&quot;8-5&quot; rel=&quot;noreferrer&quot;&gt;팀의 &lt;/a&gt;이&lt;a href=&quot;http://blogs.msdn.com/b/vcblog/archive/2007/11/05/iso-c-standard-update.aspx&quot; papago-id=&quot;8-5&quot; rel=&quot;noreferrer&quot;&gt; 블로그&lt;/a&gt; 항목, 그리고 지원 부족이 명백해진 구체적인 예를 보려면 이 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/zb1574zs.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-7&quot;&gt;페이지&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 C90 표준을 전적으로 지원합니다.&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;파일 확장자를 .c로 변경하면 시작할 수 있지만 프로젝트 파일에 대한 변경 사항도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 여기를 참조하십시오. http://support.microsoft.com/kb/829488/en-us&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것에 대한 좋은 팟캐스트도 있습니다: http://channel9.msdn.com/Blogs/Sam/C-Language-Programming-with-Visual-Studio-2010-Ultimate-Pro-or-VC-Express&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;URL : https://stackoverflow.com/questions/5770858/how-to-develop-c-with-visual-studio-2010&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1193</guid>
      <comments>https://sourcejob.tistory.com/1193#entry1193comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:59:06 +0900</pubDate>
    </item>
    <item>
      <title>환경 변수를 설정하지 않고 Mac OS/X에 Oracle Instant 클라이언트를 설치할 수 있습니까?</title>
      <link>https://sourcejob.tistory.com/1192</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;환경 변수를 설정하지 않고 Mac OS/X에 Oracle Instant 클라이언트를 설치할 수 있습니까?&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 class=&quot;papago-parent&quot;&gt;동일한 종속성을 공유하는 컨트롤러가 두 개 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyService&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;myVariable&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;ControllerOne&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;ControllerTwo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 원하는 것은 각 컨트롤러가 자체적인 인스턴스를 갖도록 하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyService&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;myVariable&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 컨트롤러가 다른 컨트롤러에 영향을 주지 않고 변경할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 /usr에 복사합니다. 이 파일은 동적 로더가 검색하는 기본 위치 중 하나입니다.&lt;/font&gt;&lt;/p&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;tnsnames.ora를 사용하는 경우 오라클 런타임 검색의 기본 전역 위치인 /etc에 복사합니다.&lt;/font&gt;&lt;/p&gt;&lt;code&gt;provider&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;function: 공급자 인스턴스를 providerCache 개체에 넣습니다.&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;단순히 MacBook에서 sqlplus를 실행하는 것이 목표라면 이 방법이 효과적일 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;~/.bashrc에서 DYLD_LIBRARY_PATH 환경 변수를 제거하고 별칭으로 대체합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.factory('myService', [function() {
     var i = 1;

     function Foo() {
        this.bar = &quot;I'm Foo &quot; + i++;
     };

     return {
          Foo: Foo
     };
}]);

app.controller('Ctrl1', function($scope, myService) {
  $scope.foo = new myService.Foo();
  console.log($scope.foo.bar) //I'm Foo 1
});

app.controller('Ctrl2', function($scope, myService) {
  $scope.foo = new myService.Foo();
  console.log($scope.foo.bar) //I'm Foo 2
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;a href=&quot;https://blogs.oracle.com/taylor22/entry/sqlplus_and_dyld_library_path&quot; rel=&quot;nofollow&quot; papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;블로그 항목: Mac OS/X에서 sqlplus 및 DYLD_LIBRARY_PATH&lt;/font&gt;&lt;/a&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 연구 끝에 저는 이 오류에 대한 지속 가능한 해결책을 찾았습니다. 여기에는 Apache의 오류를 편집하는 작업이 포함됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function MyClass() {
  // ...
}

MyClass.prototype.memberMethod = function() {
  // ...
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요한 파일을 지정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;angular.module('myModule').constant('MyClass', MyClass);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;angular.module('myOtherModule', ['myModule']).factory('instanceOfMyClass', [
   'MyClass', 
   function(MyClass) { return new MyClass(); }
]);
&lt;/code&gt;&lt;/pre&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;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1192</guid>
      <comments>https://sourcejob.tistory.com/1192#entry1192comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:59:00 +0900</pubDate>
    </item>
    <item>
      <title>installing Oracle Instantclient on Mac OS/X without setting environment variables?</title>
      <link>https://sourcejob.tistory.com/1191</link>
      <description>&lt;h2 papago-id=&quot;0&quot;&gt;installing Oracle Instantclient on Mac OS/X without setting environment variables?&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot;&gt;Oracle's instructions specify setting DYLD_LIBRARY_PATH. This makes my application dependent on random users' configuration and is very troublesome to set up.&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot;&gt;How can I avoid having to set any environment variables?&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/intel_macsoft.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;3&quot;&gt;http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/intel_macsoft.html&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot;&gt;related note for linux: &lt;a href=&quot;https://stackoverflow.com/questions/764871&quot; papago-id=&quot;4-1&quot;&gt;installing Oracle Instantclient on Linux without setting environment variables?&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot;&gt;Oracle's instantclient installation instructions specify that the user set DYLD_LIBRARY_PATH. This is very troublesome to manage for multiple users.&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot;&gt;To use the instantclient without setting any environment variables:&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot;&gt;Download the instantclient distribution from oracle.com. For doing non-java software development, you will need (assuming Oracle 10.2):&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;instantclient-basic-macosx-10.2.0.4.0.zip
instantclient-sdk-macosx-10.2.0.4.0.zip
instantclient-sqlplus-macosx-10.2.0.4.0.zip
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot;&gt;Unzip the three files. This will give you a directory&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;instantclient_10_2/
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot;&gt;Copy the files to /usr, which is one of the default places the dynamic loader searches.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo cp instantclient_10_2/sdk/include/*.h /usr/include
sudo cp instantclient_10_2/sqlplus         /usr/bin
sudo cp instantclient_10_2/*.dylib         /usr/lib
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot;&gt;If you use tnsnames.ora, copy it to /etc, which is the default global place the oracle runtime searches.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo cp tnsnames.ora /etc
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot;&gt;Test with&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/usr/bin/sqlplus scott/tiger@myoracle
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot;&gt;If your goal is simply to run sqlplus on your MacBook, this might work for you. Remove the DYLD_LIBRARY_PATH environment variable from ~/.bashrc and replace it with an alias:&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;alias sqlplus=&quot;DYLD_LIBRARY_PATH=/Applications/instantclient_11_2 sqlplus&quot;&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://blogs.oracle.com/taylor22/entry/sqlplus_and_dyld_library_path&quot; rel=&quot;nofollow&quot; papago-id=&quot;13&quot;&gt;Blog entry: sqlplus and DYLD_LIBRARY_PATH on Mac OS/X&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 연구 끝에 저는 이 오류에 대한 지속 가능한 해결책을 찾았습니다. 여기에는 Apache의 오류를 편집하는 작업이 포함됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;launchd&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;.plist&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;DYLD_LIBRARY_PATH&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;ORACLE_HOME&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;LD_LIBRARY_PATH&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;환경 변수.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot;&gt;You can view the full answer here: &lt;a href=&quot;https://stackoverflow.com/a/20670810/1914455&quot; papago-id=&quot;20-1&quot;&gt;https://stackoverflow.com/a/20670810/1914455&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot;&gt;ReferenceURL : &lt;a href=&quot;https://stackoverflow.com/questions/684352/installing-oracle-instantclient-on-mac-os-x-without-setting-environment-variable&quot; target=&quot;_blank&quot; papago-id=&quot;21-1&quot;&gt;https://stackoverflow.com/questions/684352/installing-oracle-instantclient-on-mac-os-x-without-setting-environment-variable&lt;/a&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1191</guid>
      <comments>https://sourcejob.tistory.com/1191#entry1191comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:58:53 +0900</pubDate>
    </item>
    <item>
      <title>When to use const void*?</title>
      <link>https://sourcejob.tistory.com/1190</link>
      <description>&lt;h2 papago-id=&quot;0&quot;&gt;When to use const void*?&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;const&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한정자&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int test(const int* dummy)
{
   *dummy = 1;
   return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot;&gt;This one throws me an error with GCC 4.8.3. Yet this one compiles:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int test(const int* dummy)
{
   *(char*)dummy = 1;
   return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 뭔가.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한정자는 다른 유형에 캐스팅하지 않고 인수를 사용하는 경우에만 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot;&gt;Recently I've seen codes that used&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;test(const void* vpointer, ...)
&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;void *&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;char&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스택에서 포인터 산술을 사용하거나 추적할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 할수있을까요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const void&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;vpointer&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포인팅인가요?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;const int *var;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;const&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;strong papago-id=&quot;9-1&quot;&gt;계약&lt;/strong&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;A를 받음으로써&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const int *&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개변수는 호출자에게 자신(호출 함수)이 포인터가 가리키는 개체를 수정하지 않을 것이라고 &quot;말&quot;합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot;&gt;Your second example explicitly &lt;strong papago-id=&quot;14-1&quot;&gt;breaks that contract&lt;/strong&gt; by casting away the const qualifier and then modifying the object pointed by the received pointer. Never ever do this.&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;이 &quot;계약&quot;은 컴파일러에 의해 실행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;*dummy = 1&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 class=&quot;papago-parent&quot;&gt;불행하게도 &quot;내가 무엇을 하고 있는지 정말로 알고 있습니다&quot;라는 말은 보통 그렇지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;const&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;hr&gt; 
&lt;p papago-id=&quot;18&quot;&gt;Undefined Behavior note:&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;const&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Undefined Behavior.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 기술적으로는 포인터가 변이 가능하다고 선언된 데이터를 가리키기만 하면 원래 기능은 괜찮습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 정의되지 않은 동작입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;sub papago-id=&quot;21&quot;&gt;more about this at the end of the post&lt;/sub&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동기부여와 사용에 관해서는 다음의 주장을 들어보겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strcpy&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;memcpy&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char* strcpy( char* dest, const char* src );
void* memcpy( void* dest, const void* src, std::size_t count );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;strcpy&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;차끈으로 작동하고,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;memcpy&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 class=&quot;papago-parent&quot;&gt;strcpy를 예로 들지만, 다음의 논의는 둘 다 정확히 동일하지만,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *&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;const char *&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위해서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strcpy&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;void *&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;const void *&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;memcpy&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;dest&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜냐하면 버퍼안에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dest&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 함수는 복사본을 넣을 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수는 이 버퍼의 내용을 수정하므로 일정하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;src&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const char *&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜냐하면 기능은 버퍼의 내용만 읽기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;src&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 수정되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수의 선언을 보아야만 발신자는 위의 모든 것을 주장할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;계약으로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strcpy&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;hr&gt; 
&lt;p&gt;&lt;code&gt;const&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;void&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;직교합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 위의 논의의 전부입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&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;void&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, ...)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;void *&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;는 &quot;일반적인&quot; 데이터를 위해 C에서 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정의되지 않은 동작에 대한 추가 정보:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사례 1:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int a = 24;
const int *cp_a = &amp;amp;a; // mutabale to const is perfectly legal. This is in effect
                      // a constant view (reference) into a mutable object

*(int *)cp_a = 10;    // Legal, because the object referenced (a)
                      // is declared as mutable
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사례 2:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const int cb = 42;
const int *cp_cb = &amp;amp;cb;
*(int *)cp_cb = 10;    // Undefined Behavior.
                       // the write into a const object (cb here) is illegal.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 예시들이 이해하기 쉽기 때문에 이 예시들로 시작했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서부터는 인수 기능을 수행하는 단계가 하나뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void foo(const int *cp) {
    *(int *)cp = 10;      // Legal in case 1. Undefined Behavior in case 2
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사례 1:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int a = 0;
foo(&amp;amp;a);     // the write inside foo is legal
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사례 2:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int const b = 0;
foo(&amp;amp;b);     // the write inside foo causes Undefined Behavior
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 한 번 강조하겠습니다: 여러분이 정말로 무엇을 하고 있는지를 알지 못하고, 현재와 미래에 법전에 관련된 일을 하는 모든 사람들이 전문가이고 이것을 이해하지 못한다면, 여러분은 좋은 동기를 가지고 있고, 위의 모든 것이 충족되지 않는 한, &lt;strong papago-id=&quot;54-1&quot;&gt;절대로 일관성&lt;/strong&gt;을 버리지 마세요&lt;strong papago-id=&quot;54-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;pre&gt;&lt;code&gt;int test(const int* dummy)
{
   *(char*)dummy = 1;
   return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/blockquote&gt; 
&lt;p&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(진정으로) 꾸준함을 버립니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;data)는 &lt;em papago-id=&quot;43-1&quot;&gt;정의&lt;/em&gt;되지 않은 &lt;em papago-id=&quot;43-1&quot;&gt;동작&lt;/em&gt;이며, 예를 들어 구현이 완료되면 프로그램이 충돌할 가능성이 높습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const&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;ROM의 데이터.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;blockquote&gt; 
 &lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;적어도 저는 void*를 사용할 때 스택에서 포인터 산술을 하거나 추적을 위해 char*에 캐스팅하는 편입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;vpointer가 가리키는 데이터를 서브루틴 함수가 수정하지 못하도록 하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splited&quot;&gt;A &lt;/font&gt;&lt;code&gt;const void*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경할 수 없는 일부 데이터에 대한 포인터를 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;읽어보려면 네, 다음과 같은 구체적인 유형으로 던져야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&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;em papago-id=&quot;46-3&quot;&gt;글&lt;/em&gt;이 아니라 &lt;em papago-id=&quot;46-1&quot;&gt;읽기&lt;/em&gt;라고 말했는데, 그것은 역시 UB입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 부분은 &lt;a href=&quot;https://www.securecoding.cert.org/confluence/display/c/EXP05-C.+Do+not+cast+away+a+const+qualification&quot; papago-id=&quot;61-1&quot;&gt;여기&lt;/a&gt;서 좀 더 깊이 다루게 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C를 사용하면 유형 안전을 완전히 무시할 수 있습니다. 이를 방지하는 것이 여러분의 일입니다.&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;주어진 OS에 주어진 컴파일러가 자신의 일부를 넣을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;읽기 전용 메모리 페이지의 데이터.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 해당 위치에 기록을 시도하면 일반적인 보호 오류가 발생하는 등 하드웨어에서 실패합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const&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;strong papago-id=&quot;50-1&quot;&gt;정의&lt;/strong&gt;되지 않은 &lt;strong papago-id=&quot;50-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;그럼에도 불구하고, C는 당신이 무엇을 하고 있는지 알고 있다고 생각되면 당신의 발에 총을 쏘게 해줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서브루틴이 원하는 비트를 원하는 대로 재해석하고 원하는 기계 명령을 실행하는 것을 막을 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전화하시는 라이브러리 함수는 어셈블러로 작성되어 있을 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 그렇게 하는 것은.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;const&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포인터는 &lt;strong papago-id=&quot;52-1&quot;&gt;정의&lt;/strong&gt;되지 않은 &lt;strong papago-id=&quot;52-1&quot;&gt;동작&lt;/strong&gt;이며, &lt;strong papago-id=&quot;52-3&quot;&gt;정의&lt;/strong&gt;되지 않은 &lt;strong papago-id=&quot;52-3&quot;&gt;동작&lt;/strong&gt;을 호출하고 싶지 않을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이해가 되는 드문 예가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 핸들 파라미터를 중심으로 전달되는 라이브러리가 있다고 가정해 보겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 어떻게 그것들을 생성하고 사용합니까?&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내부적으로는 데이터 구조에 대한 지침일 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 그것은 당신이 할 수 있는 애플리케이션입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;typedef const void* my_handle;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 컴파일러는 만약 당신의 클라이언트들이 실수로 오류를 제거하거나 산술을 하려고 한다면 오류를 던지고, 당신의 라이브러리 함수 안에 있는 당신의 데이터 구조에 대한 포인터로 그것을 다시 던집니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/34842224/when-to-use-const-void&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1190</guid>
      <comments>https://sourcejob.tistory.com/1190#entry1190comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:58:47 +0900</pubDate>
    </item>
    <item>
      <title>빈 패키지 정의(공용 구성원 없음)</title>
      <link>https://sourcejob.tistory.com/1189</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;빈 패키지 &lt;package name=&quot;&quot; papago-id=&quot;0-1&quot;&gt;정의(공용 구성원 없음)&lt;/package&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;Oracle SQL Developer가 입력 매개 변수가 없는 공용 구성원(프로시저)을 표시하지 않는 패키지를 실행하거나 디버그하려고 할 때 문제가 발생합니다.&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;몇 가지 프로시저가 있고 일부 오버로드가 있지만 Oracle SQL Developer에는 호출 가능한 멤버가 표시되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gej8y.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gej8y.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&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;다음 버전의 Oracle SQL Developer를 사용해 보았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.igorkromin.net/index.php/2015/03/19/sqldeveloper-bug-not-showing-plsql-procedures-that-have-no-input-parameters/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-0&quot;&gt;4.1.1.19&lt;/a&gt; 이 버전이 문제를 해결했다는 기사 링크 하지만 그렇지 않았습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;4.0.3.16 - 동일한 거동&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;4.0.0.13 - 동일한 동작&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3.2.20.09 - 이 버전은 실제로 호출할 수 없는 멤버를 표시했지만 디버거는 작동하지 않습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle 버전입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select * from v$version;

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
&quot;CORE   11.2.0.4.0  Production&quot;
TNS for IBM/AIX RISC System/6000: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
&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;비슷한 상황을 성공적으로 해결한 사람이 있습니까? (데이터베이스 업그레이드는 옵션 atm이 아닙니다.)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좀 늦었지만 도와줄 수는 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SqlDeveloper 버그가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 해야 할 일은 컴파일하기 전에 저장하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공공 구성원이 아닌 문제를 일으킬 수 있는 2가지 가능한 원인을 찾았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1) SQL 개발자는 일종의 버그 자체를 쳤습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 개발자를 완전히 닫고 다시 시작하면 이 문제를 해결할 수 있습니다.&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;2) 코드에 사용된 일부 키워드(예: SQL 문의 필드 이름)는 컴파일된 실행에서는 잘 작동하지만 함수 목록의 표시를 망칠 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 &quot;CASE&quot;라는 필드가 사용되는 패키지 전체에 더블 견적을 적용하여 문제를 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 표 1에서 선택.case From Table 1&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로 바꾸다&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표 1을 선택합니다.&quot;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;표 1의 경우&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;알렉스야.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확실히 늦었지만, 같은 문제를 발견하고 저에게 도움이 된 것을 게시하려고 생각했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로시저가 다른 사용자에게 속한 패키지에 포함되어 있었고 프로시저를 호출하던 사용자에게 부여가 제공되지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보조금 지급이 완료되면 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저장된 프로시저를 저장한 후 컴파일하는 것을 추천합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;경우에 따라서는 절차를 저장한 후 테이블이 자동으로 컴파일됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 변화를 줄 때마다 저장해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 당신에게 도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/32580687/empty-package-package-name-definition-no-public-members&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1189</guid>
      <comments>https://sourcejob.tistory.com/1189#entry1189comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:58:39 +0900</pubDate>
    </item>
    <item>
      <title>실행 중인 도커 컨테이너의 IP 주소를 가져오는 방법</title>
      <link>https://sourcejob.tistory.com/1188</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 중인 도커 컨테이너의 IP 주소를 가져오는 방법&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;저는 도커 컨테이너에서 nodejs 기반 마이크로 서비스를 실행하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저를 통해 노드 마이크로 서비스를 테스트하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 중인 도커 컨테이너의 IP 주소를 가져오는 방법은?&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;호스트에서 컨테이너로 포트를 매핑하지 않으려면 컨테이너의 도커 범위 IP에 직접 액세스할 수 있습니다.&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;docker inspect &amp;lt;containerNameOrId&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필터링하는 것이 더 나을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker inspect &amp;lt;containerNameOrId&amp;gt; | grep '&quot;IPAddress&quot;' | head -n 1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 기본 도커 IP 범위는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;172.17.0.0/16&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 호스트는 다음과 같이 해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;172.17.0.1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 당신의 첫번째 컨테이너는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;172.17.0.2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 것이 정상이고 특별한 네트워크 옵션을 지정하지 않은 경우.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-0&quot;&gt;편집&lt;/strong&gt; &quot;부시 속이기&quot; 대신 도커 기능을 사용하는 또 다른 우아한 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker inspect -f &quot;{{ .NetworkSettings.IPAddress }}&quot; &amp;lt;containerNameOrId&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;strong papago-id=&quot;9-0&quot;&gt;EDIT2&lt;/strong&gt; 현대 도커 엔진의 경우, 이제는 이런 방식입니다(댓글 덕분에!).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' &amp;lt;containerNameOrId&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--format&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;전체 컨테이너 정보 대신 IP 주소만 가져오는 옵션:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' &amp;lt;CONTAINER ID&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최신 도커 엔진의 경우 다음 명령을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구형 엔진의 경우 다음을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
&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;pre&gt;&lt;code&gt;ip a | grep -oE &quot;\b([0-9]{1,3}\.){3}[0-9]{1,3}\b&quot; | grep 172.17
&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;-P&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;&quot;합니다&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&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;docker port &amp;lt;container id&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;랜덤으로 선택된 포트를 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 다음을 통해 액세스할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;localhost:port&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;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 경우, &lt;strong papago-id=&quot;20-1&quot;&gt;아래는 Mac&lt;/strong&gt;에서 작업했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;맥에서 컨테이너 IP에 직접 접속할 수 없었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 필요가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;localhost&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;포트 포워딩과 함께(예: 포트가 8000인 경우),&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;http://localhost:8000&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://docs.docker.com/docker-for-mac/networking/ #&lt;a href=&quot;https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;23-1&quot;&gt;알려진&lt;/a&gt; limit-사용 사례-및 해결 방법 참조&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;원래 답변은 다음과 같습니다: https://github.com/docker/for-mac/issues/2670#issuecomment-371249949&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;실행 중인 컨테이너 내에서 IP 주소를 보려면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/etc/hosts&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일은 보기에 아주 좋은 장소입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제, 고유하게 정보를 식별합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;hosts&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;-h&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택.&lt;/font&gt; &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;과 같습니다&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;샘플 명령은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용하여 컨테이너 실행&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-h&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;트:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;code&gt;docker run -td -h guju &amp;lt;image name&amp;gt;&lt;/code&gt;&lt;/p&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 중인 컨테이너에 로그인하여&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/etc/hosts&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일. 다음과 같은 항목이 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;code&gt;172.17.0.5 guju&lt;/code&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;모든 컨테이너의 IP 주소가 나열됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;while read ctr;do
    sudo docker inspect --format &quot;$ctr &quot;'{{.Name}}{{ .NetworkSettings.IPAddress }}' $ctr
done &amp;lt; &amp;lt;(docker ps -a --filter status=running --format '{{.ID}}')
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;호스트 시스템 외부에서 도커의 IP에 액세스할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;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 8080:8080&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&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;-p&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;호스트 포트를 컨테이너 포트에 매핑할 수 있으며 프록시는 해당 호스트 포트에 대한 모든 트래픽을 지정된 컨테이너 포트로 전달하도록 설정됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/43692961/how-to-get-ip-address-of-running-docker-container&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Docker</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1188</guid>
      <comments>https://sourcejob.tistory.com/1188#entry1188comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:58:32 +0900</pubDate>
    </item>
    <item>
      <title>mysql의 기본 'mysql' 데이터베이스를 복구/재생성하는 방법</title>
      <link>https://sourcejob.tistory.com/1187</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql의 기본 'mysql' 데이터베이스를 복구/재생성하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 mysql을 설치했을 때, 그것은 mysql과 information schema라는 두 개의 데이터베이스와 함께 왔습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 실수로 mysql 데이터베이스를 삭제했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 그것을 재현할 수 있는 방법이 있을까요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 사용자 정보가 포함된 표가 포함되어 있기 때문에 사용자 정보를 보지 않고 볼 수 있는 방법은 없을까요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아직 로그인이 가능하고(사용자 테이블이 없기 때문에 그렇지 않다고 가정합니다) 저장할 데이터베이스가 있는 경우 다음과 같이 덤프합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysqldump --routines databasename &amp;gt; outfile.sql
&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;명령을 사용하여 MySQL 데이터베이스를 다시 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# Most MySQL versions
mysql_install_db

# MySQL 5.7 and later
mysqld --initialize
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/mysql-install-db.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 MySQL 설명서&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 다음 사이트에서 확인할 수 있습니다.&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;Windows에서는 다음 명령 중 하나를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;C:\&amp;gt; bin\mysqld --initialize
C:\&amp;gt; bin\mysqld --initialize-insecure
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최근에 mysql 8을 설치했는데 mysql 기본 데이터베이스에 문제가 있는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든, 이것은 저에게 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql_upgrade -u root -p
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 오류가 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;root@ubuntu-2gb-nbg1-1 ~ # mysqld --initialize
2019-01-23T15:11:22.428139Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-01-23T15:11:22.435428Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2019-01-23T15:11:22.435653Z 0 [ERROR] Aborting

&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;/etc/init.d/mysql stop
rm /var/lib/mysql -rf
mkdir /var/lib/mysql
chown mysql:mysql /var/lib/mysql
mysqld --initialize
&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;skip-grant-tables&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;/etc/mysql/mysql.conf.d/mysqld.cnf&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 루트 비밀번호가 유효하지 않기 때문에 어떻게든 로그인하여 새 비밀번호를 설정해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/etc/init.d/mysql start
mysql
mysql&amp;gt; show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql&amp;gt; use mysql;

Database changed
mysql&amp;gt; show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| server_cost               |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
31 rows in set (0.00 sec)

&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;이제 사용자 테이블이 있는 새 mysql 데이터베이스가 있지만 암호는 &quot;messed up&quot;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 유효한 암호를 설정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somepass');
FLUSH PRIVILEGES;
ctrl+d
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 제거합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;skip-grant-tables&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자의 설정에서, 그렇지 않으면 설정이 경우 안전하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 &quot;정상적으로&quot; 로그인할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql -u root -p&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;somepass&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 실수로 데이터베이스 mysql을 제거했는데 &lt;strong papago-id=&quot;20-1&quot;&gt;mysql --initialize&lt;/strong&gt;가 도움이 되지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 나타나지 않았고, mysql 서비스도 정상적으로 시작했지만, 폴더 mysql이 생성되지 않았고, mysql을 사용할 수 없었습니다 - 새로운 데이터베이스를 생성할 수도 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 가지 옵션을 시도하는 데 많은 시간을 들인 결과, 제 sqld를 충돌시킨 nodb_additional_mem_pool_size=20M의 옵션이 더 이상 사용되지 않음을 알게 되었습니다. --initialize&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql config를 수정한 후 잘 작동했습니다.&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;비슷한 문제가 있었습니다. 백업 및 복원 작업 중에 mysql 및 information_schema 데이터베이스를 삭제했습니다.&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;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(우리가 했던 것처럼) 이전 mysql_install_db의 복사본이 여전히 있는 경우 사용하지 마십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.6/en/mysql-install-db.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;24-1&quot;&gt;MySQL 5.6.8&lt;/a&gt;부터 펄 스크립트입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysqld_safe와 유사한 옵션을 사용합니다. 우리에게 잘 작동했습니다. 복원된 DB에서 InnoDB 복구를 실행하고, 시스템 데이터베이스를 설치하고, 슬레이브 서버를 다시 실행했습니다.&lt;/font&gt;&lt;/p&gt;&lt;h1 papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;macOS에서&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;26-0&quot;&gt;OS:&lt;/strong&gt; macOS 몬테레이&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;27-0&quot;&gt;칩 :&lt;/strong&gt; 애플 M1&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책&lt;/font&gt;&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 경로가 다를 수 있습니다. 검토 부탁드립니다!&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql 서비스를 중지합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;brew services stop mysql&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mysql 데이터 디렉토리 제거:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rm -r /opt/homebrew/var/mysql&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&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;새 Mysql 데이터 디렉토리 생성:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mkdir /opt/homebrew/var/mysql&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&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;Mysql 데이터 디렉토리 초기화:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysqld --initialize&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더하다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;skip-grant-tables&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;/opt/homebrew/etc/my.cnf&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호 없이 Mysql 서버에 연결할 수 있도록 허용합니다.&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;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;Mysql 서비스를 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;brew services start mysql&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mysql 클라이언트 실행:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mysql 클라이언트에서 다음 명령을 실행합니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;use mysql; # switch to mysql database&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;FLUSH PRIVILEGES;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;SET PASSWORD FOR 'root'@'localhost' = PASSWORD('&amp;lt;new-password&amp;gt;');&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;FLUSH PRIVILEGES;&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&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;skip-grant-tables&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일에서&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/opt/homebrew/etc/my.cnf&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&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;brew services restart mysql&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&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;새 암호로 Mysql 클라이언트에 로그인합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql -u root -p&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2 papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령 요약&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;brew services stop mysql
rm -r /opt/homebrew/var/mysql
mkdir /opt/homebrew/var/mysql
mysqld --initialize

# Add skip-grant-tables to /opt/homebrew/etc/my.cnf
brew services start mysql
mysql

# Run on mysql: use mysql; # switch to mysql database
# Run on mysql: FLUSH PRIVILEGES;
# Run on mysql: SET PASSWORD FOR 'root'@'localhost' = PASSWORD('&amp;lt;new-password&amp;gt;');
# Run on mysql: FLUSH PRIVILEGES;
# Run on mysql: exit;
# Remove `skip-grant-tables` from `/opt/homebrew/etc/my.cnf`

brew services restart mysql
mysql -u root -p
&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;Windows 10에서 MariaDB를 실행하는데 &quot;table mysql.column_stats의 잘못된 정의&quot;라는 오류가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 MariaDB 데이터베이스를 다시 만들어야 할 때라고 판단했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 백업/내보내기, 사용자 및 할당된 권한 기록&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;net stop mysql&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;cd c:\Program Files\MariaDB 10.8\bin&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;mariadb-install-db.exe --datadir=C:\some\dirs\data\ --password ...&lt;/code&gt;&lt;/li&gt; 
 &lt;li&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;net start mysql&lt;/code&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;49&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;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 다시 생성 및 assign 다시 생성 권한&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/8911115/how-to-recover-recreate-mysqls-default-mysql-database&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1187</guid>
      <comments>https://sourcejob.tistory.com/1187#entry1187comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:58:26 +0900</pubDate>
    </item>
    <item>
      <title>엑셀 라이브러리로 엑셀 파일의 셀 스타일을 변경하려면 어떻게 해야 합니까?</title>
      <link>https://sourcejob.tistory.com/1186</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;엑셀 라이브러리로 엑셀 파일의 셀 스타일을 변경하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;엑셀 &lt;a href=&quot;http://code.google.com/p/excellibrary/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;도서관&lt;/a&gt; 좀 도와줄 사람?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;셀 배경과 폰트 색상을 설정하고 싶은데 어떻게 해야 하는지 모르겠어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 셀 스타일에 접근하려고 노력하지만, 그것을 찾지 못했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;생각나는 사람?&lt;/font&gt;&lt;/p&gt;&lt;p 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;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;셀 색상에 접근할 수 있는 Excel &lt;a href=&quot;http://code.google.com/p/excellibrary/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;Library&lt;/a&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;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;미출시 소스코드에는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BackColor&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;CellStyle&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;/li&gt; 
 &lt;li&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;BackColor&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워크북이 저장될 때 속성이 유지되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;워크북을 로드할 때 셀의 배경색을 설정하는 데만 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/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;a href=&quot;http://npoi.codeplex.com&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-1&quot;&gt;NPOI&lt;/a&gt;(@jamietre의 권장 사항)를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 다음과 같이 전경색과 배경색을 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;HSSFCellStyle style1 = hssfworkbook.CreateCellStyle();

// cell background
style1.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.BLUE.index;
style1.FillPattern = HSSFCellStyle.SOLID_FOREGROUND;

// font color
HSSFFont font1 = hssfworkbook.CreateFont();
font1.Color = NPOI.HSSF.Util.HSSFColor.YELLOW.index;
style1.SetFont(font1);

cell.CellStyle = style1;
&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;엑셀 라이브러리에 묶여 있을 수도 있다는 것은 알지만, EP플러스에 대해 알아봤습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://epplus.codeplex.com/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-1&quot;&gt;http://epplus.codeplex.com/&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 대로 쉽게(그리고 더 많이) 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트를 해보지는 않았지만 셀이 셀 스타일을 정의하는 &quot;Style&quot;이라는 속성을 가지고 있는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 특정 셀의 배경색을 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;worksheet.Cells[0,0].Style.BackColor = Color.CornflowerBlue;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3117227/how-can-i-change-cell-style-in-an-excel-file-with-excellibrary&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Excel</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1186</guid>
      <comments>https://sourcejob.tistory.com/1186#entry1186comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:25:08 +0900</pubDate>
    </item>
    <item>
      <title>인수가 지원되는 사용자 지정 wp.media</title>
      <link>https://sourcejob.tistory.com/1185</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인수가 지원되는 사용자 지정 wp.media&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;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;적절한 워드프레스 [미디어] UI&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;팝업 오른쪽에 크기 및 정렬 UI가 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;can 사용자 지정 팝업 제목 및 단추&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;size and alignments 인수를 다시 보내 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 솔루션을 다루려고 노력해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&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;tb_show(&quot;&quot;, &quot;media-upload.php?type=image&amp;amp;amp;TB_iframe=true&quot;);&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;window.send_to_editor&lt;/code&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제: 표준 wp.media UI가 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;js 코드:&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;jQuery(&quot;#my_button&quot;).click(function() {
    tb_show(&quot;&quot;, &quot;media-upload.php?type=image&amp;amp;amp;TB_iframe=true&quot;);
    return false;
});
window.send_to_editor = function(html) {
    console.log(html);
    tb_remove();
}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wp.media({frame: 'post'})&lt;/code&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제: 제목, 버튼과 같은 UI 요소를 사용자 지정할 수 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;js 코드:&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;function clearField(){
    #remove file nodes
    #...
}

var frame = wp.media({frame: 'post'});

frame.on('close',function() {
    var selection = frame.state().get('selection');
    if(!selection.length){
        clearField();
    }
});

frame.on( 'select',function() {
    var state = frame.state();
    var selection = state.get('selection');
    if ( ! selection ) return;

    clearField();

    selection.each(function(attachment) {
        console.log(attachment.attributes);
    });
});

frame.open();
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wp.media.editor&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;wp.media.editor.open( editor_id )&lt;/code&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제: 제목, 버튼과 같은 UI 요소를 사용자 지정할 수 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;js 코드: https://wordpress.stackexchange.com/questions/75808/using-wordpress-3-5-media-uploader-in-meta-box#75823&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wp.media&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개서하여&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wp.media.controller.Library&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;attachment&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;select&lt;/code&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&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;/li&gt; 
   &lt;li&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;js 코드:&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;/**
 * Please attach all the code below to a button click event
 **/

//create a new Library, base on defaults
//you can put your attributes in
var insertImage = wp.media.controller.Library.extend({
    defaults :  _.defaults({
            id:        'insert-image',
            title:      'Insert Image Url',
            allowLocalEdits: true,
            displaySettings: true,
            displayUserSettings: true,
            multiple : true,
            type : 'image'//audio, video, application/pdf, ... etc
      }, wp.media.controller.Library.prototype.defaults )
});

//Setup media frame
var frame = wp.media({
    button : { text : 'Select' },
    state : 'insert-image',
    states : [
        new insertImage()
    ]
});

//on close, if there is no select files, remove all the files already selected in your main frame
frame.on('close',function() {
    var selection = frame.state('insert-image').get('selection');
    if(!selection.length){
        #remove file nodes
        #such as: jq(&quot;#my_file_group_field&quot;).children('div.image_group_row').remove();
        #...
    }
});


frame.on( 'select',function() {
    var state = frame.state('insert-image');
    var selection = state.get('selection');
    var imageArray = [];

    if ( ! selection ) return;

    #remove file nodes
    #such as: jq(&quot;#my_file_group_field&quot;).children('div.image_group_row').remove();
    #...

    //to get right side attachment UI info, such as: size and alignments
    //org code from /wp-includes/js/media-editor.js, arround `line 603 -- send: { ... attachment: function( props, attachment ) { ... `
    selection.each(function(attachment) {
        var display = state.display( attachment ).toJSON();
        var obj_attachment = attachment.toJSON()
        var caption = obj_attachment.caption, options, html;

        // If captions are disabled, clear the caption.
        if ( ! wp.media.view.settings.captions )
            delete obj_attachment.caption;

        display = wp.media.string.props( display, obj_attachment );

        options = {
            id:        obj_attachment.id,
            post_content: obj_attachment.description,
            post_excerpt: caption
        };

        if ( display.linkUrl )
            options.url = display.linkUrl;

        if ( 'image' === obj_attachment.type ) {
            html = wp.media.string.image( display );
            _.each({
            align: 'align',
            size:  'image-size',
            alt:   'image_alt'
            }, function( option, prop ) {
            if ( display[ prop ] )
                options[ option ] = display[ prop ];
            });
        } else if ( 'video' === obj_attachment.type ) {
            html = wp.media.string.video( display, obj_attachment );
        } else if ( 'audio' === obj_attachment.type ) {
            html = wp.media.string.audio( display, obj_attachment );
        } else {
            html = wp.media.string.link( display );
            options.post_title = display.title;
        }

        //attach info to attachment.attributes object
        attachment.attributes['nonce'] = wp.media.view.settings.nonce.sendToEditor;
        attachment.attributes['attachment'] = options;
        attachment.attributes['html'] = html;
        attachment.attributes['post_id'] = wp.media.view.settings.post.id;

        //do what ever you like to use it
        console.log(attachment.attributes);
        console.log(attachment.attributes['attachment']);
        console.log(attachment.attributes['html']);
    });
});

//reset selection in popup, when open the popup
frame.on('open',function() {
    var selection = frame.state('insert-image').get('selection');

    //remove all the selection first
    selection.each(function(image) {
        var attachment = wp.media.attachment( image.attributes.id );
        attachment.fetch();
        selection.remove( attachment ? [ attachment ] : [] );
    });

    //add back current selection, in here let us assume you attach all the [id] to &amp;lt;div id=&quot;my_file_group_field&quot;&amp;gt;...&amp;lt;input type=&quot;hidden&quot; id=&quot;file_1&quot; .../&amp;gt;...&amp;lt;input type=&quot;hidden&quot; id=&quot;file_2&quot; .../&amp;gt;
    jq(&quot;#my_file_group_field&quot;).find('input[type=&quot;hidden&quot;]').each(function(){
         var input_id = jq(this);
        if( input_id.val() ){
            attachment = wp.media.attachment( input_id.val() );
            attachment.fetch();
            selection.add( attachment ? [ attachment ] : [] );
        }
    });
});

//now open the popup
frame.open();
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그의 코드를 사용했을 때 이미지 src=&quot;&quot;가 누락되었기 때문에 ZAC의 옵션 4에 추가하고 싶습니다.&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;                if ( 'image' === obj_attachment.type ) {
                html = wp.media.string.image( display );
                _.each({
                align: 'align',
                size:  'image-size',
                alt:   'image_alt'
                }, function( option, prop ) {
                if ( display[ prop ] )
                    options[ option ] = display[ prop ];
                });
                html = wp.media.string.image( display, obj_attachment );
            } 
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 새 미디어 업로더를 사용자 지정 제목과 버튼 및 오른쪽 사이드바로 호출할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var custom_uploader;
jQuery('#fileform').on('click','.select-files', function(e) {
    var button = jQuery(this);
    custom_uploader = wp.media.frames.file_frame = wp.media({
        title: 'Choose File',
        library: {
            author: userSettings.uid // specific user-posted attachment
        },
        button: {
            text: 'Choose File'
        },
        multiple: false
    });

    //When a file is selected, grab the URL and set it as the text field's value
    custom_uploader.on('select', function() {
        attachment = custom_uploader.state().get('selection').first().toJSON();
        console.log(attachment.url);
        console.log(attachment.id); // use them the way you want
    });

    //Open the uploader dialog
    // Set post id
    wp.media.model.settings.post.id = jQuery('#post_ID').val();
    custom_uploader.open();
});
&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;이 링크를 확인하세요 -&amp;gt; https://github.com/phpcodingmaster/WordPress-Media-Modal-Image-Uploads&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 수행하는 방법을 보여 줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;관리 미디어 모드 열기&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;30&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;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 이미지 정보 가져오기&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WordPress 버전 6.0으로 테스트됨&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/21540951/custom-wp-media-with-arguments-support&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1185</guid>
      <comments>https://sourcejob.tistory.com/1185#entry1185comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:25:02 +0900</pubDate>
    </item>
    <item>
      <title>MySQL에서 지정된 행 번호로 시작하는 행을 선택하려면 어떻게 해야 합니까?</title>
      <link>https://sourcejob.tistory.com/1184</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&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 테이블에 행이 50개 있다고 가정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;처음 10개를 선택합니다(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;LIMIT 10&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;), 하지만 다른 페이지에서 다음 10개를 선택할 수 있기를 원합니다.&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;그럼 10열 다음에 선택을 시작하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트된 쿼리:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql_query(&quot;
    SELECT * FROM `picdb`
    WHERE `username` = '$username'
    ORDER BY `picid` DESC
    LIMIT '$start','$count'
&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용하여 첫 페이지를 얻어서 작업할 것을 권장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;LIMIT 0, 10
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그다음에 두번째 페이지를 위해&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;LIMIT 10, 10
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고나서&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;LIMIT 20, 10
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;세번째 페이지 등등.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;LIMIT 10

LIMIT 10 OFFSET 10
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/select.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;구문에 대한 MySQL 5.1 문서&lt;/a&gt;에서 다음을 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Postgre와의 호환성을 위해&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL, MySQL은 LIMIT row_count OFFSET 구문도 지원합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문은 오래되었지만 하드코딩되지 않은 코드를 추가하고 싶습니다. 혼돈이 제공한 대답은 스크립트를 하드코딩해야 한다는 것을 의미합니다(문 선택).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 이름을 가져온 다음 선택한 문장을 하드코딩하지 않고 현재 페이지를 기준으로 데이터베이스에서 데이터를 선택하여 동일한 결과를 얻을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 현재 페이지를 가져옵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$page = basename($_SERVER['SCRIPT_FILENAME']);
$page_counter = rtrim($page, &quot;.php&quot;);
//setting your limit
$start = 0;
$limit = 10;
//if current page is not index.php then $start = ($limit * page_counter); 
// e.g if current page is 1.php then $start = ($limit * 1) = 10
//if current page is 2.php then $start = ($limit * 2) = 20
if ($page !== 'index.php') {

 $start = ($limit * $page_counter);
}
//getting row count
$ROW_COUNT = $db-&amp;gt;query('SELECT * from tableName')-&amp;gt;rowCount();

//getting number of rows left in the table
$rows_left = (&quot;SELECT * FROM tableName limit ?,?&quot;);
$rows_left = $db-&amp;gt;prepare($rows_left);
$rows_left-&amp;gt;execute(array($start,$ROW_COUNT));
$rows = $rows_left-&amp;gt;fetchAll(PDO::FETCH_ASSOC);

$number_rows = 0;
foreach ($rows as $r) {
 $number_rows = $number_rows + 1;
 }
 //if number of rows left in the table is less than 10 then $limit = the number of rows left
 if ($number_rows &amp;lt; 10) {
 $limit = $number_rows;
 }

 //getting all rows
            $getRows = &quot;SELECT * FROM tableName limit ?,?&quot;;
            $getRows = $db-&amp;gt;prepare($getRows);
            $getRows-&amp;gt;execute(array($start , $limit));
            $getRows = $getRows-&amp;gt;fetchAll(PDO::FETCH_ASSOC);
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;select * from 'table_name' 
ORDER BY 'column_id 'DESC 
LIMIT 0,10;

select * from 'table_name' 
ORDER BY 'column_id' DESC 
LIMIT 10,10;

select * from 'table_name' 
ORDER BY 'column_id' DESC
LIMIT 20,10;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 숫자가 나올 때까지 계속합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1252673/how-can-i-select-rows-in-mysql-starting-at-a-given-row-number&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1184</guid>
      <comments>https://sourcejob.tistory.com/1184#entry1184comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:24:52 +0900</pubDate>
    </item>
    <item>
      <title>열을 추가하는 동안 영향을 받는 행 0개</title>
      <link>https://sourcejob.tistory.com/1183</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열을 추가하는 동안 영향을 받는 행 0개&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;저는 MariaDB를 사용하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;10.1.30&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;alter table add column&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령줄에서 쿼리한 결과는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;Query OK, 0 rows affected (0.09 sec) Records: 0 Duplicates: 0 Warnings: 0&lt;/code&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;0 rows affected&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 그의 말의 방식입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ALTER&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블을 재구성할 필요가 없었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/50348541/0-rows-affected-while-adding-column&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1183</guid>
      <comments>https://sourcejob.tistory.com/1183#entry1183comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:24:45 +0900</pubDate>
    </item>
    <item>
      <title>Fancybox: Android 전화기에서 스크롤할 수 없습니다.</title>
      <link>https://sourcejob.tistory.com/1182</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Fancybox: Android 전화기에서 스크롤할 수 없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 &lt;a href=&quot;http://fancybox.net/&quot; rel=&quot;nofollow&quot; papago-id=&quot;1-1&quot;&gt;Fancybox&lt;/a&gt;를 사용하여 계산기의 결과를 제 웹사이트 inlandprotitle.com 에 출력하고 있습니다.&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;-webkit-overflow-scrolling: touch;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안드로이드폰에서는 출력이 잘립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안드로이드 폰에서 화려한 박스 스크롤을 할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;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;font class=&quot;papago-parent&quot;&gt;어떤 Android OS에서 테스트 중입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;2.X인가요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서로 다른 장치의 일부 기능은 사용할 수 없기 때문에 작동하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 좋은 방법은 안드로이드 사양을 확인하고 다른 안드로이드 장치에서 테스트하는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/13075729/fancybox-cannot-scroll-on-android-phones&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>sourcejob</author>
      <guid isPermaLink="true">https://sourcejob.tistory.com/1182</guid>
      <comments>https://sourcejob.tistory.com/1182#entry1182comment</comments>
      <pubDate>Sat, 21 Oct 2023 10:24:39 +0900</pubDate>
    </item>
  </channel>
</rss>