<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>yoursource</title>
    <link>https://yoursource.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Wed, 8 Apr 2026 07:47:54 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>yoursource</managingEditor>
    <item>
      <title>NodeJS 및 MariaDB, 쿼리 내 자리 표시자</title>
      <link>https://yoursource.tistory.com/680</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NodeJS 및 MariaDB, 쿼리 내 자리 표시자&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 마리아드브가 처음입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;값뿐만 아니라 열에 대해서도 자리 표시자를 사용하여 삽입 문을 실행하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 ?와 ?를 시도해 보았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;열에 대해 오류가 표시되지만 해당 SQL 구문이 잘못되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let query = &quot;INSERT INTO Users(??, ??, ??, ??, ??) VALUES(?,?,?,?,?);&quot;
let data = [ 'email','forename', 'location','longitude','latitude', 
         ,'test','test','test',1,1 ]
conn.query(query, data)
&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;mysql connector와 비교하여 지원되지 &lt;a href=&quot;https://www.npmjs.com/package/mysql#escaping-query-identifiers&quot; papago-id=&quot;4-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;않는&lt;/a&gt; 유일한 것은 &quot;&lt;a href=&quot;https://www.npmjs.com/package/mysql#escaping-query-identifiers&quot; papago-id=&quot;4-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Escapeing query&lt;/a&gt; identifier&lt;a href=&quot;https://www.npmjs.com/package/mysql#escaping-query-identifiers&quot; papago-id=&quot;4-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;&lt;/a&gt;뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 이유는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우선, 저는 그것에 대한 사용 사례가 보이지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;없나요?&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표준 MariaDB SQL 구문을 사용하고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;?&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자리 표시자로서&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&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;?&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자리 표시자는 커넥터가 이진 프로토콜(아직 구현되지 않음)을 사용할 때 커넥터가 SQL 명령을 구문 분석하지 않아도 되므로 성능이 향상됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 명령을 다음과 같이 다시 작성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let query = &quot;INSERT INTO Users(`email`,`forename, `location`,`longitude`,`latitude`) VALUES(?,?,?,?,?);&quot;
let data = ['test','test','test',1,1]
conn.query(query, data)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 그것에 대한 사용 사례를 본다면요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/MariaDB/mariadb-connector-nodejs&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;12-1&quot;&gt;github&lt;/a&gt;에서 자유롭게 이슈를 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/53305646/&lt;a href=&quot;https://stackoverflow.com/questions/53305646/nodejs-and-mariadb-placeholder-inside-queries&quot; target=&quot;_blank&quot; papago-id=&quot;13-1&quot;&gt;nodejs-and-mariadb-placeholder-inside-queries&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/680</guid>
      <comments>https://yoursource.tistory.com/680#entry680comment</comments>
      <pubDate>Mon, 4 Sep 2023 23:02:14 +0900</pubDate>
    </item>
    <item>
      <title>장고를 사용하여 두 날짜 중에서 선택</title>
      <link>https://yoursource.tistory.com/679</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;원시 SQL을 사용하여 이 작업을 수행하는 방법을 매우 쉽게 알고 있습니다. 하지만 Django ORM을 사용하여 이 작업을 수행할 수 있는 방법이 있습니까?&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;다음은 쿼리에서 30일 사이의 날짜를 추가하려는 위치입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;start_date = datetime.datetime.now() + datetime.timedelta(-30)
context[self.varname] = self.model._default_manager.filter(
    current_issue__isnull=True
    ).live().order_by('-created_at')
&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;...filter(current_issue__isnull=True, created_at__range=(start_date, end_date))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&quot;http://docs.djangoproject.com/en/dev/ref/models/querysets/#range&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;__range&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DateTimeField&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜로 필터링하면 마지막 날의 항목은 포함되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값을 날짜로 캐스팅해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;...filter(created_at__date__range=(start_date, end_date))
&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;.filter(created_at__range=[from_date, to_date])
&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;.filter(Q(created_at__gte=from_date)&amp;amp;Q(created_at__lte=to_date))
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;gte는 동일한 값보다 큰 값을 의미합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;lte는 같음보다 작음을 의미합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3963201/&lt;a href=&quot;https://stackoverflow.com/questions/3963201/select-between-two-dates-with-django&quot; target=&quot;_blank&quot; papago-id=&quot;12-1&quot;&gt;select-between-two-dates-with-django&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/679</guid>
      <comments>https://yoursource.tistory.com/679#entry679comment</comments>
      <pubDate>Mon, 4 Sep 2023 23:01:38 +0900</pubDate>
    </item>
    <item>
      <title>RecyclerView 어댑터 데이터 업데이트 방법</title>
      <link>https://yoursource.tistory.com/678</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;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;&lt;font class=&quot;papago-parent&quot;&gt;는 업데이트의 인지 알고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 어댑터.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 제품 목록을 받은 후 다음을 시도했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&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;ArrayList&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 단편에서.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;recyclerView&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;되어 새  생되고새데를어댑로설터정다호다음니출합한성이를 호출합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;adapter.notifyDataSetChanged()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 작동하지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;것처럼  어댑터를 만들고, 에게 효과가  나에게는  변화가 : 다른사람했것새어다생해작저만지니아없변습었무화.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;recyclerView.setAdapter(new RecyclerViewAdapter(newArrayList))&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;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;Adapter&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 데이터를 업데이트합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt; public void updateData(ArrayList&amp;lt;ViewModel&amp;gt; viewModels) {
    items.clear();
    items.addAll(viewModels);
    notifyDataSetChanged();
 }
&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;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;recyclerView를 수정할 수 있는지 확인하고 항목을 하나 이상 제거하려고 했습니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;  public void removeItem(int position) {
     items.remove(position);
     notifyItemRemoved(position);
 }
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 것이 그대로 남아 있었습니다.&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;public class RecyclerViewAdapter extends RecyclerView.Adapter&amp;lt;RecyclerViewAdapter.ViewHolder&amp;gt; implements View.OnClickListener {

    private ArrayList&amp;lt;ViewModel&amp;gt; items;
    private OnItemClickListener onItemClickListener;

    public RecyclerViewAdapter(ArrayList&amp;lt;ViewModel&amp;gt; items) {
        this.items = items;
    }


    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycler, parent, false);
        v.setOnClickListener(this);
        return new ViewHolder(v);
    }

    public void updateData(ArrayList&amp;lt;ViewModel&amp;gt; viewModels) {
        items.clear();
        items.addAll(viewModels);
        notifyDataSetChanged();
    }
    public void addItem(int position, ViewModel viewModel) {
        items.add(position, viewModel);
        notifyItemInserted(position);
    }

    public void removeItem(int position) {
        items.remove(position);
        notifyItemRemoved(position);
    }


    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        ViewModel item = items.get(position);
        holder.title.setText(item.getTitle());
        Picasso.with(holder.image.getContext()).load(item.getImage()).into(holder.image);
        holder.price.setText(item.getPrice());
        holder.credit.setText(item.getCredit());
        holder.description.setText(item.getDescription());

        holder.itemView.setTag(item);
    }


    @Override
    public int getItemCount() {
        return items.size();
    }


    @Override
    public void onClick(final View v) {
        // Give some time to the ripple to finish the effect
        if (onItemClickListener != null) {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    onItemClickListener.onItemClick(v, (ViewModel) v.getTag());
                }
            }, 0);
        }
    }

    protected static class ViewHolder extends RecyclerView.ViewHolder {
        public ImageView image;
        public TextView price, credit, title, description;

        public ViewHolder(View itemView) {
            super(itemView);
            image = (ImageView) itemView.findViewById(R.id.image);
            price = (TextView) itemView.findViewById(R.id.price);
            credit = (TextView) itemView.findViewById(R.id.credit);
            title = (TextView) itemView.findViewById(R.id.title);
            description = (TextView) itemView.findViewById(R.id.description);
        }
    }

    public interface OnItemClickListener {

        void onItemClick(View view, ViewModel viewModel);

    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 나는 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;recyclerView = (RecyclerView) view.findViewById(R.id.recycler);
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 5));
adapter = new RecyclerViewAdapter(items);
adapter.setOnItemClickListener(this);
recyclerView.setAdapter(adapter);
&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;hr&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 gridView가 있는 레이아웃이 다음과 같이 보인다는 것이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout
    xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:orientation=&quot;vertical&quot;
    android:layout_width=&quot;match_parent&quot;
    android:tag=&quot;catalog_fragment&quot;
    android:layout_height=&quot;match_parent&quot;&amp;gt;

    &amp;lt;FrameLayout
        android:orientation=&quot;vertical&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;match_parent&quot;&amp;gt;

        &amp;lt;android.support.v7.widget.RecyclerView
            android:id=&quot;@+id/recycler&quot;
            android:layout_width=&quot;match_parent&quot;
            android:layout_height=&quot;match_parent&quot;
            android:clipToPadding=&quot;false&quot;/&amp;gt;

        &amp;lt;ImageButton
            android:id=&quot;@+id/fab&quot;
            android:layout_gravity=&quot;top|end&quot;
            style=&quot;@style/FabStyle&quot;/&amp;gt;

    &amp;lt;/FrameLayout&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;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;LinearLayout&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;FrameLayout&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상위 레이아웃으로 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 일반적인 대답입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어댑터 데이터를 업데이트하는 다양한 방법이 설명되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 프로세스에는 매번 두 가지 주요 단계가 포함됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 세트 업데이트&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어댑터에 변경 사항 알림&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2 papago-id=&quot;25&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;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &quot;돼지에 &quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;2&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;img src=&quot;https://i.stack.imgur.com/VGB85.gif&quot; width=&quot;200&quot; alt=&quot;Insert single item&quot;&gt; 
&lt;pre&gt;&lt;code&gt;String item = &quot;Pig&quot;;
int insertIndex = 2;
data.add(insertIndex, item);
adapter.notifyItemInserted(insertIndex);
&lt;/code&gt;&lt;/pre&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;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;2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;img src=&quot;https://i.stack.imgur.com/kxRVT.gif&quot; width=&quot;200&quot; alt=&quot;Insert multiple items&quot;&gt; 
&lt;pre&gt;&lt;code&gt;ArrayList&amp;lt;String&amp;gt; items = new ArrayList&amp;lt;&amp;gt;();
items.add(&quot;Pig&quot;);
items.add(&quot;Chicken&quot;);
items.add(&quot;Dog&quot;);
int insertIndex = 2;
data.addAll(insertIndex, items);
adapter.notifyItemRangeInserted(insertIndex, items.size());
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;31&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;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록에서 &quot;돼지&quot;를 제거합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;img src=&quot;https://i.stack.imgur.com/je91J.gif&quot; width=&quot;200&quot; alt=&quot;Remove single item&quot;&gt; 
&lt;pre&gt;&lt;code&gt;int removeIndex = 2;
data.remove(removeIndex);
adapter.notifyItemRemoved(removeIndex);
&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;여러 항목 제거&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;목록에서 &quot;카멜&quot;과 &quot;양&quot;을 제거합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;img src=&quot;https://i.stack.imgur.com/CdvAP.gif&quot; width=&quot;200&quot; alt=&quot;Remove multiple items&quot;&gt; 
&lt;pre&gt;&lt;code&gt;int startIndex = 2; // inclusive
int endIndex = 4;   // exclusive
int count = endIndex - startIndex; // 2 items will be removed
data.subList(startIndex, endIndex).clear();
adapter.notifyItemRangeRemoved(startIndex, count);
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;35&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;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전체 목록을 지웁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;img src=&quot;https://i.stack.imgur.com/9IWbJ.gif&quot; width=&quot;200&quot; alt=&quot;Remove all items&quot;&gt; 
&lt;pre&gt;&lt;code&gt;data.clear();
adapter.notifyDataSetChanged();
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;37&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;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전 목록을 지우고 새 목록을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;img src=&quot;https://i.stack.imgur.com/jQxqH.gif&quot; width=&quot;200&quot; alt=&quot;Replace old list with new list&quot;&gt; 
&lt;pre&gt;&lt;code&gt;// clear old list
data.clear();

// add new list
ArrayList&amp;lt;String&amp;gt; newList = new ArrayList&amp;lt;&amp;gt;();
newList.add(&quot;Lion&quot;);
newList.add(&quot;Wolf&quot;);
newList.add(&quot;Bear&quot;);
data.addAll(newList);

// notify adapter
adapter.notifyDataSetChanged();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;adapter&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 에대언한있다습니급이에 대한 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 제가 설정하지 않은 것이 중요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 목적을 위해.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에, 나는 오래된 물건들을 치웠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 새로운 것들을 추가했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단일 항목 업데이트&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;양&quot; 항목을 &quot;양이 좋아요&quot;라고 표시되도록 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;img src=&quot;https://i.stack.imgur.com/UUzHr.gif&quot; width=&quot;200&quot; alt=&quot;Update single item&quot;&gt; 
&lt;pre&gt;&lt;code&gt;String newValue = &quot;I like sheep.&quot;;
int updateIndex = 3;
data.set(updateIndex, newValue);
adapter.notifyItemChanged(updateIndex);
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;46&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;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;을 &quot; 위치에서 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;치에의 위치를 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;img src=&quot;https://i.stack.imgur.com/HaERR.gif&quot; width=&quot;200&quot; alt=&quot;Move single item&quot;&gt; 
&lt;pre&gt;&lt;code&gt;int fromPosition = 3;
int toPosition = 1;

// update data array
String item = data.get(fromPosition);
data.remove(fromPosition);
data.add(toPosition, item);

// notify adapter
adapter.notifyItemMoved(fromPosition, toPosition);
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;50&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;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;RecyclerView 어댑터 코드는 이 &lt;a href=&quot;https://stackoverflow.com/a/40584425/3681880&quot; papago-id=&quot;51-1&quot;&gt;답변&lt;/a&gt;에서 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 활동.java&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class MainActivity extends AppCompatActivity implements MyRecyclerViewAdapter.ItemClickListener {

    List&amp;lt;String&amp;gt; data;
    MyRecyclerViewAdapter adapter;

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

        // data to populate the RecyclerView with
        data = new ArrayList&amp;lt;&amp;gt;();
        data.add(&quot;Horse&quot;);
        data.add(&quot;Cow&quot;);
        data.add(&quot;Camel&quot;);
        data.add(&quot;Sheep&quot;);
        data.add(&quot;Goat&quot;);

        // set up the RecyclerView
        RecyclerView recyclerView = findViewById(R.id.rvAnimals);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(),
                layoutManager.getOrientation());
        recyclerView.addItemDecoration(dividerItemDecoration);
        adapter = new MyRecyclerViewAdapter(this, data);
        adapter.setClickListener(this);
        recyclerView.setAdapter(adapter);
    }

    @Override
    public void onItemClick(View view, int position) {
        Toast.makeText(this, &quot;You clicked &quot; + adapter.getItem(position) + &quot; on row number &quot; + position, Toast.LENGTH_SHORT).show();
    }

    public void onButtonClick(View view) {
        insertSingleItem();
    }

    private void insertSingleItem() {
        String item = &quot;Pig&quot;;
        int insertIndex = 2;
        data.add(insertIndex, item);
        adapter.notifyItemInserted(insertIndex);
    }

    private void insertMultipleItems() {
        ArrayList&amp;lt;String&amp;gt; items = new ArrayList&amp;lt;&amp;gt;();
        items.add(&quot;Pig&quot;);
        items.add(&quot;Chicken&quot;);
        items.add(&quot;Dog&quot;);
        int insertIndex = 2;
        data.addAll(insertIndex, items);
        adapter.notifyItemRangeInserted(insertIndex, items.size());
    }

    private void removeSingleItem() {
        int removeIndex = 2;
        data.remove(removeIndex);
        adapter.notifyItemRemoved(removeIndex);
    }

    private void removeMultipleItems() {
        int startIndex = 2; // inclusive
        int endIndex = 4;   // exclusive
        int count = endIndex - startIndex; // 2 items will be removed
        data.subList(startIndex, endIndex).clear();
        adapter.notifyItemRangeRemoved(startIndex, count);
    }

    private void removeAllItems() {
        data.clear();
        adapter.notifyDataSetChanged();
    }

    private void replaceOldListWithNewList() {
        // clear old list
        data.clear();

        // add new list
        ArrayList&amp;lt;String&amp;gt; newList = new ArrayList&amp;lt;&amp;gt;();
        newList.add(&quot;Lion&quot;);
        newList.add(&quot;Wolf&quot;);
        newList.add(&quot;Bear&quot;);
        data.addAll(newList);

        // notify adapter
        adapter.notifyDataSetChanged();
    }

    private void updateSingleItem() {
        String newValue = &quot;I like sheep.&quot;;
        int updateIndex = 3;
        data.set(updateIndex, newValue);
        adapter.notifyItemChanged(updateIndex);
    }

    private void moveSingleItem() {
        int fromPosition = 3;
        int toPosition = 1;

        // update data array
        String item = data.get(fromPosition);
        data.remove(fromPosition);
        data.add(toPosition, item);

        // notify adapter
        adapter.notifyItemMoved(fromPosition, toPosition);
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모들&lt;/font&gt;&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;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;notifyDataSetChanged()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 애니메이션이 수행되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 드는일 수 에 또이작비많들사수있않좋다것습니용이는한지하로으이므용이업은,다▁this▁recomm좋니습▁use▁is▁not또한▁toended▁can를 사용하지 않는 것이 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;notifyDataSetChanged()&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;/li&gt; 
 &lt;li papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록을 크게 또는 복잡하게 변경하는 경우 &lt;a href=&quot;https://developer.android.com/reference/android/support/v7/util/DiffUtil.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;57-1&quot;&gt;DiffUtil&lt;/a&gt;을 확인하십시오.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1 papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가 연구&lt;/font&gt;&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://guides.codepath.com/android/using-the-recyclerview&quot; rel=&quot;noreferrer&quot; papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CodePath: RecyclerView 사용&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://android.jlelse.eu/smart-way-to-update-recyclerview-using-diffutil-345941a160e0&quot; rel=&quot;noreferrer&quot; papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DiffUtil을 사용하여 RecyclerView를 업데이트하는 현명한 방법&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 RecyclerView에서 작업하고 있으며 제거와 업데이트 모두 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;62-0&quot;&gt;&lt;strong papago-id=&quot;62-0-0&quot;&gt;제거&lt;/strong&gt;&lt;/em&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;RecyclerView에서 항목을 제거하는 4단계가 있습니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt; list.remove(position);
 recycler.removeViewAt(position);
 mAdapter.notifyItemRemoved(position);
 mAdapter.notifyItemRangeChanged(position, list.size());
&lt;/code&gt;&lt;/pre&gt; &lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드 라인들은 저에게 효과가 있습니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;65-0&quot;&gt;&lt;strong papago-id=&quot;65-0-0&quot;&gt;모든 데이터&lt;/strong&gt;&lt;/em&gt; &lt;em papago-id=&quot;65-0&quot;&gt;&lt;strong papago-id=&quot;65-0-0&quot;&gt;업데이트&lt;/strong&gt;&lt;/em&gt;:&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 해야 할 일은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt; mAdapter.notifyDataSetChanged();
&lt;/code&gt;&lt;/pre&gt; 
  &lt;blockquote&gt; 
   &lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 항목에 영향을 미치기 때문에 애니메이션이 없습니다.&lt;/font&gt;&lt;/p&gt; 
  &lt;/blockquote&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;RecyclerView의 어댑터 자체가 &quot;데이터 관리자&quot;(그리고 &quot;제거(intos)&quot; 및 &quot;추가(...)&quot;와 같은 방법을 사용하지 않는 한, Activity/Fragment 코드와 같이 &quot;데이터&quot;가 관리되는 곳에서 이 모든 작업을 수행해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 저에게 도움이 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;recyclerView.setAdapter(new RecyclerViewAdapter(newList));
recyclerView.invalidate();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트된 목록이 포함된 새 어댑터(내 경우 ArrayList로 변환된 데이터베이스)를 생성하고 어댑터로 설정한 후&lt;/font&gt;&lt;/font&gt;&lt;code&gt;recyclerView.invalidate()&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 papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업에는 두 가지 옵션이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어댑터에서 UI를 새로 고칩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mAdapter.notifyDataSetChanged();
&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;또는 recyclerView 자체에서 새로 고치십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;recyclerView.invalidate();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 옵션은 &lt;a href=&quot;https://developer.android.com/reference/android/support/v7/util/DiffUtil.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;75-1&quot;&gt;diffil&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;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 DiffUtil을 사용하여 이전 데이터와 새 데이터를 비교하고 알림을 호출할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ItemRange 제거됨, 알림&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ItemRange가 변경되어 알림&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;항목 범위 사용자를 대신하여 삽입합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;notifyDataSetChanged 대신 diffUtil을 사용하는 간단한 예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DiffResult diffResult = DiffUtil
                .calculateDiff(new MyDiffUtilCB(getItems(), items));

//any clear up on memory here and then
diffResult.dispatchUpdatesTo(this);

//and then, if necessary
items.clear()
items.addAll(newItems)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비동기 목록을 &lt;a href=&quot;https://developer.android.com/reference/android/support/v7/recyclerview/extensions/AsyncListDiffer&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;78-1&quot;&gt;사용&lt;/a&gt;하여 큰 목록인 경우 메인 스레드에서 diff 작업을 계산합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록 보기, 그리드 보기 및 재활용 보기의 데이터를 업데이트합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mAdapter.notifyDataSetChanged();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mAdapter.notifyItemRangeChanged(0, itemList.size());
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 같은 문제를 다른 방법으로 해결했습니다.&lt;/font&gt;&lt;font 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;mAdapter = new ModelAdapter(getContext(), new ArrayList&amp;lt;Model&amp;gt;());
// Then when I get data

mAdapter.update(response.getModelList());
// And update it in my adapter

public void update(ArrayList&amp;lt;Model&amp;gt; modelList){
    adapterModelList.clear();
    for (Product model: modelList) {
        adapterModelList.add(model);
    }
   mAdapter.notifyDataSetChanged();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바로 그겁니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 데이터에 새 데이터를 추가하는 가장 좋은 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; ArrayList&amp;lt;String&amp;gt; newItems = new ArrayList&amp;lt;String&amp;gt;();
 newItems = getList();
 int oldListItemscount = alcontainerDetails.size();
 alcontainerDetails.addAll(newItems);           
 recyclerview.getAdapter().notifyItemChanged(oldListItemscount+1, al_containerDetails);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DiffUtil을 &lt;a href=&quot;https://developer.android.com/reference/androidx/recyclerview/widget/DiffUtil&quot; rel=&quot;noreferrer&quot; papago-id=&quot;84-1&quot;&gt;탐색&lt;/a&gt;하는 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 목록 업데이트를 처리하는 동안 RecyclerView의 성능이 향상됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;85&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어댑터 내부의 변수를 정의합니다.&lt;/font&gt;&lt;/p&gt; &lt;pre class=&quot;lang-kotlin prettyprint-override&quot;&gt;&lt;code&gt; differList = AsyncListDiffer(this, this.callback);     
 differList.submitList(list)
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 목록은 초기 원시 목록이거나 나중에 업데이트할 경우 빈 목록일 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&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;/p&gt; &lt;pre&gt;&lt;code&gt;private val callback : DiffUtil.ItemCallback&amp;lt;Item&amp;gt; = object: DiffUtil.ItemCallback&amp;lt;Item&amp;gt;() {

   override fun areItemsTheSame(oldItem: Item, newItem: Item) =
     oldItem.id == newItem.id

   override fun areContentsTheSame(oldItem: Item, newItem: Item) =
     oldItem == newItem
 }
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&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;pre class=&quot;lang-kotlin prettyprint-override&quot;&gt;&lt;code&gt; fun setData(list: List&amp;lt;Item&amp;gt;) {
        differList.submitList(list)
        //yeah, that's it!
 }
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;ol start=&quot;4&quot;&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 목록을 변경한 후(삽입/업데이트/삭제) 조각/활동에서 이 &lt;strong papago-id=&quot;89-1&quot;&gt;setData(목록)&lt;/strong&gt;를 호출합니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;mAdapter.setData(list)&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&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&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;RecyclerView&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;private List&amp;lt;YourItem&amp;gt; items;

public void setItems(List&amp;lt;YourItem&amp;gt; newItems)
{
    clearItems();
    addItems(newItems);
}

public void addItem(YourItem item, int position)
{
    if (position &amp;gt; items.size()) return;

    items.add(item);
    notifyItemInserted(position);
}

public void addMoreItems(List&amp;lt;YourItem&amp;gt; newItems)
{
    int position = items.size() + 1;
    newItems.addAll(newItems);
    notifyItemChanged(position, newItems);
}

public void addItems(List&amp;lt;YourItem&amp;gt; newItems)
{
    items.addAll(newItems);
    notifyDataSetChanged();
}

public void clearItems()
{
    items.clear();
    notifyDataSetChanged();
}

public void addLoader()
{
    items.add(null);
    notifyItemInserted(items.size() - 1);
}

public void removeLoader()
{
    items.remove(items.size() - 1);
    notifyItemRemoved(items.size());
}

public void removeItem(int position)
{
    if (position &amp;gt;= items.size()) return;

    items.remove(position);
    notifyItemRemoved(position);
}

public void swapItems(int positionA, int positionB)
{
    if (positionA &amp;gt; items.size()) return;
    if (positionB &amp;gt; items.size()) return;

    YourItem firstItem = items.get(positionA);

    videoList.set(positionA, items.get(positionB));
    videoList.set(positionB, firstItem);

    notifyDataSetChanged();
}
&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;어댑터 클래스 내에서 또는 조각 또는 활동에서 이를 구현할 수 있지만, 이 경우 어댑터를 인스턴스화하여 알림 메서드를 호출해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 경우에는 주로 어댑터에 구현합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;RecyclerView를 다시 로드하는 정말 간단한 방법은 전화를 하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;recyclerView.removeAllViews();
&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;이렇게 하면 먼저 RecyclerView의 모든 내용이 제거된 다음 업데이트된 값으로 다시 추가됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;▁use▁i▁▁you▁to▁strongly합장을 사용하는 것을 강력히 추천합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[DiffUtil.ItemCallback][1]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변를화처위해의 변경 하기 위해&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RecyclerView.Adapter&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-kotlin prettyprint-override&quot;&gt;&lt;code&gt;fun setData(data: List&amp;lt;T&amp;gt;) {
    val calculateDiff = DiffUtil.calculateDiff(DiffUtilCallback(items, data))
    items.clear()
    items += data
    calculateDiff.dispatchUpdatesTo(this)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;후드 아래에서는 대부분의 작업을 처리합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AdapterListUpdateCallback&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;pre class=&quot;lang-java prettyprint-override&quot;&gt;&lt;code&gt;/**
 * ListUpdateCallback that dispatches update events to the given adapter.
 *
 * @see DiffUtil.DiffResult#dispatchUpdatesTo(RecyclerView.Adapter)
 */
public final class AdapterListUpdateCallback implements ListUpdateCallback {
    @NonNull
    private final RecyclerView.Adapter mAdapter;

    /**
     * Creates an AdapterListUpdateCallback that will dispatch update events to the given adapter.
     *
     * @param adapter The Adapter to send updates to.
     */
    public AdapterListUpdateCallback(@NonNull RecyclerView.Adapter adapter) {
        mAdapter = adapter;
    }

    /** {@inheritDoc} */
    @Override
    public void onInserted(int position, int count) {
        mAdapter.notifyItemRangeInserted(position, count);
    }

    /** {@inheritDoc} */
    @Override
    public void onRemoved(int position, int count) {
        mAdapter.notifyItemRangeRemoved(position, count);
    }

    /** {@inheritDoc} */
    @Override
    public void onMoved(int fromPosition, int toPosition) {
        mAdapter.notifyItemMoved(fromPosition, toPosition);
    }

    /** {@inheritDoc} */
    @Override
    public void onChanged(int position, int count, Object payload) {
        mAdapter.notifyItemRangeChanged(position, count, payload);
    }
}

&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코틀린과 함께라면, 어댑터를 사용할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class ProductAdapter(var apples: List&amp;lt;Apples&amp;gt;?= null) : RecyclerView.Adapter&amp;lt;ProductViewHolder&amp;gt;() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductViewHolder {...}

    override fun onBindViewHolder(holder: ProductViewHolder, position: Int) {...}

    override fun getItemCount(): Int {...}

    fun setData(newApples: List&amp;lt;Apples&amp;gt;) {
        apples = newApples
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조각/활동 중&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;val appleAdapter = ProductAdapter()

val recyclerView = binding.appleRecycler // or findViewById or synthetics or whatever. 
recyclerView.adapter = appleAdapter
recyclerView.layoutManager = LinearLayoutManager(requireContext())
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;103&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 fragment의 데이터 변경 사항을 처리하는 중입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;fun updateRecyclerData(apples: List&amp;lt;Apples&amp;gt;){
    adapter.setData(apples)
    adapter.notifyDataSetChanged()
}

updateRecyclerData(applesList)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;104&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 오랜만에 답을 얻었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECTEDROW.add(dt);
notifyItemInserted(position);
SELECTEDROW.remove(position);
notifyItemRemoved(position);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;105&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 잘 작동합니다. 해보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  ArrayList.remove(position);
  notifyItemRemoved(position);
  notifyDataSetChanged();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;106&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 설명에 언급된 내용이 없으면 문제가 다른 곳에 있다는 것을 의미할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;107&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책을 찾은 한 곳은 어댑터에 목록을 설정하는 방법이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 활동에서 목록은 인스턴스 변수였고 데이터가 변경될 때 직접 변경했습니다.&lt;/font&gt;&lt;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;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;addAll()&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 papago-id=&quot;110&quot; papago-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/31367599/&lt;a href=&quot;https://stackoverflow.com/questions/31367599/how-to-update-recyclerview-adapter-data&quot; target=&quot;_blank&quot; papago-id=&quot;110-1&quot;&gt;how-to-update-recyclerview-adapter-data&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/678</guid>
      <comments>https://yoursource.tistory.com/678#entry678comment</comments>
      <pubDate>Mon, 4 Sep 2023 22:59:49 +0900</pubDate>
    </item>
    <item>
      <title>다른 열과 같은 열에 SQL 가입</title>
      <link>https://yoursource.tistory.com/677</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 열과 같은 열에 SQL 가입&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 답이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마감됨&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;2-1&quot; title=&quot;2013-02-05 00:31:24Z&quot; papago-attr-id=&quot;1&quot;&gt;10년 전&lt;/span&gt;에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중복 가능성:&lt;/font&gt;&lt;/strong&gt;&lt;br&gt; &lt;a href=&quot;https://stackoverflow.com/questions/1930809/mysql-join-query-using-like&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql join query가 like를 사용합니까?&lt;/font&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 열에 다른 테이블의 열에 있는 문자열이 포함된 조인을 수행하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT
a.first_name,
b.age
FROM names a
JOIN ages b
ON b.full_name LIKE '%a.first_name%'
&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;MySQL을 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 LIKE '%a.first_name%'는 열의 실제 값이 아닌 문자열 a.first_name만 찾기 때문에 위 쿼리는 작동하지 않습니다.&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;SELECT
    a.first_name,
    b.age
FROM names a
JOIN ages b
ON b.full_name LIKE '%' + a.first_name + '%'
&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;CONCAT를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT
  a.first_name,
  b.age
FROM
  names a JOIN ages b
    ON b.full_name LIKE CONCAT('%', a.first_name, '%')
&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;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_locate&quot; papago-id=&quot;0-1&quot;&gt;또는&lt;/a&gt; LOCATE, 첫 번째 발생 위치를 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a.first_name&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;b.full_name&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;SELECT
  a.first_name,
  b.age
FROM
  names a JOIN ages b
  ON LOCATE(a.first_name, b.full_name)
&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/14696793/&lt;a href=&quot;https://stackoverflow.com/questions/14696793/sql-join-on-a-column-like-another-column&quot; target=&quot;_blank&quot; papago-id=&quot;13-1&quot;&gt;sql-join-on-a-column-like-another-column&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/677</guid>
      <comments>https://yoursource.tistory.com/677#entry677comment</comments>
      <pubDate>Mon, 4 Sep 2023 22:59:01 +0900</pubDate>
    </item>
    <item>
      <title>상위 9개로 정렬된 카운트(count_id)를 기준으로 상위 9개 및 기타를 가져온 다음 다른 카운트를 'club' 범주로 묶는 방법</title>
      <link>https://yoursource.tistory.com/676</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상위 9개로 정렬된 카운트(count_id)를 기준으로 상위 9개 및 기타를 가져온 다음 다른 카운트를 'club' 범주로 묶는 방법&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;SELECT count(entity_id), cim.institute_id, cfi.name_ FROM ci_certification_students cis INNER JOIN ci_certification_master cim ON cis.certificate_id = cim.certificate_id
INNER JOIN ci_finalized_institute cfi ON cfi.institute_id=cim.institute_id
WHERE cis.status_id=4 AND cim.institute_id is not null group by cim.institute_id order by count(entity_id) desc limit 100;
&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;SELECT seqnum,institute_id, (CASE WHEN seqnum &amp;gt; 9 THEN 'others' ELSE name_ END) as name_, sum(total_certi) FROM 
(select count(cis.entity_id) as total_certi, cim.institute_id, cfi.name_ as certiName, ROW_NUMBER() OVER (ORDER BY COUNT(cis.entity_id) desc) as seqnum
FROM certificationdb.ci_certification_students cis 
INNER JOIN ci_certification_master cim ON cis.certificate_id = cim.certificate_id
INNER JOIN certificationdb.ci_finalized_institute cfi ON cim.institute_id=cfi.institute_id
WHERE cis.status_id=4 AND cim.institute_id is not null group by cim.institute_id ORDER BY 
count(cis.entity_id)desc)c GROUP BY (CASE WHEN seqnum&amp;gt; 9 THEN 'others' ELSE name_ END)
ORDER BY seqnum;
&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&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;row_number()&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;SELECT (CASE WHEN seqnum &amp;lt; 10 THEN institute_id END) as institute_id,
       (CASE WHEN seqnum &amp;lt; 10 THEN name_ ELSE 'OTHERS' END) as name,
       SUM(cnt) as cnt
FROM (SELECT cim.institute_id, cfi.name_, COUNT(*) as cnt,
             ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) as seqnum
      FROM ci_certification_students cis INNER JOIN 
           ci_certification_master cim
           ON cis.certificate_id = cim.certificate_id INNER JOIN
           ci_finalized_institute cfi ON 
           cfi.institute_id = cim.institute_id
      WHERE cis.status_id = 4 AND cim.institute_id is not null
      GROUP BY cim.institute_id, cfi.name_
     ) c
GROUP BY institute_id, name
ORDER BY MIN(seqnum);
&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/60043750/&lt;a href=&quot;https://stackoverflow.com/questions/60043750/how-to-fetch-top-9-and-others-based-on-countentity-id-sorted-highest-top-9-and&quot; target=&quot;_blank&quot; papago-id=&quot;6-1&quot;&gt;how-to-fetch-top-9-and-others-based-on-countentity-id-sorted-highest-top-9-and&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/676</guid>
      <comments>https://yoursource.tistory.com/676#entry676comment</comments>
      <pubDate>Mon, 4 Sep 2023 22:56:52 +0900</pubDate>
    </item>
    <item>
      <title>원형으로 글꼴 멋진 아이콘 만들기?</title>
      <link>https://yoursource.tistory.com/675</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;&amp;lt;i class=&quot;fa fa-lock&quot;&amp;gt;&amp;lt;/i&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 아이콘이 항상 테두리가 있는 둥근 원 안에 있는 것이 가능합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 같은 것, 나는 사진을 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/m7xGh.jpg&quot; alt=&quot;enter image description here&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;사용.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;i {
  background-color: white;
  border-radius: 50%;
  border: 1px solid grey;
  padding: 10px;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;효과는 있겠지만, 문제는 아이콘이 항상 텍스트나 요소 옆에 있는 것보다 크다는 것입니다. 해결책이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Font Awesome을 사용하면 다음과 같은 스택형 아이콘을 쉽게 사용할 수 있습니다.&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;업데이트: Font Awesome v6.2.1&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;span class=&quot;fa-stack fa-2x&quot;&amp;gt;
  &amp;lt;i class=&quot;fa-thin fa-circle fa-stack-2x&quot;&amp;gt;&amp;lt;/i&amp;gt;
  &amp;lt;i class=&quot;fa-solid fa-lock fa-stack-1x fa-inverse&quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/span&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;업데이트: Font Awesome v5.15.4&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;span class=&quot;fa-stack fa-2x&quot;&amp;gt;
  &amp;lt;i class=&quot;fal fa-circle fa-stack-2x&quot;&amp;gt;&amp;lt;/i&amp;gt;
  &amp;lt;i class=&quot;fas fa-lock fa-stack-1x fa-inverse&quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/span&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;a href=&quot;https://fontawesome.com/how-to-use/on-the-web/styling/stacking-icons&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-1&quot;&gt;글꼴 놀라운 스택형 아이콘&lt;/a&gt; 참조&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트: - &lt;a href=&quot;http://jsfiddle.net/sampatbadhe/ocftsLfe/&quot; papago-id=&quot;9-1&quot; rel=&quot;noreferrer&quot;&gt;쌓인&lt;/a&gt; 아이콘에 &lt;a href=&quot;http://jsfiddle.net/sampatbadhe/ocftsLfe/&quot; papago-id=&quot;9-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;i.fa {
  display: inline-block;
  border-radius: 60px;
  box-shadow: 0 0 2px #888;
  padding: 0.5em 0.6em;

}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;link href=&quot;https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css&quot; rel=&quot;stylesheet&quot; /&amp;gt;
&amp;lt;i class=&quot;fa fa-wrench&quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;hr&gt; JsFiddle of old answer: http://fiddle.jshell.net/4LqeN/&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 그것을 위해 css나 html 트릭이 필요하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Font Awesome은 그것을 위한 클래스에 빌드되었습니다 - &lt;strong papago-id=&quot;10-1&quot;&gt;fa-circle&lt;/strong&gt; 여러 아이콘을 함께 쌓기 위해 부모 div에서 fa-stack 클래스를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;span class=&quot;fa-stack fa-lg&quot;&amp;gt;
  &amp;lt;i class=&quot;fa fa-circle fa-stack-2x&quot;&amp;gt;&amp;lt;/i&amp;gt;
  &amp;lt;i class=&quot;fa fa-flag fa-stack-1x fa-inverse&quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/span&amp;gt; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;//그리고 이제 원 안에 페이스북 아이콘이 있습니다:)&lt;/font&gt;&lt;/p&gt;&lt;h2&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;em&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;/h2&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;다음을 포함하여 측정에 ems를 사용하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;line-height&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;font-size&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;border-radius&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,와 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;text-align: center&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;#info i {
  font-size: 1.6em;
  width: 1.6em;
  text-align: center;
  line-height: 1.6em;
  background: #666;
  color: #fff;
  border-radius: 0.8em; /* or 50% width &amp;amp; line-height */
}
&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;strong papago-id=&quot;19-0&quot;&gt;업데이트:&lt;/strong&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;Fiddle. Go Play -&amp;gt;&lt;a href=&quot;http://jsfiddle.net/atilkan/zxjcrhga/&quot; papago-id=&quot;21-1&quot; rel=&quot;nofollow noreferrer&quot;&gt; &lt;/a&gt;http://jsfiddle.net/atilkan/&lt;a href=&quot;http://jsfiddle.net/atilkan/zxjcrhga/&quot; papago-id=&quot;21-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;zxjcrhga&lt;/a&gt;/&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 HTML이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;sosial-links&quot;&amp;gt;
    &amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-facebook fa-lg&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-twitter fa-lg&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-google-plus fa-lg&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-pinterest fa-lg&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 CSS가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.sosial-links a{
    display: block;
    float: left;
    width: 36px;
    height: 36px;
    border: 2px solid #909090;
    border-radius: 20px;
    margin-right: 7px; /*space between*/

} 
.sosial-links a i{
    padding: 12px 11px;
    font-size: 20px;
    color: #909090;
}
&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;/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;span {
font-size: 54px;
border-radius: 50%;
border: 10px solid rgb(205, 209, 215);
padding: 30px;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;26-0&quot;&gt;업데이트&lt;/strong&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;최근 플렉스를 배우면 더 깨끗한 방법이 있습니다(테이블은 없고 CSS는 적음).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;포장지를 다음&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display: flex;&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;align-items: center;&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;justify-content: center;&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 papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://jsfiddle.net/7mfbvb35/&quot; papago-id=&quot;31-1&quot; rel=&quot;noreferrer&quot;&gt;업데이트&lt;/a&gt;된 JS &lt;a href=&quot;https://jsfiddle.net/7mfbvb35/&quot; papago-id=&quot;31-1&quot; rel=&quot;noreferrer&quot;&gt;Fiddle&lt;/a&gt; 보기&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전에 아무도 이것을 제안하지 않았다는 것이 이상합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 항상 이것을 하기 위해 테이블을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포장지를 만들기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display: table&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;text-align: center&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;code&gt;vertical-align: middle&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수직 정렬용.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class='wrapper'&amp;gt;
  &amp;lt;i class='icon fa fa-bars'&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 몇몇은 이런 바보들.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.wrapper{
  display: table; 

  i{
    display: table-cell;
    vertical-align: middle;
    text-align: center;
  }

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 이 &lt;a href=&quot;https://jsfiddle.net/bchr4444/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;38-1&quot;&gt;JS 피들&lt;/a&gt;을 보세요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 당신이 사용할 필요가 없는 접근법입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;padding&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설정만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;height&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;width&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 위해&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 내버려 둬.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;flex&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&gt;&lt;/font&gt;&lt;code&gt;margin: 0 auto&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&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.social-links a{
  text-align:center;
	float: left;
	width: 36px;
	height: 36px;
	border: 2px solid #909090;
	border-radius: 100%;
	margin-right: 7px; /*space between*/
    display: flex;
    align-items: flex-start;
    transition: all 0.4s;
    -webkit-transition: all 0.4s;
} 
.social-links a i{
	font-size: 20px;
    align-self:center;
	color: #909090;
    transition: all 0.4s;
    -webkit-transition: all 0.4s;
    margin: 0 auto;
}
.social-links a i::before{
  display:inline-block;
  text-decoration:none;
}
.social-links a:hover{
  background: rgba(0,0,0,0.2);
}
.social-links a:hover i{
  color:#fff;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;link href=&quot;http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css&quot; rel=&quot;stylesheet&quot;/&amp;gt;

&amp;lt;div class=&quot;social-links&quot;&amp;gt;
    &amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-facebook fa-lg&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-twitter fa-lg&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-google-plus fa-lg&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-pinterest fa-lg&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 예시는 저에게 별로 효과가 없었습니다. 이것은 제가 만든 버전입니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;social-links&quot;&amp;gt;
    &amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-facebook fa-lg&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-twitter fa-lg&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-google-plus fa-lg&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-pinterest fa-lg&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&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;CSS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.social-links {
    text-align:center;
}

.social-links a{
    display: inline-block;
    width:50px;
    height: 50px;
    border: 2px solid #909090;
    border-radius: 50px;
    margin-right: 15px;

}
.social-links a i{
    padding: 18px 11px;
    font-size: 20px;
    color: #909090;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 먹어보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&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;icon-2x-circle&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-check fa-2x&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/div&amp;gt;
&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;CSS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;i {
    width: 30px;
    height: 30px;
}

.icon-2x-circle {
    text-align: center;
    padding: 3px;
    display: inline-block;
    -moz-border-radius: 100px;
    -webkit-border-radius: 100px;
    border-radius: 100px;
    -moz-box-shadow: 0px 0px 2px #888;
    -webkit-box-shadow: 0px 0px 2px #888;
    box-shadow: 0px 0px 2px #888;
}
&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;Font Awesome 아이콘은 :before로 삽입됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;52-1&quot;&gt;따라서&lt;/strong&gt; i &lt;strong papago-id=&quot;52-3&quot;&gt;또는&lt;/strong&gt; i와 같은 스타일을 지정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.i {
   background: #fff;
   border-radius: 50%;
   display: inline-block;
   height: 20px;   
   width: 20px;
}

&amp;lt;a href=&quot;#&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-facebook fa-lg&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;
&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;&amp;lt;a class=&quot;facebook-share-button social-icons&quot; href=&quot;#&quot; target=&quot;_blank&quot;&amp;gt;
    &amp;lt;i class=&quot;fab fa-facebook socialicons&quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 CSS는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.social-icons {
display: inline-block;border-radius: 25px;box-shadow: 0px 0px 2px #888;
padding: 0.5em;
background: #0D47A1;
font-size: 20px;
}
.socialicons{color: white;}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 데이브 에버릿의 &quot;줄 높이&quot;에 대한 답변이 마음에 들지만, &quot;높이&quot;를 지정한 다음 &quot;!중요&quot;를 줄 높이에 추가해야 합니다...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.cercle {
    font-size: 2em;
    width: 2em;
    height: 2em;
    text-align: center;
    line-height: 2em!important;
    background: #666;
    color: #fff;
    border-radius: 2em;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 제가 지금까지 찾은 것 중 가장 좋고 정확한 해결책입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.social .fa {
      margin-right: 1rem;
      border: 2px #fff solid;
      border-radius: 50%;
      height: 20px;
      width: 20px;
      line-height: 20px;
      text-align: center;
      padding: 0.5rem;
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 이 CSS 클래스를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.i{
    display: flex;
    padding: .5rem;
    background-color: #888;
    border-radius: 50%;
}
&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;URL : https://stackoverflow.com/questions/21905710/&lt;a href=&quot;https://stackoverflow.com/questions/21905710/make-font-awesome-icons-in-a-circle&quot; target=&quot;_blank&quot; papago-id=&quot;60-1&quot;&gt;make-font-awesome-icons-in-a-circle&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/675</guid>
      <comments>https://yoursource.tistory.com/675#entry675comment</comments>
      <pubDate>Mon, 4 Sep 2023 22:56:15 +0900</pubDate>
    </item>
    <item>
      <title>OpenCV &amp;amp; Python - 이미지가 너무 커서 표시할 수 없습니다.</title>
      <link>https://yoursource.tistory.com/674</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OpenCV &amp;amp; Python - 이미지가 너무 커서 표시할 수 없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지는 6400 x 3200이고 화면은 1280 x 800입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 표시용으로만 이미지 크기를 조정해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 Python과 OpenCV 2.4.9를 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://docs.opencv.org/2.4/modules/highgui/doc/user_interface.html&quot; rel=&quot;noreferrer&quot; title=&quot;OpenCV 설명서&quot; papago-id=&quot;1-1&quot; papago-attr-id=&quot;2&quot;&gt;OpenCV 설명서&lt;/a&gt;에 따르면,&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;화면 해상도보다 큰 이미지를 표시해야 하는 경우, imshow 전에 Window(&quot;, WINDOW_NORMAL)라는 이름을 호출해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게 하고 있는데 화면에 이미지가 안 맞고 너무 커서 일부만 보여요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 cv2.resize로 시도해봤어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;창문, 하지만 아무런 차이가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import cv2
cv2.namedWindow(&quot;output&quot;, cv2.WINDOW_NORMAL)        # Create window with freedom of dimensions
# cv2.resizeWindow(&quot;output&quot;, 400, 300)              # Resize window to specified dimensions
im = cv2.imread(&quot;earth.jpg&quot;)                        # Read image
cv2.imshow(&quot;output&quot;, im)                            # Show image
cv2.waitKey(0)                                      # Display the image infinitely until any keypress
&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;import cv2
cv2.namedWindow(&quot;output&quot;, cv2.WINDOW_NORMAL)    # Create window with freedom of dimensions
im = cv2.imread(&quot;earth.jpg&quot;)                    # Read image
imS = cv2.resize(im, (960, 540))                # Resize image
cv2.imshow(&quot;output&quot;, imS)                       # Show image
cv2.waitKey(0)                                  # Display the image infinitely until any keypress
&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;된 다답은고답수다니행합을된정른▁a다▁perform▁the니▁fixed수▁other합▁answers.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(width, height)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;크기를 조정합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 세로 비율을  이 크기를 하세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def ResizeWithAspectRatio(image, width=None, height=None, inter=cv2.INTER_AREA):
    dim = None
    (h, w) = image.shape[:2]

    if width is None and height is None:
        return image
    if width is None:
        r = height / float(h)
        dim = (int(w * r), height)
    else:
        r = width / float(w)
        dim = (width, int(h * r))

    return cv2.resize(image, dim, interpolation=inter)
&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;image = cv2.imread('img.png')
resize = ResizeWithAspectRatio(image, width=1280) # Resize by width OR
# resize = ResizeWithAspectRatio(image, height=1280) # Resize by height 

cv2.imshow('resize', resize)
cv2.waitKey()
&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;cv2.namedWindow('finalImg', cv2.WINDOW_NORMAL)
cv2.imshow(&quot;finalImg&quot;,finalImg)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 방법은 ㅠㅠㅠㅠㅠ&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;resizeWindow&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나를 위해 일한 것은 그 후에 그것을 갖는 것이었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;imshow&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 사용하는 주문은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# Create a Named Window
cv2.namedWindow(win_name, cv2.WINDOW_NORMAL)

# Move it to (X,Y)
cv2.moveWindow(win_name, X, Y)
    
# Show the Image in the Window
cv2.imshow(win_name, image)
    
# Resize the Window
cv2.resizeWindow(win_name, width, height)
    
# Wait for &amp;lt;&amp;gt; miliseconds
cv2.waitKey(wait_time)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OpenCV는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;cv2.namedWindow()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;창 개체만 만들 뿐 원본 이미지의 크기는 조정되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;cv2.resize(img, resolution)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제를 해결하기 위해.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 740*411 해상도 이미지를 보여줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;image = cv2.imread(&quot;740*411.jpg&quot;)
cv2.imshow(&quot;image&quot;, image)
cv2.waitKey(0)
cv2.destroyAllWindows()
&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;여기서는 크기 조정 후 100 * 200 해상도 이미지를 표시합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해상도 매개 변수 사용 열을 먼저 기억한 다음 행을 기억하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QHIcB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QHIcB.png&quot; alt=&quot;Image after resizing&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;image = cv2.imread(&quot;740*411.jpg&quot;)
image = cv2.resize(image, (200, 100))
cv2.imshow(&quot;image&quot;, image)
cv2.waitKey(0)
cv2.destroyAllWindows()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드는 가로 세로 비율을 유지하고 화면 영역의 지정된 부분만 차지할 수 있도록 이미지 크기를 조정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;화면 크기와 이미지 크기에 따라 자동으로 조정됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;영역 변수를 사용하여 이미지가 차지할 수 있는 최대 화면 영역을 변경합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예제에서는 화면 크기의 1/4에 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import cv2
import tkinter as tk
from math import *

img = cv2.imread(&quot;test.jpg&quot;)
area = 0.25

h, w = img.shape[:2]
root = tk.Tk()
screen_h = root.winfo_screenheight()
screen_w = root.winfo_screenwidth()
vector = sqrt(area)
window_h = screen_h * vector
window_w = screen_w * vector

if h &amp;gt; window_h or w &amp;gt; window_w:
    if h / window_h &amp;gt;= w / window_w:
        multiplier = window_h / h
    else:
        multiplier = window_w / w
    img = cv2.resize(img, (0, 0), fx=multiplier, fy=multiplier)

cv2.imshow(&quot;output&quot;, img)
cv2.waitKey(0)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;면적이 여전히 매개변수이지만 창 높이와 창 너비도 마찬가지인 비슷한 기능을 만들었습니다.&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;영역을 입력하지 않으면 이미지를 내부에 넣을 창 크기의 정의된 높이와 너비(window_h, window_w)를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 파라미터에 대해 입력이 제공되면 '영역'이 우선됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import cv2
import tkinter as tk
from math import *

def resize_image(img, area=0.0, window_h=0, window_w=0):
    h, w = img.shape[:2]
    root = tk.Tk()
    screen_h = root.winfo_screenheight()
    screen_w = root.winfo_screenwidth()

    if area != 0.0:
        vector = math.sqrt(area)
        window_h = screen_h * vector
        window_w = screen_w * vector

    if h &amp;gt; window_h or w &amp;gt; window_w:
        if h / window_h &amp;gt;= w / window_w:
            multiplier = window_h / h
        else:
            multiplier = window_w / w
        img = cv2.resize(img, (0, 0), fx=multiplier, fy=multiplier)

    return img

# using area
initial_image = cv2.imread(&quot;test.jpg&quot;)
resized_image = resize_image(initial_image, area=0.25))
cv2.imshow(&quot;output&quot;, resized_image)
cv2.waitKey(0)

# using window height and width
initial_image = cv2.imread(&quot;test.jpg&quot;)
resized_image = resize_image(initial_image, window_h = 480, window_w = 270))
cv2.imshow(&quot;output&quot;, resized_image)
cv2.waitKey(0)
&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;opencvlib은 메소드에 전달된 매개 변수에 상당히 민감한 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드는 opencv 4.3.0을 사용하여 작동했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;win_name = &quot;visualization&quot;  #  1. use var to specify window name everywhere
cv2.namedWindow(win_name, cv2.WINDOW_NORMAL)  #  2. use 'normal' flag
img = cv2.imread(filename)
h,w = img.shape[:2]  #  suits for image containing any amount of channels
h = int(h / resize_factor)  #  one must compute beforehand
w = int(w / resize_factor)  #  and convert to INT
cv2.resizeWindow(win_name, w, h)  #  use variables defined/computed BEFOREHAND
cv2.imshow(win_name, img)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;image = cv2.imread(&quot;img/Demo.jpg&quot;)
image = cv2.resize(image,(240,240))
&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;image&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 크기가 조정됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;표시하면 240x240으로 렌더링됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;cv2.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;WINDOW_NORMAL 옵션은 올바르게 작동하지만 창을 처음으로 표준 크기로 표시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴퓨터의 다른 창처럼 창의 크기를 조정하는 경우 크기를 조정할 창의 가장자리 위에 마우스를 놓은 다음 원하는 위치로 마우스를 끕니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 크기로 창의 너비와 높이를 모두 지정할 경우.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음에 코드를 실행하여 창을 새로 고칠 때 OpenCV는 마지막으로 표시되거나 수정된 시간의 크기로 창을 생성합니다.&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;img = cv2.imread(&quot;Fab2_0.1 X 1.03MM GRID.jpg&quot;, cv2.IMREAD_GRAYSCALE)
image_scale_down = 3
x = (int)(img.shape[0]/image_scale_down)
y = (int)(img.shape[1]/image_scale_down)
image = cv2.resize(img, (x,y))
cv2.imshow(&quot;image_title&quot;, image)
cv2.waitKey(5000)
cv2.destroyAllWindows()
&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;가장 인기 있는 답변은 완벽합니다! 저는 단지 비율에 따라 &quot;동적인&quot; 크기 조정을 원하는 사람들을 위해 제 코드를 추가할 뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import cv2
from win32api import GetSystemMetrics

def get_resized_for_display_img(img):
    screen_w, screen_h = GetSystemMetrics(0), GetSystemMetrics(1)
    print(&quot;screen size&quot;,screen_w, screen_h)
    h,w,channel_nbr = img.shape
    # img get w of screen and adapt h
    h = h * (screen_w / w)
    w = screen_w
    if h &amp;gt; screen_h: #if img h still too big
        # img get h of screen and adapt w
        w = w * (screen_h / h)
        h = screen_h
    w, h = w*0.9, h*0.9 # because you don't want it to be that big, right ?
    w, h = int(w), int(h) # you need int for the cv2.resize
    return cv2.resize(img, (w, h))
&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;img = cv2.resize(img,(1280,800))
&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;from PIL import Image

Image.fromarray(image).show()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/35180764/&lt;a href=&quot;https://stackoverflow.com/questions/35180764/opencv-python-image-too-big-to-display&quot; target=&quot;_blank&quot; papago-id=&quot;34-1&quot;&gt;opencv-python-image-too-big-to-display&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/674</guid>
      <comments>https://yoursource.tistory.com/674#entry674comment</comments>
      <pubDate>Mon, 4 Sep 2023 22:55:04 +0900</pubDate>
    </item>
    <item>
      <title>시퀀스 점(c)</title>
      <link>https://yoursource.tistory.com/673</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시퀀스 점(c)&lt;/font&gt;&lt;/h2&gt;
&lt;blockquote&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;/blockquote&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 무엇을 의미합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 그것을 간단한 말로 설명해 주시겠습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시퀀스 지점이 발생하면 기본적으로 이전의 모든 작업이 완료되었음을 의미합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시퀀스 포인트를 개입시키지 않고 변수를 두 번 변경하는 것은 정의되지 않은 동작의 한 예입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;i = i++;&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;i&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;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제를 일으킬 수 있는 변수를 두 번 변경하는 &lt;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;이 표준은 사물의 순서를 설명할 때 &quot;값 &lt;em papago-id=&quot;8-3&quot;&gt;계산&lt;/em&gt; 및 부작용&quot;이라는 용어를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 식에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a = i + i++&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;i&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;i++&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;/blockquote&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위키백과에는 C와 C++ 표준의 &lt;a href=&quot;http://en.wikipedia.org/wiki/Sequence_point&quot; papago-id=&quot;12-1&quot; rel=&quot;noreferrer&quot;&gt;시퀀스&lt;/a&gt; 포인트 &lt;a href=&quot;http://en.wikipedia.org/wiki/Sequence_point&quot; papago-id=&quot;12-1&quot; rel=&quot;noreferrer&quot;&gt;목록&lt;/a&gt;이 있지만 최종 목록은 항상 ISO 표준에서 가져와야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C11 부록 C(문단 참조)에서:&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;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 호출에서 함수 지정자의 평가와 실제 인수 사이의 실제 호출&lt;/font&gt;&lt;/li&gt; 
 &lt;li&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;&amp;amp;&amp;amp;&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;||&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;,&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조건부의 첫 번째 피연산자의 평가 사이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;?:&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;연산자 및 두 번째 및 세 번째 피연산자 중 평가된 것.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;완전한 선언자의 끝;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&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;다음은 전체 표현식입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;  &lt;/font&gt;&lt;/font&gt;&lt;ul&gt; 
   &lt;li papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이니셜라이저&lt;/font&gt;&lt;/li&gt; 
   &lt;li papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표현식 진술의 표현.&lt;/font&gt;&lt;/li&gt; 
   &lt;li&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;if&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;switch&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;/li&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 지배적인 표현&lt;/font&gt;&lt;/font&gt;&lt;code&gt;while&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 do 문;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;a의 각 표현들&lt;/font&gt;&lt;/font&gt;&lt;code&gt;for&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;진술;&lt;/font&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;/li&gt; 
 &lt;li papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라이브러리 함수가 반환되기 직전;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포맷된 각 입력/출력 함수 변환 지정자와 관련된 작업 후;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비교 함수에 대한 각 호출 직전과 직후, 그리고 비교 함수에 대한 호출과 해당 호출에 대한 인수로 전달된 개체의 이동 사이에도 마찬가지입니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시퀀스 포인트에 대해 주의해야 할 중요한 점은 시퀀스 포인트가 전역적인 것이 아니라 일련의 로컬 제약 조건으로 간주되어야 한다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 문에서&lt;/font&gt;&lt;/p&gt; 
&lt;pre papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;a = f1(x++) + f2(y++);&lt;/font&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;x++의 평가와 f1에 대한 호출 사이에는 시퀀스 포인트가 있고, y++의 평가와 f2에 대한 호출 사이에는 또 다른 시퀀스 포인트가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 f2가 호출되기 전에 x가 증가할지 아니면 f2가 호출된 후에 y가 증가할지에 대한 보장은 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 f1이 y 또는 f2를 변경한다면, 결과는 정의되지 않을 것입니다. (예를 들어, 컴파일러의 생성된 코드가 read x와 y, increment x, call f1, 이전에 읽었던 값에 대해 y를 확인하고, 만약 변경되었다면, 바니 비디오와 상품을 모두 찾아서 파괴하는 광란을 일으키는 것은 합법적일 것입니다.)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로 그렇게 할 수 있는 코드, 아아, 하지만 그것은 표준에 따라 허용될 것이다.)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;paxdiablo의 답변을 예로 들어 확장합니다.&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;x = i++ * ++j;
&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; 다음의 결과를 할당합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i * (j+1)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;i에 1을 추가하고 j에 1을 추가하는 x에 1을 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부작용이 적용되는 순서는 지정되지 않았습니다. i와 j는 평가 직후에 각각 증가하거나, 둘 다 평가된 후 x가 할당되기 전까지 증가하지 않거나, x가 할당되기 전까지 증가하지 않을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시퀀스 점은 부작용이 적용된 순서에 관계없이 모든 부작용이 적용된 점(x, i 및 j가 모두 업데이트됨)입니다.&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;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3575350/&lt;a href=&quot;https://stackoverflow.com/questions/3575350/sequence-points-in-c&quot; target=&quot;_blank&quot; papago-id=&quot;45-1&quot;&gt;sequence-points-in-c&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/673</guid>
      <comments>https://yoursource.tistory.com/673#entry673comment</comments>
      <pubDate>Mon, 4 Sep 2023 22:54:23 +0900</pubDate>
    </item>
    <item>
      <title>Android Fragment 핸들 뒤로 버튼 누르기</title>
      <link>https://yoursource.tistory.com/672</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android Fragment 핸들 뒤로 버튼 누르기&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 답이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/5448653/how-to-implement-onbackpressed-in-fragments&quot; dir=&quot;ltr&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Fragments에서 BackPressed()를 구현하는 방법은 무엇입니까?&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(58개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마감됨&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;4-1&quot; title=&quot;2016-06-17 18:08:52Z&quot; papago-attr-id=&quot;1&quot;&gt;7년 전&lt;/span&gt;에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 활동에 약간의 파편이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[1], [2], [3], [4], [5], [6]
&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;그리고 Back Button(뒤로 버튼)에서 I를 누르면 현재 활성 fragment가 [2]인 경우 [2]에서 [1]로 되돌아가거나 다른 작업을 수행하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 하는 가장 좋은 방법은 무엇입니까?&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;: 응용 프로그램이 [3]...[6]에서 [2]로 되돌아가면 안 됩니다.&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;Fragments할 때 Fragments를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;addToBackStack()&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;FragmentTransaction&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;FragmentTransaction tx = fragmentManager.beginTransation();
tx.replace( R.id.fragment, new MyFragment() ).addToBackStack( &quot;tag&quot; ).commit();
&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;제어가 를 들어  Fragment가 에는 보가예다일경필우한요제가어경우싶상은로뒤키누고를르때될시표세한부예▁an▁if가),경▁set경(▁()우▁control싶▁the우▁you▁you보다▁can은▁detailed▁back▁more▁keyi:▁require고르,▁suppress),&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;OnKeyListener&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조각의 상위 보기에서:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//You need to add the following line for this solution to work; thanks skayred
fragment.getView().setFocusableInTouchMode(true);
fragment.getView().requestFocus();
fragment.getView().setOnKeyListener( new OnKeyListener()
{
    @Override
    public boolean onKey( View v, int keyCode, KeyEvent event )
    {
        if( keyCode == KeyEvent.KEYCODE_BACK )
        {
            return true;
        }
        return false;
    }
} );
&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;private final static String TAG_FRAGMENT = &quot;TAG_FRAGMENT&quot;;

private void showFragment() {
    final Myfragment fragment = new MyFragment();
    final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment, fragment, TAG_FRAGMENT);
    transaction.addToBackStack(null);
    transaction.commit();
}

@Override
public void onBackPressed() {
    final Myfragment fragment = (Myfragment) getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT);

    if (fragment.allowBackPressed()) { // and then you define a method allowBackPressed with the logic to allow back pressed or not
        super.onBackPressed();
    }
}
&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;fragment 뷰에 대해 onKey 메서드를 재정의하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    view.setFocusableInTouchMode(true);
    view.requestFocus();
    view.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                Log.i(tag, &quot;keyCode: &quot; + keyCode);
                if( keyCode == KeyEvent.KEYCODE_BACK &amp;amp;&amp;amp; event.getAction() == KeyEvent.ACTION_UP) {
                    Log.i(tag, &quot;onKey Back listener is working!!!&quot;);
                    getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
                    return true;
                } 
                return false;
            }
        });
&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;b papago-id=&quot;16-1&quot;&gt;addToBackStack&lt;/b&gt; 메서드를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;getFragmentManager().beginTransaction().replace(R.id.content_frame, fragment).addToBackStack(&quot;my_fragment&quot;).commit();
&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;@Override
public void onBackPressed() {
    if (getParentFragmentManager().getBackStackEntryCount() &amp;gt; 0) {
        getParentFragmentManager().popBackStack();
    } else {
        super.onBackPressed();
    }
}
&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;하드웨어 Back 키 이벤트를 처리하려면 fragment의 onActivityCreated() 메서드에서 다음 코드를 수행해야 합니다.&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;Action_Down 또는 Action_도 확인해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;UP 이벤트.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;확인하지 않을 경우 onKey() Method에서 두 번 호출됩니다.&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;또한 루트 뷰(getView()에 포커스가 포함되지 않으면 작동하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨트롤을 클릭한 경우 다시 getView().requestFocus()를 사용하여 루트 뷰에 포커스를 지정해야 합니다. 이 후에는 onKeydown()만 호출됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;getView().setFocusableInTouchMode(true);
getView().requestFocus();

getView().setOnKeyListener(new OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (event.getAction() == KeyEvent.ACTION_DOWN) {
                    if (keyCode == KeyEvent.KEYCODE_BACK) {
                        Toast.makeText(getActivity(), &quot;Back Pressed&quot;, Toast.LENGTH_SHORT).show();
                    return true;
                    }
                }
                return false;
            }
        });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저를 위해 아주 잘 일하고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인터페이스 만들기:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뒤로 단추 처리기&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인터페이스&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public interface BackButtonHandlerInterface {
    void addBackClickListener (OnBackClickListener onBackClickListener);
    void removeBackClickListener (OnBackClickListener onBackClickListener);
}
&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;OnBackClick 수신기&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public interface OnBackClickListener {
     boolean onBackClick();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;25-1&quot;&gt;활동 &lt;/strong&gt;중:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class MainActivity extends AppCompatActivity implements BackButtonHandlerInterface {

    private ArrayList&amp;lt;WeakReference&amp;lt;OnBackClickListener&amp;gt;&amp;gt; backClickListenersList = new ArrayList&amp;lt;&amp;gt;();

    @Override
    public void addBackClickListener(OnBackClickListener onBackClickListener) {
        backClickListenersList.add(new WeakReference&amp;lt;&amp;gt;(onBackClickListener));
    }

    @Override
    public void removeBackClickListener(OnBackClickListener onBackClickListener) {
        for (Iterator&amp;lt;WeakReference&amp;lt;OnBackClickListener&amp;gt;&amp;gt; iterator = backClickListenersList.iterator();
         iterator.hasNext();){
            WeakReference&amp;lt;OnBackClickListener&amp;gt; weakRef = iterator.next();
            if (weakRef.get() == onBackClickListener){
                iterator.remove();
            }
        }
    }

    @Override
    public void onBackPressed() {
        if(!fragmentsBackKeyIntercept()){
            super.onBackPressed();
        }
    }

    private boolean fragmentsBackKeyIntercept() {
        boolean isIntercept = false;
        for (WeakReference&amp;lt;OnBackClickListener&amp;gt; weakRef : backClickListenersList) {
            OnBackClickListener onBackClickListener = weakRef.get();
            if (onBackClickListener != null) {
                boolean isFragmIntercept = onBackClickListener.onBackClick();
                if (!isIntercept) isIntercept = isFragmIntercept;
            }
        }
        return isIntercept;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;26-1&quot;&gt;조각&lt;/strong&gt; 내:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class MyFragment extends Fragment implements OnBackClickListener{

    private BackButtonHandlerInterface backButtonHandler;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        backButtonHandler = (BackButtonHandlerInterface) activity;
        backButtonHandler.addBackClickListener(this);
    }

    @Override
    public void onDetach() {
        super.onDetach();
        backButtonHandler.removeBackClickListener(this);
        backButtonHandler = null;
    }

    @Override
    public boolean onBackClick() {
        //This method handle onBackPressed()! return true or false
        return false;
    }

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;갱신하다&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://developer.android.com/guide/navigation/navigation-custom-back&quot; rel=&quot;noreferrer&quot; papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 지정 후방 탐색 제공&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class MyFragment : Fragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // This callback will only be called when MyFragment is at least Started.
        val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
            // Handle the back button event
        }

        // The callback can be enabled or disabled here or in the lambda
    }

}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위한 가장 이상적인 방법은 &lt;a href=&quot;https://stackoverflow.com/questions/9703498/fragment-which-callback-invoked-when-press-back-button-customize-it/10100254#10100254&quot; papago-id=&quot;29-1&quot;&gt;다음&lt;/a&gt;과 같습니다: 프래그먼트:&lt;a href=&quot;https://stackoverflow.com/questions/9703498/fragment-which-callback-invoked-when-press-back-button-customize-it/10100254#10100254&quot; papago-id=&quot;29-1&quot;&gt; 뒤로 &lt;/a&gt;버튼을 &lt;a href=&quot;https://stackoverflow.com/questions/9703498/fragment-which-callback-invoked-when-press-back-button-customize-it/10100254#10100254&quot; papago-id=&quot;29-1&quot;&gt;누르고 사용자 지정&lt;/a&gt;할 때 &lt;a href=&quot;https://stackoverflow.com/questions/9703498/fragment-which-callback-invoked-when-press-back-button-customize-it/10100254#10100254&quot; papago-id=&quot;29-1&quot;&gt;호출되는 콜백&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class MyActivity extends Activity
{
    //...
    //Defined in Activity class, so override
    @Override
    public void onBackPressed()
    {
        super.onBackPressed();
        myFragment.onBackPressed();
    }
}

public class MyFragment extends Fragment
{
    //Your created method
    public static void onBackPressed()
    {
        //Pop Fragments off backstack and do your other checks
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; @Override
    public void onResume() {

        super.onResume();

        getView().setFocusableInTouchMode(true);
        getView().requestFocus();
        getView().setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {

                if (event.getAction() == KeyEvent.ACTION_UP &amp;amp;&amp;amp; keyCode == KeyEvent.KEYCODE_BACK){

                    if (mDrawerLayout.isDrawerOpen(GravityCompat.START)){
                        mDrawerLayout.closeDrawer(GravityCompat.START);
                    }
                    return true;
                }

                return false;
            }
        });
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt; &lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 솔루션을 살펴본 후에 훨씬 더 간단한 솔루션이 있다는 것을 깨달았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 fragment를 호스팅하는 활동의 onBackPressed()에서 백프레스를 방지할 fragment를 찾습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;발견되면 그냥 돌아가세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 이 조각에 대해 popBackStack이 발생하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  @Override
public void onBackPressed() {

        Fragment1 fragment1 = (Fragment1) getFragmentManager().findFragmentByTag(“Fragment1”);
        if (fragment1 != null)
            return;

        if (getFragmentManager().getBackStackEntryCount() &amp;gt; 0){
            getFragmentManager().popBackStack();

        }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 조각 및/또는 활동에서 백프레스를 처리할 수 있는 작은 라이브러리를 만들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용은 Gradle 파일에 종속성을 추가하는 것만큼 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;compile 'net.skoumal.fragmentback:fragment-back:0.1.0'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 단편이 각을구니다합현을 구현하도록 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BackFragment&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;pre&gt;&lt;code&gt;public abstract class MyFragment extends Fragment implements BackFragment {

    public boolean onBackPressed() {

        // -- your code --

        // return true if you want to consume back-pressed event
        return false;
    }

    public int getBackPriority() {
        return NORMAL_BACK_PRIORITY;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;백프레스에 대해 단편에 알립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class MainActivity extends AppCompatActivity {

    @Override
    public void onBackPressed() {
        // first ask your fragments to handle back-pressed event
        if(!BackFragmentHelper.fireOnBackPressedEvent(this)) {
            // lets do the default back action if fragments don't consume it
            super.onBackPressed();
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용 및 기타 사용 사례는 GitHub 페이지를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/skoumalcz/fragment-back&quot; rel=&quot;noreferrer&quot; papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/skoumalcz/fragment-back&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 당신은 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getSupportFragmentManager().getBackStackEntryCount()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수행할 작업 확인하기&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
    public void onBackPressed() {

        logger.d(&quot;@@@@@@ back stack entry count : &quot; + getSupportFragmentManager().getBackStackEntryCount());

        if (getSupportFragmentManager().getBackStackEntryCount() != 0) {

            // only show dialog while there's back stack entry
            dialog.show(getSupportFragmentManager(), &quot;ConfirmDialogFragment&quot;);

        } else if (getSupportFragmentManager().getBackStackEntryCount() == 0) {

            // or just go back to main activity
            super.onBackPressed();
        }
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 트랜잭션을 백스택에 추가하는 흐름을 관리하는 경우 사용자가 뒤로 버튼을 누를 때 이전 조각을 표시하기 위해 다음과 같은 작업을 수행할 수 있습니다(홈 버튼도 매핑할 수 있음).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() &amp;gt; 0)
        getFragmentManager().popBackStack();
    else
        super.onBackPressed();
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정적 프래그먼트를 사용하는 사용자용&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 정적인 파편을 가지고 있다면 그것이 더 좋을 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;조각의 인스턴스 개체 만들기&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private static MyFragment instance=null;
&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;MyFragment의 onCreate()에서 해당 인스턴스를 초기화&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  instance=this;
&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; public static MyFragment getInstance(){
   return instance;
}
&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&gt;&lt;code&gt;public boolean allowBackPressed(){
    if(allowBack==true){
        return true;
    }
    return false;
}


 //allowBack is a boolean variable that will be set to true at the action 
 //where you want that your backButton should not close activity. In my case I open 
 //Navigation Drawer then I set it to true. so when I press backbutton my 
 //drawer should be get closed

public void performSomeAction(){
    //.. Your code
    ///Here I have closed my drawer
}
&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;@Override
public void onBackPressed() {

    if (MyFragment.getInstance().allowBackPressed()) { 
        MyFragment.getInstance().performSomeAction();
    }
    else{
        super.onBackPressed();
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업 코드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;package com.example.keralapolice;

import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentManager.OnBackStackChangedListener;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

public class ChiefFragment extends Fragment {
    View view;

    // public OnBackPressedListener onBackPressedListener;

    @Override
    public View onCreateView(LayoutInflater inflater,
            ViewGroup container, Bundle args) {

        view = inflater.inflate(R.layout.activity_chief, container, false);
        getActivity().getActionBar().hide();
        view.setFocusableInTouchMode(true);
        view.requestFocus();
        view.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                Log.i(getTag(), &quot;keyCode: &quot; + keyCode);
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                    getActivity().getActionBar().show();
                    Log.i(getTag(), &quot;onKey Back listener is working!!!&quot;);
                    getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
                    // String cameback=&quot;CameBack&quot;;
                    Intent i = new Intent(getActivity(), home.class);
                    // i.putExtra(&quot;Comingback&quot;, cameback);
                    startActivity(i);
                    return true;
                } else {
                    return false;
                }
            }
        });
        return view;
    }
}
&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;제 생각에 가장 쉬운 방법은 인터페이스를 만들고 Activity에서 fragment가 인터페이스 유형인지 확인하고, 만약 그렇다면 pop을 처리하기 위해 메서드를 호출하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 fragment에 구현할 인터페이스는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public interface BackPressedFragment {

    // Note for this to work, name AND tag must be set anytime the fragment is added to back stack, e.g.
    // getActivity().getSupportFragmentManager().beginTransaction()
    //                .replace(R.id.fragment_container, MyFragment.newInstance(), &quot;MY_FRAG_TAG&quot;)
    //                .addToBackStack(&quot;MY_FRAG_TAG&quot;)
    //                .commit();
    // This is really an override. Should call popBackStack itself.
    void onPopBackStack();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구현 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class MyFragment extends Fragment implements BackPressedFragment
    @Override
    public void onPopBackStack() {
        /* Your code goes here, do anything you want. */
        getActivity().getSupportFragmentManager().popBackStack();
}
&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;또한 활동에서 팝업을 처리할 때(BackPressed와 Options 모두에서 발생할 수 있음)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;항목 선택됨), 다음 방법을 사용하여 백스택을 팝합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public void popBackStack() {
    FragmentManager fm = getSupportFragmentManager();
    // Call current fragment's onPopBackStack if it has one.
    String fragmentTag = fm.getBackStackEntryAt(fm.getBackStackEntryCount() - 1).getName();
    Fragment currentFragment = getSupportFragmentManager().findFragmentByTag(fragmentTag);
    if (currentFragment instanceof BackPressedFragment)
        ((BackPressedFragment)currentFragment).onPopBackStack();
    else
        fm.popBackStack();
}
&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;Sliding Menu와 Fragment와 함께 작업하고 있습니다. 여기서 제 사례를 제시하고 누군가에게 도움이 되기를 바랍니다.&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;[Back](뒤로) 키를 눌렀을 때의 로직:&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;53&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;54&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;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;슬라이딩 메뉴는 표시되지 않으며, 현재 Fragment는 #0이며, 원래 [Back](뒤로) 키를 수행합니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;public class Main extends SherlockFragmentActivity
{
  private SlidingMenu menu=null;
  Constants.VP=new ViewPager(this);

  //Some stuff...

  @Override
  public void onBackPressed()
  {
    if(menu.isMenuShowing())
    {
      menu.showContent(true); //Close SlidingMenu when menu showing
      return;
    }
    else
    {
      int page=Constants.VP.getCurrentItem();
      if(page&amp;gt;0)
      {
        Constants.VP.setCurrentItem(page-1, true); //Show previous fragment until Fragment#0
        return;
      }
      else
      {super.onBackPressed();} //If SlidingMenu is not showing and current Fragment is #0, do the original [Back] key does. In my case is exit from APP
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 매우 우수하고 신뢰할 수 있는 솔루션입니다.&lt;a href=&quot;http://vinsol.com/blog/2014/10/01/handling-back-button-press-inside-fragments/&quot; papago-id=&quot;56-1&quot; rel=&quot;nofollow&quot;&gt; &lt;/a&gt;http://vinsol.com/blog/2014/10/01/&lt;a href=&quot;http://vinsol.com/blog/2014/10/01/handling-back-button-press-inside-fragments/&quot; papago-id=&quot;56-1&quot; rel=&quot;nofollow&quot;&gt;handling-back-button-press-inside-fragments&lt;/a&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;그 남자는 backPress 동작을 처리하는 추상 조각을 만들었고 전략 패턴을 사용하여 활성 조각 사이를 전환하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러분 중 몇몇에게는 추상적인 수업에서 약간의 단점이 있을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;링크의 솔루션은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Abstract Fragment handling the back presses

public abstract class BackHandledFragment extends Fragment {
    protected BackHandlerInterface backHandlerInterface;
    public abstract String getTagText();
    public abstract boolean onBackPressed();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(!(getActivity()  instanceof BackHandlerInterface)) {
            throw new ClassCastException(&quot;Hosting activity must implement BackHandlerInterface&quot;);
        } else {
            backHandlerInterface = (BackHandlerInterface) getActivity();
        }
    }

    @Override
    public void onStart() {
        super.onStart();

        // Mark this fragment as the selected Fragment.
        backHandlerInterface.setSelectedFragment(this);
    }

    public interface BackHandlerInterface {
        public void setSelectedFragment(BackHandledFragment backHandledFragment);
    }
}   
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;활동에서의 사용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// BASIC ACTIVITY CODE THAT LETS ITS FRAGMENT UTILIZE onBackPress EVENTS 
// IN AN ADAPTIVE AND ORGANIZED PATTERN USING BackHandledFragment

public class TheActivity extends FragmentActivity implements BackHandlerInterface {
    private BackHandledFragment selectedFragment;

    @Override
    public void onBackPressed() {
        if(selectedFragment == null || !selectedFragment.onBackPressed()) {
            // Selected fragment did not consume the back press event.
            super.onBackPressed();
        }
    }

    @Override
    public void setSelectedFragment(BackHandledFragment selectedFragment) {
        this.selectedFragment = selectedFragment;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;            rootView.setFocusableInTouchMode(true);
            rootView.requestFocus();
            rootView.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event)   {
            if (keyCode == KeyEvent.KEYCODE_BACK) {


                Fragment NameofFragment = new NameofFragment;

                FragmentTransaction  transaction=getFragmentManager().beginTransaction();
                transaction.replace(R.id.frame_container,NameofFragment);

                transaction.commit();

                return true;
            }
            return false;
        }
    });

    return rootView;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;fragment 트랜잭션에 addToBackStack()을 추가한 다음 fragment에 대한 Back Navigation 구현을 위해 아래 코드를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;getSupportFragmentManager().addOnBackStackChangedListener(
    new FragmentManager.OnBackStackChangedListener() {
        public void onBackStackChanged() {
            // Update your UI here.
        }
    });
&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;Fragment Activity를 사용하는 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 이렇게 해주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 이것을 당신의 조각 안에 불러들입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public void callParentMethod(){
    getActivity().onBackPressed();
}
&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;onBackPressed&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;FragmentActivity&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;@Override
public void onBackPressed() {
  //super.onBackPressed();
  //create a dialog to ask yes no question whether or not the user wants to exit
  ...
}
&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;getActionBar().setDisplayHomeAsUpEnabled()&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;@Override
public void onBackStackChanged() {
    int backStackEntryCount = getFragmentManager().getBackStackEntryCount();

    if(backStackEntryCount &amp;gt; 0){
        getActionBar().setDisplayHomeAsUpEnabled(true);
    }else{
        getActionBar().setDisplayHomeAsUpEnabled(false);
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;활동에 이 코드 추가&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@재지정&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() == 0) {
        super.onBackPressed();
    } else {
        getFragmentManager().popBackStack();
    }
}
&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;그리고 커밋하기 전에 fragment에 이 행을 추가합니다().&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;ft.addToBackStack(&quot;임의의 이름&quot;);&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;fragment 클래스에서 백 이벤트에 대해 다음 코드를 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; rootView.setFocusableInTouchMode(true);
        rootView.requestFocus();
        rootView.setOnKeyListener( new OnKeyListener()
        {
            @Override
            public boolean onKey( View v, int keyCode, KeyEvent event )
            {
                if( keyCode == KeyEvent.KEYCODE_BACK )
                {
                    FragmentManager fragmentManager = getFragmentManager();
                    fragmentManager.beginTransaction()
                            .replace(R.id.frame_container, new Book_service_provider()).commit();

                    return true;
                }
                return false;
            }
        } );
&lt;/code&gt;&lt;/pre&gt;&lt;h2 papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;백스택 확인이 완벽하게 작동합니다.&lt;/font&gt;&lt;/h2&gt; 
&lt;hr&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if (keyCode == KeyEvent.KEYCODE_BACK)
    {
        if (getFragmentManager().getBackStackEntryCount() == 1)
        {
            // DO something here since there is only one fragment left
            // Popping a dialog asking to quit the application
            return false;
        }
    }
    return super.onKeyDown(keyCode, event);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;oncreateView() 메서드에서 이 코드를 KEYCODE_B로 작성해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 기능을 원하는 대로 쓸 수 있는 확인 조건&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;View v = inflater.inflate(R.layout.xyz, container, false);
//Back pressed Logic for fragment 
v.setFocusableInTouchMode(true); 
v.requestFocus(); 
v.setOnKeyListener(new View.OnKeyListener() { 
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                getActivity().finish(); 
                Intent intent = new Intent(getActivity(), MainActivity.class);
                startActivity(intent);

                return true; 
            } 
        } 
        return false; 
    } 
}); 
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/7992216/&lt;a href=&quot;https://stackoverflow.com/questions/7992216/android-fragment-handle-back-button-press&quot; target=&quot;_blank&quot; papago-id=&quot;76-1&quot;&gt;android-fragment-handle-back-button-press&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/672</guid>
      <comments>https://yoursource.tistory.com/672#entry672comment</comments>
      <pubDate>Mon, 4 Sep 2023 22:53:07 +0900</pubDate>
    </item>
    <item>
      <title>연결 문자열에서 기본 스키마를 설정할 수 있습니까?</title>
      <link>https://yoursource.tistory.com/671</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;SQL Server 2005 및 2008을 사용하면 연결 문자열에서 기본 스키마를 설정할 수 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 코드로 스키마를 수동으로 설정할 필요가 없다면 훨씬 쉬울 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;연결 자체가 아닌 연결을 통해 로그인하는 사용자를 기준으로 기본 스키마를 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;
&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;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms176060.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 변경&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니요, 연결 문자열이 아닌 데이터베이스 사용자 수준에서 수행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 연결 문자열에서 설정할 수 있는 모든 속성입니다.&lt;a href=&quot;https://www.connectionstrings.com/all-sql-server-connection-string-keywords/&quot; papago-id=&quot;6-1&quot; rel=&quot;noreferrer&quot;&gt; &lt;/a&gt;https://www.connectionstrings.com/&lt;a href=&quot;https://www.connectionstrings.com/all-sql-server-connection-string-keywords/&quot; papago-id=&quot;6-1&quot; rel=&quot;noreferrer&quot;&gt;all-sql-server-connection-string-keywords&lt;/a&gt;/&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 로그인과 연결된 기본 스키마 변경&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;
&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://msdn.microsoft.com/en-us/library/ms176060.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;자세한&lt;/a&gt; 내용은 http://msdn.microsoft.com/en-us/library/ms176060.aspx 를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;em papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;Schema&quot;라고 말할 때 &quot;Owner&quot;(예: dbo)를 의미한다면 선택한 답변이 맞다고 생각합니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 일부 공급업체의 언어에서 &quot;데이터베이스&quot;를 &quot;Schema&quot;와 동일한 의미로 사용하는 경우 아래에 추가 정보를 제공했습니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TimS에서 제공한 링크:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.connectionstrings.com/Articles/Show/all-sql-server-connection-string-keywords&quot; rel=&quot;nofollow&quot; papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 SQL Server SqlConnection 속성&lt;/font&gt;&lt;/a&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;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;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;16-1&quot;&gt;다음은 DEFAULT&lt;/em&gt; DATABASE를 사용하는 연결 문자열의 예입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Server=myServerName\myInstanceName,1433;Database=DEFAULT_DATABASE;User Id=myUsername;Password=myPassword;
&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;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.connectionstrings.com/sql-server-2012&quot; rel=&quot;nofollow&quot; papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL Server 2012에 대한 연결 문자열&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3282665/&lt;a href=&quot;https://stackoverflow.com/questions/3282665/possible-to-set-default-schema-from-connection-string&quot; target=&quot;_blank&quot; papago-id=&quot;19-1&quot;&gt;possible-to-set-default-schema-from-connection-string&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/671</guid>
      <comments>https://yoursource.tistory.com/671#entry671comment</comments>
      <pubDate>Mon, 4 Sep 2023 22:51:34 +0900</pubDate>
    </item>
    <item>
      <title>테스트 파일 하위 테스트 시작 서버 mysql을 만들 수 없습니다.</title>
      <link>https://yoursource.tistory.com/670</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 파일 하위 테스트 시작 서버 mysql을 만들 수 없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 JDBC 프로그래밍을 만드는 방법에 &lt;a href=&quot;https://personal.ntu.edu.sg/ehchua/programming/java/JDBC_Basic.html&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;// For Windows

cd {path-to-mysql-bin}   // Check your MySQL installed directory
mysqld --console
&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;mysqld: Can't change dir to 'C:\Program Files\MySQL\MySQL Server 5.7\data\' (Errcode: 2 - No such file or directory)
2017-01-06T10:54:36.968210Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2017-01-06T10:54:36.968210Z 0 [Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled
2017-01-06T10:54:36.968210Z 0 [Note] mysqld (mysqld 5.7.17) starting as process 11248 ...
2017-01-06T10:54:36.974226Z 0 [Warning] Can't create test file C:\Program Files\MySQL\MySQL Server 5.7\data\DESKTOP-DEQ2IC2.lower-test
2017-01-06T10:54:36.975229Z 0 [Warning] Can't create test file C:\Program Files\MySQL\MySQL Server 5.7\data\DESKTOP-DEQ2IC2.lower-test
2017-01-06T10:54:36.975229Z 0 [ERROR] failed to set datadir to C:\Program Files\MySQL\MySQL Server 5.7\data\
2017-01-06T10:54:36.976231Z 0 [ERROR] Aborting

2017-01-06T10:54:36.977234Z 0 [Note] Binlog end
2017-01-06T10:54:36.978237Z 0 [Note] mysqld: Shutdown complete
&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;MySql을 이런 식으로 사용하는 것은 처음이지만 서버 디렉토리에 데이터 폴더가 없고 데이터 디렉토리가 있는 곳에 구성 정보가 저장되어 있다고 생각되는 my.ini 파일이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 제가 읽은 윈도우 &lt;a href=&quot;https://stackoverflow.com/questions/14597884/mysql-my-ini-location&quot; papago-id=&quot;3-1&quot;&gt;설치&lt;/a&gt; 프로그램을 사용하여 MySql을 설치했는데, 그 이유는 my.ini 파일이 없고 템플릿 my-default.ini 파일만 있기 때문일 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 이런 일이 일어나는지 아는 사람?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;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;C:\Program Files\MySQL\MySQL Server 8.0.&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용하여 새 파일 만들기&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';) 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호 재설정 명령(필요한 경우)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;C:&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;드라이브. 루트 폴더.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;C:\&amp;gt; cd &quot;C:\Program Files\MySQL\MySQL Server 8.0\bin&quot;
C:\&amp;gt; mysqld --init-file=C:\\mysql-init.txt
&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 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;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 창에서 services.msc로 이동하고 여기서 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 창을 시작할 때마다 자동으로 시작되도록 자동으로 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 나에게 효과가 있었다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 명령을 실행했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;bin\mysqld --initialize --console&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 것이 해결되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경우에 따라 데이터 폴더를 먼저 만들어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;창과 나머지 창에는 서로 다른 매개 변수가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 링크를 참조하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization.html&quot; rel=&quot;nofollow noreferrer&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;https://dev.mysql.com/doc/refman/8.0/en/.htmlhttps ://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization.html&lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization.html#data-directory-initialization-password-assignment&quot; rel=&quot;nofollow noreferrer&quot; 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;https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization.html#://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization.html#data-directory-initialization-password-assignment&lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/option-files.html&quot; rel=&quot;nofollow noreferrer&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;https://dev.mysql.com/doc/refman/8.0/en/.htmlhttps ://dev.mysql.com/doc/refman/8.0/en/option-files.html&lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 설치 마법사를 사용하여 MySQL을 설치하는 경우 실행 경로는 설치한 위치입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;C:\Program Files\My&quot;와 같은 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL\MySQL Server 8.0\bin&quot;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;my.init 파일이 ProgramData에 있으며 init 파일의 경로는 &quot;C:\ProgramData\My&quot;와 같을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL\MySQL Server 8.0&quot;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위치에서 볼 수 없는 경우에는 숨김 여부를 확인해 주시기 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 설명 &quot;테스트 파일 C:\Program Files\My를 만들 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL\MySQL Server 5.7\data...&quot;, MySQL 설치 위치에 '&lt;strong papago-id=&quot;20-1&quot;&gt;data&lt;/strong&gt;'라는 폴더가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분 'my.init' 파일이 있는 곳에 상주할 수 있습니다(ProgramData).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 폴더 이름이 '데이터'가 아니라 '&lt;strong papago-id=&quot;20-3&quot;&gt;데이터&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;데이터 폴더를 init-file 존재 위치에서 복사하여 실행 파일 위치에 붙여넣을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 대문자로 표시된 폴더의 이름을 &lt;strong papago-id=&quot;21-1&quot;&gt;데이터&lt;/strong&gt;로 변경합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 경우 Windows 설치 관리자가 설치된 MySQL을&lt;/font&gt;&lt;/font&gt;&lt;code&gt;D:/&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 서비스로 실행되지 않도록 &lt;strong papago-id=&quot;12-1&quot;&gt;설정&lt;/strong&gt;되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이사를 통해 문제를 해결할 수 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;my.ini&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;13-1&quot;&gt;C에서:&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;13-1&quot;&gt;\ProgramData\My&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL&lt;em papago-id=&quot;13-1&quot;&gt;\MySQL Server&lt;/em&gt; 8.0에서 MySQL &lt;em papago-id=&quot;13-1&quot;&gt;설치&lt;/em&gt; 폴더로 &lt;em papago-id=&quot;13-1&quot;&gt;이동&lt;/em&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류는 저에게 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;솔루션이 &lt;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;Program&lt;/em&gt; Files&lt;em papago-id=&quot;25-1&quot;&gt;\xampp\mysql\data\my.ini&lt;/em&gt;에서 디렉토리를 D: 경로로 변경합니다&lt;em papago-id=&quot;25-1&quot;&gt;.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[mysqld]
datadir=D:\program files\xampp\mysql\data
[client]
&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;C:\Program Files\MySQL\MySQL Server 8.0\bin&amp;gt;**mysqld --console**
2021-02-27T23:46:09.919345Z 0 [System] [MY-010116] [Server] C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe (mysqld 8.0.23) starting as process 7296
2021-02-27T23:46:09.926583Z 0 [Warning] [MY-010091] [Server] Can't create test file C:\Program Files\MySQL\MySQL Server 8.0\data\mysqld_tmp_file_case_insensitive_test.lower-test
2021-02-27T23:46:09.926798Z 0 [Warning] [MY-010091] [Server] Can't create test file C:\Program Files\MySQL\MySQL Server 8.0\data\mysqld_tmp_file_case_insensitive_test.lower-test
2021-02-27T23:46:09.927086Z 0 [ERROR] [MY-013276] [Server] Failed to set datadir to 'C:\Program Files\MySQL\MySQL Server 8.0\data\' (OS errno: 2 - No such file or directory)
2021-02-27T23:46:09.933751Z 0 [ERROR] [MY-010119] [Server] Aborting
2021-02-27T23:46:09.934110Z 0 [System] [MY-010910] [Server] C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe: Shutdown complete (mysqld 8.0.23)  MySQL Community Server - GPL.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;14-1&quot;&gt;해결책&lt;/strong&gt;은 my.ini 파일을 다시 생성해야 한다는 것이었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\ProgramData\MySQL\MySQL Server 8.0&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;[mysqld]
datadir=C:\ProgramData\MySQL\MySQL Server 8.0\Data
&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;인코딩을 ANSI로 설정하고 파일을 저장합니다.&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;&quot;C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe&quot; --defaults-file=&quot;C:\ProgramData\MySQL\MySQL Server 8.0\my.ini&quot; MySQL80
&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;새로운 MSI 설치 프로그램으로 설치해도 문제가 해결되지 않았고, 위에서 언급한 내용을 적용할 때까지 계속 작동하지 않았습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 경우, 데이터 폴더가 존재하지 않기 때문에 데이터 폴더를 만들고 작업을 시작했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;33-1&quot;&gt;xampp-portable-windows-x64-8.0.8-0-VS16&lt;/em&gt;의 경우 \xampp \&lt;strong papago-id=&quot;33-3&quot;&gt;readme_en.txt&lt;/strong&gt;에 언급된 대로 드라이브 루트만 배치하면 작동했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;NOTE: Unpack the package to your USB stick or a partition of your choice.
There it must be on the highest level like E:\ or W:\.
&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;font class=&quot;papago-parent&quot;&gt;&quot;폴더를 찾을 수 없습니다.&quot; 등과 관련된 오류 메시지는 프로그램이 요청 시 이러한 폴더와 파일을 만들 수 없기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;건배.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;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;관리 모드에서 콘솔 다시 시작을 시도한 다음 다시 시도하기 전에 sql server 8.0 디렉토리로 이동합니다.&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;명령 프롬프트 - 관리자 권한으로 mysqld를 시작했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제는 해결되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 파일을 만들 수 없습니다. 권한 문제입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/41504580/&lt;a href=&quot;https://stackoverflow.com/questions/41504580/cant-create-test-file-lower-test-start-server-mysql&quot; target=&quot;_blank&quot; papago-id=&quot;38-1&quot;&gt;cant-create-test-file-lower-test-start-server-mysql&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/670</guid>
      <comments>https://yoursource.tistory.com/670#entry670comment</comments>
      <pubDate>Mon, 4 Sep 2023 22:50:50 +0900</pubDate>
    </item>
    <item>
      <title>Git 태그를 재생성한 후 &amp;quot;태그가 원격에 이미 있습니다&amp;quot; 오류가 발생했습니다.</title>
      <link>https://yoursource.tistory.com/669</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Git 태그를 재생성한 후 &quot;태그가 원격에 이미 있습니다&quot; 오류가 발생했습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 단계를 실행한 후 다음 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;To git@provider.com:username/repo-name.git
 ! [rejected]        dev -&amp;gt; dev (already exists)
error: failed to push some refs to 'git@provider.com:username/repo-name.git'
hint: Updates were rejected because the tag already exists in the remote.
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리포지토리를 만들었습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬 컴퓨터에서 레포를 복제했습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;README 파일을 수정하고 변경 사항을 커밋한 후 커밋을 푸시했습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;된 태그 태된그&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dev&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;git tag dev&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 태그: 푸된태그:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git push --tags&lt;/code&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;README 파일을 수정하고 변경 사항을 커밋한 후 커밋을 푸시했습니다.&lt;/font&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 class=&quot;papago-parent&quot;&gt;된 태그 제된태그&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dev&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 생성하고 태그를 푸시했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;git tag -d dev
git tag dev
git push --tags
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 이런 일이 생기는 건가요?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 맥에 있어요.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리눅스(우분투)를 사용하는 내 친구들은 이 문제가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 내가 사용할 수 있다는 것을 알고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git push --tags -f&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;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집, 2016년 11월 24일: 이 답변은 분명히 인기가 있어서 여기에 메모를 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;중앙 서버에서 태그를 &lt;em papago-id=&quot;14-1&quot;&gt;교체&lt;/em&gt;하는 경우, &lt;em papago-id=&quot;14-3&quot;&gt;이전&lt;/em&gt; 태그(이미 태그가 있는 중앙 서버 리포지토리의 복제본)를 가진 모든 사용자가 이전 &lt;em papago-id=&quot;14-5&quot;&gt;태그를 유지&lt;/em&gt;할 수 &lt;em papago-id=&quot;14-5&quot;&gt;있습니다&lt;/em&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 이것이 어떻게 하는지 알려주는 동안, &lt;em papago-id=&quot;14-7&quot;&gt;여러분&lt;/em&gt;이 그것을 하고 싶어하는지 확실히 하세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 &quot;잘못된&quot; 태그를 가진 모든 사용자가 &quot;잘못된&quot; 태그를 &lt;em papago-id=&quot;14-9&quot;&gt;삭제&lt;/em&gt;하고 새 &quot;올바른&quot; 태그로 바꾸도록 해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 2한 결과 Git 2.10/2.11을 실행하는  태그 을 알 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git fetch&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;는 &quot; &quot; &quot; 를 실행하는 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git fetch --tags&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;18&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;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; 태를누르고하면라그,,하면▁when▁to▁you▁tags고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git push --tags&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;&lt;em&gt;new-sha1&lt;/em&gt; refs/tags/&lt;em&gt;name&lt;/em&gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트 요청은 리모컨에 의해 수정되어 각 태그에 대해 하나씩 추가된 다음 사전 수신 후크 및/또는 업데이트 후크(원격에 있는 후크 중 하나)로 전달됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 후크는 태그 생성/삭제/업데이트를 허용할지 또는 거부할지 결정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그가 생성되는 경우 값은 0이 모두 &quot;null&quot;인 SHA-1입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그가 삭제되는 경우 은 null SHA-1입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 두 SHA-1 값이 모두 실제 유효한 값입니다.&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;후크가 없는 경우에도 실행되는 일종의 &quot;내장 후크&quot;가 있습니다. 리모컨은 &quot;강제&quot; 플래그를 사용하지 않는 한 태그 이동을 거부합니다(&quot;추가&quot; 및 &quot;삭제&quot; 모두 &quot;내장 후크&quot;는 항상 정상임에도 불구하고).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 보고 있는 거부 메시지는 이 기본 제공 후크에서 온 것입니다. (참고로 이 기본 제공 후크는 빠르게 전달되지 않는 지점 업데이트도 거부합니다.)&lt;sup papago-id=&quot;24-1&quot;&gt;1&lt;/sup&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만, 여기에 무슨 일이 일어나고 있는지 이해할 수 있는 열쇠가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git push&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;, 값이  못합니다. step은 SHA-1의 값을 가지고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에는 &quot;SHA-1 값과 함께 전체 태그 목록이 있습니다.&quot;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라고만 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원격은 값을 비교하고 추가 및/또는 변경 사항이 있는 경우 해당 값에 대한 후크를 실행합니다. (같은 태그의 경우에는 전혀 작동하지 않습니다.)&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그가 없는 경우에는 아무 것도 하지 않습니다!)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그를 로컬로 삭제하는 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;push&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 푸시는 단순히 태그를 전송하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리모컨은 변경해서는 안 된다고 가정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그를 로컬에서 삭제한 후 새 위치를 가리키며 태그를 작성할 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;push&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;밀어넣기는 태그를 전송하고 리모컨은 이를 태그 변경으로 보고 강제 변경이 아닌 한 변경을 거부합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&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;32&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;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원격에서 태그를 삭제합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;34-1&quot;&gt;후자&lt;/em&gt;는 다음을 통해 가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git push&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;sup papago-id=&quot;35-0&quot;&gt;2&lt;/sup&gt; 로컬에서 태그를 삭제하고&lt;/font&gt;&lt;/font&gt;&lt;code&gt;push&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;ing ing 효없습니다가과은다니습▁ing없효.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 리컨의이다같음가다이니정합과름을모로 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;origin&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;는 삭할태그다같과습다니음는제▁you다입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dev&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;pre&gt;&lt;code&gt;git push origin :refs/tags/dev
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원격에서 태그를 삭제하도록 요청합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dev&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;. 의 당신지저서무는니다관합에종; 류의이런역소장의▁in의종류.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;push&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,와 함께&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;:&lt;em&gt;remoteref&lt;/em&gt;&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;는push.refspec, 이며, 는 refspec입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가된 후크에 따라 원격에서 태그 삭제를 허용하거나 허용하지 않을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 두  태그는 사라집니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git push --tags&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;의 지인이있때을현▁a▁you때을▁when▁local▁have&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dev&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;이 달린 태그 개체를 , 새 repo를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dev&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;dev&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&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;힘으로 누르는 것이 더 간단합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그 이외의 &lt;em papago-id=&quot;48-1&quot;&gt;다른&lt;/em&gt; 업데이트를 하지 않으려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git push&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;refspec 하나만 누르면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git push --force origin refs/tags/dev:refs/tags/dev
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--tags&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;하나의 태그 ref-spec만 명시적으로 푸시하는 경우).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;sup papago-id=&quot;52-0&quot;&gt;1&lt;/sup&gt;물론 이 기본 제공 후크의 &lt;em papago-id=&quot;52-2&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;Git 1.8.2는 &quot;태그가 전혀 움직이지 않음&quot;을 새로 적용했습니다. 이전 버전에서는 분기 이름과 마찬가지로 커밋 그래프에서 태그가 &quot;앞으로 이동&quot;할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://git-htmldocs.googlecode.com/git/RelNotes/1.8.2.txt&quot; papago-id=&quot;52-4&quot; rel=&quot;noreferrer&quot;&gt;Git&lt;/a&gt; 1&lt;a href=&quot;http://git-htmldocs.googlecode.com/git/RelNotes/1.8.2.txt&quot; papago-id=&quot;52-4&quot; rel=&quot;noreferrer&quot;&gt;.8.2 릴리스&lt;/a&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;sup papago-id=&quot;37-0&quot;&gt;2&lt;/sup&gt;원격으로 로그인할 수 있다면 사소한 일입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Git 저장소로 이동하여 실행하기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git tag -d dev&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;git push&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;dev&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;em papago-id=&quot;40-1&quot;&gt;이전&lt;/em&gt; 태그를 계속 &lt;em papago-id=&quot;40-1&quot;&gt;가지고&lt;/em&gt; 있으며 새 태그를 누르기 전에 이전 태그를 다시 &lt;em papago-id=&quot;40-3&quot;&gt;밀어&lt;/em&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;Mac 소스 트리에서만 &lt;strong papago-id=&quot;57-1&quot;&gt;Push all&lt;/strong&gt; tags &lt;strong papago-id=&quot;57-1&quot;&gt;확인란&lt;/strong&gt;의 선택을 취소합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tz6jM.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tz6jM.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스 트리를 &lt;strong papago-id=&quot;58-3&quot;&gt;사용&lt;/strong&gt;하는 경우 매우 &lt;strong papago-id=&quot;58-1&quot;&gt;간단합니다&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://i.stack.imgur.com/YI2AF.png&quot; rel=&quot;noreferrer&quot; papago-id=&quot;59-0&quot;&gt;&lt;img alt=&quot;enter image description here&quot; papago-id=&quot;59-0-0&quot; src=&quot;https://i.stack.imgur.com/YI2AF.png&quot;&gt;&lt;/a&gt; 기본적으로 충돌하는 태그를 제거했다가 다시 추가하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;탭 &lt;strong papago-id=&quot;60-1&quot;&gt;리포지토리&lt;/strong&gt; -&amp;gt; &lt;strong papago-id=&quot;60-3&quot;&gt;태그&lt;/strong&gt; -&amp;gt; &lt;strong papago-id=&quot;60-5&quot;&gt;태그 제거&lt;/strong&gt;로 이동합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;61&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;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 &lt;strong papago-id=&quot;62-1&quot;&gt;원격에서 태그 제거를 선택&lt;/strong&gt;합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;63-1&quot;&gt;제거&lt;/strong&gt;를 누릅니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;64&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;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원격으로 변경사항을 푸시할 때 &lt;strong papago-id=&quot;65-1&quot;&gt;모든 태그&lt;/strong&gt; 밀어넣기를 &lt;strong papago-id=&quot;65-1&quot;&gt;선택&lt;/strong&gt;해야 합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 이 문제에 대해 늦은 것 같기도 하고 이미 답변이 된 것 같기도 하지만, 할 수 있는 일은 다음과 같습니다. (저의 경우, 저는 현지에서 태그를 하나만 가지고 있었기 때문에..&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전 태그를 삭제하고 다음과 같이 다시 태그를 지정했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git tag -d v1.0
git tag -a v1.0 -m &quot;My commit message&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git push --tags -f
&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;strong papago-id=&quot;68-1&quot;&gt;업데이트&lt;/strong&gt;됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위험할 수 있습니다!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자신의 위험을 무릅쓰고 사용합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그를 &lt;strong papago-id=&quot;41-1&quot;&gt;업데이트&lt;/strong&gt;하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1.0.0&lt;/code&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;git checkout 1.0.0&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;em papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경합니다.&lt;/font&gt;&lt;/em&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;git ci -am 'modify some content'&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;git tag -f 1.0.0&lt;/code&gt;&lt;/li&gt; 
 &lt;li&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;git push origin --delete 1.0.0&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;git push origin 1.0.0&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다 했어요.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;74-1&quot;&gt;거부&lt;/strong&gt;되는 이유는 태그가 원격 버전과 동기화되지 않았기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 분기와 동일한 동작입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 통해동태기화그를 와 동기화&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git pull --rebase &amp;lt;repo_url&amp;gt; +refs/tags/&amp;lt;TAG&amp;gt;&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;strong papago-id=&quot;44-1&quot;&gt;충돌을 관리&lt;/strong&gt;해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;diftool을 설치한 경우(예: meld)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git mergetool meld&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원격 동기화 및 변경 사항 유지에 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;78-1&quot;&gt;--rebase&lt;/strong&gt; 플래그를 사용하는 이유는 원격 플래그 위에 작업을 올려놓아 다른 충돌을 방지하기 위해서입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한, 이해가 안 되는 것은 왜 당신이 그것을 삭제하느냐는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dev&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그를 지정하고 다시 생성하시겠습니까?&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그는 소프트웨어 버전 또는 마일스톤을 지정하는 데 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 태그의 예 깃 태 예&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;v0.1dev&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;v0.0.1alpha&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;v2.3-cr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(cr - 후보 릴리스) 등.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;git reflog&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;dev&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&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;53-1&quot;&gt;커밋&lt;/em&gt; ID를 복사합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git reset --mixed &amp;lt;commmit_id_from_reflog&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;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;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git tag -d some-tag
git pull --tags
&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;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;윈도우즈 소스 트리에서 선택 취소&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Push all tags to remotes&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ohQ8H.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ohQ8H.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 좋은 대답이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/19300065/1639345&quot; papago-id=&quot;94-1&quot;&gt;특히&lt;/a&gt; @&lt;a href=&quot;https://stackoverflow.com/a/19300065/1639345&quot; papago-id=&quot;94-1&quot;&gt;torek의 작품&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;95&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요약하면 태그를 로컬로 이동하면 Null이 아닌 커밋 값에서 다른 값으로 태그가 변경됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 Git(기본 동작)에서는 Null이 아닌 원격 태그를 변경할 수 없으므로 변경 내용을 푸시할 수 없습니다.&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;/p&gt;&lt;p papago-id=&quot;97&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/19298600/&lt;a href=&quot;https://stackoverflow.com/questions/19298600/tag-already-exists-in-the-remote-error-after-recreating-the-git-tag&quot; target=&quot;_blank&quot; papago-id=&quot;97-1&quot;&gt;tag-already-exists-in-the-remote-error-after-recreating-the-git-tag&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/669</guid>
      <comments>https://yoursource.tistory.com/669#entry669comment</comments>
      <pubDate>Mon, 4 Sep 2023 22:49:57 +0900</pubDate>
    </item>
    <item>
      <title>최신 타임스탬프별 MySQL 선택</title>
      <link>https://yoursource.tistory.com/668</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최신 타임스탬프별 MySQL 선택&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SO에 대한 몇 가지 비슷한 유형의 질문을 보았지만, 특정 문제에 대한 해결책을 찾을 수 없었습니다. (참고로, 이것들은 제 실제 칼럼이 아니라 간략한 예일 뿐입니다.)&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;my_table&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;div class=&quot;s-table-container&quot;&gt; 
 &lt;table class=&quot;s-table&quot;&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;user_1&lt;/font&gt;&lt;/th&gt; 
    &lt;th papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;user_2&lt;/font&gt;&lt;/th&gt; 
    &lt;th papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타임스탬프&lt;/font&gt;&lt;/th&gt; 
    &lt;th papago-id=&quot;7&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&gt;23&lt;/td&gt; 
    &lt;td&gt;25&lt;/td&gt; 
    &lt;td papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2012-08-10 22:00:00&lt;/font&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;24&lt;/td&gt; 
    &lt;td&gt;22&lt;/td&gt; 
    &lt;td papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2012-08-10 19:00:00&lt;/font&gt;&lt;/td&gt; 
    &lt;td papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&amp;lt;=== 이 행을 반환하고 싶습니다.&lt;/font&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;24&lt;/td&gt; 
    &lt;td&gt;22&lt;/td&gt; 
    &lt;td papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2012-08-10 17:00:00&lt;/font&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;21&lt;/td&gt; 
    &lt;td&gt;17&lt;/td&gt; 
    &lt;td papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2012-08-10 15:00:00&lt;/font&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/div&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; 1) Select the &quot;newest&quot; row, based on timestamp AND 
 2) Select the 'user_2' column when given a value.  
&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; SELECT *
 FROM my_table
 WHERE user_2 = 22
 AND timestamp = (
 SELECT MAX( timestamp )
 FROM my_table )
 LIMIT 1 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이것은 제가 찾고 있는 행을 반환하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 쿼리를 수정하는 데 도움이 된다면 매우 좋을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정말 고마워요.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;SELECT * FROM my_table -- standard stuff
   WHERE user_2 = 22 -- predicate
   ORDER BY timestamp DESC -- this means highest number (most recent) first
   LIMIT 1; -- just want the first row
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&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;편집:&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런데 원래 쿼리가 작동하지 않는 이유가 궁금할 경우 다음과 같이 설명합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&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;my_table&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&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;user_2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;= 22&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&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;timestamp&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(&lt;em papago-id=&quot;24-1&quot;&gt;어느&lt;/em&gt; 정도의 가치&lt;em papago-id=&quot;24-1&quot;&gt;, 일단 접어둡시다)&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한도 1&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&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;timestamp&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;SELECT MAX( timestamp ) FROM my_table
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 하위 쿼리는 다음을 기준으로 행을 제한하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;user_2&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;em papago-id=&quot;29-1&quot;&gt;전체&lt;/em&gt; 테이블의 &lt;em papago-id=&quot;29-1&quot;&gt;최대 타임스탬프&lt;/em&gt;가 얼마인지 묻습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;최대 타임스탬프는 위 표의 첫 번째 타임스탬프입니다. (user_1 = 23, user_2 = 25, timestamp = 2012-08-10 22:00:00).&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;ul&gt; 
 &lt;li&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;my_table&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;/li&gt; 
 &lt;li papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 user_2 = 22&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;및 타임스탬프 = &lt;strong papago-id=&quot;34-1&quot;&gt;2012-08-10 22:00:00&lt;/strong&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한도 1&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&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;SQL Server에서 유사한 문제가 발생한 경우 이 방법이 사용자에게 유용합니다(이전 게시물에서 제안한 MySQL 쿼리는 SQL Server에서 작동하지 않음).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT * FROM my_table 
WHERE    timestamp =  ( SELECT MAX( timestamp ) FROM my_table 
                        WHERE user_2 = 22 )
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 방법은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GROUP BY&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;user_2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;계산할 열&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MAX(timestamp)&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;MAX(timestamp)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전체 테이블의 최신 날짜가 아니라 동일한 레코드 &lt;strong papago-id=&quot;42-1&quot;&gt;그룹에 대한&lt;/strong&gt; 최신 &lt;strong papago-id=&quot;42-1&quot;&gt;타임스탬프&lt;/strong&gt;를 계산합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;user_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;/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;SELECT * FROM my_table
WHERE user_2 = 22
AND timestamp =
  (SELECT MAX(timestamp) FROM my_table
   WHERE user_2 = 22
   GROUP BY user_2)
LIMIT 1;
&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;a href=&quot;https://stackoverflow.com/a/14544472/473792&quot; papago-id=&quot;45-1&quot;&gt;훌륭한&lt;/a&gt; 답변에서 &lt;a href=&quot;https://stackoverflow.com/a/14544472/473792&quot; papago-id=&quot;45-1&quot;&gt;찾은&lt;/a&gt; 답변에서 수정한 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 내가 가진 전부야.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT timestamp 
       FROM my_table 
       WHERE user_22 = '22' 
       ORDER BY timestamp DESC /*or ASC*/
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 당신이 그것을 질문할 때 코드는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;while($row = mysql_fetch_array(the sql query)){
$timestamp = $row['timestamp']
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제에 대한 해결책은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; SELECT *
 FROM my_table AS t1
 WHERE user_2 = 22
 AND timestamp = (
 SELECT MAX( timestamp )
 FROM my_table AS t2
 WHERE t1.user_2 = t2.user_2 );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단히 제거&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WHERE user_2 = 22&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 고유 사용자에 대한 최신 타임스탬프를 확인하려는 경우.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/11912221/&lt;a href=&quot;https://stackoverflow.com/questions/11912221/mysql-select-by-newest-timestamp&quot; target=&quot;_blank&quot; papago-id=&quot;51-1&quot;&gt;mysql-select-by-newest-timestamp&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/668</guid>
      <comments>https://yoursource.tistory.com/668#entry668comment</comments>
      <pubDate>Mon, 4 Sep 2023 22:47:03 +0900</pubDate>
    </item>
    <item>
      <title>UI 레이블의 textColor 속성을 애니메이션화하는 방법은 무엇입니까?</title>
      <link>https://yoursource.tistory.com/667</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UI 레이블의 textColor 속성을 애니메이션화하는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 이유에서인지, 제가 애니메이션을 하려고 할 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;textColor&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;textColor&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;갑자기 A에서 B로 바뀝니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 빨간색에서 검은색으로 애니메이션을 만드는 것이 가능합니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 이렇게 개체 자체에 크로스페이드 전환을 사용해 본 적이 있다면 한 색상에서 다른 색상으로 페이드인 페이드아웃 효과를 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목표 C&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[UIView transitionWithView:myLabel duration:0.25 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
    myLabel.textColor = NEW_COLOR;
} completion:^(BOOL finished) {
}];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트 5&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UIView.transition(with: creditsLabel, duration: 0.25, options: .transitionCrossDissolve) {
    self.creditsLabel.textColor = .red
}
&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;이것은 다양한 이유로 NSTimers, CATextLayer 등을 사용하는 것보다 더 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;CATextLayer가 텍스트 키닝 또는 NSA 속성을 제대로 지원하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 및 NSTimers가 지연됩니다(그리고 코드가 너무 많습니다).&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;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;Swift&lt;/strong&gt; 4 솔루션:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UIView.transition(with: yourLabel, duration: 0.3, options: .transitionCrossDissolve, animations: {
  self.yourLabel.textColor = .red
}, completion: nil)
&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;textColor를 애니메이션화할 수 없는 이유는 UILabel이 CATextLayer 대신 일반 CALayer를 사용하기 때문입니다.&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;textColor를 애니메이션으로 만들 수 있도록(텍스트, 글꼴 등) UI 레이블을 하위 분류하여 CATextLayer를 사용하도록 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 꽤 많은 일이지만, 운 좋게도 나는 이미 그것을 했습니다 :-)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;a href=&quot;http://corecocoa.wordpress.com/2011/10/04/animatable-text-color-of-uilabel/#more-30&quot; papago-id=&quot;12-1&quot;&gt;문서&lt;/a&gt;에서 UI 레이블에 대한 전체 설명 + 드롭인 오픈 소스 대체 기능을 찾을 수 있습니다.&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;텍스트Color가 있는 UI 레이블의 다른 인스턴스나 다른 인스턴스를 만든 다음 두 인스턴스(이전 textColor가 있는 인스턴스와 새 textColor가 있는 인스턴스) 사이에 애니메이션을 적용할 수 있습니다.&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;let changeColor = CATransition()
changeColor.duration = 1

CATransaction.begin()

CATransaction.setCompletionBlock {
    selected.label.layer.add(changeColor, forKey: nil)
    selected.label.textColor = .black
}

selected.nameLabel.textColor = .red

CATransaction.commit()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 대답은 구식이며 원래 질문에 대한 좋은 해결책이 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;@아래의 답변이 훨씬 더 좋으므로 다음 답변 대신 사용해야 합니다. https://&lt;a href=&quot;https://stackoverflow.com/a/20892927/76559&quot; papago-id=&quot;15-1&quot;&gt;stackoverflow&lt;/a&gt;.com/a/20892927/76559&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;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;textColor&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성이 문서에 애니메이션으로 지정되어 있지 않기 때문에 간단한 UIView 애니메이션 블록으로는 할 수 없을 것 같습니다...&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;NSTimer&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2~3밀리초마다 발사되며, 매번 하나에서 다른 하나로 점진적으로 색상을 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이것이 조잡하다고 생각합니다. 왜냐하면 이것은 시작 색상에서 결승 색상까지 미리 설정된 색상 값의 배열이나 다른 용기를 필요로 하기 때문입니다. 그리고 저는 당신이 코어 애니메이션 같은 것을 사용하여 이것을 할 수 있는 방법이 있다고 확신합니다. 저는 그것이 무엇인지 모릅니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 레이블 텍스트 색상을 애니메이션화하는 코드가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;22-1&quot;&gt;중요한 부분&lt;/strong&gt;은 애니메이션 전에 &lt;strong papago-id=&quot;22-1&quot;&gt;textColor를 clearColor&lt;/strong&gt;로 설정하는 &lt;strong papago-id=&quot;22-1&quot;&gt;것&lt;/strong&gt;입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;label.textColor = [UIColor clearColor];
[UIView transitionWithView:label duration:duration/4 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
    label.textColor = self.highlightedCellPrimaryTextColor;
} completion:^(BOOL finished) { }];
&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;저는 UIV 뷰를 레이블 아래에 배치하고 불투명도를 애니메이션화하는 것이 꽤 쉽다는 것을 알았습니다.&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;업데이트됨 swift 3.0&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;방금 @budidino 댓글에서 변경했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UIView.transition(with: my.label, duration: 0.3, options: .transitionCrossDissolve, animations: { my.label.textColor = .black }, completion: nil)
&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;스위프트 5, Xcode 11에서 완벽하게 작동하며 비트 &lt;strong papago-id=&quot;26-1&quot;&gt;구문&lt;/strong&gt;이 변경된 @Strange의 답변에 감사드립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 UILabel에 대한 텍스트 색상을 애니메이션화하고 있었습니다. 이것도 당신의 경우라면, 이것을 시도해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-swift prettyprint-override&quot;&gt;&lt;code&gt;for label in [label1, label2, ...] as [UILabel] { // loop through a @IBOutlet UILabel array
        UIView.transition(with: label, duration: 0.3, options: .transitionCrossDissolve, animations: {
            label.textColor = .label
        }, completion: nil)
}
&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;   func textColorBlinking(){
        let changeColor = CATransition()
        changeColor.duration = 1
        changeColor.type = .fade
        changeColor.repeatCount = Float.infinity
        CATransaction.begin()
        CATransaction.setCompletionBlock {
            self.lblHome.layer.add(changeColor, forKey: nil)
            self.lblHome.textColor = .white
        }
        self.lblHome.textColor = .red
        CATransaction.commit()
   }
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2426614/&lt;a href=&quot;https://stackoverflow.com/questions/2426614/how-to-animate-the-textcolor-property-of-an-uilabel&quot; target=&quot;_blank&quot; papago-id=&quot;28-1&quot;&gt;how-to-animate-the-textcolor-property-of-an-uilabel&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/667</guid>
      <comments>https://yoursource.tistory.com/667#entry667comment</comments>
      <pubDate>Mon, 4 Sep 2023 22:46:22 +0900</pubDate>
    </item>
    <item>
      <title>Docker 명령의 --net=host 옵션은 실제로 무엇을 합니까?</title>
      <link>https://yoursource.tistory.com/666</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Docker 명령의 --net=host 옵션은 실제로 무엇을 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 도커에 대해 조금 초보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 실행 명령에서 이 옵션이 수행하는 작업에 대한 명확한 설명을 심층적으로 찾을 수 없었고 약간 혼란스러웠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;예를 들어 포트 8080에서 도커 이미지를 통해 배포된 웹 앱을 실행하는 경우 옵션을 사용하여&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;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 실행 명령에서는 도커 컨테이너 ip / the WebAppName의 8080 포트에서 액세스해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 어떻게 해야 할지 생각이 안 나요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--net=host&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션이 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 설치 후 기본적으로 3개의 네트워크가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
f3be8b1ef7ce        bridge              bridge              local
fbff927877c1        host                host                local
023bb5940080        none                null                local
&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;따라서 기본적으로 컨테이너를 시작하면 브리지(도커0) 네트워크 내부에 컨테이너가 생성됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ docker run -d jenkins
1498e581cdba        jenkins             &quot;/bin/tini -- /usr...&quot;   3 minutes ago       Up 3 minutes        8080/tcp, 50000/tcp   friendly_bell
&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&gt;&lt;code&gt;8080&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;50000&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;노출되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 포트는 브리지 네트워크의 컨테이너에 대해 열립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 브리지 네트워크 내의 모든 것이 포트의 컨테이너에 액세스할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;8080&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;50000&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;&quot;Subnet&quot;: &quot;172.17.0.0/16&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;-p 8080:8080&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨테이너의 포트를 실제 서버(호스트 네트워크)의 포트에 매핑합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 서버에 액세스하는 것은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;8080&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;8080&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;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 호스트 네트워크도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨테이너 네트워킹을 컨테이너화하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 호스트 네트워크에서 컨테이너를 시작하면 다음과 같이 나타납니다(첫 번째 컨테이너).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
1efd834949b2        jenkins             &quot;/bin/tini -- /usr...&quot;   6 minutes ago       Up 6 minutes                              eloquent_panini
1498e581cdba        jenkins             &quot;/bin/tini -- /usr...&quot;   10 minutes ago      Up 10 minutes       8080/tcp, 50000/tcp   friendly_bell
&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 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;8080&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;$ sudo iptables -I INPUT 5 -p tcp -m tcp --dport 8080 -j ACCEPT
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개항했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;8080&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;8080&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;젠킨스에 접속하고 있습니다&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.dasblinkenlichten.com/docker-networking-101-host-mode/&quot; papago-id=&quot;21-1&quot; rel=&quot;noreferrer&quot;&gt;저&lt;/a&gt;는 이 블로그가 더 잘 이해하는 &lt;a href=&quot;http://www.dasblinkenlichten.com/docker-networking-101-host-mode/&quot; papago-id=&quot;21-1&quot; rel=&quot;noreferrer&quot;&gt;데&lt;/a&gt;도 유용하다고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--net=host&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션은 네트워크 관점에서 Docker 컨테이너 내부의 프로그램이 호스트 자체에서 실행 중인 것처럼 보이게 하는 데 사용됩니다.&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;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 호스트 시스템에서 컨테이너로 포트를 전달해야 하지만 컨테이너가 호스트의 네트워크를 공유할 때 프로그램이 컨테이너 내부가 아닌 호스트에서 로컬로 실행되는 경우와 마찬가지로 모든 네트워크 작업이 호스트 시스템에서 직접 수행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 더 이상 포트를 노출하고 컨테이너 포트에 매핑할 필요가 없지만 두 개의 컨테이너가 동일한 호스트 포트에서 작동할 수 없으므로 충돌을 방지하기 위해 각 컨테이너가 수신하는 포트를 조정하기 위해 도커 파일을 편집해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이 옵션의 실제 이유는 포트 수준의 컨테이너로 전달하기 어려운 네트워크 액세스가 필요한 앱을 실행하기 위한 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 DHCP 서버를 실행하려면 네트워크에서 브로드캐스트 트래픽을 수신하고 패킷에서 MAC 주소를 추출할 수 있어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 정보는 포트 포워딩 프로세스 중에 손실되므로 Docker 내부에서 DHCP 서버를 실행하는 유일한 방법은 컨테이너를 다음과 같이 실행하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--net=host&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 말하면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--net=host&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;마지막으로, 보안 관점에서 Docker 컨테이너는 단일 포트만 보급(노출)하더라도 많은 포트에서 수신할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 이것은 예상되는 단일 포트만 전달하기 때문에 괜찮지만, 사용하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--net=host&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;em papago-id=&quot;31-1&quot;&gt;호스트&lt;/em&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;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;호스트 네트워킹 드라이버는 Linux 호스트에서만 작동하며, Mac용 Docker Desktop, Windows용 Docker Desktop 또는 Windows Server용 Docker EE에서는 지원되지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;ol&gt; 
 &lt;li papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;33-1&quot;&gt;--net=&quot;anyname&quot;&lt;/strong&gt;과 같은 새로운 네트워크를 만들 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업은 서비스를 다른 컨테이너에서 분리하기 위해 수행됩니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 서비스가 서로 다른 컨테이너에서 실행되고 있지만 포트 매핑은 동일하게 유지되고 첫 번째 컨테이너는 정상적으로 시작되지만 두 번째 컨테이너의 동일한 서비스는 실패한다고 가정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 방지하려면 포트 매핑을 변경하거나 네트워크를 생성합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/43316376/&lt;a href=&quot;https://stackoverflow.com/questions/43316376/what-does-net-host-option-in-docker-command-really-do&quot; target=&quot;_blank&quot; papago-id=&quot;36-1&quot;&gt;what-does-net-host-option-in-docker-command-really-do&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/666</guid>
      <comments>https://yoursource.tistory.com/666#entry666comment</comments>
      <pubDate>Mon, 4 Sep 2023 22:45:03 +0900</pubDate>
    </item>
    <item>
      <title>select2 - 검색 상자 숨기기</title>
      <link>https://yoursource.tistory.com/665</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;select2 - 검색 상자 숨기기&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;저의 더 중요한 선택을 위해, Select2의 검색 상자는 훌륭합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 한 가지 예로 하드 코딩된 4가지 선택 항목을 간단하게 선택할 수 있습니다.&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;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 일반 HTML 셀렉트를 사용할 수도 있지만, 일관성을 위해 가능하다면 Select2를 사용하고 싶습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/ivaynberg/select2/issues/489&quot; papago-id=&quot;3-1&quot;&gt;이&lt;/a&gt; 스레드 https://github.com/ivaynberg/select2/issues/489, 을 참조하십시오. minimumResultsForSearch를 음의 값으로 설정하여 검색 상자를 숨길 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('select').select2({
    minimumResultsForSearch: -1
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예제 페이지에 있습니다. https://select2.org/searching#&lt;a href=&quot;https://select2.org/searching#hiding-the-search-box&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;hiding-the-search-box&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.js-example-basic-hide-search&quot;).select2({
  minimumResultsForSearch: Infinity
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;버전 4.0.3&lt;/font&gt;&lt;/strong&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;사용자 인터페이스 요구 사항을 JavaScript 코드와 혼합하지 마십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 속성을 사용하여 마크업에서 검색 상자를 숨길 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;data-minimum-results-for-search=&quot;Infinity&quot;&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마크업&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;select class=&quot;select2&quot; data-minimum-results-for-search=&quot;Infinity&quot;&amp;gt;&amp;lt;/select&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;$(document).ready(function() {
  $(&quot;.select2&quot;).select2();
});&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;link href=&quot;https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css&quot; rel=&quot;stylesheet&quot; /&amp;gt;
&amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;label&amp;gt;without search box&amp;lt;/label&amp;gt;
&amp;lt;select class=&quot;select2&quot; data-width=&quot;100%&quot; data-minimum-results-for-search=&quot;Infinity&quot;&amp;gt;
  &amp;lt;option&amp;gt;one&amp;lt;/option&amp;gt;
  &amp;lt;option&amp;gt;two&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;

&amp;lt;label&amp;gt;with search box&amp;lt;/label&amp;gt;
&amp;lt;select class=&quot;select2&quot; data-width=&quot;100%&quot;&amp;gt;
  &amp;lt;option&amp;gt;one&amp;lt;/option&amp;gt;
  &amp;lt;option&amp;gt;two&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;pre papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.no-search .select2-search {&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;$(&quot;#test&quot;).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;2개의 상품을 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;드롭다운 CssClass : '검색 없음'&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;});&lt;/font&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;jQuery를 사용하여 입력을 제거하면 다음과 같은 이점이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.select2-search, .select2-focusser&quot;).remove();
&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;infinity&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;-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&gt;&lt;/font&gt;&lt;code&gt;minimumResultsForSearch&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;strong papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;솔루션 1&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조: https://select2.org/searching#&lt;a href=&quot;https://select2.org/searching#limiting-display-of-the-search-box-to-large-result-sets&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17-1&quot;&gt;limiting-display-of-the-search-box-to-large-result-sets&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('select').select2({
    minimumResultsForSearch: -1
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;솔루션 2&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조: https://select2.org/searching#&lt;a href=&quot;https://select2.org/searching#hiding-the-search-box&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19-1&quot;&gt;hiding-the-search-box&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('select').select2({
   minimumResultsForSearch: Infinity
});
&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#select_id').select2({ minimumResultsForSearch: -1 });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 깨끗하고 작동하기 좋은 최고의 솔루션입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#select2Id&quot;).select2 () ;
$(&quot;#select2Id&quot;).select2 ('container').find ('.select2-search').addClass ('hidden') ;
&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;.hidden { display;none; }&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#select_id').select2({ minimumResultsForSearch: -1 });
&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;2개의 &lt;a href=&quot;https://select2.org/programmatic-control/methods&quot; papago-id=&quot;25-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;문서&lt;/a&gt; 선택 2개의 문서 선택에서 &lt;a href=&quot;https://select2.org/programmatic-control/methods&quot; papago-id=&quot;25-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;확인&lt;/a&gt;할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택 항목의 옵션 수에 따라 동적으로 이 작업을 수행하고, 결과가 10개 이하인 선택 항목 검색을 숨기려면 다음 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$fewResults = $(&quot;select&amp;gt;option:nth-child(11)&quot;).closest(&quot;select&quot;);
$fewResults.select2();
$('select').not($fewResults).select2({ minimumResultsForSearch : -1 });
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;//Disable a search on particular selector
$(&quot;.my_selector&quot;).select2({
    placeholder: &quot;ÁREAS(todas)&quot;,
    tags: true,
    width:'100%',
    containerCssClass: &quot;area_disable_search_input&quot; // I add new class 
});

//readonly prop to selector class
$(&quot;.area_disable_search_input input&quot;).prop(&quot;readonly&quot;, true);
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;//readonly on all select2 input
$(&quot;.select2-search input&quot;).prop(&quot;readonly&quot;, true);
&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;var multipleSelect = $('select[name=&quot;list_type&quot;]');
multipleSelect.select2();
multipleSelect.parent().find('.select2-search--inline').remove();
multipleSelect.on('change', function(){
    multipleSelect.parent().find('.select2-search--inline').remove();
});
&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;여기에서 문서를 참조하십시오. https://select2.org/searching#&lt;a href=&quot;https://select2.org/searching#limiting-display-of-the-search-box-to-large-result-sets&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;28-1&quot;&gt;limiting-display-of-the-search-box-to-large-result-sets&lt;/a&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;처음 시작할 때 숨어서 Ajax 호출을 통해 드롭다운을 채우는 경우 select2 선언의 Ajax 블록에 다음을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;beforeSend: function () 
  {
    $('.select2-search--dropdown').addClass('hidden');
  }
&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;Ajax 요청이 성공한 후 다시 표시(및 포커스)하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  success: function() {
      $('.select2-search--dropdown').removeClass('select2-search--hide'); // show search bar then focus
      $('.select2-search__field')[0].focus();
  }
&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;이 CSS를 사용해 보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;input[aria-controls=select2-product-type-results]{
  display: none;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 입력은 검색 필드입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가가 이 문제에 실패할 경우를 대비하여 이제 생성자에 질문이 찾던 것에 더 가까운 검색 숨기기 옵션이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;echo Select2::widget([ 'name' =&amp;gt; 'status','hideSearch' =&amp;gt; true, 'data' =&amp;gt; [1 =&amp;gt; 'Active', 2 =&amp;gt; 'Inactive']]);&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;$(document).ready(function() {
  $(&quot;.select2&quot;).select2();
});&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;link href=&quot;https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css&quot; rel=&quot;stylesheet&quot; /&amp;gt;
&amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;label&amp;gt;without search box&amp;lt;/label&amp;gt;
&amp;lt;select class=&quot;select2&quot; data-width=&quot;100%&quot; data-minimum-results-for-search=&quot;Infinity&quot;&amp;gt;
  &amp;lt;option&amp;gt;one&amp;lt;/option&amp;gt;
  &amp;lt;option&amp;gt;two&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;

&amp;lt;label&amp;gt;with search box&amp;lt;/label&amp;gt;
&amp;lt;select class=&quot;select2&quot; data-width=&quot;100%&quot;&amp;gt;
  &amp;lt;option&amp;gt;one&amp;lt;/option&amp;gt;
  &amp;lt;option&amp;gt;two&amp;lt;/option&amp;gt;
&amp;lt;/select&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;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택 항목이 결과 표시인 경우 다음을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#yourSelect2ControlId').select2(&quot;close&quot;).parent().hide();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;검색 결과 상자를 닫고 컨트롤을 표시하지 않도록 설정합니다.&lt;/font&gt;&lt;/p&gt;&lt;p 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;jQuery로 할 수 있는 검색 상자를 숨기려고 합니다.&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;예를 들어 ID가 있는 드롭다운에서 select2 플러그인을 초기화했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;element_select = '#audience';// id or class
$(element_select).select2(&quot;close&quot;).parent().hide();
&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;이 예제는 select2가 작동하는 모든 장치에서 작동합니다.&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;select2.min.js&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;select-2__search&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 생성되는 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;readonly=&quot;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 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;다중 선택의 경우 js 코드를 작성해야 하며, 설정 속성이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#js-example-basic-hide-search-multi').select2();

$('#js-example-basic-hide-search-multi').on('select2:opening select2:closing', function( event ) {
    var $searchfield = $(this).parent().find('.select2-search__field');
    $searchfield.prop('disabled', true);
});
&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;그들의 페이지에 언급된 내용은 https://select2.org/searching#&lt;a href=&quot;https://select2.org/searching#multi-select&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;45-1&quot;&gt;multi-select&lt;/a&gt; 입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/17480040/&lt;a href=&quot;https://stackoverflow.com/questions/17480040/select2-hiding-the-search-box&quot; target=&quot;_blank&quot; papago-id=&quot;46-1&quot;&gt;select2-hiding-the-search-box&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/665</guid>
      <comments>https://yoursource.tistory.com/665#entry665comment</comments>
      <pubDate>Tue, 15 Aug 2023 15:23:28 +0900</pubDate>
    </item>
    <item>
      <title>Div 높이가 100%이고 내용에 맞게 확장됩니다.</title>
      <link>https://yoursource.tistory.com/664</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Div 높이가 100%이고 내용에 맞게 확장됩니다.&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 답이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/1230354/how-to-get-a-div-to-resize-its-height-to-fit-container&quot; dir=&quot;ltr&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;div가 컨테이너에 맞게 높이를 조정하도록 하는 방법은 무엇입니까?&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(8개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마감됨&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;4-1&quot; title=&quot;2022-07-24 17:38:10Z&quot; papago-attr-id=&quot;1&quot;&gt;작년에&lt;/span&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 페이지에 높이가 100%로 설정된 div 요소가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;차체 높이도 100%로 설정됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내적인 디브는 배경과 모든 것을 가지고 있고 신체적인 배경과 다릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 div 높이를 브라우저 화면 높이의 100%로 만드는 데 도움이 되지만, 문제는 그 div 안에 브라우저 화면 높이를 넘어 수직으로 확장되는 콘텐츠가 있다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래로 스크롤하면 페이지 스크롤을 시작해야 하는 지점에서 분할되지만, 내용은 그 이상으로 넘칩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 하면 디브가 항상 내부 내용에 맞게 바닥까지 가게 할 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 CSS의 단순화는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;body {
    height:100%;
    background:red;
}

#some_div {
    height:100%;
    background:black;
}
&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;#some_div에서 위치를 상대적으로 설정하든 절대적으로 설정하든 상관이 없는 것 같습니다. 어느 쪽이든 문제가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;#some_div 내부의 콘텐츠는 대부분 절대적으로 위치하며, 데이터베이스에서 동적으로 생성되어 높이를 미리 알 수 없습니다.&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;img src=&quot;https://i.stack.imgur.com/0EZlD.jpg&quot; alt=&quot;div problem&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 당신이 CSS 스타일로 해야 할 일이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;div&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;display: block;
overflow: auto;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 만지지 마&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;height&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 class=&quot;papago-parent&quot;&gt;을 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;height&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;auto&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;min-height&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;100%&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 대부분의 브라우저에서 해결될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;body {
  position: relative;
  height: auto;
  min-height: 100% !important;
}
&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;일반적으로 이 문제는 상위 Div의 하위 요소가 부동할 때 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제의 최신 &lt;strong papago-id=&quot;16-1&quot;&gt;해결책&lt;/strong&gt;은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS 파일에 의사 선택기와 &lt;strong papago-id=&quot;17-3&quot;&gt;함께&lt;/strong&gt; .&lt;strong papago-id=&quot;17-1&quot;&gt;clearfix&lt;/strong&gt;라는 클래스를 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.clearfix:after {
content: &quot;&quot;;
display: table;
clear: both;
}
&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;그런 다음 HTML에서 .clearfix 클래스를 상위 Div에 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;clearfix&quot;&amp;gt;
    &amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;항상 작동해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스 이름을 .&lt;em papago-id=&quot;19-3&quot;&gt;clearfix&lt;/em&gt; 대신 .&lt;em papago-id=&quot;19-1&quot;&gt;group&lt;/em&gt;으로 부르면 코드가 더 의미 있게 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;중복 따옴표 &quot;&quot; 사이에 내용 값에 점이나 공백을 추가할 필요는 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;19-5&quot;&gt;또한&lt;/strong&gt; 오버플로&lt;strong papago-id=&quot;19-5&quot;&gt;: auto&lt;/strong&gt;;는 문제를 해결할 수 있지만 스크롤 막대 표시와 같은 다른 문제를 발생시키므로 권장하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출처: 리사 카탈라노와 크리스 코이에의 블로그&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;#some_div {    
  height: fit-content;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/fit-content&quot; rel=&quot;noreferrer&quot; papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://developer.mozilla.org/en-US/docs/Web/CSS/fit-content&lt;/font&gt;&lt;/a&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;height: 100%&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 및사를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display:block;&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;div&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;div&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 모든 텍스트가 검은색 배경에 유지됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문은 오래된 것일 수 있지만 업데이트할 가치가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위한 또 다른 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#yourdiv {
    display: flex;
    width:100%;
    height:100%;
}
&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;body { 
    min-height:100%; 
    background:red; 
} 

#some_div {
    min-height:100%; 
    background:black; 
} 
&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;IE6 및 이전 버전에서는 최소 높이 속성을 지원하지 않습니다.&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;본문에 100%의 높이를 지정할 때 배경은 브라우저 &quot;viewport&quot;(브라우저 도구 모음 &amp;amp; 상태 표시줄 &amp;amp; 메뉴 모음 및 창 가장자리를 제외한 보기 영역) 하나의 높이로만 설정할 수 있다는 것이 문제라고 생각합니다.&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;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플렉스를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.parent{
    display: flex
}

.fit-parent{
    display: flex;
    flex-grow: 1
}
&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 class=&quot;papago-parent&quot;&gt;오래된 질문이지만, 제 경우에는 다음을 사용했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;position:fixed&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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 제 상황은 조금 달랐을 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반투명으로 덧씌워 놓았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;div&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지를 로드하는 동안 표시해야 하는 로드 애니메이션이 포함되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 사용하기&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;height:auto / 100%&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;min-height: 100%&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 다 창을 채웠지만 화면 밖 영역은 채우지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용사를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;position:fixed&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오버레이 스크롤을 사용자와 함께 만들어서 항상 보이는 영역을 가리고 사전 로딩 애니메이션을 화면 중심에 유지했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우에는 다음과 같은 경우에만 작동했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;height: auto;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 넣을 필요가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display: 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 class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최신 브라우저는 &quot;뷰포트 높이&quot; 장치를 지원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 div가 사용 가능한 뷰포트 높이로 확장됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그것이 다른 어떤 접근법보다 더 신뢰할 수 있다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#some_div {
    height: 100vh;
    background: black;
}
&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;이 두 줄을 당신의 css id #some_div에 추가하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;display: block;
overflow: auto;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 원하는 것을 얻을 수 있습니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위치가 없는 오버레이:고정&lt;/font&gt;&lt;/p&gt; 
&lt;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;position: relative
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;래퍼 클래스를 다음과 같이 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#overlaywrapper {
    position: absolute;
    top: 0;
    width: 100%;
    height: 100%;
    background: #00000080;
    z-index: 100;
}
&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;저는 이것을 정말 큰 메뉴의 오버레이에 사용했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋아요, 저는 다음과 같은 것을 시도했습니다:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;본체(정상)&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;#MainDiv { 
  /* where all the content goes */
  display: table;
  overflow-y: auto;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정확하게 쓰는 방법은 아니지만 메인 디비를 표로 만들면 확장이 되고 스크롤 바를 구현했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 꽤 간단한 대답이기 때문에 질문을 완전히 이해했는지 확신할 수 없지만, 여기에... :)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;53-1&quot;&gt;컨테이너의 오버플로 속성&lt;/strong&gt;을 표시 또는 자동으로 설정해 보셨습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#some_div {
    height:100%;
    background:black; 
    overflow: visible;
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 추가하면 검은색 컨테이너가 동적 컨테이너에 필요한 크기로 이동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;auto는 스크롤 막대와 함께 제공되는 것 같기 때문에 auto보다 visible을 선호합니다...&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신도 이렇게 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;display:block;
overflow:auto;
height: 100%;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에는 콘텐츠에 따라 각 동적 디바가 포함됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스가 있는 공통 div가 있으면 내용에 따라 각 동적 div의 높이가 증가한다고 가정합니다.&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;pre&gt;&lt;code&gt; display: inline-block;

&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 것은 이것으로 작동했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/9537838/&lt;a href=&quot;https://stackoverflow.com/questions/9537838/div-height-100-and-expands-to-fit-content&quot; target=&quot;_blank&quot; papago-id=&quot;59-1&quot;&gt;div-height-100-and-expands-to-fit-content&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/664</guid>
      <comments>https://yoursource.tistory.com/664#entry664comment</comments>
      <pubDate>Tue, 15 Aug 2023 15:22:32 +0900</pubDate>
    </item>
    <item>
      <title>powershell의 스크립트 블록에 인수 전달</title>
      <link>https://yoursource.tistory.com/663</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;powershell의 스크립트 블록에 인수 전달&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 이렇게 할 수는 없을 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  $servicePath = $args[0]

  if(Test-Path -path $servicePath) &amp;lt;-- does not throw in here

  $block = {

        write-host $servicePath -foreground &quot;magenta&quot;

        if((Test-Path -path $servicePath)) { &amp;lt;-- throws here.

              dowork 
        }
  }
&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;그러면 스크립트 블록 $block에 변수를 전달하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;키스의&lt;a href=&quot;https://stackoverflow.com/a/16351062/1242&quot; papago-id=&quot;0-0&quot;&gt; 대답&lt;/a&gt;은 또한 효과가 &lt;a href=&quot;https://stackoverflow.com/a/16351062/1242&quot; papago-id=&quot;0-0&quot;&gt;있습니다&lt;/a&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Invoke-Command&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명명된 매개 변수를 사용할 수 없는 제한이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인수는 다음을 사용하여 설정해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-ArgumentList&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개 변수이며 쉼표로 구분해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-psh prettyprint-override&quot;&gt;&lt;code&gt;$sb = {
    param($p1,$p2)
    $OFS=','
    &quot;p1 is $p1, p2 is $p2, rest of args: $args&quot;
}
Invoke-Command $sb -ArgumentList 1,2,3,4
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://blogs.msdn.com/b/powershell/archive/2009/12/29/arguments-for-remote-commands.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-3&quot;&gt;여기&lt;/a&gt;와 여기도 &lt;a href=&quot;https://stackoverflow.com/questions/4225748/how-do-i-pass-named-parameters-with-invoke-command&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;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트 블록은 익명 기능일 뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$args&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 class=&quot;lang-sh prettyprint-override&quot;&gt;&lt;code&gt;$sb = {
  param($p1, $p2)
  $OFS = ','
  &quot;p1 is $p1, p2 is $p2, rest of args: $args&quot;
}
&amp;amp; $sb 1 2 3 4
&amp;amp; $sb -p2 2 -p1 1 3 4
&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;Powershell 3.0부터 시작하여 원격 세션 스크립트 블록에서 로컬 변수를 사용하려는 2020년의 읽기 사용자는 &quot;$Using&quot; 스코프 수식어를 사용하여 스크립트 블록에서 직접 로컬 변수를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$MyLocalVariable = &quot;C:\some_random_path\&quot;
acl = Invoke-Command -ComputerName REMOTEPC -ScriptBlock {Get-Acl $Using:MyLocalVariable}
&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;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/&lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/invoke-command?view=powershell-7&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-1&quot;&gt;invoke-command&lt;/a&gt;?view=powershell-7 의 예 9에서 찾을 수 있습니다.&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;BTW, 스크립트 블록을 사용하여 별도의 스레드(멀티 스레드)에서 실행하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ScriptBlock = {
    param($AAA,$BBB) 
    return &quot;AAA is $($AAA) and BBB is $($BBB)&quot;
}

$AAA = &quot;AAA&quot;
$BBB = &quot;BBB1234&quot;    
$null = Start-Job $ScriptBlock -ArgumentList $AAA,$BBB
&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;$null = Start-Job $ScriptBlock -ArgumentList $AAA,$BBB    
Get-Job | Receive-Job
AAA is AAA and BBB is BBB1234
&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;기본적으로 PowerShell은 ScriptBlock에 대한 변수를 캡처하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;호출을 통해 명시적으로 캡처할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GetNewClosure()&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;$servicePath = $args[0]

if(Test-Path -path $servicePath) &amp;lt;-- does not throw in here

$block = {

    write-host $servicePath -foreground &quot;magenta&quot;

    if((Test-Path -path $servicePath)) { &amp;lt;-- no longer throws here.

          dowork 
    }
}.GetNewClosure() &amp;lt;-- this makes it work
&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;$a ={ 
  param($p1, $p2)
  &quot;p1 is $p1&quot;
  &quot;p2 is $p2&quot;
  &quot;rest of args: $args&quot;
}
//Syntax 1:
Invoke-Command $a -ArgumentList 1,2,3,4 //PS&amp;gt; &quot;p1 is 1, p2 is 2, rest of args: 3 4&quot;
//Syntax 2:
&amp;amp;$a -p2 2 -p1 1 3      //PS&amp;gt; &quot;p1 is 1, p2 is 2, rest of args: 3&quot;
//Syntax 3:
&amp;amp;$a 2 1 3              //PS&amp;gt; &quot;p1 is 2, p2 is 1, rest of args: 3&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 기사가 좀 구식이라는 것을 알지만, 가능한 대안으로 이것을 버리고 싶었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전 답변을 약간 변형한 것뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$foo = {
    param($arg)

    Write-Host &quot;Hello $arg from Foo ScriptBlock&quot; -ForegroundColor Yellow
}

$foo2 = {
    param($arg)

    Write-Host &quot;Hello $arg from Foo2 ScriptBlock&quot; -ForegroundColor Red
}


function Run-Foo([ScriptBlock] $cb, $fooArg){

    #fake getting the args to pass into callback... or it could be passed in...
    if(-not $fooArg) {
        $fooArg = &quot;World&quot; 
    }
    #invoke the callback function
    $cb.Invoke($fooArg);

    #rest of function code....
}

Clear-Host

Run-Foo -cb $foo 
Run-Foo -cb $foo 

Run-Foo -cb $foo2
Run-Foo -cb $foo2 -fooArg &quot;Tim&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기타 가능성:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$a ={ 
    param($p1, $p2)
    &quot;p1 is $p1&quot;
    &quot;p2 is $p2&quot;
    &quot;rest of args: $args&quot;
};
$a.invoke(1,2,3,4,5)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/16347214/&lt;a href=&quot;https://stackoverflow.com/questions/16347214/pass-arguments-to-a-scriptblock-in-powershell&quot; target=&quot;_blank&quot; papago-id=&quot;18-1&quot;&gt;pass-arguments-to-a-scriptblock-in-powershell&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/663</guid>
      <comments>https://yoursource.tistory.com/663#entry663comment</comments>
      <pubDate>Tue, 15 Aug 2023 15:21:40 +0900</pubDate>
    </item>
    <item>
      <title>UIView - 보기가 로드될 때 알림을 받는 방법은 무엇입니까?</title>
      <link>https://yoursource.tistory.com/662</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UIView - 보기가 로드될 때 알림을 받는 방법은 무엇입니까?&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;viewDidLoad&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;UIViewController&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;UIView&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;UIView&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;UIView&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 및 일부 작업을 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수행해야 하는 작업 유형에 따라 다음과 같은 몇 가지 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;-(id)initWithFrame:(CGRect)frame&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UIView의 지정된 이니셜라이저. nib에서 뷰를 로드하지 않는 한 항상 UIView로 전송하여 초기화합니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-(id)initWithCoder:(NSCoder *)coder&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;닙에서 보기를 로드할 때마다 항상 UIView를 초기화하기 위해 전송됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-(void)awakeFromNib&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;nib의 모든 객체가 초기화되고 연결된 후 전송됩니다. nib에서 객체를 로드하는 경우에만 적용됩니다. super를 호출해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-(void)willMoveToSuperview:(UIView *)newSuperview&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;newSuperview&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뷰를 해당 뷰에서 제거할 때 0이 될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-(void)willMoveToWindow:(UIWindow *)newWindow&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;newWindow&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;창에서 보기를 제거할 때 0이 될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-(void)didMoveToSuperview&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;/li&gt; 
 &lt;li&gt;&lt;code&gt;-(void)didMoveToWindow&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;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 초기화(1 &amp;amp; 2) 중, 니브(3)에서 로드한 후, 보기 계층 구조에 삽입하기 전(4 &amp;amp; 5) 및 그 이후(6 &amp;amp; 7)에 작업을 수행하도록 선택할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/4501974/&lt;a href=&quot;https://stackoverflow.com/questions/4501974/uiview-how-to-get-notified-when-the-view-is-loaded&quot; target=&quot;_blank&quot; papago-id=&quot;18-1&quot;&gt;uiview-how-to-get-notified-when-the-view-is-loaded&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/662</guid>
      <comments>https://yoursource.tistory.com/662#entry662comment</comments>
      <pubDate>Tue, 15 Aug 2023 15:20:51 +0900</pubDate>
    </item>
    <item>
      <title>Eclipse에서 렌더링 라이브러리가 ADT 플러그인보다 최신이라고 보고함</title>
      <link>https://yoursource.tistory.com/661</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Eclipse에서 렌더링 라이브러리가 ADT 플러그인보다 최신이라고 보고함&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;새로운 Android SDK 설치에서 Eclipse Graphical Layout은 레이아웃의 렌더링을 표시하지 않고 공백입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Eclipse에 다음 메시지가 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 렌더링 라이브러리 버전은 ADT 플러그인 버전보다 최신 버전입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ADT 플러그인을 업데이트하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;3-1&quot;&gt;&lt;a href=&quot;https://code.google.com/p/android/issues/detail?id=60180&quot; papago-id=&quot;3-1-0&quot; rel=&quot;noreferrer&quot;&gt;이클립스&lt;/a&gt;&lt;/em&gt; 버그 &lt;em papago-id=&quot;3-1&quot;&gt;&lt;a href=&quot;https://code.google.com/p/android/issues/detail?id=60180&quot; papago-id=&quot;3-1-0&quot; rel=&quot;noreferrer&quot;&gt;보고서&lt;/a&gt;&lt;/em&gt;는 ADT &lt;em papago-id=&quot;3-1&quot;&gt;&lt;a href=&quot;https://code.google.com/p/android/issues/detail?id=60180&quot; papago-id=&quot;3-1-0&quot; rel=&quot;noreferrer&quot;&gt;플러그인&lt;/a&gt;&lt;/em&gt;보다 &lt;em papago-id=&quot;3-1&quot;&gt;&lt;a href=&quot;https://code.google.com/p/android/issues/detail?id=60180&quot; papago-id=&quot;3-1-0&quot; rel=&quot;noreferrer&quot;&gt;최신 렌더링 라이브러리&lt;/a&gt;&lt;/em&gt;에 재생성 단계가 나열되어 있다고 &lt;em papago-id=&quot;3-1&quot;&gt;&lt;a href=&quot;https://code.google.com/p/android/issues/detail?id=60180&quot; papago-id=&quot;3-1-0&quot; rel=&quot;noreferrer&quot;&gt;보고&lt;/a&gt;&lt;/em&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 어떻게 고쳐요?&lt;/font&gt;&lt;/p&gt;&lt;ol&gt; 
 &lt;li papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;4-1&quot;&gt;[도움말&lt;/strong&gt;] &amp;gt; [새&lt;strong papago-id=&quot;4-1&quot;&gt; 소프트웨어 설치&lt;/strong&gt;]를 누릅니다.&lt;/font&gt;&lt;/li&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;strong papago-id=&quot;0-1&quot;&gt;작업&lt;/strong&gt; 대상 필드에 다음을 입력합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;https://dl-ssl.google.com/android/eclipse/&lt;/code&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;6-1&quot;&gt;Developer Tools&lt;/strong&gt; / &lt;strong papago-id=&quot;6-1&quot;&gt;Android&lt;/strong&gt; Development Tools를 &lt;strong papago-id=&quot;6-1&quot;&gt;선택&lt;/strong&gt;합니다.&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;다음을 &lt;strong papago-id=&quot;7-1&quot;&gt;클릭&lt;/strong&gt;하고 마법사를 완료합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;strong papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레이아웃을 렌더링하는 동안 안드로이드 버전을 변경합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/AhRZp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;API 버전 18에서 17로 변경하는 것이 나에게 도움이 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;10-0&quot;&gt;편집:&lt;/strong&gt; 솔루션은 Android Studio에서도 작동했습니다.&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;경고의 이유는 이전 ADT(Android 개발 도구)를 사용하기 때문입니다. 따라서 아래 절차에 따라 ADT를 업데이트하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;절차 1:&lt;/font&gt;&lt;/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;Eclipse 클릭 도움말 메뉴 내부&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트 확인 선택&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 창에 Required Updates(필수 업데이트)가 표시됩니다. All options using Check(확인란을 사용한 모든 옵션)을 선택하거나 그렇지 않으면 ADT Updateed(ADT 업데이트됨)를 선택합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/zS1Ip.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;절차 2:&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;[도움말] &amp;gt; [새 소프트웨어 설치]를 누릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://dl-ssl.google.com/android/eclipse/&quot; papago-id=&quot;17-1&quot; rel=&quot;noreferrer&quot;&gt;작업&lt;/a&gt; 대상 필드에&lt;a href=&quot;https://dl-ssl.google.com/android/eclipse/&quot; papago-id=&quot;17-1&quot; rel=&quot;noreferrer&quot;&gt; &lt;/a&gt;https://dl-ssl.google.com/android/eclipse/ 개발자 도구 / Android 개발 도구 선택을 입력합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 클릭하고 마법사를 완료합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;xml &lt;strong papago-id=&quot;18-1&quot;&gt;layoutside에서 API &lt;/strong&gt;버전 &lt;strong papago-id=&quot;18-1&quot;&gt;17, 19&lt;/strong&gt;, 21, 23을 변경합니다.&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;&amp;amp;&amp;amp;&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;Android&lt;/strong&gt; &lt;strong papago-id=&quot;20-3&quot;&gt;&lt;em papago-id=&quot;20-3-0&quot;&gt;Development Tools&lt;/em&gt;&lt;/strong&gt; &lt;strong papago-id=&quot;20-3&quot;&gt;&lt;em papago-id=&quot;20-3-0&quot;&gt;23.0.&lt;/em&gt;&lt;/strong&gt;&lt;strong papago-id=&quot;20-1&quot;&gt;7&lt;/strong&gt;을 업데이트했지만 레이아웃을 제대로 렌더링할 수 없어서 &lt;strong papago-id=&quot;20-5&quot;&gt;Android&lt;/strong&gt; &lt;strong papago-id=&quot;20-7&quot;&gt;&lt;em papago-id=&quot;20-7-0&quot;&gt;DDMS 23.0&lt;/em&gt;&lt;/strong&gt;.7을 &lt;strong papago-id=&quot;20-5&quot;&gt;업데이트&lt;/strong&gt;했습니다. 완벽하게 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;!!!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;21-1&quot;&gt;도움말&lt;/strong&gt;에서 제거한 후 다시 시도하십시오&lt;strong papago-id=&quot;21-1&quot;&gt;.--&amp;gt;설치&lt;/strong&gt; 세부 정보&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://dl-ssl.google.com/&lt;a href=&quot;http://dl-ssl.google.com/android/eclipse/&quot; papago-id=&quot;22-1&quot; rel=&quot;nofollow&quot;&gt;android&lt;/a&gt;/eclipse/&lt;a href=&quot;http://dl-ssl.google.com/android/eclipse/&quot; papago-id=&quot;22-1&quot; rel=&quot;nofollow&quot;&gt; &lt;/a&gt;을 사용하여 다시 설치해 보십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대상 버전을 새 업데이트로 변경합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 Android 매니페스트 파일에 있는 SDK 버전을 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;android:minSdkVersion=&quot;8&quot;
android:targetSdkVersion=&quot;18&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/18852983/&lt;a href=&quot;https://stackoverflow.com/questions/18852983/eclipse-reports-rendering-library-more-recent-than-adt-plug-in&quot; target=&quot;_blank&quot; papago-id=&quot;24-1&quot;&gt;eclipse-reports-rendering-library-more-recent-than-adt-plug-in&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/661</guid>
      <comments>https://yoursource.tistory.com/661#entry661comment</comments>
      <pubDate>Tue, 15 Aug 2023 15:20:01 +0900</pubDate>
    </item>
    <item>
      <title>사용자 지정 확인란 이미지 안드로이드</title>
      <link>https://yoursource.tistory.com/660</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 지정 확인란 이미지 안드로이드&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확인란에 사용자 지정 이미지를 쉽게 사용할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 gmail의 &quot;별이 간&quot; 행동을 복제하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 확인란을 갖고 싶습니다. 확인란을 선택하면 별이 채워집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택하지 않으면 빈 별이 됩니다.&lt;/font&gt;&lt;font 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;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;selector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; &amp;gt;
    &amp;lt;item android:drawable=&quot;@drawable/checkbox&quot; 
          android:state_checked=&quot;false&quot;/&amp;gt;
    &amp;lt;item android:drawable=&quot;@drawable/checkboxselected&quot; 
          android:state_checked=&quot;true&quot;/&amp;gt;
    &amp;lt;item android:drawable=&quot;@drawable/checkbox&quot;/&amp;gt;    
&amp;lt;/selector&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&gt;&lt;code&gt;android:button=&quot;@drawable/checkbox_selector&quot;&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;CheckBox
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:button=&quot;@drawable/checkbox_selector&quot;
    android:text=&quot;CheckBox&quot;
    android:textAppearance=&quot;?android:attr/textAppearanceLarge&quot;
    android:textColor=&quot;@color/Black&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확인란이 단추의 자식인 경우, 여기에 설명된 대로 &quot;&lt;a href=&quot;http://developer.android.com/reference/android/widget/Button.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;단추&lt;/a&gt; 스타일&quot; 아래에 있는 여러 상태의 배경 이미지를 확인란에 제공하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;...&lt;a href=&quot;http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;여기&lt;/a&gt;에 예시되어 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;btn_check.xml을 Android-sdk/platforms/android-#/data/res/drawable에서 프로젝트의 그리기 가능 폴더로 복사하고 'on' 및 'off' 이미지 상태를 사용자 지정 이미지로 변경합니다.&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;그러면 당신의 xml은 단지&lt;/font&gt;&lt;/font&gt;&lt;code&gt;android:button=&quot;@drawable/btn_check&quot;&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;CheckBox
    android:button=&quot;@drawable/btn_check&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:checked=&quot;true&quot; /&amp;gt;
&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;android:button=&quot;@android:drawable/...&quot;&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;res/drawable/day_drawable.xml&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
    &amp;lt;selector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; &amp;gt;
        &amp;lt;item android:drawable=&quot;@drawable/dayselectionunselected&quot;
              android:state_checked=&quot;false&quot;/&amp;gt;
        &amp;lt;item android:drawable=&quot;@drawable/daysselectionselected&quot;
              android:state_checked=&quot;true&quot;/&amp;gt;
        &amp;lt;item android:drawable=&quot;@drawable/dayselectionunselected&quot;/&amp;gt;
    &amp;lt;/selector&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;res/message/my_message.xml&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;CheckBox
    android:id=&quot;@+id/check&quot;
    android:layout_width=&quot;39dp&quot;
    android:layout_height=&quot;39dp&quot;
    android:background=&quot;@drawable/day_selector&quot;
    android:button=&quot;@null&quot;
    android:gravity=&quot;center&quot;
    android:text=&quot;S&quot;
    android:textColor=&quot;@color/black&quot;
    android:textSize=&quot;12sp&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;Android 오픈 소스 코드가 있는 경우 다음에서 스타일 정의를 찾을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;em papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;src/sb/base/core/res/res/values&lt;/font&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;style name=&quot;Widget.CompoundButton.CheckBox&quot;&amp;gt;
    &amp;lt;item name=&quot;android:background&quot;&amp;gt;
        @android:drawable/btn_check_label_background
    &amp;lt;/item&amp;gt;
    &amp;lt;item name=&quot;android:button&quot;&amp;gt;
        ?android:attr/listChoiceIndicatorMultiple
    &amp;lt;/item&amp;gt;
&amp;lt;/style&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Enselic 및 Rahul 답변을 기반으로 합니다.&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;API 21 이전과 이후에 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;CheckBox
    android:id=&quot;@+id/checkbox&quot;
    android:layout_width=&quot;40dp&quot;
    android:layout_height=&quot;40dp&quot;
    android:text=&quot;&quot;
    android:gravity=&quot;center&quot;

    android:background=&quot;@drawable/checkbox_selector&quot;
    android:button=&quot;@null&quot;
    app:buttonCompat=&quot;@null&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;package com;

import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;



public class CheckBoxImageView extends ImageView implements View.OnClickListener {
    boolean checked;
    int defImageRes;
    int checkedImageRes;
    OnCheckedChangeListener onCheckedChangeListener;

    public CheckBoxImageView(Context context, AttributeSet attr, int defStyle) {
        super(context, attr, defStyle);
        init(attr, defStyle);
    }

    public CheckBoxImageView(Context context, AttributeSet attr) {
        super(context, attr);
        init(attr, -1);
    }

    public CheckBoxImageView(Context context) {
        super(context);
    }

    public boolean isChecked() {
        return checked;
    }

    public void setChecked(boolean checked) {
        this.checked = checked;
        setImageResource(checked ? checkedImageRes : defImageRes);
    }

    private void init(AttributeSet attributeSet, int defStyle) {
        TypedArray a = null;
        if (defStyle != -1)
            a = getContext().obtainStyledAttributes(attributeSet, R.styleable.CheckBoxImageView, defStyle, 0);
        else
            a = getContext().obtainStyledAttributes(attributeSet, R.styleable.CheckBoxImageView);
        defImageRes = a.getResourceId(0, 0);
        checkedImageRes = a.getResourceId(1, 0);
        checked = a.getBoolean(2, false);
        a.recycle();
        setImageResource(checked ? checkedImageRes : defImageRes);
        setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        checked = !checked;
        setImageResource(checked ? checkedImageRes : defImageRes);
        onCheckedChangeListener.onCheckedChanged(this, checked);
    }

    public void setOnCheckedChangeListener(OnCheckedChangeListener onCheckedChangeListener) {
        this.onCheckedChangeListener = onCheckedChangeListener;
    }

    public static interface OnCheckedChangeListener {
        void onCheckedChanged(View buttonView, boolean isChecked);
    }
}
&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;&amp;lt;declare-styleable name=&quot;CheckBoxImageView&quot;&amp;gt;
        &amp;lt;attr name=&quot;default_img&quot; format=&quot;integer&quot;/&amp;gt;
        &amp;lt;attr name=&quot;checked_img&quot; format=&quot;integer&quot;/&amp;gt;
        &amp;lt;attr name=&quot;checked&quot; format=&quot;boolean&quot;/&amp;gt;
&amp;lt;/declare-styleable&amp;gt;
&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; &amp;lt;com.adonta.ziva.consumer.wrapper.CheckBoxImageView
        xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
        android:id=&quot;@+id/checkBox&quot;
        android:layout_width=&quot;40dp&quot;
        android:layout_height=&quot;40dp&quot;
        android:layout_alignParentRight=&quot;true&quot;
        android:layout_centerVertical=&quot;true&quot;
        android:clickable=&quot;true&quot;
        android:padding=&quot;5dp&quot;
        app:checked_img=&quot;@drawable/check_box_checked&quot;
        app:default_img=&quot;@drawable/check_box&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 당신의 모든 문제를 해결해 줄 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&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/widget/ToggleButton.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;19-1&quot;&gt;또&lt;/a&gt; 다른 옵션은 Null 배경과 사용자 지정 단추가 있는 ToggleButton을 사용자 지정 단추를 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 색상에 대한 선택기도 포함된 예제를 아래에 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ToggleButton
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:button=&quot;@drawable/toggle_selector&quot;
    android:background=&quot;@null&quot;
    android:paddingLeft=&quot;10dp&quot;
    android:layout_centerHorizontal=&quot;true&quot;
    android:gravity=&quot;center&quot;
    android:textColor=&quot;@drawable/toggle_text&quot;
    android:textOn=&quot;My on state&quot;
    android:textOff=&quot;My off state&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;toggle_toggle.xml&lt;/font&gt;&lt;/em&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;selector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&amp;gt;

    &amp;lt;item
        android:state_checked=&quot;true&quot;
        android:drawable=&quot;@drawable/state_on&quot; /&amp;gt;

    &amp;lt;item
        android:drawable=&quot;@drawable/state_off&quot; /&amp;gt;

&amp;lt;/selector&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;toggle_text.xml&lt;/font&gt;&lt;/em&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;selector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&amp;gt;

    &amp;lt;item
        android:state_checked=&quot;true&quot;
        android:color=&quot;@color/app_color&quot; /&amp;gt;

    &amp;lt;item
        android:color=&quot;@android:color/darker_gray&quot; /&amp;gt;

&amp;lt;/selector&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 지정 어댑터를 사용하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;android:focusable=&quot;false&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;android:focusableInTouchMode=&quot;false&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확인란을 사용하는 동안 목록 항목을 클릭할 수 있도록 설정해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;CheckBox
        android:id=&quot;@+id/checkbox_fav&quot;
        android:focusable=&quot;false&quot;
        android:focusableInTouchMode=&quot;false&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:button=&quot;@drawable/checkbox_layout&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;26-1&quot;&gt;그리기&lt;/em&gt; 가능&lt;em papago-id=&quot;26-1&quot;&gt;&amp;gt;체크박스_layout.xml&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;selector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; &amp;gt;
    &amp;lt;item android:drawable=&quot;@drawable/uncked_checkbox&quot;
        android:state_checked=&quot;false&quot;/&amp;gt;
    &amp;lt;item android:drawable=&quot;@drawable/selected_checkbox&quot;
        android:state_checked=&quot;true&quot;/&amp;gt;
    &amp;lt;item android:drawable=&quot;@drawable/uncked_checkbox&quot;/&amp;gt;
&amp;lt;/selector&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-1&quot;&gt;Androidx.appcompat:appcompat&lt;/strong&gt;을 사용하고 사용자 지정 그리기 가능(유형)을 원하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;selector&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;android:state_checked&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 새 플랫폼 버전 외에 이전 플랫폼 버전에서 작업하려면 다음을 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;CheckBox
        app:buttonCompat=&quot;@drawable/...&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;CheckBox
        android:button=&quot;@drawable/...&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android에서 사용자 지정 그리기 가능 추가: 재료 확인란에서 버튼이 작동하지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;version-1.3.0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설정해야 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;android:drawable=&quot;@drawable/checkbox_selector&quot;&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;android:button=&quot;@null&quot;&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;android:drawablePadding&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잘 보이게 하기 위해서.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이렇게 하면 텍스트와 함께 전체 확인란을 클릭할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;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;그런 다음 배경 그리기 가능한 선택기(xml)를 만들어 확인란에 배경으로 적용할 수 있습니다.&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;selector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&amp;gt;
    &amp;lt;item
        android:state_checked=&quot;true&quot;
        android:drawable=&quot;@drawable/ic_checkbox_checked_24&quot; /&amp;gt;
    &amp;lt;item
        android:state_checked=&quot;false&quot;
        android:drawable=&quot;@drawable/ic_checkbox_unchecked_24&quot; /&amp;gt;
    &amp;lt;item
        android:drawable=&quot;@drawable/ic_checkbox_unchecked_24&quot;/&amp;gt;
&amp;lt;/selector&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;xml의 확인란이 이렇게 표시되지 않아야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;CheckBox
      android:id=&quot;@+id/check_box&quot;
      android:layout_width=&quot;wrap_content&quot;
      android:layout_height=&quot;wrap_content&quot;
      android:button=&quot;@null&quot;
      android:background=&quot;@drawable/checkbox_background_drawable&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확인란의 버튼 특성을 null로 설정했는지 확인합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3965484/&lt;a href=&quot;https://stackoverflow.com/questions/3965484/custom-checkbox-image-android&quot; target=&quot;_blank&quot; papago-id=&quot;39-1&quot;&gt;custom-checkbox-image-android&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/660</guid>
      <comments>https://yoursource.tistory.com/660#entry660comment</comments>
      <pubDate>Tue, 15 Aug 2023 15:19:22 +0900</pubDate>
    </item>
    <item>
      <title>트위터 부트스트랩 3: 미디어 쿼리를 사용하는 방법?</title>
      <link>https://yoursource.tistory.com/659</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;트위터 부트스트랩 3: 미디어 쿼리를 사용하는 방법?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 화면 크기에 따라 몇 가지 글꼴 크기를 조정하고 싶은 반응형 레이아웃을 만들기 위해 부트스트랩 3을 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;미디어 쿼리를 사용하여 이런 종류의 논리를 만들 수 있는 방법은 무엇입니까?&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;부트스트랩 3&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;BS3에서 사용되는 실렉터는 일관성을 유지하기 위해 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@media(max-width:767px){}
@media(min-width:768px){}
@media(min-width:992px){}
@media(min-width:1200px){}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 참고: 참고로, 이것은 디버깅에 유용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;span class=&quot;visible-xs&quot;&amp;gt;SIZE XS&amp;lt;/span&amp;gt;
&amp;lt;span class=&quot;visible-sm&quot;&amp;gt;SIZE SM&amp;lt;/span&amp;gt;
&amp;lt;span class=&quot;visible-md&quot;&amp;gt;SIZE MD&amp;lt;/span&amp;gt;
&amp;lt;span class=&quot;visible-lg&quot;&amp;gt;SIZE LG&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩 4&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 BS4에 사용된 실렉터입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;6-1&quot;&gt;BS4에는 &quot;특별히 작음&quot;이 기본값이기 때문에 &quot;최저&quot; 설정이 없습니다.&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;6-1&quot;&gt; 즉, 먼저 XS 크기를 코딩한 다음 나중에 이러한 미디어 오버라이드를 수행합니다.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@media(min-width:576px){}
@media(min-width:768px){}
@media(min-width:992px){}
@media(min-width:1200px){}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩 5&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;@media(min-width:576px){}
@media(min-width:768px){}
@media(min-width:992px){}
@media(min-width:1200px){}
@media(min-width:1400px){}
&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;업데이트 2021-05-20: 정보는 버전 3.4.1, 4.6.0, 5.0.0에서 여전히 정확합니다.&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;bisio의 답변과 부트스트랩 3 코드를 기반으로, 저는 전체 미디어 쿼리 세트를 복사하여 스타일시트에 붙여넣으려는 사람들을 위해 더 정확한 답변을 생각해 낼 수 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/* Large desktops and laptops */
@media (min-width: 1200px) {

}

/* Landscape tablets and medium desktops */
@media (min-width: 992px) and (max-width: 1199px) {

}

/* Portrait tablets and small desktops */
@media (min-width: 768px) and (max-width: 991px) {

}

/* Landscape phones and portrait tablets */
@media (max-width: 767px) {

}

/* Portrait phones and smaller */
@media (max-width: 480px) {

}
&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;LESS 또는 SCSS/SASS를 사용하고 LESS/SCSS 버전의 부트스트랩을 사용하는 경우 변수에 액세스할 수 있는 경우 변수도 &lt;a href=&quot;https://github.com/twbs/bootstrap/blob/master/less/variables.less&quot; papago-id=&quot;10-1&quot;&gt;사용&lt;/a&gt;할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;@full-decent의 답변을 덜 번역하면 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@media(max-width: @screen-xs-max){}
@media(min-width: @screen-sm-min){}  /* deprecated: @screen-tablet, or @screen-sm */
@media(min-width: @screen-md-min){}  /* deprecated: @screen-desktop, or @screen-md */
@media(min-width: @screen-lg-min){}  /* deprecated: @screen-lg-desktop, or @screen-lg */
&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;@screen-sm-max&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;@screen-md-max&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; 1셀적보다 1픽셀 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@screen-md-min&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@screen-lg-min&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각각, 일반적으로 와 함께 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@media(max-width)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: SCSS/SASS를 사용하는 경우 &lt;a href=&quot;https://github.com/twbs/bootstrap-sass/blob/master/vendor/assets/stylesheets/bootstrap/_variables.scss&quot; papago-id=&quot;17-1&quot;&gt;변수&lt;/a&gt;는 다음으로 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;@&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;$screen-xs-max&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;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 Bootstrap3의 값입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/* Extra Small */
@media(max-width:767px){}

/* Small */
@media(min-width:768px) and (max-width:991px){}

/* Medium */
@media(min-width:992px) and (max-width:1199px){}

/* Large */
@media(min-width:1200px){}
&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;뷰포트 너비가 700px 이하가 되면 모든 h1 태그를 20px로 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@media screen and ( max-width: 700px ) {
  h1 {
     font-size: 20px;
  }
}
&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;뷰포트가 700px 이상이 될 때까지 모든 h1의 20px를 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@media screen and ( min-width: 700px ) {
  h1 {
     font-size: 20px;
  }
}
&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;이것이 도움이 되길 바랍니다:0)&lt;/font&gt;&lt;/p&gt;&lt;h2 papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩 3&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Bootstrap 3(v3.4.1)의 최종 버전 릴리스에서는 다음과 같은 미디어 쿼리가 사용되었으며, 이는 사용 가능한 응답 클래스를 요약하는 문서에 해당합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://getbootstrap.com/docs/3.4/css/#responsive-utilities&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;27-1&quot;&gt;https://getbootstrap.com/docs/3.4/css/ #응답형-메시지&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/* Extra Small Devices, .visible-xs-* */
@media (max-width: 767px) {}

/* Small Devices, .visible-sm-* */
@media (min-width: 768px) and (max-width: 991px) {}

/* Medium Devices, .visible-md-* */
@media (min-width: 992px) and (max-width: 1199px) {}

/* Large Devices, .visible-lg-* */
@media (min-width: 1200px) {}
&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;Bootstrap GitHub 저장소에서 추출한 미디어 쿼리 수가 다음보다 적음:-&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/twbs/bootstrap/blob/v3.4.1/less/variables.less#L283&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/twbs/bootstrap/blob/v3.4.1/less/variables.less#L283&lt;/font&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/twbs/bootstrap/blob/v3.4.1/less/responsive-utilities.less&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/twbs/bootstrap/blob/v3.4.1/less/responsive-utilities.less&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부트스트랩 5&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;버전 5에 대한 설명서에서 미디어 쿼리 중단점이 버전 3 이후 최신 장치 치수에 더 적합하도록 업데이트되었음을 알 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// X-Small devices (portrait phones, less than 576px)
// No media query for `xs` since this is the default in Bootstrap

// Small devices (landscape phones, 576px and up)
@media (min-width: 576px) { ... }

// Medium devices (tablets, 768px and up)
@media (min-width: 768px) { ... }

// Large devices (desktops, 992px and up)
@media (min-width: 992px) { ... }

// X-Large devices (large desktops, 1200px and up)
@media (min-width: 1200px) { ... }

// XX-Large devices (larger desktops, 1400px and up)
@media (min-width: 1400px) { ... }
&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;a href=&quot;https://getbootstrap.com/docs/5.0/layout/breakpoints/#min-width&quot; papago-id=&quot;33-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;부트스트랩&lt;/a&gt; 5 &lt;a href=&quot;https://getbootstrap.com/docs/5.0/layout/breakpoints/#min-width&quot; papago-id=&quot;33-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;설명서&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Bootstrap GitHub 저장소에서 v5.1.3의 중단점을 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/twbs/bootstrap/blob/v5.1.3/scss/_variables.scss#L461&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/twbs/bootstrap/blob/v5.1.3/scss/_variables.scss#L461&lt;/font&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/twbs/bootstrap/blob/v5.1.3/scss/mixins/_breakpoints.scss&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/twbs/bootstrap/blob/v5.1.3/scss/mixins/_breakpoints.scss&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2021-12-19에 업데이트됨&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;다음은 LESS를 사용하여 더 적은 파일을 가져오지 않고 부트스트랩을 모방하는 모듈식 예제입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@screen-xs-max: 767px;
@screen-sm-min: 768px;
@screen-sm-max: 991px;
@screen-md-min: 992px;
@screen-md-max: 1199px;
@screen-lg-min: 1200px;

//xs only
@media(max-width: @screen-xs-max) {

}
//small and up
@media(min-width: @screen-sm-min) {

}
//sm only
@media(min-width: @screen-sm-min) and (max-width: @screen-sm-max) {

}
//md and up
@media(min-width: @screen-md-min) {

}
//md only
@media(min-width: @screen-md-min) and (max-width: @screen-md-max) {

}
//lg and up
@media(min-width: @screen-lg-min) {

}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사용자들의 답변을 바탕으로, 나는 더 쉽게 사용할 수 있도록 다음과 같은 맞춤형 믹스인을 작성했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;투입량 감소&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;.when-xs(@rules) { @media (max-width: @screen-xs-max) { @rules(); } }
.when-sm(@rules) { @media (min-width: @screen-sm-min) { @rules(); } }
.when-md(@rules) { @media (min-width: @screen-md-min) { @rules(); } }
.when-lg(@rules) { @media (min-width: @screen-lg-min) { @rules(); } }
&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;body {
  .when-lg({
    background-color: red;
  });
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SCSS 입력&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;@mixin when-xs() { @media (max-width: $screen-xs-max) { @content; } }
@mixin when-sm() { @media (min-width: $screen-sm-min) { @content; } }
@mixin when-md() { @media (min-width: $screen-md-min) { @content; } }
@mixin when-lg() { @media (min-width: $screen-lg-min) { @content; } }
&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;pre&gt;&lt;code&gt;body {
  @include when-md {
    background-color: red;
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;산출량&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;@media (min-width:1200px) {
  body {
    background-color: red;
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 간단한 Sass-Compass:&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;@mixin col-xs() {
    @media (max-width: 767px) {
        @content;
    }
}
@mixin col-sm() {
    @media (min-width: 768px) and (max-width: 991px) {
        @content;
    }
}
@mixin col-md() {
    @media (min-width: 992px) and (max-width: 1199px) {
        @content;
    }
}
@mixin col-lg() {
    @media (min-width: 1200px) {
        @content;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;46&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;#content-box {
    @include border-radius(18px);
    @include adjust-font-size-to(18pt);
    padding:20px;
    border:1px solid red;
    @include col-xs() {
        width: 200px;
        float: none;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 크기 조정을 피하는 것이 응답형 레이아웃이 존재하는 주요 이유입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;응답 사이트 뒤의 전체 논리는 컨텐츠를 효과적으로 표시하여 여러 화면 크기에서 쉽게 읽을 수 있고 사용할 수 있도록 기능적 레이아웃을 만드는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경우에 따라 텍스트의 크기를 조정해야 하지만 사이트가 축소되지 않도록 주의하고 요점을 놓치지 마십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든 여기 예시가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@media(min-width:1200px){

    h1 {font-size:34px}

}
@media(min-width:992px){

    h1 {font-size:32px}

}
@media(min-width:768px){

    h1 {font-size:28px}

}
@media(max-width:767px){

    h1 {font-size:26px}

}
&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;또한 부트스트랩 3에서 480 뷰포트가 삭제되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Less 파일에서 다음 미디어 쿼리를 사용하여 그리드 시스템의 주요 중단점을 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/* Small devices (tablets, 768px and up) */
@media (min-width: @screen-sm-min) { ... }

/* Medium devices (desktops, 992px and up) */
@media (min-width: @screen-md-min) { ... }

/* Large devices (large desktops, 1200px and up) */
@media (min-width: @screen-lg-min) { ... }
&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;&lt;a href=&quot;http://getbootstrap.com/css/&quot; rel=&quot;nofollow&quot; papago-id=&quot;52-1&quot;&gt;부트스트랩&lt;/a&gt; 참고 항목&lt;/font&gt;&lt;/p&gt;&lt;blockquote&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;/blockquote&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;
&amp;lt;style&amp;gt;
body {
    background-color: lightgreen;
}
/* Custom, iPhone Retina */ 
@media(max-width:320px){
    body {
        background-color: lime;
        font-size:14px;
     }
}
@media only screen and (min-width : 320px) {
     body {
        background-color: red;
        font-size:18px;
    }
}
/* Extra Small Devices, Phones */ 
@media only screen and (min-width : 480px) {
     body {
        background-color: aqua;
        font-size:24px;
    }
}
/* Small Devices, Tablets */
@media only screen and (min-width : 768px) {
     body {
        background-color: green;
        font-size:30px;
    }
}
/* Medium Devices, Desktops */
@media only screen and (min-width : 992px) {
     body {
        background-color: grey;
        font-size:34px;
    }
}
/* Large Devices, Wide Screens */
@media only screen and (min-width : 1200px) {
     body {
        background-color: black;
        font-size:42px;
    }
}
&amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;p&amp;gt;Resize the browser window. When the width of this document is larger than the height, the background-color is &quot;lightblue&quot;, otherwise it is &quot;lightgreen&quot;.&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;미디어 쿼리에 기반한 별도의 응답 파일을 포함하여 훨씬 더 쉬운 원스톱 솔루션이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 모든 미디어 쿼리 논리와 포함 논리가 로더라는 한 페이지에만 존재하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 미디어 쿼리가 응답 스타일 시트 자체를 혼란스럽게 하지 않도록 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//loader.less

// this twbs include adds all bs functionality, including added libraries such as elements.less, and our custom variables
@import '/app/Resources/less/bootstrap.less';

/*
* Our base custom twbs overrides
* (phones, xs, i.e. less than 768px, and up)
* no media query needed for this one since this is the default in Bootstrap
* All styles initially go here.  When you need a larger screen override, move those     
* overrides to one of the responsive files below
*/
@import 'base.less';

/*
* Our responsive overrides based on our breakpoint vars
*/
@import url(&quot;sm-min.less&quot;) (min-width: @screen-sm-min); //(tablets, 768px and up)
@import url(&quot;md-min.less&quot;) (min-width: @screen-md-min); //(desktops, 992px and up)
@import url(&quot;large-min.less&quot;) (min-width: @screen-lg-min); //(large desktops, 1200px and up)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;base.less는 이렇게 보일 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/**
* base.less
* bootstrap overrides
* Extra small devices, phones, less than 768px, and up
* No media query since this is the default in Bootstrap
* all master site styles go here
* place any responsive overrides in the perspective responsive sheets themselves
*/
body{
  background-color: @fadedblue;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sm-min.less는 이렇게 보일 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/**
* sm-min.less
* min-width: @screen-sm-min
* Small devices (tablets, 768px and up)
*/
body{
  background-color: @fadedgreen;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인덱스는 로더를 로드하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;link rel=&quot;stylesheet/less&quot; type=&quot;text/css&quot; href=&quot;loader.less&quot; /&amp;gt;
&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;blockquote&gt; 
 &lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@미디어 전용 화면 및 (최대 너비: 1200ppm) {}&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;@미디어 전용 화면 및 (최대 너비: 979인치) {}&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;@미디어 전용 화면 및 (최대 너비: 767인치) {}&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;@미디어 전용 화면 및 (최대 너비: 480인치) {}&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;@미디어 전용 화면 및 (최대 너비: 320인치) {}&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;@media(최소 너비: 768인치) 및 (최대 너비: 991인치) {}&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@media(최소 너비: 992인치) 및 (최대 너비: 1024인치) {}&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IE에 미디어 쿼리를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@media only screen 
and (min-device-width : 320px) 
and (max-device-width : 480px) 
and (orientation : landscape) and (-ms-high-contrast: none), (-ms-high-contrast: active) {
}
@media only screen 
and (min-device-width : 360px) 
and (max-device-width : 640px) 
and (orientation : portrait) and (-ms-high-contrast: none), (-ms-high-contrast: active) {
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:)&lt;/font&gt;&lt;/p&gt; 
&lt;p&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; 부트스트랩에서는 SCSS(SASS하여 SCSS(4.3.1)의 @ 중할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/bootstrap/scss/mixins/_breakpoints.scss&lt;/code&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;@content를 지정된 중단점 이상에 적용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints)&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최대 중단점 너비의 매체입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 큰 중단점에 대한 쿼리가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;@content를 지정된 중단점에 더 좁게 적용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints)&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 중단점 너비에 걸쳐 있는 미디어입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;@ 컨텐츠를 최소 및 최대 중단점 사이에 적용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints)&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중단점의 최소 너비와 최대 너비 사이의 미디어입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 작은 중단점에는 최소값이 없고 가장 큰 중단점에는 최대값이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;뷰포트를 더 넓히거나 좁히지 않고 지정된 중단점에만 @ 컨텐츠를 적용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints)&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.content__extra {
  height: 100%;

  img {
    margin-right: 0.5rem;
  }

  @include media-breakpoint-down(xs) {
    margin-bottom: 1rem;
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설명서:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://getbootstrap.com/docs/4.3/layout/overview/#responsive-breakpoints&quot; papago-id=&quot;76-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;소개 &lt;/a&gt;https://getbootstrap.com/docs/4.3/layout/overview/ #&lt;a href=&quot;https://getbootstrap.com/docs/4.3/layout/overview/#responsive-breakpoints&quot; papago-id=&quot;76-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;대응&lt;/a&gt; 중단점&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://getbootstrap.com/docs/4.3/migration/#responsive-utilities&quot; papago-id=&quot;77-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;마이그레이션 &lt;/a&gt;https://getbootstrap.com/docs/4.3/migration/ #&lt;a href=&quot;https://getbootstrap.com/docs/4.3/migration/#responsive-utilities&quot; papago-id=&quot;77-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;response-message&lt;/a&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://getbootstrap.com/docs/4.3/layout/grid/#variables&quot; papago-id=&quot;78-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;변수 &lt;/a&gt;https://getbootstrap.com/docs/4.3/layout/grid/ #&lt;a href=&quot;https://getbootstrap.com/docs/4.3/layout/grid/#variables&quot; papago-id=&quot;78-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;variables&lt;/a&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해피 코딩 ;)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주 반응을 개선하는 방법:&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;strong papago-id=&quot;11-1&quot;&gt;미디어&lt;/strong&gt; 속성을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 필요로 하는 코드만 다운로드할 수 있도록 태그(미디어 쿼리 지원)를 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;link href=&quot;style.css&quot; rel=&quot;stylesheet&quot;&amp;gt;
&amp;lt;link href=&quot;deviceSizeDepending.css&quot; rel=&quot;stylesheet&quot; media=&quot;(min-width: 40em)&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 브라우저는 &lt;strong papago-id=&quot;83-1&quot;&gt;미디어&lt;/strong&gt; 속성에 관계없이 모든 CSS 리소스를 다운로드합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;83-3&quot;&gt;차이점은 미디어 속성의 미디어 쿼리가 false로 &lt;em papago-id=&quot;83-3-1&quot;&gt;평가&lt;/em&gt;되면 해당 .css 파일과 해당 콘텐츠가 렌더 차단되지 않는다는 것입니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 의 &lt;em papago-id=&quot;13-1&quot;&gt;미디어&lt;/em&gt; 속성을 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 나은 사용자 환경을 보장하기 때문에 태그를 지정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developers.google.com/web/fundamentals/performance/critical-rendering-path/render-blocking-css&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;86-1&quot;&gt;여기&lt;/a&gt;에서 이 문제에 대한 Google 기사를 읽을 수 있습니다. https://developers.google.com/web/fundamentals/performance/critical-rendering-path/render-blocking-css&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;미디어 쿼리에 따라 서로 다른 파일에서 CSS 코드를 자동으로 분리하는 데 도움이 되는 몇 가지 도구&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;웹팩 https://www.npmjs.com/package/&lt;a href=&quot;https://www.npmjs.com/package/media-query-splitting-plugin&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;88-3&quot;&gt;media-query-plugin &lt;/a&gt;https://www.npmjs.com/package/media-query-splitting-plugin&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;PostCSS https://www.npmjs.com/package/&lt;a href=&quot;https://www.npmjs.com/package/postcss-extract-media-query&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;89-1&quot;&gt;postcss-extract-media-query&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;90&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/18424798/&lt;a href=&quot;https://stackoverflow.com/questions/18424798/twitter-bootstrap-3-how-to-use-media-queries&quot; target=&quot;_blank&quot; papago-id=&quot;90-1&quot;&gt;twitter-bootstrap-3-how-to-use-media-queries&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/659</guid>
      <comments>https://yoursource.tistory.com/659#entry659comment</comments>
      <pubDate>Tue, 15 Aug 2023 15:14:25 +0900</pubDate>
    </item>
    <item>
      <title>드롭다운의 트리거 변경 이벤트</title>
      <link>https://yoursource.tistory.com/658</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;드롭다운의 트리거 변경 이벤트&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$(문서) 드롭다운의 변경 이벤트를 트리거하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;jquery를 사용하여 준비되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 세부 정보 페이지에 국가 및 주에 대한 계단식 드롭다운이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C#을 사용하여 MVC에서 국가 및 상태에 대한 값(사용자 ID를 기반으로 DB에서 가져온 값)을 설정하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JQuery는 잘 모르지만 이 구문으로 네이티브 이벤트를 실행할 수 있다고 들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).ready(function(){

    $('#countrylist').change(function(e){
       // Your event handler
    });

    // And now fire change event when the DOM is ready
    $('#countrylist').trigger('change');
});
&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;@Leniel Macaferi를 언급해 주셔서 감사합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 &lt;a href=&quot;http://docs.jquery.com/Events/trigger&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;내용&lt;/a&gt;은 여기를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).ready(function(event) {
    $('#countrylist').change(function(e){
         // put code here
     }).change();
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경 이벤트를 정의하고 즉시 트리거합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 이벤트 핸들러를 호출하기 전에 이벤트 핸들러가 정의됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원래 포스터에 답하기에는 늦을 수 있지만 다른 사람이 단축 표기법의 혜택을 받을 수 있으며, 이것은 jQuery의 체인 등을 따릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.w3schools.com/jquery/jquery_chaining.asp&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;재쿼리 체인&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;$('#id').change();&lt;/code&gt; &lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나한테 효과가 있어요.&lt;/font&gt;&lt;/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;$('#id').val(16).change();&lt;/code&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;연결된 드롭다운을 사용하려는 경우에는 미리 작성된 선택 상자를 반환하는 스크립트와 이를 요청하는 AJAX 호출을 사용하는 것이 가장 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://docs.jquery.com/Ajax/jQuery.ajax&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;필요한 경우 jQuery의 Ajax 메서드에 대한 설명서입니다.&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).ready(function(){

    $('#countrylist').change(function(e){
        $this = $(e.target);
        $.ajax({
            type: &quot;POST&quot;,
            url: &quot;scriptname.asp&quot;, // Don't know asp/asp.net at all so you will have to do this bit
            data: { country: $this.val() },
            success:function(data){
                $('#stateBoxHook').html(data);
            }
        });
    });

});
&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;그런 다음 ID가 &quot;stateBoxHook&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;또는 드롭다운 목록 자체에 변경 속성을 추가하여 변경 시 이와 같은 특정 jquery 함수를 호출할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;dropdownlist&quot; onchange=&quot;jqueryFunc()&quot;&amp;gt;

&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
$(function(){
    jqueryFunc(){
        //something goes here
    }
});
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 당신에게 도움이 되기를 바라며, 이 코드는 단지 대략적인 초안일 뿐, 어떤 아이디어에서도 테스트되지 않았다는 점에 유의하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/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;jQuery&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 제공된 솔루션은 콘솔에서 스크립트를 실행할 때 작동했지만 Chrome &lt;a href=&quot;https://en.wikipedia.org/wiki/Bookmarklet&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;2-1&quot;&gt;Bookmarklet&lt;/a&gt;에서 트리거할 때는 작동하지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;운 &lt;a href=&quot;https://stackoverflow.com/a/2856602&quot; papago-id=&quot;3-1&quot;&gt;좋게&lt;/a&gt;도, 이&lt;a href=&quot;https://stackoverflow.com/a/2856602&quot; papago-id=&quot;3-1&quot;&gt; 바닐라 JS&lt;/a&gt; 솔루션은.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;triggerChangeEvent&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;function)이 작동했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;/**
  * Trigger a `change` event on given drop down option element.
  * WARNING: only works if not already selected.
  * @see https://stackoverflow.com/questions/902212/trigger-change-event-of-dropdown/58579258#58579258
  */
function triggerChangeEvent(option) {
  // set selected property
  option.selected = true;
  
  // raise event on parent &amp;lt;select&amp;gt; element
  if (&quot;createEvent&quot; in document) {
    var evt = document.createEvent(&quot;HTMLEvents&quot;);
    evt.initEvent(&quot;change&quot;, false, true);
    option.parentNode.dispatchEvent(evt);
  }
  else {
    option.parentNode.fireEvent(&quot;onchange&quot;);
  }
}

// ################################################
// Setup our test case
// ################################################

(function setup() {
  const sel = document.querySelector('#fruit');
  sel.onchange = () =&amp;gt; {
    document.querySelector('#result').textContent = sel.value;
  };
})();

function runTest() {
  const sel = document.querySelector('#selector').value;
  const optionEl = document.querySelector(sel);
  triggerChangeEvent(optionEl);
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;select id=&quot;fruit&quot;&amp;gt;
  &amp;lt;option value=&quot;&quot;&amp;gt;(select a fruit)&amp;lt;/option&amp;gt;
  &amp;lt;option value=&quot;apple&quot;&amp;gt;Apple&amp;lt;/option&amp;gt;
  &amp;lt;option value=&quot;banana&quot;&amp;gt;Banana&amp;lt;/option&amp;gt;
  &amp;lt;option value=&quot;pineapple&quot;&amp;gt;Pineapple&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;

&amp;lt;p&amp;gt;
  You have selected: &amp;lt;b id=&quot;result&quot;&amp;gt;&amp;lt;/b&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;
  &amp;lt;input id=&quot;selector&quot; placeholder=&quot;selector&quot; value=&quot;option[value='banana']&quot;&amp;gt;
  &amp;lt;button onclick=&quot;runTest()&quot;&amp;gt;Trigger select!&amp;lt;/button&amp;gt;
&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;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;URL : https://stackoverflow.com/questions/902212/&lt;a href=&quot;https://stackoverflow.com/questions/902212/trigger-change-event-of-dropdown&quot; target=&quot;_blank&quot; papago-id=&quot;22-1&quot;&gt;trigger-change-event-of-dropdown&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/658</guid>
      <comments>https://yoursource.tistory.com/658#entry658comment</comments>
      <pubDate>Tue, 15 Aug 2023 15:13:42 +0900</pubDate>
    </item>
    <item>
      <title>com.google.android.gms.maps에 대한 다른 조각으로 ID, 태그 null 또는 상위 ID가 중복됩니다.지도 조각</title>
      <link>https://yoursource.tistory.com/657</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;com.google.android.gms.maps에 대한 다른 조각으로 ID, 태그 null 또는 상위 ID가 중복됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지도 조각&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 탭이 세 개인 애플리케이션을 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 탭에는 고유한 레이아웃 .xml 파일이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;main.xml에는 자체 맵 조각이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 응용 프로그램이 처음 시작될 때 나타나는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;탭을 바꿀 때를 제외하고는 모두 잘 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지도 조각 탭으로 다시 전환하려고 하면 이 오류가 발생합니다.&lt;/font&gt;&lt;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;이것은 나의 메인 클래스와 나의 main.xml, 그리고 내가 사용하는 관련 클래스입니다(아래에 오류 로그도 있습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;본류&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;package com.nfc.demo;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.widget.Toast;

public class NFCDemoActivity extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ActionBar bar = getActionBar();
        bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);

        bar.addTab(bar
                .newTab()
                .setText(&quot;Map&quot;)
                .setTabListener(
                        new TabListener&amp;lt;MapFragment&amp;gt;(this, &quot;map&quot;,
                                MapFragment.class)));
        bar.addTab(bar
                .newTab()
                .setText(&quot;Settings&quot;)
                .setTabListener(
                        new TabListener&amp;lt;SettingsFragment&amp;gt;(this, &quot;settings&quot;,
                                SettingsFragment.class)));
        bar.addTab(bar
                .newTab()
                .setText(&quot;About&quot;)
                .setTabListener(
                        new TabListener&amp;lt;AboutFragment&amp;gt;(this, &quot;about&quot;,
                                AboutFragment.class)));

        if (savedInstanceState != null) {
            bar.setSelectedNavigationItem(savedInstanceState.getInt(&quot;tab&quot;, 0));
        }
        // setContentView(R.layout.main);

    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(&quot;tab&quot;, getActionBar().getSelectedNavigationIndex());
    }

    public static class TabListener&amp;lt;T extends Fragment&amp;gt; implements
            ActionBar.TabListener {
        private final Activity mActivity;
        private final String mTag;
        private final Class&amp;lt;T&amp;gt; mClass;
        private final Bundle mArgs;
        private Fragment mFragment;

        public TabListener(Activity activity, String tag, Class&amp;lt;T&amp;gt; clz) {
            this(activity, tag, clz, null);
        }

        public TabListener(Activity activity, String tag, Class&amp;lt;T&amp;gt; clz,
                Bundle args) {
            mActivity = activity;
            mTag = tag;
            mClass = clz;
            mArgs = args;

            // Check to see if we already have a fragment for this tab,
            // probably from a previously saved state. If so, deactivate
            // it, because our initial state is that a tab isn't shown.
            mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag);
            if (mFragment != null &amp;amp;&amp;amp; !mFragment.isDetached()) {
                FragmentTransaction ft = mActivity.getFragmentManager()
                        .beginTransaction();
                ft.detach(mFragment);
                ft.commit();
            }
        }

        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            if (mFragment == null) {
                mFragment = Fragment.instantiate(mActivity, mClass.getName(),
                        mArgs);
                ft.add(android.R.id.content, mFragment, mTag);
            } else {
                ft.attach(mFragment);
            }
        }

        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            if (mFragment != null) {
                ft.detach(mFragment);
            }
        }

        public void onTabReselected(Tab tab, FragmentTransaction ft) {
            Toast.makeText(mActivity, &quot;Reselected!&quot;, Toast.LENGTH_SHORT)
                         .show();
        }
    }

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;main.xml&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:orientation=&quot;vertical&quot; &amp;gt;

    &amp;lt;fragment
        xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
        android:id=&quot;@+id/mapFragment&quot;
        android:name=&quot;com.google.android.gms.maps.MapFragment&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;match_parent&quot; /&amp;gt;
&amp;lt;/LinearLayout&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;관련 클래스(MapFragment.java)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;package com.nfc.demo;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class MapFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        return inflater.inflate(R.layout.main, container, false);
    }

    public void onDestroy() {
        super.onDestroy();
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;android.view.InflateException: Binary XML file line #7: 
     Error inflating class fragment
   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
   at com.nfc.demo.MapFragment.onCreateView(MapFragment.java:15)
   at android.app.Fragment.performCreateView(Fragment.java:1695)
   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)
   at android.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1255)
   at android.app.BackStackRecord.run(BackStackRecord.java:672)
   at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
   at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
   at android.os.Handler.handleCallback(Handler.java:725)
   at android.os.Handler.dispatchMessage(Handler.java:92)
   at android.os.Looper.loop(Looper.java:137)
   at android.app.ActivityThread.main(ActivityThread.java:5039)
   at java.lang.reflect.Method.invokeNative(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:511)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
   at dalvik.system.NativeStart.main(Native Method)

Caused by: java.lang.IllegalArgumentException: 
     Binary XML file line #7: Duplicate id 0x7f040005, tag null, or 
     parent id 0xffffffff with another fragment for 
     com.google.android.gms.maps.MapFragment
   at android.app.Activity.onCreateView(Activity.java:4722)
   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
   ... 19 more
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/14484640&quot; papago-id=&quot;10-0&quot;&gt;Matt&lt;/a&gt;가 제안한 &lt;a href=&quot;https://stackoverflow.com/a/14484640&quot; papago-id=&quot;10-0&quot;&gt;답&lt;/a&gt;은 효과가 있지만, 그것은 지도가 다시 생성되고 다시 그려지게 하는데, 이것이 항상 바람직한 것은 &lt;a href=&quot;https://stackoverflow.com/a/14484640&quot; papago-id=&quot;10-0&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;private static View view;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (view != null) {
        ViewGroup parent = (ViewGroup) view.getParent();
        if (parent != null)
            parent.removeView(view);
    }
    try {
        view = inflater.inflate(R.layout.map, container, false);
    } catch (InflateException e) {
        /* map is already there, just return view as it is */
    }
    return view;
}
&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;다음은 &quot;map.xml&quot;(R.layout.map)과 R.id .mapFragment(안드로이드:id=&quot;@+id/mapFragment&quot;)입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:id=&quot;@+id/mapLayout&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot; &amp;gt;

    &amp;lt;fragment xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
        android:id=&quot;@+id/mapFragment&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;match_parent&quot;
        class=&quot;com.google.android.gms.maps.SupportMapFragment&quot; /&amp;gt;
&amp;lt;/LinearLayout&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;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;13-0&quot;&gt;편집:&lt;/strong&gt; 응용 프로그램을 종료하고 다시 시작하는 등의 몇 가지 부작용이 있었습니다.&lt;/font&gt;&lt;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;strike papago-id=&quot;13-2&quot;&gt;
&lt;/strike&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strike papago-id=&quot;13-2&quot;&gt;  스택 추적을 볼 때 지도 조각이 Fragment Manager에 있는지 확인할 수 있다는 생각이 들었습니다. Try-catch 블록이 필요 없고 코드가 업데이트되었습니다.&lt;/strike&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strike papago-id=&quot;13-2&quot;&gt; &lt;/strike&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;14-0&quot;&gt;추가 편집:&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;결국 당신은 그 시도가 필요한 것으로 밝혀졌습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지도 조각을 확인해 보니 결국 잘 작동하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;으악!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 당신이 하려고 하는 일이 이루어져서는 안 된다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 다른 조각들 안에서 조각들을 부풀려서는 안 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android의 &lt;a href=&quot;http://developer.android.com/about/versions/android-4.2.html#NestedFragments&quot; papago-id=&quot;15-1&quot;&gt;설명서&lt;/a&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;참고: 레이아웃에 &amp;lt;fragment&amp;gt;가 포함된 경우 레이아웃을 fragment로 확장할 수 없습니다.&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;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 제시된 해킹으로 작업을 수행할 수는 있지만, 그렇게 하지 않는 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 조각이 포함된 조각의 레이아웃을 부풀리려고 할 때 이러한 해킹이 각각의 새로운 Android OS가 수행하는 작업을 처리할 것이라고 확신하는 것은 불가능합니다.&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;Android에서 지원하는 다른 조각에 조각을 추가하는 유일한 방법은 하위 조각 관리자의 트랜잭션입니다.&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;XML 레이아웃을 빈 컨테이너로 변경하기만 하면 됩니다(필요한 경우 ID 추가).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:id=&quot;@+id/mapFragmentContainer&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:orientation=&quot;vertical&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;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;onViewCreated(View view, @Nullable Bundle savedInstanceState)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    FragmentManager fm = getChildFragmentManager();
    SupportMapFragment mapFragment = (SupportMapFragment) fm.findFragmentByTag(&quot;mapFragment&quot;);
    if (mapFragment == null) {
        mapFragment = new SupportMapFragment();
        FragmentTransaction ft = fm.beginTransaction();
        ft.add(R.id.mapFragmentContainer, mapFragment, &quot;mapFragment&quot;);
        ft.commit();
        fm.executePendingTransactions();
    }
    mapFragment.getMapAsync(callback);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 문제가 있었고 수동으로 제거하여 문제를 해결할 수 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MapFragment&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 시대에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;onDestroy()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Fragment&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 여기 작동하고 참조하는 코드가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MapFragment&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;XML &quot;ID&quot;의:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public void onDestroyView() {
    super.onDestroyView();
    MapFragment f = (MapFragment) getFragmentManager()
                                         .findFragmentById(R.id.map);
    if (f != null) 
        getFragmentManager().beginTransaction().remove(f).commit();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MapFragment&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;MapView&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;탭을 앞뒤로 전환하는 데 유용하지만 단편적으로 사용할 경우 이 동작이 중복됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MapView&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;MapFragment&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 신분증으로&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책은 수동으로 제거하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MapFragment&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 조각이 부풀릴 때마다 기본 지도를 다시 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 다른 답변 [&lt;a href=&quot;https://stackoverflow.com/a/14466954/61594&quot; papago-id=&quot;33-1&quot;&gt;1&lt;/a&gt;]에서도 이 점을 주목했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 대답은 이렇습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1, 다음과 같은 레이아웃 xml을 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;FrameLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
xmlns:tools=&quot;http://schemas.android.com/tools&quot;
android:id=&quot;@+id/map_container&quot;
android:layout_width=&quot;match_parent&quot;
android:layout_height=&quot;match_parent&quot;&amp;gt;
&amp;lt;/FrameLayout&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2, Fragment 클래스에서 Google 지도를 프로그래밍 방식으로 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * A simple {@link android.support.v4.app.Fragment} subclass. Activities that
 * contain this fragment must implement the
 * {@link MapFragment.OnFragmentInteractionListener} interface to handle
 * interaction events. Use the {@link MapFragment#newInstance} factory method to
 * create an instance of this fragment.
 * 
 */
public class MapFragment extends Fragment {
    // TODO: Rename parameter arguments, choose names that match
    private GoogleMap mMap;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_map, container, false);
        SupportMapFragment mMapFragment = SupportMapFragment.newInstance();
        mMap = mMapFragment.getMap();
        FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
        transaction.add(R.id.map_container, mMapFragment).commit();
        return view;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        Log.d(&quot;Attach&quot;, &quot;on attach&quot;);
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }
} 
&lt;/code&gt;&lt;/pre&gt;&lt;ol&gt; 
 &lt;li papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Justin Breitfeller가 언급했듯이, @Vidar Wahlberg 솔루션은 미래 버전의 Android에서 작동하지 않을 수 있는 해킹입니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Vidar Wahlberg는 다른 솔루션이 &quot;지도를 다시 생성하고 다시 그릴 수 있지만, 이는 항상 바람직한 것은 아닙니다.&quot;라는 이유로 해킹을 제안합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;매번 새 인스턴스를 만드는 대신 이전 맵 조각을 유지 관리하여 맵 다시 그리기를 방지할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@매트 솔루션이 작동하지 않는 경우(IlgalStateException)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Justin Breitfeller는 &quot;레이아웃에 fragment가 포함된 경우 레이아웃을 fragment로 확장할 수 없습니다. 중첩된 fragment는 fragment에 동적으로 추가될 때만 지원됩니다.&quot;라고 말했습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&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;@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,                              Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_map_list, container, false);

    // init
    //mapFragment = (SupportMapFragment)getChildFragmentManager().findFragmentById(R.id.map);
    // don't recreate fragment everytime ensure last map location/state are maintain
    if (mapFragment == null) {
        mapFragment = SupportMapFragment.newInstance();
        mapFragment.getMapAsync(this);
    }
    FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
    // R.id.map is a layout
    transaction.replace(R.id.map, mapFragment).commit();

    return view;
}
&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;SupportMapFragment 개체를 전역으로 선언합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    private SupportMapFragment mapFragment;
&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;코드 아래에 CreateView() 메서드를 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mapFragment = (SupportMapFragment) getChildFragmentManager()
            .findFragmentById(R.id.map);
 mapFragment.getMapAsync(this);
&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;In DestroyView() 코드 아래에 입력&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public void onDestroyView() {
   super.onDestroyView();

    if (mapFragment != null)
        getFragmentManager().beginTransaction().remove(mapFragment).commit();
}
&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;xml 파일에 아래 코드를 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;fragment
    android:id=&quot;@+id/map&quot;
    android:name=&quot;com.abc.Driver.fragment.FragmentHome&quot;
    class=&quot;com.google.android.gms.maps.SupportMapFragment&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 코드는 문제를 해결했고 잘 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 추합니다를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;replace()&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;attach()&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;detach()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;탭 처리 중입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 다음으로 전환&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ViewPager&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;a href=&quot;https://github.com/commonsguy/cw-omnibus/tree/master/MapsV2/Pager&quot; papago-id=&quot;18-1&quot; rel=&quot;nofollow&quot;&gt;다음은 다음&lt;/a&gt;과 같은 샘플 &lt;a href=&quot;https://github.com/commonsguy/cw-omnibus/tree/master/MapsV2/Pager&quot; papago-id=&quot;18-1&quot; rel=&quot;nofollow&quot;&gt;프로젝트&lt;/a&gt; 샘플입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ViewPager&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;10개의 지도를 호스팅하는 탭이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 솔루션:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (view == null) {
    view = inflater.inflate(R.layout.nearbyplaces, container, false);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이상입니다. null이 아니면 다시 초기화할 필요가 없습니다. 부모에서 제거하는 것은 불필요한 단계입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레이아웃을 두 번 되돌리거나 부풀리려고 합니다. 한 번만 부풀리는지 확인하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오늘 이유를 찾기 위해 몇 시간을 허비했습니다. 다행히 이 문제는 MapFragment 구현 때문이 아닙니다. fnadly, nested fragment는 rev 11의 지원 라이브러리를 통해서만 지원되기 때문에 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 구현체에는 두 개의 탭(보기 페이지 없음)이 있는 수행 표시줄(탭 모드) 활동이 있습니다. 하나는 맵이 있고 다른 하나는 항목 목록이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 저는 제 탭 조각 안에서 MapFragment를 사용하는 것에 대해 매우 순진했습니다. 에토빌라는 제가 지도 탭으로 다시 전환할 때마다 앱이 충돌했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(내 탭 조각이 다른 조각을 포함하는 레이아웃을 부풀릴 경우에도 동일한 문제가 발생합니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 가지 옵션은 MapFragment 대신 MapView(MapFragment 대신)를 사용하는 것입니다(layout.xml의 드롭인 대체로 &lt;a href=&quot;https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/MapView&quot; rel=&quot;nofollow&quot; papago-id=&quot;60-1&quot;&gt;MapViewDocs 참조&lt;/a&gt;). 다른 옵션은 rev.11부터 support-library를 사용하지만 중첩된 fragment는 레이아웃을 통해 지원되지 않으므로 프로그래밍 방식을 취하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 단편을 명시적으로 파괴하여 프로그래밍 방식으로 작업하는 것(Matt / Vidar의 답변처럼), btw: 맵뷰(옵션 1)를 사용하면 동일한 효과를 얻을 수 있습니다.&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;http://developer.android.com/reference/android/app/FragmentTransaction.html#hide%28android.app.Fragment%29&quot; papago-id=&quot;61-1&quot; rel=&quot;nofollow&quot;&gt;내용&lt;/a&gt;은 조각 트랜잭션 /&lt;a href=&quot;http://developer.android.com/reference/android/app/FragmentTransaction.html#hide%28android.app.Fragment%29&quot; papago-id=&quot;61-1&quot; rel=&quot;nofollow&quot;&gt; 숨기기&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제가 계속 발생하는 경우 탭에 있는 지도에서 이 오류가 발생하지 않도록 하는 가장 좋은 방법은 조각을 확장하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SupportMapFragment&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;둥를틀 를 내포하는 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SupportMapFragment&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Tab에 사용된 Fragment 안에 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 방금 이것을 사용하여 작동시켰습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ViewPager&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FragmentPagerAdapter&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;SupportMapFragment는 지원합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적인 구조는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 다음을 오버라이드할 필요가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;onCreateView()&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;메소드이며 레이아웃 xml을 부풀릴 필요가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class MapTabFragment extends SupportMapFragment 
                                    implements OnMapReadyCallback {

    private GoogleMap mMap;
    private Marker marker;


    public MapTabFragment() {
    }

    @Override
    public void onResume() {
        super.onResume();

        setUpMapIfNeeded();
    }

    private void setUpMapIfNeeded() {

        if (mMap == null) {

            getMapAsync(this);
        }
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {

        mMap = googleMap;
        setUpMap();
    }

    private void setUpMap() {

        mMap.setMyLocationEnabled(true);
        mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        mMap.getUiSettings().setMapToolbarEnabled(false);


        mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {

            @Override
            public void onMapClick(LatLng point) {

                //remove previously placed Marker
                if (marker != null) {
                    marker.remove();
                }

                //place marker where user just clicked
                marker = mMap.addMarker(new MarkerOptions().position(point).title(&quot;Marker&quot;)
                        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)));

            }
        });

    }


}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Zx7au.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 테스트할 때 사용한 전체 클래스 코드입니다. 여기에는 처음 두 탭에 사용한 자리 표시자 조각과 세 번째 탭에 사용한 맵 조각이 포함됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class MainActivity extends AppCompatActivity implements ActionBar.TabListener{


    SectionsPagerAdapter mSectionsPagerAdapter;

    ViewPager mViewPager;

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

        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mSectionsPagerAdapter);

        final ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                actionBar.setSelectedNavigationItem(position);
            }
        });

        for (int i = 0; i &amp;lt; mSectionsPagerAdapter.getCount(); i++) {
            actionBar.addTab(actionBar.newTab().setText(mSectionsPagerAdapter.getPageTitle(i)).setTabListener(this));
        }

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();

        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
        mViewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {

    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {

    }


    public class SectionsPagerAdapter extends FragmentPagerAdapter {

        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {

            switch (position) {
                case 0:
                    return PlaceholderFragment.newInstance(position + 1);
                case 1:
                    return PlaceholderFragment.newInstance(position + 1);
                case 2:
                    return MapTabFragment.newInstance(position + 1);
            }

            return null;
        }

        @Override
        public int getCount() {
            // Show 3 total pages.
            return 3;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            Locale l = Locale.getDefault();

            switch (position) {
                case 0:
                    return getString(R.string.title_section1).toUpperCase(l);
                case 1:
                    return getString(R.string.title_section2).toUpperCase(l);
                case 2:
                    return getString(R.string.title_section3).toUpperCase(l);
            }
            return null;
        }
    }


    public static class PlaceholderFragment extends Fragment {

        private static final String ARG_SECTION_NUMBER = &quot;section_number&quot;;

        TextView text;

        public static PlaceholderFragment newInstance(int sectionNumber) {
            PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);

            text = (TextView) rootView.findViewById(R.id.section_label);
            text.setText(&quot;placeholder&quot;);

            return rootView;
        }
    }

    public static class MapTabFragment extends SupportMapFragment implements
            OnMapReadyCallback {

        private static final String ARG_SECTION_NUMBER = &quot;section_number&quot;;

        private GoogleMap mMap;
        private Marker marker;


        public static MapTabFragment newInstance(int sectionNumber) {
            MapTabFragment fragment = new MapTabFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }

        public MapTabFragment() {
        }

        @Override
        public void onResume() {
            super.onResume();

            Log.d(&quot;MyMap&quot;, &quot;onResume&quot;);
            setUpMapIfNeeded();
        }

        private void setUpMapIfNeeded() {

            if (mMap == null) {

                Log.d(&quot;MyMap&quot;, &quot;setUpMapIfNeeded&quot;);

                getMapAsync(this);
            }
        }

        @Override
        public void onMapReady(GoogleMap googleMap) {
            Log.d(&quot;MyMap&quot;, &quot;onMapReady&quot;);
            mMap = googleMap;
            setUpMap();
        }

        private void setUpMap() {

            mMap.setMyLocationEnabled(true);
            mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
            mMap.getUiSettings().setMapToolbarEnabled(false);


            mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {

                @Override
                public void onMapClick(LatLng point) {

                    Log.d(&quot;MyMap&quot;, &quot;MapClick&quot;);

                    //remove previously placed Marker
                    if (marker != null) {
                        marker.remove();
                    }

                    //place marker where user just clicked
                    marker = mMap.addMarker(new MarkerOptions().position(point).title(&quot;Marker&quot;)
                            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)));

                    Log.d(&quot;MyMap&quot;, &quot;MapClick After Add Marker&quot;);

                }
            });

        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 모든 답변을 존중하지만 다음과 같은 하나의 라이너 솔루션을 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;n이 탭 수인 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; mViewPager.setOffscreenPageLimit(n);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급된 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; mViewPager.setOffscreenPageLimit(2);
&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;View 호출기는 큐를 구현하므로 해당 조각을 제거하지 않아도 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;CreateView에서 한 번만 호출됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 파티에 조금 늦었지만, 이 답변 중 어떤 것도 저의 경우에 도움이 되지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 Google 지도를 &lt;strong papago-id=&quot;75-1&quot;&gt;SupportMapFragment&lt;/strong&gt;와 &lt;strong papago-id=&quot;75-3&quot;&gt;PlaceAutocompleteFragment&lt;/strong&gt;로 사용하고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 답변이 지적했듯이 SupportMapFragment가 재생성되고 다시 그려지는 맵이라는 것이 문제입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 발굴한 후 제 문제가 실제로 &lt;strong papago-id=&quot;75-5&quot;&gt;PlaceAutocompleteFragment&lt;/strong&gt;에 있다는 것을 알게 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;76-1&quot;&gt;SupportMapFragment&lt;/strong&gt; 및 &lt;strong papago-id=&quot;76-3&quot;&gt;SupportMapFragment&lt;/strong&gt;로 인해 이 문제에 직면한 사용자를 위한 해결책은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; //Global SupportMapFragment mapFragment;
 mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.mapFragment);
    FragmentManager fm = getChildFragmentManager();

    if (mapFragment == null) {
        mapFragment = SupportMapFragment.newInstance();
        fm.beginTransaction().replace(R.id.mapFragment, mapFragment).commit();
        fm.executePendingTransactions();
    }

    mapFragment.getMapAsync(this);

    //Global PlaceAutocompleteFragment autocompleteFragment;


    if (autocompleteFragment == null) {
        autocompleteFragment = (PlaceAutocompleteFragment) getActivity().getFragmentManager().findFragmentById(R.id.place_autoCompleteFragment);

    }
&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;그리고 DestroyView에서 SupportMapFragment 및 SupportMapFragment를 지웁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public void onDestroyView() {
    super.onDestroyView();


    if (getActivity() != null) {
        Log.e(&quot;res&quot;,&quot;place dlted&quot;);
        android.app.FragmentManager fragmentManager = getActivity().getFragmentManager();
        android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.remove(autocompleteFragment);
        fragmentTransaction.commit(); 
       //Use commitAllowingStateLoss() if getting exception 

        autocompleteFragment = null;
    }


}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중첩된 조각은 현재 지원되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://developer.android.com/tools/extras/support-library.html#Downloading&quot; papago-id=&quot;78-1&quot; rel=&quot;nofollow&quot;&gt;지원 &lt;/a&gt;패키지 &lt;a href=&quot;http://developer.android.com/tools/extras/support-library.html#Downloading&quot; papago-id=&quot;78-1&quot; rel=&quot;nofollow&quot;&gt;버전&lt;/a&gt; 11을 &lt;a href=&quot;http://developer.android.com/tools/extras/support-library.html#Downloading&quot; papago-id=&quot;78-1&quot; rel=&quot;nofollow&quot;&gt;사용&lt;/a&gt;해 보십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; 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;MapFragment&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레이아웃 파일의 클래스?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:orientation=&quot;vertical&quot; &amp;gt;

    &amp;lt;fragment
        xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
        android:id=&quot;@+id/mapFragment&quot;
        android:name=&quot;com.nfc.demo.MapFragment&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;match_parent&quot; /&amp;gt;
&amp;lt;/LinearLayout&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Vidar Wahlberg 답변만 사용할 경우 다른 활동(예:)을 열고 지도로 돌아갈 때 오류가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 다른 활동을 연 다음 새 활동에서 지도를 다시 엽니다(뒤로 단추 사용 안 함).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 Vidar Wahlberg 솔루션과 Matt 솔루션을 결합하면 예외가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레이아웃&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;com.example.ui.layout.MapWrapperLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
android:layout_width=&quot;fill_parent&quot;
android:layout_height=&quot;fill_parent&quot;
android:id=&quot;@+id/map_relative_layout&quot;&amp;gt;

    &amp;lt;RelativeLayout
        android:layout_width=&quot;fill_parent&quot;
        android:layout_height=&quot;fill_parent&quot;
        android:id=&quot;@+id/root&quot;&amp;gt;

        &amp;lt;fragment xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
            android:id=&quot;@+id/map&quot;
            android:layout_width=&quot;match_parent&quot;
            android:layout_height=&quot;match_parent&quot;
            class=&quot;com.google.android.gms.maps.SupportMapFragment&quot; /&amp;gt;
    &amp;lt;/RelativeLayout&amp;gt;
&amp;lt;/&amp;lt;com.example.ui.layout.MapWrapperLayout&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파편&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    setHasOptionsMenu(true);
    if (view != null) {
        ViewGroup parent = (ViewGroup) view.getParent();
        if (parent != null){
            parent.removeView(view);
        }
    }
    try {
        view = inflater.inflate(R.layout.map_view, null);
        if(view!=null){
            ViewGroup root = (ViewGroup) view.findViewById(R.id.root);
...

@Override
public void onDestroyView() {
    super.onDestroyView();
    Fragment fragment = this.getSherlockActivity().getSupportFragmentManager().findFragmentById(R.id.map);
    if (fragment != null)
        getFragmentManager().beginTransaction().remove(fragment).commit();
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이것을 ViewPager에 넣었고 충돌은 모든 조각에 자체 태그가 있어야 했고 동일한 조각에 대한 중복 태그 또는 ID가 허용되지 않았기 때문입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;85&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전 아이 프래그먼트용 앱 호환 라이브러리에 버그가 있었던 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 @Vidar Wahlberg와 @Matt's ans를 시도했습니다. 그들은 저를 위해 일하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;appcompat 라이브러리를 업데이트한 후 제 코드는 별도의 노력 없이 완벽하게 실행됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;86&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;blockquote&gt; 
 &lt;p papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;맵을 사용하여 조각을 다시 사용하려면 맵을 표시하는 조각이 DestroyView 콜백의 다른 조각으로 대체되었을 때 MapView 조각을 제거해야 합니다.&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;그렇지 않으면 동일한 조각을 두 번 부풀리려고 할 때 com&lt;em papago-id=&quot;88-1&quot;&gt;.google.android.gms.maps에 대한 다른 조각으로 ID, 태그 &lt;/em&gt;null &lt;em papago-id=&quot;88-1&quot;&gt;또는 상위 ID&lt;/em&gt;가 중복됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;88-1&quot;&gt;MapFragment&lt;/em&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;font class=&quot;papago-parent&quot;&gt;안드로이드를 사용한 단편화 작업.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;support.v4.app.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;fragment API 작업 eg.do 은 Android.app을 사용하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;v4.app을 제거하기 위한 조각 트랜잭션입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;조각 유형 MapView 조각입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 섞으면 fragment 쪽에서 다시 충돌이 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;90&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MapView를 올바르게 사용하기 위한 샘플 코드 조각입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.serveroverload.yago.R;

/**
 * @author 663918
 *
 */
public class HomeFragment extends Fragment implements LocationListener {
    // Class to do operations on the Map
    GoogleMap googleMap;
    private LocationManager locationManager;

    public static Fragment newInstance() {
        return new HomeFragment();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.home_fragment, container, false);
        Bundle bdl = getArguments();

        // setuping locatiomanager to perfrom location related operations
        locationManager = (LocationManager) getActivity().getSystemService(
                Context.LOCATION_SERVICE);

        // Requesting locationmanager for location updates
        locationManager.requestLocationUpdates(
                LocationManager.NETWORK_PROVIDER, 1, 1, this);

        // To get map from MapFragment from layout
        googleMap = ((MapFragment) getActivity().getFragmentManager()
                .findFragmentById(R.id.map)).getMap();

        // To change the map type to Satellite
        // googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);

        // To show our current location in the map with dot
        // googleMap.setMyLocationEnabled(true);

        // To listen action whenever we click on the map
        googleMap.setOnMapClickListener(new OnMapClickListener() {

            @Override
            public void onMapClick(LatLng latLng) {
                /*
                 * LatLng:Class will give us selected position lattigude and
                 * longitude values
                 */
                Toast.makeText(getActivity(), latLng.toString(),
                        Toast.LENGTH_LONG).show();
            }
        });

        changeMapMode(2);

        // googleMap.setSatellite(true);
        googleMap.setTrafficEnabled(true);
        googleMap.setBuildingsEnabled(true);
        googleMap.setMyLocationEnabled(true);

        return v;
    }

    private void doZoom() {
        if (googleMap != null) {
            googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
                    new LatLng(18.520430, 73.856744), 17));
        }
    }

    private void changeMapMode(int mapMode) {

        if (googleMap != null) {
            switch (mapMode) {
            case 0:
                googleMap.setMapType(GoogleMap.MAP_TYPE_NONE);
                break;

            case 1:
                googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                break;

            case 2:
                googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
                break;

            case 3:
                googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
                break;

            case 4:
                googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
                break;

            default:
                break;
            }
        }
    }

    private void createMarker(double latitude, double longitude) {
        // double latitude = 17.385044;
        // double longitude = 78.486671;

        // lets place some 10 random markers
        for (int i = 0; i &amp;lt; 10; i++) {
            // random latitude and logitude
            double[] randomLocation = createRandLocation(latitude, longitude);

            // Adding a marker
            MarkerOptions marker = new MarkerOptions().position(
                    new LatLng(randomLocation[0], randomLocation[1])).title(
                    &quot;Hello Maps &quot; + i);

            Log.e(&quot;Random&quot;, &quot;&amp;gt; &quot; + randomLocation[0] + &quot;, &quot; + randomLocation[1]);

            // changing marker color
            if (i == 0)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_AZURE));
            if (i == 1)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
            if (i == 2)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_CYAN));
            if (i == 3)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
            if (i == 4)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA));
            if (i == 5)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
            if (i == 6)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_RED));
            if (i == 7)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));
            if (i == 8)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_VIOLET));
            if (i == 9)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_YELLOW));

            googleMap.addMarker(marker);

            // Move the camera to last position with a zoom level
            if (i == 9) {
                CameraPosition cameraPosition = new CameraPosition.Builder()
                        .target(new LatLng(randomLocation[0], randomLocation[1]))
                        .zoom(15).build();

                googleMap.animateCamera(CameraUpdateFactory
                        .newCameraPosition(cameraPosition));
            }
        }

    }

    /*
     * creating random postion around a location for testing purpose only
     */
    private double[] createRandLocation(double latitude, double longitude) {

        return new double[] { latitude + ((Math.random() - 0.5) / 500),
                longitude + ((Math.random() - 0.5) / 500),
                150 + ((Math.random() - 0.5) * 10) };
    }

    @Override
    public void onLocationChanged(Location location) {

        if (null != googleMap) {
            // To get lattitude value from location object
            double latti = location.getLatitude();
            // To get longitude value from location object
            double longi = location.getLongitude();

            // To hold lattitude and longitude values
            LatLng position = new LatLng(latti, longi);

            createMarker(latti, longi);

            // Creating object to pass our current location to the map
            MarkerOptions markerOptions = new MarkerOptions();
            // To store current location in the markeroptions object
            markerOptions.position(position);

            // Zooming to our current location with zoom level 17.0f
            googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(position,
                    17f));

            // adding markeroptions class object to the map to show our current
            // location in the map with help of default marker
            googleMap.addMarker(markerOptions);
        }

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onDestroyView() {
        // TODO Auto-generated method stub
        super.onDestroyView();

        locationManager.removeUpdates(this);

        android.app.Fragment fragment = getActivity().getFragmentManager()
                .findFragmentById(R.id.map);
        if (null != fragment) {
            android.app.FragmentTransaction ft = getActivity()
                    .getFragmentManager().beginTransaction();
            ft.remove(fragment);
            ft.commit();
        }
    }

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;91&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;fragment
        android:id=&quot;@+id/map&quot;
        android:name=&quot;com.google.android.gms.maps.MapFragment&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;match_parent&quot;
       /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;92&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과는 다음과 같습니다.&lt;a href=&quot;https://i.stack.imgur.com/hEnfG.jpg&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;92-1&quot;&gt;&lt;img alt=&quot;enter image description here&quot; papago-id=&quot;92-1-0&quot; src=&quot;https://i.stack.imgur.com/hEnfG.jpg&quot;&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;93&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가에게 도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 솔루션에서는 정적 변수를 사용할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Button nextBtn;

private SupportMapFragment mMapFragment;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

    if (mRootView != null) {
        ViewGroup parent = (ViewGroup) mRootView.getParent();
        Utility.log(0,&quot;removeView&quot;,&quot;mRootView not NULL&quot;);
        if (parent != null) {
            Utility.log(0, &quot;removeView&quot;, &quot;view removeViewed&quot;);
            parent.removeAllViews();
        }
    }
    else {
        try {
            mRootView = inflater.inflate(R.layout.dummy_fragment_layout_one, container, false);//
        } catch (InflateException e) {
    /* map is already there, just return view as it is  */
            e.printStackTrace();
        }
    }

    return  mRootView;
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    FragmentManager fm = getChildFragmentManager();
    SupportMapFragment mapFragment = (SupportMapFragment) fm.findFragmentById(R.id.mapView);
    if (mapFragment == null) {
        mapFragment = new SupportMapFragment();
        FragmentTransaction ft = fm.beginTransaction();
        ft.add(R.id.mapView, mapFragment, &quot;mapFragment&quot;);
        ft.commit();
        fm.executePendingTransactions();
    }
    //mapFragment.getMapAsync(this);
    nextBtn = (Button) view.findViewById(R.id.nextBtn);
    nextBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Utility.replaceSupportFragment(getActivity(),R.id.dummyFragment,dummyFragment_2.class.getSimpleName(),null,new dummyFragment_2());
        }
    });

}`
&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;맵뷰 부모 레이아웃에 대한 ID(&quot;vmap:id=&quot;@+id/sys_dialog&quot;)를 설정해 보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나한테 효과가 있어요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금 여기에 오는 사람은 누구나 웹사이트를 열 때 이런 종류의 오류가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Dialog&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;Fragment&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Google Places에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AutocompleteSupportFragment&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;/p&gt; 
&lt;p&gt;&lt;code&gt;autocompleteFragment.getFragmentManager().beginTransaction().remove(autocompleteFragment).commit();&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;100&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 조각을 제거하기 전에.&lt;/font&gt;&lt;/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:layout_height=&quot;match_parent&quot; &amp;gt;


&amp;lt;com.google.android.gms.maps.MapView
    android:id=&quot;@+id/mapview&quot;
    android:layout_width=&quot;100dip&quot;
    android:layout_height=&quot;100dip&quot;
    android:layout_alignParentTop=&quot;true&quot;
    android:layout_alignRight=&quot;@+id/textView1&quot;
    android:layout_marginRight=&quot;15dp&quot; &amp;gt;
&amp;lt;/com.google.android.gms.maps.MapView&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MapFragment 대신 MapView 객체를 사용하여 지도를 삽입하는 것이 어떻습니까? MapView에 제한이 있는지는 모르겠지만 도움이 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/14083950/&lt;a href=&quot;https://stackoverflow.com/questions/14083950/duplicate-id-tag-null-or-parent-id-with-another-fragment-for-com-google-androi&quot; target=&quot;_blank&quot; papago-id=&quot;102-1&quot;&gt;duplicate-id-tag-null-or-parent-id-with-another-fragment-for-com-google-androi&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/657</guid>
      <comments>https://yoursource.tistory.com/657#entry657comment</comments>
      <pubDate>Tue, 15 Aug 2023 15:12:18 +0900</pubDate>
    </item>
    <item>
      <title>도커를 사용하여 포트를 두 개 이상 노출하려면 어떻게 해야 합니까?</title>
      <link>https://yoursource.tistory.com/656</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;그래서 저는 기계의 인터페이스에 노출되어야 하는 포트가 3개 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 컨테이너로 이것이 가능합니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포트를 하나만 표시하려면 다음 작업을 수행해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker run -p &amp;lt;host_port&amp;gt;:&amp;lt;container_port&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&gt;&lt;code&gt;-p&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인수:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker run -p &amp;lt;host_port1&amp;gt;:&amp;lt;container_port1&amp;gt; -p &amp;lt;host_port2&amp;gt;:&amp;lt;container_port2&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1단계&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Dockerfile&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;EXPOSE&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;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;EXPOSE 3000 80 443 22
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2단계&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 위의 이미지를 기반으로 새 이미지를 구축하려고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Dockerfile&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;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker build -t foo:tag .
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3단계&lt;/font&gt;&lt;/h3&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;-p&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에서 정의한 대로 호스트 포트를 컨테이너 포트와 매핑합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;EXPOSE&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;Dockerfile&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;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker run -p 3001:3000 -p 23:22
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;연속 포트 범위를 노출하려는 경우 다음과 같이 도커를 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker run -it -p 7100-7120:7100-7120/tcp 
&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;docker-compose.yml&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;services:
    varnish:
        ports:
            - 80
            - 6081
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;호스트/네트워크 포트를 다음과 같이 지정할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HOST/NETWORK_PORT:CONTAINER_PORT&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;varnish:
    ports:
        - 81:80
        - 6081:6081
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 예로 들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker create --name new_ubuntu -it -p 8080:8080 -p  15672:15672 -p 5432:5432   ubuntu:latest bash
&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;생성한 내용을 확인하고 컨테이너 ID xxxxxx를 복사합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker ps -a 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 기적을 만드는 사람의 단어(시작)를 쓰십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker start xxxxx
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;행운을 빌어요&lt;/font&gt;&lt;/p&gt;&lt;p 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;docker create --name `container name` --expose 7000 --expose 7001 `image name`
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제, 이 컨테이너를 사용하여 시작할 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker start&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 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;strong papago-id=&quot;31-1&quot;&gt;범위&lt;/strong&gt;를 지정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 파일:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;EXPOSE 8888-8898
&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;docker build -t &amp;lt;image_name&amp;gt;:&amp;lt;version&amp;gt; -f dockerfile .
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지를 실행할 때:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker run -it -p 8888-8898:8888-8898 -v C:\x\x\x:/app &amp;lt;image_name&amp;gt;:&amp;lt;version&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/20845056/&lt;a href=&quot;https://stackoverflow.com/questions/20845056/how-can-i-expose-more-than-1-port-with-docker&quot; target=&quot;_blank&quot; papago-id=&quot;35-1&quot;&gt;how-can-i-expose-more-than-1-port-with-docker&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/656</guid>
      <comments>https://yoursource.tistory.com/656#entry656comment</comments>
      <pubDate>Tue, 15 Aug 2023 15:08:43 +0900</pubDate>
    </item>
    <item>
      <title>확인란을 선택해야 함</title>
      <link>https://yoursource.tistory.com/655</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;FormBuilder for Angular를 사용하여 확인란을 선택할 때까지 단추를 사용하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;확인란의 값을 명시적으로 확인하고 싶지 않으며 단순히 확인할 수 있도록 검증기를 사용하는 것을 선호합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;form.valid&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래의 두 검증 사례에서 확인란은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-typescript prettyprint-override&quot;&gt;&lt;code&gt;interface ValidationResult {
  [key:string]:boolean;
}

export class CheckboxValidator {
  static checked(control:Control) {
    return { &quot;checked&quot;: control.value };
  }
}

@Component({
  selector: 'my-form',
  directives: [FORM_DIRECTIVES],
  template: `  &amp;lt;form [ngFormModel]=&quot;form&quot; (ngSubmit)=&quot;onSubmit(form.value)&quot;&amp;gt;
    &amp;lt;input type=&quot;checkbox&quot; id=&quot;cb&quot; ngControl=&quot;cb&quot;&amp;gt;
    &amp;lt;button type=&quot;submit&quot; [disabled]=&quot;!form.valid&quot;&amp;gt;
    &amp;lt;/form&amp;gt;`
})

export class SomeForm {
  regForm: ControlGroup;

  constructor(fb: FormBuilder) {
    this.form = fb.group({
      cb: [ CheckboxValidator.checked ]
      //cb: [ false, Validators.required ] &amp;lt;-- I have also tried this
    });
  }

  onSubmit(value: any) {
    console.log('Submitted: ', this.form);
  }
}
&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;a href=&quot;https://github.com/angular/angular/blob/master/CHANGELOG.md#231-2016-12-15&quot; papago-id=&quot;4-1&quot; rel=&quot;noreferrer&quot;&gt;Angular&lt;/a&gt; 2&lt;a href=&quot;https://github.com/angular/angular/blob/master/CHANGELOG.md#231-2016-12-15&quot; papago-id=&quot;4-1&quot; rel=&quot;noreferrer&quot;&gt;.3.1 이후&lt;/a&gt;에는 다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성 요소:&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;this.formGroup = this.formBuilder.group({
  cb: [false, Validators.requiredTrue]
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿:&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form [formGroup]=&quot;formGroup&quot;&amp;gt;
  &amp;lt;label&amp;gt;&amp;lt;input type=&quot;checkbox&quot; formControlName=&quot;cb&quot;&amp;gt; Accept it&amp;lt;/label&amp;gt;
  &amp;lt;div style=&quot;color: red; padding-top: 0.2rem&quot; *ngIf=&quot;formGroup.hasError('required', 'cb')&quot;&amp;gt;
    Required
  &amp;lt;/div&amp;gt;
  &amp;lt;hr&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;button type=&quot;submit&quot; [disabled]=&quot;formGroup.invalid&quot;&amp;gt;Submit&amp;lt;/button&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;kbd&gt;&lt;a href=&quot;https://stackblitz.com/edit/angular-gitter-aemvds&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;STACKBLITZ DEMO&lt;/strong&gt;&lt;/a&gt;&lt;/kbd&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;Validator 패턴을 사용하여 올바른(부울) 값을 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;checkbox&quot; [formControl]=&quot;myForm.controls['isTosRead']&quot;&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;this.myForm = builder.group({
        isTosRead: [false, Validators.pattern('true')]
    });
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;h1&amp;gt;LOGIN&amp;lt;/h1&amp;gt;
&amp;lt;form [formGroup]=&quot;signUpForm&quot;&amp;gt; 
    &amp;lt;input type=&quot;checkbox&quot; formControlName=&quot;cb&quot;&amp;gt;
    &amp;lt;button type=&quot;submit&quot; [disabled]=&quot;!loginForm.valid&quot; (click)=&quot;doLogin()&quot;&amp;gt;Log in&amp;lt;/button&amp;gt;
&amp;lt;/form&amp;gt;

export class Login { 
  public signUpForm: FormGroup;

  constructor(fb: FormBuilder) {
    this.signUpForm = fb.group({
      cb: [false, Validators.requiredTrue]
    });
  }
  doLogin() {

  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.ts&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;@Component({
  selector: 'my-app', 
  template: `
    &amp;lt;h1&amp;gt;LOGIN&amp;lt;/h1&amp;gt;
    &amp;lt;form [ngFormModel]=&quot;loginForm&quot;  #fm=&quot;ngForm&quot;  (submit)=&quot;doLogin($event)&quot;&amp;gt; 

          &amp;lt;input type=&quot;checkbox&quot; id=&quot;cb&quot; ngControl=&quot;cb&quot; #cb=&quot;ngForm&quot; required&amp;gt;
          &amp;lt;button type=&quot;submit&quot; [disabled]=&quot;!loginForm.valid&quot;&amp;gt;Log in&amp;lt;/button&amp;gt;

          &amp;lt;br/&amp;gt;
              &amp;lt;div&amp;gt;Valid ={{cb.valid}}&amp;lt;/div&amp;gt;
              &amp;lt;div&amp;gt;Pristine ={{cb.pristine}}&amp;lt;/div&amp;gt;
              &amp;lt;div&amp;gt;Touch ={{cb.touched}}&amp;lt;/div&amp;gt;
              &amp;lt;div&amp;gt;form.valid?={{loginForm.valid}}&amp;lt;/div&amp;gt;
          &amp;lt;BR/&amp;gt;
          &amp;lt;BR/&amp;gt;

    &amp;lt;/form&amp;gt;
    `,
  directives: [ROUTER_DIRECTIVES,FORM_DIRECTIVES,CORE_DIRECTIVES]
})

export class Login { 
  constructor(fb: FormBuilder) {
    this.loginForm = fb.group({
      cb: [false, Validators.required],
    //cb: ['',Validators.required] - this will also work.

    });
  }
  doLogin(event) {
    console.log(this.loginForm);
    event.preventDefault();
  }
}

&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-0&quot;&gt;&lt;em papago-id=&quot;10-0-0&quot;&gt;&lt;a href=&quot;https://plnkr.co/edit/3pDmddVZID6EQKLxsXKA?p=preview&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-0-0-0&quot;&gt;작업용&lt;/a&gt;&lt;/em&gt;&lt;/strong&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;확인란에 대해 Validator.required가 제대로 작동하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;확인란을 선택한 다음 선택을 취소하면 FormControl이 선택되지 않은 경우에도 유효한 것으로 표시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 사실이든 거짓이든 당신이 그것을 어떤 것으로 설정했는지만 확인한다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 FormControl에 추가할 수 있는 빠르고 간단한 검증자입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  mustBeChecked(control: FormControl): {[key: string]: string} {
    if (!control.value) {
      return {mustBeCheckedError: 'Must be checked'};
    } else {
      return null;
    }
  }
&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;HTML 양식&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;col-md-12&quot;&amp;gt;
                  &amp;lt;div class=&quot;form-group&quot;&amp;gt;
                      &amp;lt;input type=&quot;checkbox&quot; class=&quot;form-check-input&quot; id=&quot;agree&quot; formControlName=&quot;agree&quot;&amp;gt;
                      &amp;lt;label class=&quot;form-check-label&quot; for=&quot;agree&quot;&amp;gt;
                        I agree to our &amp;lt;a target=&quot;_blank&quot; href=&quot;#&quot;&amp;gt;Terms of use&amp;lt;/a&amp;gt; and
                        &amp;lt;a target=&quot;_blank&quot; href=&quot;#&quot;&amp;gt;Privacy Policy&amp;lt;/a&amp;gt;.
                      &amp;lt;/label&amp;gt;
                      &amp;lt;div class=&quot;text-danger&quot; *ngIf=&quot;(isRegSubmit||regForm.get('agree').touched) &amp;amp;&amp;amp;
                          regForm.get('agree').hasError('required')&quot;&amp;gt;
                          Please agree to terms of use and privacy policy.
                      &amp;lt;/div&amp;gt;
                  &amp;lt;/div&amp;gt;
              &amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TS 파일&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  regForm: FormGroup;isRegSubmit: boolean = false;
  constructor(
    private fb: FormBuilder
  }

  this.regForm = this.fb.group({
        agree    : [false, Validators.requiredTrue]
    });
&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;Validators.required not worked 또한 값을 확인하여 오류 메시지를 표시하고 사용자의 제출을 제한할 수 있지만 유효성 검사를 사용하지 않기 때문에 좋은 접근 방식이 아닙니다. 따라서 확인란이 하나만 있을 때마다 Validators.requiredTrue를 추가합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 간단한 예가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성 요소:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;login : FormGroup;

constructor(@Inject(FormBuilder)formBuilder : FormBuilder) {
this.login = formBuilder.group({userName: [null], password: [null],
staySignedIn: [false,Validators.pattern('true')]});
}
&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;HTML에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form [formGroup]=&quot;login&quot; (ngSubmit)=&quot;onSubmit()&quot;&amp;gt;
    &amp;lt;div class=&quot;form-group&quot;&amp;gt;
        &amp;lt;input formControlName=&quot;userName&quot; required&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;form-group&quot;&amp;gt;
        &amp;lt;input formControlName=&quot;password&quot; type=&quot;password&quot; required&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div&amp;gt;
        &amp;lt;label&amp;gt;
    &amp;lt;input formControlName=&quot;staySignedIn&quot; checked=&quot;staySignedIn&quot; type=&quot;checkbox&quot;&amp;gt; bla
  &amp;lt;/label&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;button type=&quot;submit&quot;&amp;gt;bla&amp;lt;/button&amp;gt;
    &amp;lt;div &amp;gt;
        &amp;lt;a href&amp;gt;bla?&amp;lt;/a&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular 8의 경우, 3개의 체크박스 중 적어도 1개의 체크박스가 선택되었는지 확인하기 위해 아래와 같이 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;form = new FormGroup({
    // ...more form controls...
    myCheckboxGroup: new FormGroup({
      myCheckbox1: new FormControl(false),
      myCheckbox2: new FormControl(false),
      myCheckbox3: new FormControl(false),
    }, requireCheckboxesToBeCheckedValidator()),
    // ...more form controls...
  });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 지정 검증자 생성&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import { FormGroup, ValidatorFn } from '@angular/forms';

export function requireCheckboxesToBeCheckedValidator(minRequired = 1): ValidatorFn {
  return function validate (formGroup: FormGroup) {
    let checked = 0;

    Object.keys(formGroup.controls).forEach(key =&amp;gt; {
      const control = formGroup.controls[key];

      if (control.value === true) {
        checked ++;
      }
    });

    if (checked &amp;lt; minRequired) {
      return {
        requireCheckboxesToBeChecked: true,
      };
    }

    return null;
  };
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 html에서 아래와 같이 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ng-container [formGroup]=&quot;form&quot;&amp;gt;
   &amp;lt;!-- ...more form controls... --&amp;gt;

   &amp;lt;div class=&quot;form-group&quot; formGroupName=&quot;myCheckboxGroup&quot;&amp;gt;
      &amp;lt;div class=&quot;custom-control custom-checkbox&quot;&amp;gt;
        &amp;lt;input type=&quot;checkbox&quot; class=&quot;custom-control-input&quot; formControlName=&quot;myCheckbox1&quot; id=&quot;myCheckbox1&quot;&amp;gt;
        &amp;lt;label class=&quot;custom-control-label&quot; for=&quot;myCheckbox1&quot;&amp;gt;Check&amp;lt;/label&amp;gt;
      &amp;lt;/div&amp;gt;

      &amp;lt;div class=&quot;custom-control custom-checkbox&quot;&amp;gt;
        &amp;lt;input type=&quot;checkbox&quot; class=&quot;custom-control-input&quot; formControlName=&quot;myCheckbox2&quot; id=&quot;myCheckbox2&quot;&amp;gt;
        &amp;lt;label class=&quot;custom-control-label&quot; for=&quot;myCheckbox2&quot;&amp;gt;At least&amp;lt;/label&amp;gt;
      &amp;lt;/div&amp;gt;

      &amp;lt;div class=&quot;custom-control custom-checkbox&quot;&amp;gt;
        &amp;lt;input type=&quot;checkbox&quot; class=&quot;custom-control-input&quot; formControlName=&quot;myCheckbox3&quot; id=&quot;myCheckbox3&quot;&amp;gt;
        &amp;lt;label class=&quot;custom-control-label&quot; for=&quot;myCheckbox3&quot;&amp;gt;One&amp;lt;/label&amp;gt;
      &amp;lt;/div&amp;gt;

      &amp;lt;div class=&quot;invalid-feedback&quot; *ngIf=&quot;form.controls['myCheckboxGroup'].errors &amp;amp;&amp;amp; form.controls['myCheckboxGroup'].errors.requireCheckboxesToBeChecked&quot;&amp;gt;At least one checkbox is required to check&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;!-- ...more form controls... --&amp;gt;
  &amp;lt;/ng-container&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PrimeNG를 사용하는 경우 다음과 같은 TAG app-form-required-field를 통해 이 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;p-checkbox name=&quot;_yes&quot; #active=&quot;ngModel&quot; required value=&quot;true&quot; 
label=&quot;Active&quot; binary=&quot;true&quot; [(ngModel)]=&quot;filter._yes&quot;&amp;gt;&amp;lt;/p-checkbox&amp;gt;

&amp;lt;p-checkbox name=&quot;_no&quot; #inactive=&quot;ngModel&quot; required label=&quot;Inactive&quot; 
binary=&quot;true&quot; [(ngModel)]=&quot;filter._no&quot;&amp;gt;&amp;lt;/p-checkbox&amp;gt;

&amp;lt;app-form-required-field
     *ngIf=&quot;!filter._yes &amp;amp;&amp;amp; !filter._no&quot;
     [form]=&quot;active&quot;
     [form]=&quot;inactive&quot;
     id=&quot;msgAtivo&quot;
     requiredMessage=&quot;Field required!&quot;
&amp;gt;
&amp;lt;/app-form-required-field&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;pre&gt;&lt;code&gt;@Component({
  selector: 'my-form',
  directives: [FORM_DIRECTIVES],
  template: `  &amp;lt;form [ngFormModel]=&quot;form&quot; (ngSubmit)=&quot;onSubmit(form.value)&quot;&amp;gt;
    &amp;lt;input type=&quot;checkbox&quot; id=&quot;cb&quot; ngControl=&quot;cb&quot;&amp;gt;
    &amp;lt;button type=&quot;submit&quot; [disabled]=&quot;!form.valid &amp;amp;&amp;amp; !cb.value&quot;&amp;gt;
    &amp;lt;/form&amp;gt;`
})
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성 요소:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import { FormGroup, FormBuilder, Validators, AbstractControl } from '@angular/forms';

public profileForm!: FormGroup;

constructor(
    private _fb: FormBuilder
  ) { }
  
ngOnInit(): void {
    this._createForm();
    this._setValidationRule();
}

get fc(): { [key: string]: AbstractControl } {
    return this.profileForm.controls;
  }

  private _createForm() {
    const self = this;
    self.profileForm = self._fb.group({
      required_checkbox: [false],
      zipcode: [''],
      city: [''],
      town: [''],
    });
  }
  
  private _setValidationRule() {
    const self = this;
    self.profileForm.get('required_checkbox').valueChanges.subscribe(
      ruleStatus =&amp;gt; {
        if (ruleStatus) {
          self.profileForm.get('zipcode').setValidators(Validators.required);
          self.profileForm.get('city').setValidators(Validators.required);
          self.profileForm.get('town').setValidators(Validators.required);
        } else {
          self.profileForm.get('zipcode').setValidators(null);
          self.profileForm.get('city').setValidators(null);
          self.profileForm.get('town').setValidators(null);
        }
        self.profileForm.get('zipcode').updateValueAndValidity();
        self.profileForm.get('city').updateValueAndValidity();
        self.profileForm.get('town').updateValueAndValidity();
      });
  }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;mat-checkbox class=&quot;terms&quot; formControlName=&quot;required_checkbox&quot;&amp;gt;Pickup Riraku&amp;lt;/mat-checkbox&amp;gt;
        
&amp;lt;mat-form-field appearance=&quot;outline&quot;&amp;gt;
    &amp;lt;mat-label&amp;gt;Zip Code&amp;lt;/mat-label&amp;gt;
    &amp;lt;input matInput type=&quot;text&quot; formControlName=&quot;zipcode&quot; placeholder=&quot;&quot;&amp;gt;
&amp;lt;/mat-form-field&amp;gt;

&amp;lt;mat-form-field appearance=&quot;outline&quot;&amp;gt;
    &amp;lt;mat-label&amp;gt;City&amp;lt;/mat-label&amp;gt;
    &amp;lt;input matInput type=&quot;text&quot; formControlName=&quot;city&quot; placeholder=&quot;&quot;&amp;gt;
&amp;lt;/mat-form-field&amp;gt;

&amp;lt;mat-form-field appearance=&quot;outline&quot;&amp;gt;
    &amp;lt;mat-label&amp;gt;Town&amp;lt;/mat-label&amp;gt;
    &amp;lt;input matInput type=&quot;text&quot; formControlName=&quot;town&quot; placeholder=&quot;&quot;&amp;gt;
&amp;lt;/mat-form-field&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확인란에 값을 설정하려면 확인란 자체에 값이 있는지 여부를 지정할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Validators.required&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택한 경우 값을 전달하거나 true를 전달하고 선택하지 않은 경우 null을 전달하거나 false를 전달합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 ChangeInput에서 메서드를 트리거합니다. &amp;lt;input type=&quot;method&quot; (변경)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;=&quot;changeInput($event)&quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;public changeInput(event): void {
  this.isChecked = event.target.checked;
  // passing the value
  this.onChange(this.isChecked ? (this.value ? this.value : true) : false);
  // set touched
  if (!this.isTouched) {
    this.isTouched = true;
    this.onTouch();
  }
}&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;pre&gt;&lt;code&gt;checkValue(event: any) {
    this.formulario.patchValue({
      checkboxControlName: event.target.checked
    })
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트 변경에 해당 방법을 적용하고,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ngModel required&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특성.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input (change)=&quot;checkValue($event)&quot; type=&quot;checkbox&quot; formControlName=&quot;checkboxControlName&quot; value=&quot;true&quot; ngModel required&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 전통적인 방법을 사용하여 검증합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;this.formulario = new FormGroup({
  checkboxControlName: new FormControl('', [Validators.required])
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://angular.io/api/forms/CheckboxRequiredValidator&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원천&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/35462316/&lt;a href=&quot;https://stackoverflow.com/questions/35462316/requiring-a-checkbox-to-be-checked&quot; target=&quot;_blank&quot; papago-id=&quot;34-1&quot;&gt;requiring-a-checkbox-to-be-checked&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/655</guid>
      <comments>https://yoursource.tistory.com/655#entry655comment</comments>
      <pubDate>Tue, 15 Aug 2023 15:07:54 +0900</pubDate>
    </item>
    <item>
      <title>C x86의 64비트 루프 성능</title>
      <link>https://yoursource.tistory.com/654</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C x86의 64비트 루프 성능&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;원시 소켓을 사용하는 일부 IPv4 ICMP 처리 코드에 대한 인터넷 체크섬 기능(보완 체크섬)이 필요했는데 64비트 Intel 프로세서(gcc 4.8.2 사용)에서는 설명할 수 없는 동작을 발견했습니다.&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;32비트 어큐뮬레이터를 사용하여 16비트 합계를 수행하는 첫 번째 체크섬 기능을 구현했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 64비트 어큐뮬레이터와 32비트 합계를 사용하여 동일하게 구현했습니다. 합계가 적으면 실행 속도가 빨라질 것이라고 생각했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 결과 첫 번째 구현이 두 번째 구현보다 두 배 더 빠르게 실행됩니다(O3 최적화 사용).&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;둘 다 64비트 네이티브 플랫폼(LP64: 짧은 16비트, int 32비트, 긴 64비트, 포인터 64비트)에서 실행되는 64비트로 컴파일되었습니다.&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;32비트 어큐뮬레이터 및 16비트 합계&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;unsigned short
cksum_16_le(unsigned char* data, size_t size)
{
    unsigned short word;
    unsigned int sum = 0;
    unsigned int i;

    for(i = 0; i &amp;lt; size - 1; i += 2)
        sum += *((unsigned short*) (data + i));

    sum = (sum &amp;amp; 0xffff) + (sum &amp;gt;&amp;gt; 16);
    sum = (sum &amp;amp; 0xffff) + (sum &amp;gt;&amp;gt; 16);

    return ~sum;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 10k 데이터에 대한 50,000개의 함수 호출: ~1.1초&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;64비트 어큐뮬레이터 및 32비트 합계&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;unsigned short
cksum_32_le(unsigned char* data, size_t size)
{
    unsigned long word;
    unsigned long sum = 0;
    unsigned int i;

    for(i = 0; i &amp;lt; size - 3; i += 4)
        sum += *((unsigned int*) (data + i));

    sum = (sum &amp;amp; 0xffffffff) + (sum &amp;gt;&amp;gt; 32);
    sum = (sum &amp;amp; 0xffffffff) + (sum &amp;gt;&amp;gt; 32);
    sum = (sum &amp;amp; 0xffff) + (sum &amp;gt;&amp;gt; 16);
    sum = (sum &amp;amp; 0xffff) + (sum &amp;gt;&amp;gt; 16);

    return ~sum;
}
&lt;/code&gt;&lt;/pre&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;동일한 10k 데이터에 대한 50,000개의 함수 호출: ~2.2초&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;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;실행 중인 메모리 진단에서 때때로 버스 패리티 오류가 발견되었습니다(이 오류가 32비트 버전에 16비트 버전보다 더 많은 영향을 미치는 이유는 확실하지 않지만 여기에 있습니다).&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;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;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;for&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;while&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루프 및 O3 최적화를 사용한 컴파일(64비트 어큐뮬레이터 사례의 경우 아래에 표시됨)을 통해 32비트 및 64비트 어큐뮬레이터 사례가 동일한 속도로 실행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 컴파일러가 하게도, , 하파상일▁un이▁not▁thisroll▁does그▁un▁performs▁the은▁it▁some것)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;for&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;loop을 사용하여 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mmx&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레지스터...&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;uint64_t sum = 0;
const uint32_t* dptr = (const uint32_t*) data;

while (size &amp;gt; 3)
{
    sum += (uint32_t) *dptr++;
    size -= 4;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전에도 이와 유사한 문제가 있었습니다. 두 코드 모두에서 문제를 찾을 수 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 제게 효과가 있었던 것은 컴파일러를 바꾼 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각에는 GCC가 더 이상 사용되지 않는 의회를 작성하고 있는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응용프로그램을 압축 해제할 수 있다면 문제를 더 자세히 알아볼 수 있지만 여기에 정보가 부족합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드를 압축 해제해 보니 전체 메서드를 여러 번 다시 쓰고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 그것은 나만을 위한 것일 수도 있습니다.&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;만약 제가 학습자의 말에 동의할 것이라고 추측해야 한다면, 저는 디컴파일된 코드가 for 루프를 가리킬 것이라고 확신합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제에 관심이 많으니 답변 부탁드립니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가능한 답변: &quot;i &amp;lt; size - 1&quot; 조건은 &quot;i &amp;lt; size - 3&quot; 조건보다 더 효율적으로 컴파일되고 실행될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째는 상수 3을 어딘가에 로드해야 하는 다른 하나 대신 감소 명령만 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 계산은 반복할 때마다 실행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 계산 결과는 다른 곳에 저장해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 while 루프와 관련이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;while 루프를 다시 작성할 때 반복 조건도 변경하여 위의 원인을 제거했습니다.&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;내부 루프에서 인덱스 스트라이드와 캐스트를 선택하여 바이트 오프셋을 계산합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이로 인해 루프가 해제되지 않거나 정렬을 가정하는 다른 최적화가 수행되지 않을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 컴파일러가 주소 지정 모드를 사용하고 유효 주소 자체(또는 LEA it)를 계산하기 위해 나가는 것을 허용하지 않을 수 있습니다.&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;만약 내가 이것을 하고 있다면, 나는 루프의 맨 위에 있는 데이터 포인터를 당신의 스트라이드 유형에 캐스팅하고 당신의 루프 카운터를 1만큼 늘렸을 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러가 조금 더 행복할 수도 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;char*에서 unsigned int *로 캐스팅되었기 때문에 &quot;for&quot; 루프를 풀 수 없다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 완벽한 별칭 분석을 수행할 수 없기 때문에 컴파일러가 코드를 최적화하지 못하는 경우가 많습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;루프 앞에 추가 로컬 포인터를 선언하여 루프에 캐스트가 없도록 하려면 컴파일러는 &quot;for&quot; 루프를 최적화할 수 있어야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;sum += *((unsigned int*) (data + i)); 
&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;blockquote&gt; 
 &lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;64비트 어큐뮬레이터 및 32비트 합계&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 쓴 이후로:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 다 64비트 네이티브 플랫폼(LP64: 짧은 16비트, int 32비트, 긴 &amp;gt; 64비트, 포인터 64비트)에서 실행되는 64비트로 컴파일되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(서명되지 않은 long*)을 사용할 것을 제안합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 사람들은 실제로 무슨 일이 일어나고 있는지 분해된 코드를 확인하라고 조언했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;긴 축전지를 가진 당신의 int* 캐스트 때문인 것 같습니다.&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;O2&amp;lt;&amp;gt;O3 플래그가 없는 건 어때요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;정상 컴파일 모드에서 속도가 얼마나 되는지 보여주시겠습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/21654207/&lt;a href=&quot;https://stackoverflow.com/questions/21654207/c-64-bit-loop-performance-on-x86&quot; target=&quot;_blank&quot; papago-id=&quot;34-1&quot;&gt;c-64-bit-loop-performance-on-x86&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/654</guid>
      <comments>https://yoursource.tistory.com/654#entry654comment</comments>
      <pubDate>Tue, 15 Aug 2023 15:07:08 +0900</pubDate>
    </item>
    <item>
      <title>도커 파일에서 도커 인스턴스를 실행하려면 어떻게 해야 합니까?</title>
      <link>https://yoursource.tistory.com/653</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;docker run --name my-forum-nodebb --link my-forum-redis:redis -p 80:80 -p 443:443 -p 4567:4567 -P -t -i nodebb/docker:ubuntu
&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;이것은 처음부터 시작한 것이고 제가 redis 인스턴스를 만들었을 때&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker run --name my-forum-redis -d -p 6379:6379 nodebb/docker:ubuntu-redis
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원격 레포에서 이미지를 꺼내는 건가요?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NodeBB는 다음을 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Dockerfile&lt;/code&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/NodeBB/NodeBB/blob/master/&lt;a href=&quot;https://github.com/NodeBB/NodeBB/blob/master/Dockerfile&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-0&quot;&gt;Dockerfile &lt;/a&gt;저는 그것을 어떻게 사용해야 할지 잘 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;리모콘에서 이 도커 파일을 호출하면 어떻게든 로컬 환경을 만들 수 있을 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 맞는건가요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 원격을 가리키는 로컬 인스턴스는 어떻게 만들 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;h1&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;Dockerfile&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;/h1&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;Dockerfile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴퓨터의 디렉터리에 연결하고 동일한 디렉터리에서 다음 명령을 실행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;교체해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;image_name&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;a href=&quot;https://stackoverflow.com/a/53178517/4709300&quot; papago-id=&quot;6-1&quot;&gt;도커 이미지 이름 지정 제한은 여기에서 확인할 수 있습니다.&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;docker build --tag 'image_name' .
&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&gt;&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;image_name&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 class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;docker run --detach 'image_name'
&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;&lt;a href=&quot;https://docs.docker.com/engine/reference/commandline/build/#text-files&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;16-1&quot;&gt;설명서&lt;/a&gt;에서 다음을 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨텍스트를 지정하는 대신 URL에서 단일 Docker 파일을 전달하거나 STDIN을 통해 파일을 파이프로 연결할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;STDIN에서 도커 파일을 파이프로 연결하려면:&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;$ docker build - &amp;lt; Dockerfile
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Powershell을 사용하여 다음을 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;Get-Content Dockerfile | docker build -
&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;docker image ls
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 내용이 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
&amp;lt;none&amp;gt;                     &amp;lt;none&amp;gt;              123456789        39 seconds ago      422MB
&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;실제 IMAGE ID를 복사한 다음 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker run 123456789
&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;여기서 끝에 있는 숫자는 이전 단계의 실제 이미지 ID입니다.&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;이미지 ID를 기억하지 않으려면 다음을 기준으로 이미지에 태그를 지정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker tag 123456789 pavel/pavel-build
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지에 태그를 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pavel/pavel-build&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 파일에서 컨테이너를 시작할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p 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;blockquote&gt; 
 &lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 파일&lt;strong papago-id=&quot;27-1&quot;&gt; &lt;/strong&gt;&lt;strong papago-id=&quot;27-3&quot;&gt;=&lt;code papago-id=&quot;27-1-1&quot;&gt;docker build&lt;/code&gt;&lt;code papago-id=&quot;27-3-1&quot;&gt;docker run&lt;/code&gt;&lt;/strong&gt;[]=&amp;gt; 도커 이미지 =[]=&amp;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;컨테이너를 시작하거나 실행하려면 이미지가 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지를 만들려면 도커 파일[1]을 빌드해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;: 또한 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker import&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;docker load&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;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;docker build .
=&amp;gt; ....
=&amp;gt; Successfully built a3e628814c67
docker run -p 3000:3000 a3e628814c67
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;3000&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;/p&gt; 
&lt;p&gt;&lt;code&gt;a3e628814c68&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;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;35-0&quot;&gt;참고&lt;/strong&gt;: &lt;strong papago-id=&quot;35-2&quot;&gt;도커&lt;/strong&gt; 파일이 들어 있는 디렉터리 내에 있어야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제목이 제가 여기 온 이유입니다. 도커 파일의 컨테이너를 직접 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker build --no-cache . |  grep &quot;Successfully built&quot; | sed 's/Successfully built //g' | xargs -I{} docker run {}
&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;도커 데스크톱 20.10.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;도커 합성 파일을 사용하여 환경의 이름을 지정하고 구성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;services:
    my_instance:
        build:
            context: .
            dockerfile: my_instance.dockerfile
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고나서&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker compose up&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;docker compose run /bin/bash&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뭐 그런 거.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.docker.com/compose/compose-file/compose-file-v3/#dockerfile&quot; papago-id=&quot;42-1&quot; rel=&quot;noreferrer&quot;&gt;per &lt;/a&gt;https://docs.docker.com/compose/compose-file/compose-file-v3/ #&lt;a href=&quot;https://docs.docker.com/compose/compose-file/compose-file-v3/#dockerfile&quot; papago-id=&quot;42-1&quot; rel=&quot;noreferrer&quot;&gt;computer&lt;/a&gt; 파일&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kbyHt.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kbyHt.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;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;E:\Code SAmple\flutqr&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;빌드 명령&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker build -t fluweb .
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;fluweb&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 수 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;.&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;current .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 데스크톱을 보면 릭앤몰티(fluweb 편집) 대신 게시된 이미지를 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지를 다시 실행하려면 실행 버튼을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://i.stack.imgur.com/ttd0t.png&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;49-0&quot;&gt;&lt;img alt=&quot;enter image description here&quot; papago-id=&quot;49-0-0&quot; src=&quot;https://i.stack.imgur.com/ttd0t.png&quot;&gt;&lt;/a&gt; 이 명령을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker run rickandmorty
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;생방송입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qXT8G.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qXT8G.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;docker run $(docker build -q .)
&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;URL : https://stackoverflow.com/questions/36075525/&lt;a href=&quot;https://stackoverflow.com/questions/36075525/how-do-i-run-a-docker-instance-from-a-dockerfile&quot; target=&quot;_blank&quot; papago-id=&quot;51-1&quot;&gt;how-do-i-run-a-docker-instance-from-a-dockerfile&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/653</guid>
      <comments>https://yoursource.tistory.com/653#entry653comment</comments>
      <pubDate>Tue, 15 Aug 2023 15:06:20 +0900</pubDate>
    </item>
    <item>
      <title>C++에서 C 코드를 사용하는 방법</title>
      <link>https://yoursource.tistory.com/652</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C++에서 C 코드를 사용하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 질문입니다: C++가 프로그램에서 C 헤더 파일을 사용할 수 있습니까?&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;이것은 이상한 질문일 수 있습니다. 기본적으로 다른 프로그램(C 언어로 제작)의 소스 코드를 C++로 사용해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 두 헤더 파일 사이에 차이점이 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도서관을 바꾸면 어떨까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 당신이 저를 도울 수 있기를 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예, C++ 코드에 C 헤더를 포함할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 추가하는 것이 일반적입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#ifdef __cplusplus
extern &quot;C&quot;
{
#endif

// C header here

#ifdef __cplusplus
}
#endif
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C++ 컴파일러가 함수 선언 등을 C++가 아닌 C로 처리해야 한다는 것을 알 수 있도록 합니다.&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;C 코드를 프로젝트의 일부로 C++ 코드와 함께 컴파일할 경우, 보통처럼 헤더 파일을 포함하고 C++ 컴파일러 모드를 사용하여 코드를 컴파일해야 합니다. 그러나 일부 C 코드는 C++ 컴파일러로 &quot;깨끗하게&quot; 컴파일되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주조가 필요함).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반면에 라이브러리 또는 프로젝트에 포함되지 않은 다른 코드가 있는 경우 헤더가 다음과 같이 표시되어 있는지 확인해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;extern &quot;C&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 컴파일된 함수 이름에 대한 C++ 명명 규칙이 적용되어 C 컴파일러에서 사용하는 명명 규칙과 일치하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에는 두 가지 옵션이 있습니다. 헤더 파일 자체를 편집하거나 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#ifdef __cplusplus 
extern &quot;C&quot; {
#endif

... original content of headerfile goes here. 

#ifdef __cplusplus 
}
#endif
&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;#ifdef __cplusplus 
extern &quot;C&quot; {
#endif
#include &amp;lt;c_header.h&amp;gt;
#ifdef __cplusplus 
}
#endif
&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;네, 하지만 당신은 C++ 컴파일러에게 헤더의 선언이 C라고 말해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;extern &quot;C&quot; {
#include &quot;c-header.h&quot;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 C 헤더는 이미 포함되어 있으며, 포장되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#if defined __cplusplus&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 거의 틀림없이 약간 이상하지만(C 헤더의 C++ 구문) 편의를 위해 종종 수행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/17448014/&lt;a href=&quot;https://stackoverflow.com/questions/17448014/how-to-use-c-code-in-c&quot; target=&quot;_blank&quot; papago-id=&quot;14-1&quot;&gt;how-to-use-c-code-in-c&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/652</guid>
      <comments>https://yoursource.tistory.com/652#entry652comment</comments>
      <pubDate>Tue, 15 Aug 2023 15:05:23 +0900</pubDate>
    </item>
    <item>
      <title>JQuery 문자열에 검사가 포함되어 있습니다.</title>
      <link>https://yoursource.tistory.com/651</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;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 답이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/1789945/how-to-check-whether-a-string-contains-a-substring-in-javascript&quot; dir=&quot;ltr&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트에서 문자열에 하위 문자열이 포함되어 있는지 확인하는 방법은 무엇입니까?&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(3개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마감됨&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;4-1&quot; title=&quot;2019-04-03 10:54:54Z&quot; papago-attr-id=&quot;1&quot;&gt;4년 전&lt;/span&gt;에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열에 다른 문자열이 포함되어 있는지 확인해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var str1 = &quot;ABCDEFGHIJKLMNOP&quot;;
var str2 = &quot;DEFG&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;str1에 str2가 포함되어 있는지 확인하려면 어떤 함수를 사용해야 합니까?&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;Javascript의 &lt;a href=&quot;https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/indexOf&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-1&quot;&gt;indexOf&lt;/a&gt; 함수를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var str1 = &quot;ABCDEFGHIJKLMNOP&quot;;
var str2 = &quot;DEFG&quot;;
if(str1.indexOf(str2) != -1){
    console.log(str2 + &quot; found&quot;);
}&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;var str1 = &quot;ABCDEFGHIJKLMNOP&quot;;
var str2 = &quot;DEFG&quot;;

sttr1.search(str2);
&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;일치하는 위치를 반환하거나, 찾을 수 없는 경우 -1을 반환합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;str1.contains(str2)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;var text = &quot;some/String&quot;; text.includes(&quot;/&quot;) &amp;lt;-- returns bool; true if &quot;/&quot; exists in string, false otherwise.&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대/소문자를 구분하는 경우 대/소문자를 변경하고 문자열을 비교합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; if (stringvalue.toLocaleLowerCase().indexOf(&quot;mytexttocompare&quot;)!=-1)
        {

            alert(&quot;found&quot;);
        }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3728022/&lt;a href=&quot;https://stackoverflow.com/questions/3728022/jquery-string-contains-check&quot; target=&quot;_blank&quot; papago-id=&quot;12-1&quot;&gt;jquery-string-contains-check&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/651</guid>
      <comments>https://yoursource.tistory.com/651#entry651comment</comments>
      <pubDate>Tue, 15 Aug 2023 15:04:43 +0900</pubDate>
    </item>
    <item>
      <title>Mocha로 Javascript 테스트 - console.log를 사용하여 테스트를 디버깅하려면 어떻게 해야 합니까?</title>
      <link>https://yoursource.tistory.com/650</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mocha로 Javascript 테스트 - console.log를 사용하여 테스트를 디버깅하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 자바스크립트 테스트 러너 &quot;모카&quot;를 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실패한 테스트가 있으므로 다음을 사용하여 디버깅하려고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;console.log&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;그러나 검정을 실행하면 출력이 없습니다(Mocha의 검정 결과만).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모카가 나를 사로잡아 억압한 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;console.log&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력!&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 하면 모카가 내 출력물을 보여줄 수 있습니까?&lt;/font&gt;&lt;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&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;console.log&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 중에 작동합니다!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력이 억제될 것으로 예상하고 있었고, 제 코드를 제대로 확인하지 못했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;응답해 주셔서 감사합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러니까... 그 말은...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쩌면 실제로 합격한 테스트의 출력을 억제하는 것이 좋을까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;음...&lt;/font&gt;&lt;/font&gt;&lt;/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 class=&quot;papago-parent&quot;&gt;사용하고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;console.log&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜냐하면 이클립스 디버거를 node.js에 연결하는 데 많은 문제가 있기 때문입니다.&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 class=&quot;papago-parent&quot;&gt;어떻게 node.js를 디버깅합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;디버거와 함께 또는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;console.log&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;진술서?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 모카 옵션을 사용하고 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;혹시 리포터(-R)나 ui(-ui)가 사용되는 것과 관련이 있는 것은 아닐까요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;console.log(msg);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 실행 중에는 잘 작동합니다. 가끔 약간 바보같기도 하지만요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마도 테스트 실행의 비동기성 때문일 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 중인 옵션(mocha.opts)은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;--require should
-R spec
--ui bdd
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;흠.. 그냥 모카 없이 테스트를 해봤어요. 옵스 그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;console.log&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여전히 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;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;done()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 비동기 코드의 콜백에서.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;REST API에 대한 http 요청을 테스트할 때 문제가 발생했습니다.&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;console.log&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로그 라인이 실행되지 않도록 예상이 실패하고 잡히지 않은 후에 실행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 문제가 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;node.exe&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;mocha&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 papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 경우에는 기본 &quot;node.exe&quot; 별칭을 제거하여 해결했습니다.&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;a href=&quot;https://gitforwindows.org/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;19-1&quot;&gt;Windows용 Git Bash&lt;/a&gt;(2.29.2)를 사용하고 있으며 일부 기본 별칭은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/etc/profile.d/aliases.sh&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  # show me alias related to 'node'
  $ alias|grep node
  alias node='winpty node.exe'`
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;별칭을 제거하려면, 업데이트&lt;/font&gt;&lt;/font&gt;&lt;code&gt;aliases.sh&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 간단히 하라.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;unalias node
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜인지 모르겠다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;winpty&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;console.info&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;node.exe&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용, 저는 더 이상 stdout 문제가 없습니다.&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;a href=&quot;https://www.npmjs.com/package/debug&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;36-1&quot;&gt;debug&lt;/a&gt; lib를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import debug from 'debug'
const log = debug('server');
&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;log('holi')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 실행:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DEBUG=server npm test
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 다야!&lt;/font&gt;&lt;/p&gt;&lt;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/10666349/&lt;a href=&quot;https://stackoverflow.com/questions/10666349/testing-javascript-with-mocha-how-can-i-use-console-log-to-debug-a-test&quot; target=&quot;_blank&quot; papago-id=&quot;40-1&quot;&gt;testing-javascript-with-mocha-how-can-i-use-console-log-to-debug-a-test&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/650</guid>
      <comments>https://yoursource.tistory.com/650#entry650comment</comments>
      <pubDate>Wed, 26 Jul 2023 22:58:18 +0900</pubDate>
    </item>
    <item>
      <title>PL/SQL에서 프로시저나 기능을 위해 언제 가야 합니까?</title>
      <link>https://yoursource.tistory.com/649</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PL/SQL에서 프로시저나 기능을 위해 언제 가야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 PL/SQL에 처음으로 몇 가지 실습 사례를 시도하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PL PL/SQL 하여 몇 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PROCEDURE&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;&amp;amp;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FUNCTION&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&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;▁the?에 가면 됩니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PROCEDURE&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;FUNCTION?&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 어떤 작업을 사용하든&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FUNCTION&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 동한작사수여행다니합용하을업일▁using다니▁do를 사용하여 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PROCEDURE&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 class=&quot;papago-parent&quot;&gt;그들의 장점은 무엇입니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FUNCTION&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;PROCEDURE&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;에서? PL/SQL에서?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;FUNCTION&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값을 반환해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 기능을 사용하는 유일한 장점입니까, 아니면 다른 기능의 장점이 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그램 목표에 대해 명확하게 알고 있다면 저장 프로시저 또는 기능을 사용해야 하는지에 대한 답은 전적으로 비즈니스 요구사항과 설계 워크플로우에 따라 달라집니다.&lt;/font&gt;&lt;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;저장 프로시저와 함수는 PL/SQL 프로그래밍에서 서로 다른 용도로 사용됩니다.&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;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저장 프로시저:&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저장 프로시저는 매개 변수를 수락하고 매개 변수에 대해 작업할 수 있는 명명된 블록을 나타냅니다(익명 블록이 아님).&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저장 프로시저는 일련의 DML 및/또는 기타 작업을 수행할 수 있는 독립적인 절차 워크플로우를 정의합니다.&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;따라서 SQL 문 내부에서 호출할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저장 프로시저는 PL/SQL 블록 이름 또는 익명으로 실행해야 합니다.&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;ul&gt; 
   &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로시저는 값을 반환할 필요가 없습니다(이것도 단점일 수 있습니다).&lt;/font&gt;&lt;/li&gt; 
   &lt;li papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일련의 DML 또는 DDL 작업을 수행하는 데 사용할 수 있습니다(예, 몇 가지 제한 사항이 있는 동적 SQL을 통해 가능합니다).&lt;/font&gt;&lt;/li&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;PL/SQL 블록에서 독립적인 문으로 간단히 호출할 수 있습니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;myProcedure (x, y);
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단점:&lt;/font&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&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;할 수 없음 -  또는 에서 호출할 수 없음 - DML&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SELECT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;진술.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
   &lt;li papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인덱스에 사용할 수 없습니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능:&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수는 매개 변수를 수락하고 값을 반환할 수 있는 블록으로 명명됩니다.&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수는 절차 워크플로우도 정의하지만 SQL 문에 사용할 경우 DML 또는 DDL을 수행할 수 없습니다.&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;함수가 반환한 값이 사용되는 SQL 또는 PL/SQL 문에서 함수를 호출해야 합니다. 즉, 변수에 할당되거나 매개 변수로 전달되는 등의 값이 사용됩니다.&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;장점:&lt;/font&gt;&lt;/p&gt; 
  &lt;ul&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;&lt;font class=&quot;papago-parent&quot;&gt;쿼리 -  또는  - DML에서 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SELECT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;진술.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
   &lt;li papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수가 결정론적인 경우(특정 입력 집합에 대해 함수가 호출될 때마다 동일한 출력을 반환함을 의미) 함수 기반 인덱스에서 사용할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&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;ul&gt; 
   &lt;li papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 쿼리에서 호출되는 함수에 DML이 포함되어 있으면 쿼리가 실패합니다.&lt;/font&gt;&lt;/li&gt; 
   &lt;li papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수는 값을 반환해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 함수 호출은 프로시저 호출처럼 독립적인 문이 될 수 없습니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 &lt;a href=&quot;http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_packages.htm&quot; papago-id=&quot;38-1&quot; rel=&quot;noreferrer&quot;&gt;Oracle&lt;/a&gt; Docs를 &lt;a href=&quot;http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_packages.htm&quot; papago-id=&quot;38-1&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; 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;SELECT&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; 및 PL/ 문 PL/SQL&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;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 면에진술은들a.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PROCEDURE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수 없다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;넌 할 수 있다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SELECT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FUNCTION&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;CAST&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;과 파프라인표그리고로서사용을한을 로.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PIPE ROW&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능은 나중에 사용할 수 있는 고급 PL/SQL 기능입니다.&lt;/font&gt;&lt;/font&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;Oracle Developer 설명서는 무료이며 매우 유용하므로 온라인으로 참조하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://docs.oracle.com/cd/B28359_01/appdev.111/b28843/tdddg_procedures.htm#CIHDFDJG&quot; rel=&quot;nofollow&quot; papago-id=&quot;48-1&quot;&gt;저장 프로시저 개발 및 사용&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;ol&gt; 
 &lt;li&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;A &quot;value&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PL/SQL 표, 참조 커서 등을 포함한 많은 것들 중 하나입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 SQL 문에서 함수를 사용할 수 있지만 프로시저는 사용할 수 없습니다.&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;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;code&gt;OUT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;IN OUT&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;/li&gt; 
 &lt;li papago-id=&quot;54&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;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수에 DML(삽입, 업데이트, 삭제) 문을 둘 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 SQL 쿼리에서는 이러한 함수를 호출할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;*예: 테이블을 업데이트하는 함수가 있으면 SQL 쿼리에서 해당 함수를 호출할 수 없습니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;select myFunction(field) from sometable; --will throw error.
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;절차 또는 기능을 사용할지 여부는 사용자의 요구 사항과 사용자의 편안함에 따라 선택할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주요 이점:&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;58&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;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주로 값을 계산하는 데 사용되는 함수입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;반면에 절차는 주로 경영진의 비즈니스 논리에 사용됩니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;60&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;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 값은 하나만 반환해야 하지만 여러 반환 유형을 허용합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수는 우리가 사용하는 계산 목적에 사용되는 값을 반환해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 값은 하나만 반환해야 하지만 여러 반환 유형을 허용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 우리는 select 문을 사용할 수 있습니다. 프로시저 그것은 값을 반환하거나 반환하지 않을 수 있습니다. 프로시저는 dml 연산을 사용할 수 있습니다. 프로시저만 실행할 수 있습니다.&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;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;execute immediate 문을 사용하여 Dynamically SQL 문을 실행하려면 Procedure를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Function 내부에서는 수행할 수 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로시저는 독립적으로 실행될 수 있지만 함수는 독립적으로 실행될 수 없으므로 실행 가능한 문의 일부여야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 값을 반환하고 해당 값을 추가로 사용해야 할 경우 언제든지 함수로 이동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 값을 최종 결과로 반환하려면 절차를 진행합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 함수에서 동적 SQL을 실행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트를 수행할 수 있는 간단한 기능을 작성하면 작동하는 것을 알 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 경우 기능 또는 절차를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 문에 사용할지 IF 문에 사용할지 여부와 함수를 사용할지 여부가 다릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 사용자와 호출 응용프로그램에 가장 적합한 것을 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/9848926/&lt;a href=&quot;https://stackoverflow.com/questions/9848926/when-should-i-go-for-procedure-or-function-in-pl-sql&quot; target=&quot;_blank&quot; papago-id=&quot;69-1&quot;&gt;when-should-i-go-for-procedure-or-function-in-pl-sql&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/649</guid>
      <comments>https://yoursource.tistory.com/649#entry649comment</comments>
      <pubDate>Wed, 26 Jul 2023 22:56:43 +0900</pubDate>
    </item>
    <item>
      <title>iOS 기기(모바일 Safari)의 입력 필드에서 텍스트를 프로그래밍 방식으로 선택</title>
      <link>https://yoursource.tistory.com/648</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS 기기(모바일 Safari)의 입력 필드에서 텍스트를 프로그래밍 방식으로 선택&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;iOS 기기(예: iPhone, iPad에서 모바일 Safari를 실행하는 경우)에서 입력 필드의 텍스트를 프로그래밍 방식으로 선택하는 방법은 무엇입니까?&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;.select()&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;&amp;lt;input ... /&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소입니다. 그러나 이러한 장치에서는 작동하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;input.setSelectionRange(0, 9999);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/en/DOM/Input.select&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://developer.mozilla.org/en/DOM/Input.select&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;이 스레드에서는 아무 것도 작동하지 않았습니다. iPad에서 작동하는 것은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// t is the input field
setTimeout(function() {
    t.setSelectionRange(0, 9999);
}, 1);
&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;a href=&quot;http://jsfiddle.net/5e548/4/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;7-0&quot;&gt;이 바이올린&lt;/a&gt;을 참조하십시오. (입력 상자에 일부 텍스트를 입력하고 '텍스트 선택'을 클릭&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iPod(iOS 6.0.1 5세대)의 입력 상자에서 텍스트를 선택하고 키보드를 열고 잘라내기/복사/제안... 메뉴를 표시합니다.&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;일반 Javascript를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery에서 시도하지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.getElementById(&quot;p1&quot;).selectionStart = 0
document.getElementById(&quot;p1&quot;).selectionEnd = 999
&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;999라는 숫자는 단지 샘플일 뿐입니다.&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;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iPod 5 - iOS 6.0.1 - 정상 작동.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iPad1 - iOS5.1.1 - 텍스트만 선택됨&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택 항목을 한 번 눌러 잘라내기/복사 메뉴 열기&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iPad2 - iOS4.3.3 - 텍스트만 선택됨&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택 항목을 한 번 눌러 잘라내기/복사 메뉴 열기&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;input&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;17-0&quot;&gt;업데이트:&lt;/strong&gt; (07-10-2013)&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iPod5 - iOS7.0.2 - 링크의 피들 사용:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 상자에서 입력한 텍스트를 볼 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택을 누르면 facebook.com (?)으로 리디렉션됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;뭐라고요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;무슨 일이 일어나고 있는지 전혀 모릅니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;19-0&quot;&gt;업데이트:&lt;/strong&gt; (14-11-2013)&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS 7.0.3 : &lt;a href=&quot;https://stackoverflow.com/users/429091/binki&quot; papago-id=&quot;20-1&quot;&gt;Binki&lt;/a&gt; 업데이트의 코멘트 덕분에.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.selectionStart&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.selectionEnd&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;strong papago-id=&quot;22-0&quot;&gt;있습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;23-0&quot;&gt;업데이트:&lt;/strong&gt; (15-01-2015)&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS 8.x.x : &lt;a href=&quot;https://stackoverflow.com/users/429091/binki&quot; papago-id=&quot;24-1&quot;&gt;Michael&lt;/a&gt; Siebert의 &lt;a href=&quot;https://stackoverflow.com/users/429091/binki&quot; papago-id=&quot;24-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;포커스와 클릭 이벤트를 모두 청취한 다음 Timeout/.debounce를 설정하여 두 경우 모두 작동하도록 해야 했습니다. 탭핑을 통해 입력을 클릭하거나 포커스를 선택합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부정적인 것을 증명하기는 어렵지만, 제 연구에 따르면 이것은 모바일 사파리의 버그입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포커스()는 어느 정도 작동합니다. 성공하려면 두 번 이상의 탭이 필요할 수 있으며, 탭 자체가 필드 포커스를 제공하므로 해당 필드의 사용자 탭에 응답할 필요가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;안타깝게도 select()는 Mobile Safari에서 단순히 작동하지 않습니다.&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;당신의 최선의 방법은 Apple의 &lt;a href=&quot;https://bugreport.apple.com/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;27-1&quot;&gt;버그&lt;/a&gt; 보고서일 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;죄송합니다, 이전 게시물에서 당신이 자바스크립트로 답변을 원한다는 자바스크립트를 보지 못했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;29-3&quot;&gt;자바스크립트&lt;/strong&gt;로 &lt;strong papago-id=&quot;29-1&quot;&gt;UIWebView&lt;/strong&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&gt;&lt;code&gt;element.setSelectionRange(0,9999);&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;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mouseUp 이벤트가 선택을 취소하는 중입니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&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 papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;input.module', function{&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택 범위 설정(0, 9999);&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;});&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;input. ('mouseobserveup', 함수(이벤트) {&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;event.stop();&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;});&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요령을 터득합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;맷&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포커스가 작동하는 것처럼 보이지만 기본 이벤트에서 직접 호출해야 합니다. SetTimeout과 같은 것을 사용하여 포커스를 호출하는 것은 키보드를 불러오는 것처럼 보이지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ios 키보드의 컨트롤이 매우 좋지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;상황이 좋지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 해결책을 찾느라 정신이 없었지만, &lt;em papago-id=&quot;37-1&quot;&gt;당신&lt;/em&gt;의 모든 &lt;em papago-id=&quot;37-1&quot;&gt;답변이 저&lt;/em&gt;에게 또 다른 골칫거리를 열어주었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고객은 사용자가 &lt;strong papago-id=&quot;38-5&quot;&gt;iPad(&lt;/strong&gt;&lt;em papago-id=&quot;38-3&quot;&gt;외부&lt;/em&gt; &lt;strong papago-id=&quot;38-1&quot;&gt;키보드&lt;/strong&gt; 포함)에서&lt;strong papago-id=&quot;38-5&quot;&gt; 모두&lt;/strong&gt;를 &lt;strong papago-id=&quot;38-1&quot;&gt;클릭&lt;/strong&gt;하고 &lt;strong papago-id=&quot;38-5&quot;&gt;선택&lt;/strong&gt;할 수 &lt;em papago-id=&quot;38-3&quot;&gt;있기&lt;/em&gt;를 원했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;알아요, 미쳤어요...)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제에 대한 저의 해결책은 사건들을 다시 정리하는 것이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;39-1&quot;&gt;Focus&lt;/strong&gt;(포커스), &lt;strong papago-id=&quot;39-5&quot;&gt;Click&lt;/strong&gt;(클릭), start(시작)를 차례로 &lt;strong papago-id=&quot;39-3&quot;&gt;누릅니다&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#myFUBARid').on('focus click touchstart', function(e){
  $(this).get(0).setSelectionRange(0,9999);
  //$(this).css(&quot;color&quot;, &quot;blue&quot;);
  e.preventDefault();
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러분들이 저를 수없이 도와주셨듯이, 저는 이것이 누군가에게 도움이 되기를 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android 2.2와 함께 제공되는 Webkit에서는 다음과 같은 기능이 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function trySelect(el) {
    setTimeout(function() {
        try {
            el.select();
        } catch (e) {
        }
    }, 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;a href=&quot;http://code.google.com/p/chromium/issues/detail?id=32865#c6&quot; papago-id=&quot;42-1&quot; rel=&quot;nofollow&quot;&gt;크롬&lt;/a&gt; 문제 &lt;a href=&quot;http://code.google.com/p/chromium/issues/detail?id=32865#c6&quot; papago-id=&quot;42-1&quot; rel=&quot;nofollow&quot;&gt;32865&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;iPad에서 iOS 7을 사용하여 이 작업을 수행할 수 있었던 유일한 방법은 실제로 사용하는 것이었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;textarea&amp;gt;&amp;lt;/textarea&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;&amp;lt;input&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;들판.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt; &amp;lt;textarea onclick=&quot;this.setSelectionRange(0, 9999);&quot;&amp;gt;My text will be selected when textarea is clicked.&amp;lt;/textarea&amp;gt; &lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 영역을 읽기만 하면 선택 트릭이 더 이상 작동하지 않기 때문에 사용자가 영역 내에서 텍스트를 변경하지 못하게 하는 방법이 더 어려웠습니다.&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;HTML5 호환 브라우저를 사용하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;placeholder=&quot;xxx&quot;&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;input&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;꼬리표. 그걸로 충분할 겁니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;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/3272089/&lt;a href=&quot;https://stackoverflow.com/questions/3272089/programmatically-selecting-text-in-an-input-field-on-ios-devices-mobile-safari&quot; target=&quot;_blank&quot; papago-id=&quot;51-1&quot;&gt;programmatically-selecting-text-in-an-input-field-on-ios-devices-mobile-safari&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/648</guid>
      <comments>https://yoursource.tistory.com/648#entry648comment</comments>
      <pubDate>Wed, 26 Jul 2023 22:52:53 +0900</pubDate>
    </item>
    <item>
      <title>jQuery를 사용하여 요소를 자동 높이로 애니메이션화</title>
      <link>https://yoursource.tistory.com/647</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;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;&amp;lt;div&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;200px&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;auto&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt; &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; 잘&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;것&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 잘 될 것 같지는 않아요.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법 아는 사람?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;div:first&quot;).click(function(){
  $(&quot;#first&quot;).animate({
    height: &quot;auto&quot;
  }, 1000 );
});
&lt;/code&gt;&lt;/pre&gt;&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 높이 저장:&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;var curHeight = $('#first').height();
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;높이를 일시적으로 자동으로 전환:&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$('#first').css('height', 'auto');
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자동 높이 가져오기:&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;var autoHeight = $('#first').height();
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;curHeight&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;autoHeight&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;$('#first').height(curHeight).animate({height: autoHeight}, 1000);
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 함께:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var el = $('#first'),
    curHeight = el.height(),
    autoHeight = el.css('height', 'auto').height();
el.height(curHeight).animate({height: autoHeight}, 1000);
&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;IMO 이것은 가장 깨끗하고 쉬운 솔루션입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#first&quot;).animate({height: $(&quot;#first&quot;).get(0).scrollHeight}, 1000 );
&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;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt; &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;되었을 때 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DOM은 자동 높이로 설정될 때 확장된 div의 크기를 초기 렌더링을 통해 이미 알고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 &quot;DOM 파일&quot;로 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scrollHeight&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;는 jQueryElement를 DOMElement로 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;get(0)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 우리는 그 재산에 접근할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;높이를 자동으로 설정하는 콜백 기능을 추가하면 애니메이션이 완료된 후 응답성이 향상됩니다(크레딧 크리스 &lt;a href=&quot;https://stackoverflow.com/users/4019861/chris-williams&quot; papago-id=&quot;17-1&quot;&gt;윌리엄스&lt;/a&gt;).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#first').animate({
    height: $('#first').get(0).scrollHeight
}, 1000, function(){
    $(this).height('auto');
});
&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;이것은 기본적으로 Box9의 답변과 동일한 접근 방식이지만 일반 &lt;strong papago-id=&quot;18-3&quot;&gt;애니메이션과 동일한 인수를 사용&lt;/strong&gt;하는 &lt;strong papago-id=&quot;18-1&quot;&gt;멋진 jquery&lt;/strong&gt; 플러그인으로 포장했습니다. 더 많은 애니메이션 매개 변수가 필요하고 동일한 코드를 반복하는 것에 지칠 때를 위해:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;;(function($)
{
  $.fn.animateToAutoHeight = function(){
  var curHeight = this.css('height'),
      height = this.css('height','auto').height(),
      duration = 200,
      easing = 'swing',
      callback = $.noop,
      parameters = { height: height };
  this.css('height', curHeight);
  for (var i in arguments) {
    switch (typeof arguments[i]) {
      case 'object':
        parameters = arguments[i];
        parameters.height = height;
        break;
      case 'string':
        if (arguments[i] == 'slow' || arguments[i] == 'fast') duration = arguments[i];
        else easing = arguments[i];
        break;
      case 'number': duration = arguments[i]; break;
      case 'function': callback = arguments[i]; break;
    }
  }
  this.animate(parameters, duration, easing, function() {
    $(this).css('height', 'auto');
    callback.call(this, arguments);
  });
  return this;
  }
})(jQuery);
&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;strong papago-id=&quot;19-0&quot;&gt;편집:&lt;/strong&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;더 나은 솔루션은 요소의 높이를 설정하는 데 JS를 사용하지 않는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 고정 높이 요소를 전체 높이(&quot;자동&quot;)로 애니메이션화하는 솔루션입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var $selector = $('div');
    $selector
        .data('oHeight',$selector.height())
        .css('height','auto')
        .data('nHeight',$selector.height())
        .height($selector.data('oHeight'))
        .animate({height: $selector.data('nHeight')},400);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://gist.github.com/2023150&quot; rel=&quot;noreferrer&quot; papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://gist.github.com/2023150&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 효과적이며 이전의 솔루션보다 간단합니다.&lt;/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;CSS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#container{
  height:143px;  
}

.max{
  height: auto;
  min-height: 143px;
}
&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;JS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).ready(function() {
    $(&quot;#container&quot;).click(function() {      
        if($(this).hasClass(&quot;max&quot;)) {
            $(this).removeClass(&quot;max&quot;);
        } else {
            $(this).addClass(&quot;max&quot;);
        }

    })
});
&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;참고: 이 솔루션에는 jQuery UI가 필요합니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;var h = document.getElementById('First').scrollHeight;
$('#First').animate({ height : h+'px' },300);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;항상 #의 자식 요소를 먼저 래핑하고 래퍼의 높이를 변수로 저장할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 가장 예쁘거나 가장 효율적인 대답은 아닐 수도 있지만, 효과적입니다.&lt;/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;a href=&quot;http://jsfiddle.net/fPTPj/2/&quot; papago-id=&quot;27-1&quot;&gt;바이올린&lt;/a&gt;이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 당신의 목적을 위해, 여기에 고기와 감자가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(function(){
//wrap everything inside #first
$('#first').children().wrapAll('&amp;lt;div class=&quot;wrapper&quot;&amp;gt;&amp;lt;/div&amp;gt;');
//get the height of the wrapper 
var expandedHeight = $('.wrapper').height();
//get the height of first (set to 200px however you choose)
var collapsedHeight = $('#first').height();
//when you click the element of your choice (a button in my case) #first will animate to height auto
$('button').click(function(){
    $(&quot;#first&quot;).animate({
        height: expandedHeight            
    })
});
});​
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://api.jquery.com/slideDown/&quot; papago-id=&quot;29-1&quot;&gt;slideDown&lt;/a&gt; 및 &lt;a href=&quot;http://api.jquery.com/slideUp/&quot; papago-id=&quot;29-3&quot;&gt;slideUp&lt;/a&gt; 사용&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;div:first&quot;).click(function(){ $(&quot;#first&quot;).slideDown(1000); });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 가까스로 그것을 고쳤습니다: 코드를 삭제합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var divh = document.getElementById('first').offsetHeight;
$(&quot;#first&quot;).css('height', '100px');
$(&quot;div:first&quot;).click(function() {
  $(&quot;#first&quot;).animate({
    height: divh
  }, 1000);
});
&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;높이를 다시 auto로 설정하는 콜백을 추가하여 창 크기 변경에 대응하는 Liquinaut의 응답을 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#first&quot;).animate({height: $(&quot;#first&quot;).get(0).scrollHeight}, 1000, function() {$(&quot;#first&quot;).css({height: &quot;auto&quot;});});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 높이 자동은 요소가 렌더링된 후에만 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;고정 높이를 설정하거나 요소가 표시되지 않으면 트릭 없이 액세스할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다행히도 당신이 사용할 수 있는 몇 가지 속임수가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소를 복제하여 뷰 외부에 표시하고 높이를 자동으로 지정하면 해당 요소를 복제본에서 가져와 나중에 기본 요소에 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 기능을 사용하는데 잘 작동하는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery.fn.animateAuto = function(prop, speed, callback){
    var elem, height, width;

    return this.each(function(i, el){
        el = jQuery(el), elem =    el.clone().css({&quot;height&quot;:&quot;auto&quot;,&quot;width&quot;:&quot;auto&quot;}).appendTo(&quot;body&quot;);
        height = elem.css(&quot;height&quot;),
        width = elem.css(&quot;width&quot;),
        elem.remove();

        if(prop === &quot;height&quot;)
            el.animate({&quot;height&quot;:height}, speed, callback);
        else if(prop === &quot;width&quot;)
            el.animate({&quot;width&quot;:width}, speed, callback);  
        else if(prop === &quot;both&quot;)
            el.animate({&quot;width&quot;:width,&quot;height&quot;:height}, speed, callback);
    });   
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용도:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.animateHeight&quot;).bind(&quot;click&quot;, function(e){
    $(&quot;.test&quot;).animateAuto(&quot;height&quot;, 1000); 
});

$(&quot;.animateWidth&quot;).bind(&quot;click&quot;, function(e){
    $(&quot;.test&quot;).animateAuto(&quot;width&quot;, 1000);  
});

$(&quot;.animateBoth&quot;).bind(&quot;click&quot;, function(e){
    $(&quot;.test&quot;).animateAuto(&quot;both&quot;, 1000); 
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택한 항목이 일치하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 요소는 ID가 'first'인가요, 아니면 모든 div의 첫 번째 요소인가요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 안전한 해결책은 '이것'을 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// assuming the div you want to animate has an ID of first
$('#first').click(function() {
  $(this).animate({ height : 'auto' }, 1000);
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 작업을 언제든지 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery.fn.animateAuto = function(prop, speed, callback){
var elem, height, width;
return this.each(function(i, el){
    el = jQuery(el), elem = el.clone().css({&quot;height&quot;:&quot;auto&quot;,&quot;width&quot;:&quot;auto&quot;}).appendTo(&quot;body&quot;);
    height = elem.css(&quot;height&quot;),
    width = elem.css(&quot;width&quot;),
    elem.remove();

    if(prop === &quot;height&quot;)
        el.animate({&quot;height&quot;:height}, speed, callback);
    else if(prop === &quot;width&quot;)
        el.animate({&quot;width&quot;:width}, speed, callback);  
    else if(prop === &quot;both&quot;)
        el.animate({&quot;width&quot;:width,&quot;height&quot;:height}, speed, callback);
});  
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://jsfiddle.net/Zuriel/faE9w/2/&quot; papago-id=&quot;39-1&quot; rel=&quot;nofollow&quot;&gt;여기&lt;/a&gt; 바이올린이 있습니다:&lt;a href=&quot;http://jsfiddle.net/Zuriel/faE9w/2/&quot; papago-id=&quot;39-1&quot; rel=&quot;nofollow&quot;&gt; &lt;/a&gt;http://jsfiddle.net/Zuriel/faE9w/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;var height;
$(document).ready(function(){
    $('#first').css('height','auto');
    height = $('#first').height();
    $('#first').css('height','200px');
})

 $(&quot;div:first&quot;).click(function(){
  $(&quot;#first&quot;).animate({
    height: height
  }, 1000 );
});
&lt;/code&gt;&lt;/pre&gt;&lt;h1 papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;BORDER-BOX와 함께 작동하는...&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안녕 친구들.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가  위해  플러그인이 , 이 은 여기제작플 jQuery 이 있을 때 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 동일한 작업을 수행하기 위해 작성했지만, 사용자가 사용할 때 발생할 높이 차이도 설명합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;box-sizing&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;border-box&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소를 y축을 따라 축소하여 숨기는 &quot;yShrinkOut&quot; 플러그인도 포함했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;pre&gt;&lt;code&gt;// -------------------------------------------------------------------
// Function to show an object by allowing it to grow to the given height value.
// -------------------------------------------------------------------
$.fn.yGrowIn = function (growTo, duration, whenComplete) {

    var f = whenComplete || function () { }, // default function is empty
        obj = this,
        h = growTo || 'calc', // default is to calculate height
        bbox = (obj.css('box-sizing') == 'border-box'), // check box-sizing
        d = duration || 200; // default duration is 200 ms

    obj.css('height', '0px').removeClass('hidden invisible');
    var padTop = 0 + parseInt(getComputedStyle(obj[0], null).paddingTop), // get the starting padding-top
        padBottom = 0 + parseInt(getComputedStyle(obj[0], null).paddingBottom), // get the starting padding-bottom
        padLeft = 0 + parseInt(getComputedStyle(obj[0], null).paddingLeft), // get the starting padding-left
        padRight = 0 + parseInt(getComputedStyle(obj[0], null).paddingRight); // get the starting padding-right
    obj.css('padding-top', '0px').css('padding-bottom', '0px'); // Set the padding to 0;

    // If no height was given, then calculate what the height should be.
    if(h=='calc'){ 
        var p = obj.css('position'); // get the starting object &quot;position&quot; style. 
        obj.css('opacity', '0'); // Set the opacity to 0 so the next actions aren't seen.
        var cssW = obj.css('width') || 'auto'; // get the CSS width if it exists.
        var w = parseInt(getComputedStyle(obj[0], null).width || 0) // calculate the computed inner-width with regard to box-sizing.
            + (!bbox ? parseInt((getComputedStyle(obj[0], null).borderRightWidth || 0)) : 0) // remove these values if using border-box.
            + (!bbox ? parseInt((getComputedStyle(obj[0], null).borderLeftWidth || 0)) : 0) // remove these values if using border-box.
            + (!bbox ? (padLeft + padRight) : 0); // remove these values if using border-box.
        obj.css('position', 'fixed'); // remove the object from the flow of the document.
        obj.css('width', w); // make sure the width remains the same. This prevents content from throwing off the height.
        obj.css('height', 'auto'); // set the height to auto for calculation.
        h = parseInt(0); // calculate the auto-height
        h += obj[0].clientHeight // calculate the computed height with regard to box-sizing.
            + (bbox ? parseInt((getComputedStyle(obj[0], null).borderTopWidth || 0)) : 0) // add these values if using border-box.
            + (bbox ? parseInt((getComputedStyle(obj[0], null).borderBottomWidth || 0)) : 0) // add these values if using border-box.
            + (bbox ? (padTop + padBottom) : 0); // add these values if using border-box.
        obj.css('height', '0px').css('position', p).css('opacity','1'); // reset the height, position, and opacity.
    };

    // animate the box. 
    //  Note: the actual duration of the animation will change depending on the box-sizing.
    //      e.g., the duration will be shorter when using padding and borders in box-sizing because
    //      the animation thread is growing (or shrinking) all three components simultaneously.
    //      This can be avoided by retrieving the calculated &quot;duration per pixel&quot; based on the box-sizing type,
    //      but it really isn't worth the effort.
    obj.animate({ 'height': h, 'padding-top': padTop, 'padding-bottom': padBottom }, d, 'linear', (f)());
};

// -------------------------------------------------------------------
// Function to hide an object by shrinking its height to zero.
// -------------------------------------------------------------------
$.fn.yShrinkOut = function (d,whenComplete) {
    var f = whenComplete || function () { },
        obj = this,
        padTop = 0 + parseInt(getComputedStyle(obj[0], null).paddingTop),
        padBottom = 0 + parseInt(getComputedStyle(obj[0], null).paddingBottom),
        begHeight = 0 + parseInt(obj.css('height'));

    obj.animate({ 'height': '0px', 'padding-top': 0, 'padding-bottom': 0 }, d, 'linear', function () {
            obj.addClass('hidden')
                .css('height', 0)
                .css('padding-top', padTop)
                .css('padding-bottom', padBottom);
            (f)();
        });
};
&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;기본값을 사용하기 위해 사용한 매개 변수를 생략하거나 null로 설정할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용한 매개 변수:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;47-0&quot;&gt;growTo:&lt;/strong&gt; 모든 계산을 재정의하고 개체가 커질 CSS 높이를 설정하려면 이 매개 변수를 사용합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;48-0&quot;&gt;기간:&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;애니메이션의 지속 &lt;em papago-id=&quot;48-2&quot;&gt;시간&lt;/em&gt;입니다.&lt;/font&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;strong papago-id=&quot;49-0&quot;&gt;완료된 경우:&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;애니메이션이 완료되면 실행할 기능입니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 기능이 한 페이지에 있는 여러 읽기 영역에서 워드프레스 단축 코드로 구현하기 위해 필요했습니다. 같은 문제가 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기술적으로 페이지의 모든 읽기 범위는 높이가 고정되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 토글을 사용하여 자동 높이로 개별적으로 확장할 수 있기를 원했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 클릭: '텍스트 범위의 전체 높이로 확장', 두 번째 클릭: '기본 높이인 70px로 축소'&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;span class=&quot;read-more&quot; data-base=&quot;70&quot; data-height=&quot;null&quot;&amp;gt;
     /* Lots of text determining the height of this span */
 &amp;lt;/span&amp;gt;
 &amp;lt;button data-target='read-more'&amp;gt;Read more&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;span.read-more {
    position:relative;
    display:block;
    overflow:hidden;
}
&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 class=&quot;papago-parent&quot;&gt;그래서 이 위는 매우 단순해 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data-base&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성 필요한 고정 높이를 설정해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data-height&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소의 실제(동적) 높이를 저장하는 데 사용되는 속성입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery 파트&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery(document).ready(function($){

  $.fn.clickToggle = function(func1, func2) {
      var funcs = [func1, func2];
      this.data('toggleclicked', 0);
      this.click(function() {
          var data = $(this).data();
          var tc = data.toggleclicked;
          $.proxy(funcs[tc], this)();
          data.toggleclicked = (tc + 1) % 2;
      });
      return this;
  };

    function setAttr_height(key) {
        $(key).each(function(){
            var setNormalHeight = $(this).height();
            $(this).attr('data-height', setNormalHeight);
            $(this).css('height', $(this).attr('data-base') + 'px' );
        });
    }
    setAttr_height('.read-more');

    $('[data-target]').clickToggle(function(){
        $(this).prev().animate({height: $(this).prev().attr('data-height')}, 200);
    }, function(){
        $(this).prev().animate({height: $(this).prev().attr('data-base')}, 200);
    });

});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째와 두 번째 클릭에 클릭 토글 기능을 사용했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;합니다: 두번째기더중니다합요능이다▁the▁is니.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setAttr_height()&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;.read-more&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;base-height&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;그 후 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; 함수를 통해 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 후 jquery css 함수를 통해 기본 높이가 설정됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 속성을 모두 설정하면 이제 두 속성을 원활하게 전환할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data-base&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 (고정된) 높이로 이동하고 자신의 ID에 대한 .read-more 클래스를 전환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 모두 &lt;a href=&quot;https://jsfiddle.net/rodtu3co/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;64-1&quot;&gt;바이올린&lt;/a&gt;으로 작동하는 것을 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery UI가 필요하지 않음&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;슬라이드 전환(&lt;a href=&quot;https://stackoverflow.com/a/5003287/2334352&quot; papago-id=&quot;66-1&quot;&gt;Box9의 응답&lt;/a&gt; 확장)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;$(&quot;#click-me&quot;).click(function() {
  var el = $('#first'),
  curHeight = el.height(),
  autoHeight = el.css('height', 'auto').height(),
  finHeight = $('#first').data('click') == 1 ? &quot;20px&quot; : autoHeight;
  $('#first').data('click', $(this).data('click') == 1 ? false : true);
  el.height(curHeight).animate({height: finHeight});
});&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;#first {width: 100%;height: 20px;overflow:hidden;}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;div id=&quot;first&quot;&amp;gt;
  &amp;lt;div id=&quot;click-me&quot;&amp;gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit&amp;lt;/div&amp;gt;
  Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit,
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 원하는 것이 단지 div를 보여주고 숨기는 것이라면, 이 코드는 당신이 jQuery를 애니메이션으로 사용할 수 있게 해줄 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery가 원하는 높이의 대부분을 애니메이션으로 만들거나 애니메이션을 0px로 만들어 애니메이션을 속일 수 있습니다. jQuery는 자동으로 변환하기 위해 jQuery가 설정한 높이만 있으면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 .animate는 .vmx(높이:auto)가 변환하는 요소에 style=&quot;를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 본 이 작업 중 가장 깨끗한 방법은 예상되는 높이까지 애니메이션을 만든 다음 자동으로 설정하고 올바르게 수행하면 매우 매끄럽게 보일 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러분은 심지어 여러분이 기대하는 것을 애니메이션으로 만들 수도 있고, 그러면 그것은 빠르게 되돌아 올 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;0의 지속 시간 동안 0px로 애니메이션을 만들면 요소 높이가 자동 높이로 떨어지게 됩니다.&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;    jQuery(&quot;div&quot;).animate({
         height: &quot;0px&quot;/*or height of your choice*/
    }, {
         duration: 0,/*or speed of your choice*/
         queue: false, 
         specialEasing: {
             height: &quot;easeInCirc&quot;
        },
         complete: function() {
             jQuery(this).css({height:&quot;auto&quot;});
        }
    });
&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;죄송합니다. 오래된 게시물인 것은 알고 있지만, 이 게시물을 접한 jQuery에서 이 기능을 여전히 사용하는 사용자와 관련이 있을 것이라고 생각했습니다.&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;내가 원하는 각 div의 높이를 데이터에 로드합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('div').each(function(){
    $(this).data('height',$(this).css('height'));
    $(this).css('height','20px');
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 저는 클릭해서 애니메이션을 할 때 그것을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('div').click(function(){
    $(this).css('height',$(this).data('height'));
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 CSS 전환을 사용하고 있어서 jQuery animate를 사용하지 않지만, 당신은 똑같이 animate를 할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 속성에 저장할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('.colapsable').each(function(){
    $(this).attr('data-oheight',$(this).height());
    $(this).height(100);
});

$('.colapsable h2:first-child').click(function(){
    $(this).parent('.colapsable').animate({
            height: $(this).parent('.colapsible').data('oheight')
        },500);
    }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 제가 찾던 것을 정확하게 해주고 멋져 보이는 것을 조립했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소의 스크롤 높이를 사용하면 DOM에 로드되었을 때의 높이를 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt; var clickers = document.querySelectorAll('.clicker');
    clickers.forEach(clicker =&amp;gt; {
        clicker.addEventListener('click', function (e) {
            var node = e.target.parentNode.childNodes[5];
            if (node.style.height == &quot;0px&quot; || node.style.height == &quot;&quot;) {
                $(node).animate({ height: node.scrollHeight });
            }
            else {
                $(node).animate({ height: 0 });
            }
        });
    });&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.answer{
        font-size:15px;
        color:blue;
        height:0px;
        overflow:hidden;
       
    }&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt; &amp;lt;div class=&quot;row&quot; style=&quot;padding-top:20px;&quot;&amp;gt;
                &amp;lt;div class=&quot;row&quot; style=&quot;border-color:black;border-style:solid;border-radius:4px;border-width:4px;&quot;&amp;gt;
                    &amp;lt;h1&amp;gt;This is an animation tester?&amp;lt;/h1&amp;gt;
                    &amp;lt;span class=&quot;clicker&quot;&amp;gt;click me&amp;lt;/span&amp;gt;
                    &amp;lt;p class=&quot;answer&quot;&amp;gt;
                        I will be using this to display FAQ's on a website and figure you would like this.  The javascript will allow this to work on all of the FAQ divs made by my razor code.  the Scrollheight is the height of the answer element on the DOM load.  Happy Coding :)
                         Lorem ipsum dolor sit amet, mea an quis vidit autem. No mea vide inani efficiantur, mollis admodum accusata id has, eam dolore nemore eu. Mutat partiendo ea usu, pri duis vulputate eu. Vis mazim noluisse oportere id. Cum porro labore in, est accumsan euripidis scripserit ei. Albucius scaevola elaboraret usu eu. Ad sed vivendo persecuti, harum movet instructior eam ei.
                    &amp;lt;/p&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;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/5003220/&lt;a href=&quot;https://stackoverflow.com/questions/5003220/animate-element-to-auto-height-with-jquery&quot; target=&quot;_blank&quot; papago-id=&quot;76-1&quot;&gt;animate-element-to-auto-height-with-jquery&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/647</guid>
      <comments>https://yoursource.tistory.com/647#entry647comment</comments>
      <pubDate>Wed, 26 Jul 2023 22:50:51 +0900</pubDate>
    </item>
    <item>
      <title>Angular 2 테스트 - 비동기 함수 호출 - 사용 시기</title>
      <link>https://yoursource.tistory.com/646</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular 2 테스트 - 비동기 함수 호출 - 사용 시기&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular 2에서 테스트할 때 &lt;strong papago-id=&quot;1-1&quot;&gt;Test&lt;/strong&gt; Bed에서 비동기 기능을 사용하는 경우는 언제입니까?&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; beforeEach(() =&amp;gt; {
        TestBed.configureTestingModule({
            declarations: [MyModule],
            schemas: [NO_ERRORS_SCHEMA],
        });
    });
&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;beforeEach(async(() =&amp;gt; {
    TestBed.configureTestingModule({
        declarations: [MyModule],
        schemas: [NO_ERRORS_SCHEMA],
    });
}));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 이것에 대해 가르쳐 줄 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;async&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;async&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;async&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;setTimeout&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)이 추적됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 비동기 작업이 완료되면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;async&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;완료합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 Angular 밖에서 Jasmine과 함께 일한 적이 있다면, 당신은 아마도 본 적이 있을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;done&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;it('..', function(done) {
  someAsyncAction().then(() =&amp;gt; {
    expect(something).toBe(something);
    done();
  });
});
&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;done()&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;done()&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;it('..', function() {
  someAsyncAction().then(() =&amp;gt; {
    expect(something).toBe(something);
  });
});
&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;em papago-id=&quot;15-1&quot;&gt;해결&lt;/em&gt;되기 때문에 예상보다 먼저 테스트가 완료됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular(Jasmine 환경에서)를 사용하면 Angular가 실제로 호출합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;done&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;async&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;영역에 있는 모든 비동기 작업을 추적하고 모든 작업이 완료되면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;done&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뒤에서 호출될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;TestBed&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;compileComponents&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그것을 다르게 불러야 하는 상황에 거의 마주치지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;beforeEach(async(() =&amp;gt; {
   TestBed.configureTestingModule({
     declarations: [MyModule],
     schemas: [NO_ERRORS_SCHEMA],
   })
   .compileComponent().then(() =&amp;gt; {
      fixture = TestBed.createComponent(TestComponent);
   });
}));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용하는 구성 요소를 테스트할 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;templateUrl&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(웹 팩을 사용하지 않는 경우), Angular는 템플릿을 가져오기 위해 XHR 요청을 해야 하므로 구성 요소의 컴파일이 비동기식이 됩니다.&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;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트에서 비동기 호출을 할 때 실제 테스트 기능은 비동기 호출이 완료되기 전에 완료됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;통화가 완료되었을 때 상태를 확인해야 하는 경우(일반적으로 이 경우), 테스트 프레임워크는 비동기 작업이 진행 중인 동안 테스트가 완료된 것으로 보고합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 시&lt;/font&gt;&lt;/font&gt;&lt;code&gt;async(...)&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;it('should show quote after getQuote promise (async)', async(() =&amp;gt; {
  fixture.detectChanges();

  fixture.whenStable().then(() =&amp;gt; { // wait for async getQuote
    fixture.detectChanges();        // update view with quote
    expect(el.textContent).toBe(testQuote);
  });
}));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드가 전달되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;then(...)&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;strong papago-id=&quot;22-1&quot;&gt;후&lt;/strong&gt;에 실행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;async()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 프레임워크가 완료된 것으로 처리하기 전에 약속 및 관찰 가능한 항목이 완료될 때까지 기다려야 한다는 것을 인식시킵니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고 항목&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://angular.io/guide/testing#async&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://angular.io/guide/testing#async&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/40126729/&lt;a href=&quot;https://stackoverflow.com/questions/40126729/angular-2-testing-async-function-call-when-to-use&quot; target=&quot;_blank&quot; papago-id=&quot;33-1&quot;&gt;angular-2-testing-async-function-call-when-to-use&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/646</guid>
      <comments>https://yoursource.tistory.com/646#entry646comment</comments>
      <pubDate>Wed, 26 Jul 2023 22:48:43 +0900</pubDate>
    </item>
    <item>
      <title>Xampp Code Igniter 3 + MariaDB 프로젝트를 github에 푸시하는 이상적인 방법은 무엇입니까?</title>
      <link>https://yoursource.tistory.com/645</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xampp Code Igniter 3 + MariaDB 프로젝트를 github에 푸시하는 이상적인 방법은 무엇입니까?&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;저는 Xampp, Code Igniter 3, MariaDB를 사용하여 첫 번째 프로젝트를 진행하고 있습니다.&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;이 프로젝트는 제 기계에서 잘 작동하고 있지만, 이 프로젝트를 github에 올바르게 업로드하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정확히 말하자면, 내 말은:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사용자의 PC에서 실행되는 프로젝트의 필요한 파일을 모두 업로드합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트에 필요한 모든 파일이 이 두 폴더 안에 있다고 생각합니다. 데이터베이스 파일: xampp/mysql/data/order_system Code Igniter 파일: xampp/htdocs/ci/order_system&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;저의 주요 문제는 이 두 개의 메인 폴더만 github에 업로드해야 하는가 입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 뭐예요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트를 수행하기 위해 누군가가 폴더를 붙여넣어야 하는 위치를 알려주는 것이 이상적입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 내가 나의 모든 xampp 폴더를 업로드합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(저는 그렇지 않다고 생각해요, 하하)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 전체 xampp 폴더 구조만 업로드하고 두 개의 메인(order_system) 폴더 안에 있는 내용/파일만 업로드합니까?&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;저는 git/github에 대한 지식이 거의 없으며 이번 프로젝트가 저의 첫 CI+Xapp 프로젝트입니다.&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;저는 그것을 제대로 설명하기 위한 중요한 git/github 이해가 부족했습니다.&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;하지만 어쨌든, 저는 이 4가지 주요 단계를 수행함으로써 해결책을 생각해냈습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;github에 리포지토리를 만들고 xampp\htdocs\codeigniter3\ 내부의 폴더에 연결했습니다.&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;프로젝트의 폴더 안에 모든 응용 프로그램 파일(index.php, 응용 프로그램 폴더 및 파일, composer.json 등)을 넣었습니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스와 같은 다른 리소스의 경우 기본 프로젝트 폴더에 이름 &lt;strong papago-id=&quot;14-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;필요한 모든 쿼리가 포함된 SQL).&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;github README 파일에 실행 지침을 나열했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자산 폴더 내의 SQL 쿼리와 사용된 모든 기술이 나열되어 있습니다(따라서 사용된 데이터베이스 또는 xampp/php 버전과 관련하여 혼동이 없습니다).&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 최선의 접근법인지는 잘 모르겠지만, 저의 필요성과 주제에 대한 연구를 바탕으로, 제가 생각해낸 것은 이것이고, 기능적인 해결책이었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/75898595/&lt;a href=&quot;https://stackoverflow.com/questions/75898595/what-is-the-ideal-way-to-push-a-xampp-code-igniter-3-mariadb-project-to-github&quot; target=&quot;_blank&quot; papago-id=&quot;17-1&quot;&gt;what-is-the-ideal-way-to-push-a-xampp-code-igniter-3-mariadb-project-to-github&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/645</guid>
      <comments>https://yoursource.tistory.com/645#entry645comment</comments>
      <pubDate>Wed, 26 Jul 2023 22:47:34 +0900</pubDate>
    </item>
    <item>
      <title>python 사전에서 속성 설정</title>
      <link>https://yoursource.tistory.com/644</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;python 사전에서 속성 설정&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 키가 해당 개체의 속성이 되는 방식으로 파이썬 사전에서 개체를 만드는 것이 가능합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;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; d = { 'name': 'Oscar', 'lastName': 'Reyes', 'age':32 }

 e = Employee(d) 
 print e.name # Oscar 
 print e.age + 10 # 42 
&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;a href=&quot;https://stackoverflow.com/questions/61517/python-dictionary-from-an-objects-fields&quot; papago-id=&quot;3-1&quot;&gt;개체 필드의 Python 사전&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론, 다음과 같은 것이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class Employee(object):
    def __init__(self, initial_data):
        for key in initial_data:
            setattr(self, key, initial_data[key])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;갱신하다&lt;/font&gt;&lt;/em&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;Brent Nash가 제안하는 것처럼 키워드 인수도 허용하여 이를 보다 유연하게 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class Employee(object):
    def __init__(self, *initial_data, **kwargs):
        for dictionary in initial_data:
            for key in dictionary:
                setattr(self, key, dictionary[key])
        for key in kwargs:
            setattr(self, key, kwargs[key])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 다음과 같이 부를 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;e = Employee({&quot;name&quot;: &quot;abc&quot;, &quot;age&quot;: 32})
&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;e = Employee(name=&quot;abc&quot;, age=32)
&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;employee_template = {&quot;role&quot;: &quot;minion&quot;}
e = Employee(employee_template, name=&quot;abc&quot;, age=32)
&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;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러분은 모든 분야가 시간보다 앞서야 하는 것을 알고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 모든 특성을 명시적으로 설정할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;class Employee(object):
    def __init__(self, name, last_name, age):
        self.name = name
        self.last_name = last_name
        self.age = age

d = {'name': 'Oscar', 'last_name': 'Reyes', 'age':32 }
e = Employee(**d) 

print e.name # Oscar 
print e.age + 10 # 42 
&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;/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;당신은 모든 분야가 시간보다 앞서야 하는 것이 무엇인지 모릅니다.&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;class Employee(object):
    def __init__(self, data):
        self.data = data

d = {'name': 'Oscar', 'last_name': 'Reyes', 'age':32 }
e = Employee(d) 

print e.data['name'] # Oscar 
print e.data['age'] + 10 # 42 
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;hr&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;기본적으로 사례 1과 동일한 또 다른 솔루션은 다음을 사용하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;collections.namedtuple&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구현 방법은 Van의 답변을 참조하십시오.&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&gt;&lt;/font&gt;&lt;code&gt;__dict__&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트 방법을 호출합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; class Employee(object):
...     def __init__(self, _dict):
...         self.__dict__.update(_dict)
... 


&amp;gt;&amp;gt;&amp;gt; dict = { 'name': 'Oscar', 'lastName': 'Reyes', 'age':32 }

&amp;gt;&amp;gt;&amp;gt; e = Employee(dict)

&amp;gt;&amp;gt;&amp;gt; e.name
'Oscar'

&amp;gt;&amp;gt;&amp;gt; e.age
32
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성 이름을 사전의 키로 사용하는 것이 어떻습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class StructMyDict(dict):

     def __getattr__(self, name):
         try:
             return self[name]
         except KeyError as e:
             raise AttributeError(e)

     def __setattr__(self, name, value):
         self[name] = value
&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;nautical = StructMyDict(left = &quot;Port&quot;, right = &quot;Starboard&quot;) # named args

nautical2 = StructMyDict({&quot;left&quot;:&quot;Port&quot;,&quot;right&quot;:&quot;Starboard&quot;}) # dictionary

nautical3 = StructMyDict([(&quot;left&quot;,&quot;Port&quot;),(&quot;right&quot;,&quot;Starboard&quot;)]) # tuples list

nautical4 = StructMyDict()  # fields TBD
nautical4.left = &quot;Port&quot;
nautical4.right = &quot;Starboard&quot;

for x in [nautical, nautical2, nautical3, nautical4]:
    print &quot;%s &amp;lt;--&amp;gt; %s&quot; % (x.left,x.right)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 속성 오류를 높이는 대신 알 수 없는 값에 대해 없음을 반환할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(web2py 스토리지 클래스에서 사용되는 트릭)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 말하다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class A():
    def __init__(self):
        self.x=7
        self.y=8
        self.z=&quot;name&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 번에 속성을 설정하려는 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;d = {'x':100,'y':300,'z':&quot;blah&quot;}
a = A()
a.__dict__.update(d)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각에 그 대답은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;settattr&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;dict&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;Employee&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;.name&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;dict 구문 대신 (&lt;/font&gt;&lt;/font&gt;&lt;code&gt;['name']&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;), 다음과 &lt;a href=&quot;http://docs.python.org/dev/library/collections.html#collections.namedtuple&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-1&quot;&gt;같이&lt;/a&gt; 명명된 튜플을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from collections import namedtuple

Employee = namedtuple('Employee', 'name age')
e = Employee('noname01', 6)
print e
#&amp;gt;&amp;gt; Employee(name='noname01', age=6)

# create Employee from dictionary
d = {'name': 'noname02', 'age': 7}
e = Employee(**d)
print e
#&amp;gt;&amp;gt; Employee(name='noname02', age=7)
print e._asdict()
#&amp;gt;&amp;gt; {'age': 7, 'name': 'noname02'}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 가지고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;_asdict()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 속성을 사전으로 액세스하는 방법이지만 나중에 추가 속성을 추가할 &lt;strong papago-id=&quot;12-1&quot;&gt;수&lt;/strong&gt;는 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;딕트를 사용하는 것과 비슷하게, 당신은 그냥 다음과 같은 kwargs를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class Person:
   def __init__(self, **kwargs):
       self.properties = kwargs

   def get_property(self, key):
       return self.properties.get(key, None)

   def main():
       timmy = Person(color = 'red')
       print(timmy.get_property('color')) #prints 'red'
&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;pip install domonic
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 다음을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from domonic.javascript import Object

class Employee(Object):
    pass

d = { 'name': 'Oscar', 'lastName': 'Reyes', 'age':32 }

e = Employee(d)
print(e.name)
print(e['name'])
print(e)

# {'name': 'Oscar', 'lastName': 'Reyes', 'age': 32}

&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요에 따라 작동해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2466191/&lt;a href=&quot;https://stackoverflow.com/questions/2466191/set-attributes-from-dictionary-in-python&quot; target=&quot;_blank&quot; papago-id=&quot;36-1&quot;&gt;set-attributes-from-dictionary-in-python&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/644</guid>
      <comments>https://yoursource.tistory.com/644#entry644comment</comments>
      <pubDate>Wed, 26 Jul 2023 22:46:35 +0900</pubDate>
    </item>
    <item>
      <title>개체의 속성 이름을 가져오는 중</title>
      <link>https://yoursource.tistory.com/643</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개체의 속성 이름을 가져오는 중&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 답이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/208016/how-to-list-the-properties-of-a-javascript-object&quot; dir=&quot;ltr&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JavaScript 개체의 속성을 나열하는 방법은 무엇입니까?&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(18개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마감됨&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;4-1&quot; title=&quot;2022-09-06 12:39:54Z&quot; papago-attr-id=&quot;1&quot;&gt;11개월 전&lt;/span&gt;에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;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;for(var i in myObject) {
    // ...
}
&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;for(var i in myObject) {
    separateObj[myObject[i].name] = myObject[i];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 구글에서 그것과 같은 것을 찾을 수 없는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들은 변수의 이름을 함께 전달하라고 하지만 이것은 제가 달성하고자 하는 것에 대한 옵션이 아닙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움을 주셔서 감사합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Object&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;.keys() 사용&lt;/a&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var myObject = { a: 'c', b: 'a', c: 'b' };
var keyNames = Object.keys(myObject);
console.log(keyNames); // Outputs [&quot;a&quot;,&quot;b&quot;,&quot;c&quot;]&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;Object.keys()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 개체에 속하는 속성 이름 배열을 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;i&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;for(var name in obj) {
    alert(name);
    var value = obj[name];
    alert(value);
}
&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;seperateObj[i] = myObject[i];
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;13-0&quot;&gt;고지&lt;/strong&gt; 사항 &quot;물건이 부착된 속성 이름을 알 수 있습니까?&quot;라는 질문으로 오해했지만, 일부 사람들이 검색하다가 여기에 올 수도 있기 때문에 답을 남겨두기로 결정했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니요, 개체가 여러 속성에 연결될 수 있으므로 개체 이름을 알 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var obj = {a:1};
var a = {x: obj, y: obj}
&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;obj의 이름은 무엇입니까?&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;정말로 for 루프의 속성 이름만 원하는 것이 아닙니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for (var propName in obj) {
  console.log(&quot;Iterating through prop with name&quot;, propName, &quot; its value is &quot;, obj[propName])
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 물체에서 쉽게 반복할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예: 객체가 vara = {a:'apple', b:'ball', c:'cat', d:'prefix', e:'prefix'}이면;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Object.keys(a).forEach(key =&amp;gt; {
   console.log(key) // returns the keys in an object
   console.log(a[key])  // returns the appropriate value 
})
&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;&quot;Object.keys(obj)&quot; 이외에는 매우 간단한 &quot;for...in&quot; 루프가 있습니다. 이 루프는 개체의 열거 가능한 속성 이름 위에 루프합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;const obj = {&quot;fName&quot;:&quot;John&quot;,&quot;lName&quot;:&quot;Doe&quot;};

for (const key in obj) {
    //This will give key
      console.log(key);
    //This will give value
    console.log(obj[key]);
    
}&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위치별로 개체 속성에 직접 액세스하는 경우...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 [0] 속성에 사용 가능...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 더 먼 곳에 대한 정보를 담고 있습니다&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 처음 로드된 외부 모듈 등에 대해 node.js 'sys.cache[0]'에 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Object.keys( myObject )[ 0 ]
Object.keys( myObject )[ 1 ]
...
Object.keys( myObject )[ n ]
&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;기본 언어에 따라 개체 또는 &quot;array key&quot; 또는 &quot;array index&quot;의 속성을 가져오려면...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Object.keys() 메서드를 사용합니다.&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;중요한 점은 이 기능이 &quot;현대 브라우저&quot;와만 호환된다는 점입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 만약 당신의 물건이 불려진다면, 나의 물건은...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var c = 0;
for(c in myObject) {
    console.log(Object.keys(myObject[c]));
}
&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;왈라! 이것은 최신 파이어폭스와 i11 그리고 크롬에서 확실히 작동할 것입니다...&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys&quot; rel=&quot;nofollow&quot; papago-id=&quot;25-1&quot;&gt;MDN &lt;/a&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys 에 있는 문서입니다.&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;IN ES5&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예: 다음과 같은 개체가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var ELEMENTS = {
    STEP_ELEMENT: { ID: &quot;0&quot;, imageName: &quot;el_0.png&quot; },
    GREEN_ELEMENT: { ID: &quot;1&quot;, imageName: &quot;el_1.png&quot; },
    BLUE_ELEMENT: { ID: &quot;2&quot;, imageName: &quot;el_2.png&quot; },
    ORANGE_ELEMENT: { ID: &quot;3&quot;, imageName: &quot;el_3.png&quot; },
    PURPLE_ELEMENT: { ID: &quot;4&quot;, imageName: &quot;el_4.png&quot; },
    YELLOW_ELEMENT: { ID: &quot;5&quot;, imageName: &quot;el_5.png&quot; }
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 '0'을 매개 변수로 전달하면 'STEP_ELENTLENT'가 되고, '2'가 'BLUE_ELENTLENT'가 되는 함수를 가지려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function(elementId) {
    var element = null;

    Object.keys(ELEMENTS).forEach(function(key) {
        if(ELEMENTS[key].ID === elementId.toString()){
            element = key;
            return;
        }    
    });

    return element;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 아마도 문제에 대한 최선의 해결책은 아닐 것이지만 어떻게 해야 하는지에 대한 아이디어를 제공하는 것은 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;건배.&lt;/font&gt;&lt;/p&gt;&lt;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;2018년 현재, 당신은 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Object.getOwnPropertyNames()&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;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames&quot; papago-id=&quot;32-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;개발자&lt;/a&gt; Mozilla &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames&quot; papago-id=&quot;32-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;설명서에 설명&lt;/a&gt;된 대로&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const object1 = {
  a: 1,
  b: 2,
  c: 3
};

console.log(Object.getOwnPropertyNames(object1));
// expected output: Array [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용사를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Object.keys()&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;Object&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름별로 속성을 검색하는 데 도움이 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const Products = function(){
    this.Product = &quot;Product A&quot;;
    this.Price = 9.99;
    this.Quantity = 112;
};

// Simple find function case insensitive
let findPropByName = function(data, propertyName){
 let props = [];
 Object.keys(data).forEach(element =&amp;gt; {
    return props.push(element.toLowerCase());
  });
  console.log(props);
  let i = props.indexOf(propertyName.toLowerCase());

  if(i &amp;gt; -1){
    return props[i];
  }
  return false;
};

// calling the function
let products = new Products();
console.log(findPropByName(products, 'quantity'));
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 올린 for/in 루프를 수행할 때 i가 속성 이름입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성 이름 i를 가지고 있고 myObject[i]를 수행하여 값에 액세스할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 솔루션도 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Solution One
function removeProperty(obj, prop) {
  var bool;
  var keys = Object.keys(obj);
  for (var i = 0; i &amp;lt; keys.length; i++) {
    if (keys[i] === prop) {
      delete obj[prop];
      bool = true;
    } 
  }
  return Boolean(bool);
}


//Solution two
function removeProperty(obj, prop) {
  var bool;
  if (obj.hasOwnProperty(prop)) {
      bool = true;
      delete obj[prop];
  }
  return Boolean(bool);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;빠르고 더럽습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function getObjName(obj) {
  return (wrap={obj}) &amp;amp;&amp;amp; eval('for(p in obj){p}') &amp;amp;&amp;amp; (wrap=null);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/4260308/&lt;a href=&quot;https://stackoverflow.com/questions/4260308/getting-the-objects-property-name&quot; target=&quot;_blank&quot; papago-id=&quot;39-1&quot;&gt;getting-the-objects-property-name&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/643</guid>
      <comments>https://yoursource.tistory.com/643#entry643comment</comments>
      <pubDate>Wed, 26 Jul 2023 22:46:01 +0900</pubDate>
    </item>
    <item>
      <title>php를 사용하여 두 날짜 사이에 임의의 날짜를 생성하는 방법은 무엇입니까?</title>
      <link>https://yoursource.tistory.com/642</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;php를 사용하여 두 날짜 사이에 임의의 날짜를 생성하는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 개의 고정 타임스탬프 사이에 임의의 날짜를 할당해야 하는 응용 프로그램을 코딩하는 중입니다.&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;내가 먼저 검색한 php를 사용하여 이것을 달성할 수 있는 방법은 php가 아니라 자바에 대한 답만 찾았습니다.&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;$string = randomdate(1262055681,1262055681);
&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;PHP에는 &lt;a href=&quot;http://ca.php.net/rand&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;란드()&lt;/a&gt; 함수가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$int= rand(1262055681,1262055681);
&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;a href=&quot;http://ca.php.net/mt_rand&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;mt_rand()&lt;/a&gt;를 가지며, 이는 일반적으로 결과에서 더 나은 무작위성을 갖는 것으로 알려져 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$int= mt_rand(1262055681,1262055681);
&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;타임스탬프를 문자열로 만들려면 date&lt;a href=&quot;http://php.net/date&quot; papago-id=&quot;6-1&quot; rel=&quot;noreferrer&quot;&gt;()&lt;/a&gt;를 &lt;a href=&quot;http://php.net/date&quot; papago-id=&quot;6-1&quot; rel=&quot;noreferrer&quot;&gt;사용&lt;/a&gt;합니다. 즉, 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$string = date(&quot;Y-m-d H:i:s&quot;,$int);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지정된 날짜가 날짜 시간 형식인 경우 이 방법을 사용하는 가장 쉬운 방법은 두 숫자를 타임스탬프로 변환한 다음 임의의 숫자 생성기에 대한 최소 및 최대 경계로 설정하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 PHP 예는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Find a randomDate between $start_date and $end_date
function randomDate($start_date, $end_date)
{
    // Convert to timetamps
    $min = strtotime($start_date);
    $max = strtotime($end_date);

    // Generate random number using above bounds
    $val = rand($min, $max);

    // Convert back to desired date format
    return date('Y-m-d H:i:s', $val);
}
&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;이 함수는 zombat에서 제안한 &lt;a href=&quot;http://php.net/manual/en/function.strtotime.php&quot; papago-id=&quot;9-1&quot;&gt;strtotime()&lt;/a&gt;을 사용하여 날짜 시간 설명을 Unix 타임스탬프로 변환하고 date()를 사용하여 생성된 임의의 타임스탬프로 유효한 날짜를 만듭니다.&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;PHP를 사용하는 다른 솔루션&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;$start&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;$end&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개체이며 타임스탬프로 변환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 방법을 사용하여 임의의 타임스탬프를 가져옵니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 우리는 객체를 다시 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function randomDateInRange(DateTime $start, DateTime $end) {
    $randomTimestamp = mt_rand($start-&amp;gt;getTimestamp(), $end-&amp;gt;getTimestamp());
    $randomDate = new DateTime();
    $randomDate-&amp;gt;setTimestamp($randomTimestamp);
    return $randomDate;
}
&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;날짜 사이에 0에서 일 사이의 임의 숫자를 가져옵니다.&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;예를 들어, 날짜를 가져오는 경우 현재 날짜와 30일 사이의 임의 숫자입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;echo date('Y-m-d', strtotime( '+'.mt_rand(0,30).' days'));
&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;$datestart = strtotime('2009-12-10');//you can change it to your timestamp;
$dateend = strtotime('2009-12-31');//you can change it to your timestamp;

$daystep = 86400;

$datebetween = abs(($dateend - $datestart) / $daystep);

$randomday = rand(0, $datebetween);

echo &quot;\$randomday: $randomday\n&quot;;

echo date(&quot;Y-m-d&quot;, $datestart + ($randomday * $daystep)) . &quot;\n&quot;;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 좋은 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$timestamp = rand( strtotime(&quot;Jan 01 2015&quot;), strtotime(&quot;Nov 01 2016&quot;) );
$random_Date = date(&quot;d.m.Y&quot;, $timestamp );
&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;a href=&quot;http://php.net/manual/en/function.rand.php&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;17-3&quot;&gt;php&lt;/a&gt; 랜드를 &lt;a href=&quot;http://carbon.nesbot.com/docs/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;17-1&quot;&gt;사용함&lt;/a&gt;으로써.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$startDate = Carbon::now();
$endDate   = Carbon::now()-&amp;gt;subDays(7);

$randomDate = Carbon::createFromTimestamp(rand($endDate-&amp;gt;timestamp, $startDate-&amp;gt;timestamp))-&amp;gt;format('Y-m-d');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OR&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$randomDate = Carbon::now()-&amp;gt;subDays(rand(0, 7))-&amp;gt;format('Y-m-d');
&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;date_format을 사용할 수 있는 다른 솔루션:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; /**
 * Method to generate random date between two dates
 * @param $sStartDate
 * @param $sEndDate
 * @param string $sFormat
 * @return bool|string
 */

function randomDate($sStartDate, $sEndDate, $sFormat = 'Y-m-d H:i:s') {
    // Convert the supplied date to timestamp
    $fMin = strtotime($sStartDate);
    $fMax = strtotime($sEndDate);
    // Generate a random number from the start and end dates
    $fVal = mt_rand($fMin, $fMax);
    // Convert back to the specified date format
    return date($sFormat, $fVal);
}
&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;a href=&quot;https://gist.github.com/samcrosoft/6550473&quot; rel=&quot;noreferrer&quot; papago-id=&quot;20-1&quot;&gt;출처:&lt;/a&gt; https://gist.github.com/samcrosoft/6550473&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$date_random = randomDate('2018-07-09 00:00:00','2018-08-27 00:00:00');
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 양&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strtotime&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;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1971년 이전과 2038년 이후에 관심이 있는 사람들을 위해, 여기 현대적이고 유연한 솔루션이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function random_date_in_range( $date1, $date2 ){
    if (!is_a($date1, 'DateTime')) {
        $date1 = new DateTime( (ctype_digit((string)$date1) ? '@' : '') . $date1);
        $date2 = new DateTime( (ctype_digit((string)$date2) ? '@' : '') . $date2);
    }
    $random_u = random_int($date1-&amp;gt;format('U'), $date2-&amp;gt;format('U'));
    $random_date = new DateTime();
    $random_date-&amp;gt;setTimestamp($random_u);
    return $random_date-&amp;gt;format('Y-m-d') .'&amp;lt;br&amp;gt;';
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 가지 방법으로...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// timestamps
echo random_date_in_range(157766400,1489686923);

// any date string
echo random_date_in_range('1492-01-01','2050-01-01');

// English textual parsing
echo random_date_in_range('last Sunday','now');

// DateTime object
$date1 = new DateTime('1000 years ago');
$date2 = new DateTime('now + 10 months');
echo random_date_in_range($date1, $date2);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능은 다음을 필요로 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;date1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&amp;lt;=&lt;/font&gt;&lt;/font&gt;&lt;code&gt;date2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이전에도 같은 상황이 있었고 위의 답변 중 어떤 것도 제 문제를 해결하지 못했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 기능과 함께 제공됨&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function randomDate($startDate, $endDate, $count = 1 ,$dateFormat = 'Y-m-d H:i:s')
{
   //inspired by
    // https://gist.github.com/samcrosoft/6550473

    // Convert the supplied date to timestamp
    $minDateString = strtotime($startDate);
    $maxDateString = strtotime($endDate);

    if ($minDateString &amp;gt; $maxDateString) 
    {
        throw new Exception(&quot;From Date must be lesser than to date&quot;, 1);

    }

    for ($ctrlVarb = 1; $ctrlVarb &amp;lt;= $count; $ctrlVarb++) 
    { 
       $randomDate[] = mt_rand($minDateString, $maxDateString); 
    }
    if (sizeof($randomDate) == 1) 
    {
        $randomDate = date($dateFormat, $randomDate[0]);
        return $randomDate;
    }elseif (sizeof($randomDate) &amp;gt; 1) 
    {
        foreach ($randomDate as $randomDateKey =&amp;gt; $randomDateValue) 
        {
           $randomDatearray[] =  date($dateFormat, $randomDateValue);
        }
        //return $randomDatearray;
        return array_values(array_unique($randomDatearray));
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 테스트 파트(테스트 중 데이터가 변경될 수 있음)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$fromDate = '2012-04-02';
$toDate = '2018-07-02';
&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;print_r(랜덤Date($fromDate,$toDate,1));&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;2016-01-25 11:43:22
&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;print_r(랜덤Date($fromDate,$toDate,1));&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;array:10 [▼
  0 =&amp;gt; &quot;2015-08-24 18:38:26&quot;
  1 =&amp;gt; &quot;2018-01-13 21:12:59&quot;
  2 =&amp;gt; &quot;2018-06-22 00:18:40&quot;
  3 =&amp;gt; &quot;2016-09-14 02:38:04&quot;
  4 =&amp;gt; &quot;2016-03-29 17:51:30&quot;
  5 =&amp;gt; &quot;2018-03-30 07:28:48&quot;
  6 =&amp;gt; &quot;2018-06-13 17:57:47&quot;
  7 =&amp;gt; &quot;2017-09-24 16:00:40&quot;
  8 =&amp;gt; &quot;2016-12-29 17:32:33&quot;
  9 =&amp;gt; &quot;2013-09-05 02:56:14&quot;
]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 몇 번의 테스트 후에 저는 입력이 그렇다면 어떨까 생각했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$fromDate ='2018-07-02 09:20:39';
$toDate = '2018-07-02 10:20:39';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 다음과 같은 많은 날짜를 생성하는 동안 중복이 발생할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;10,000&lt;/code&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;array_unique&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;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 라벨을 사용한다면 그것은 당신을 위한 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;\Carbon\Carbon::now()-&amp;gt;subDays(rand(0, 90))-&amp;gt;format('Y-m-d');
&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;strong papago-id=&quot;40-0&quot;&gt;가장 &lt;/strong&gt;간단한 &lt;strong papago-id=&quot;40-0&quot;&gt;것&lt;/strong&gt;은, 이 &lt;strong papago-id=&quot;40-0&quot;&gt;작은 기능이 나에게 효과&lt;/strong&gt;가 있다는 것입니다. 나는 그것을 도우미 수업에서 썼습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;datetime&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/**
 * Return date between two dates
 *
 * @param String $startDate
 * @param String $endDate
 * @return String
 *
 * @author Kuldeep Dangi &amp;lt;kuldeepamy@gmail.com&amp;gt;
 */
public static function getRandomDateTime($startDate, $endDate)
{
    $randomTime = mt_rand(strtotime($startDate), strtotime($endDate));
    return date(self::DATETIME_FORMAT_MYSQL, $randomTime);

}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;꽤 좋은 질문입니다. 앱을 위한 무작위 샘플 데이터를 생성해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://gist.github.com/phpfiddle/b0816acab8d7ca36767b9ad08102426d&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;43-1&quot;&gt;다음&lt;/a&gt; 함수를 선택적 인수와 함께 사용하여 임의 날짜를 생성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function randomDate($startDate, $endDate, $format = &quot;Y-M-d H:i:s&quot;, $timezone = &quot;gmt&quot;, $mode = &quot;debug&quot;)
{
    return $result;
}
&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;echo 'UTC: ' . randomDate(&quot;1942-01-19&quot;, &quot;2016-06-03&quot;, &quot;Y-M-d H:i:s&quot;, &quot;utc&quot;) . '&amp;lt;br&amp;gt;';
//1942-Jan-19 07:00:00

echo 'GMT: ' . randomDate(&quot;1942-01-19&quot;, &quot;2016-06-03&quot;, &quot;Y/M/d H:i A&quot;, &quot;gmt&quot;) . '&amp;lt;br&amp;gt;'; 
//1942/Jan/19 00:00 AM

echo 'France: ' . randomDate(&quot;1942-01-19&quot;, &quot;2016-06-03&quot;, &quot;Y F&quot;, &quot;Europe/Paris&quot;) . '&amp;lt;br&amp;gt;';
//1942 January

echo 'UTC - 4 offset time only: ' . randomDate(&quot;1942-01-19&quot;, &quot;2016-06-03&quot;, &quot;H:i:s&quot;, -4) . '&amp;lt;br&amp;gt;';
//20:00:00

echo 'GMT +2 offset: ' . randomDate(&quot;1942-01-19&quot;, &quot;2016-06-03&quot;, &quot;Y-M-d H:i:s&quot;, 2) . '&amp;lt;br&amp;gt;';
//1942-Jan-19 02:00:00

echo 'No Options: ' . randomDate(&quot;1942-01-19&quot;, &quot;2016-06-03&quot;) . '&amp;lt;br&amp;gt;';
//1942-Jan-19 00:00:00
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;판독기 요구 사항은 앱마다 다를 수 있습니다. 일반적으로 이 기능이 응용 프로그램에 대한 임의의 날짜/샘플 데이터를 생성해야 하는 편리한 도구이기를 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;46-0&quot;&gt;이&lt;/strong&gt; 기능은 처음에는 디버그 모드이므로 다음으로 변경하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$mood=&quot;&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;운영 중인 디버그를 제외하고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&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;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;종료일&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;format: 날짜 또는 시간에 대해 허용되는 모든 php 형식&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;52&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;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모드: 디버그, epoch, verbose epoch 또는 verbose epoch&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;debug &lt;strong papago-id=&quot;54-1&quot;&gt;not 모드&lt;/strong&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;PHP 7.x로 테스트됨&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;// Find a randomDate between $startDate and $endDate
function randomDate($startDate, $endDate)
{
    // Convert to timetamps
    $min = strtotime($startDate);
    $max = strtotime($endDate);

    // Generate random number using above bounds
    $val = rand($min, $max);

    // Convert back to date
    return Carbon::createFromTimestamp($val);
}

dd($this-&amp;gt;randomDate('2014-12-10', Carbon::now()-&amp;gt;toString()));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;탄소 사용&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$yeni_tarih = date('Y-m-d', strtotime( '+'.mt_rand(-90,0).' days')).&quot; &quot;.date('H', strtotime( '+'.mt_rand(0,24).' hours')).&quot;:&quot;.rand(1,59).&quot;:&quot;.rand(1,59);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전체 임의 날짜 및 시간&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1972712/&lt;a href=&quot;https://stackoverflow.com/questions/1972712/how-to-generate-random-date-between-two-dates-using-php&quot; target=&quot;_blank&quot; papago-id=&quot;58-1&quot;&gt;how-to-generate-random-date-between-two-dates-using-php&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/642</guid>
      <comments>https://yoursource.tistory.com/642#entry642comment</comments>
      <pubDate>Wed, 26 Jul 2023 22:45:09 +0900</pubDate>
    </item>
    <item>
      <title>다국어 데이터베이스 설계를 위한 모범 사례는 무엇입니까?</title>
      <link>https://yoursource.tistory.com/641</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다국어 데이터베이스 설계를 위한 모범 사례는 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item mr8&quot;&gt; 
     &lt;svg aria-hidden=&quot;true&quot; class=&quot;svg-icon iconLightbulb&quot; width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 18 18&quot;&gt;
      &lt;path d=&quot;M15 6.38A6.48 6.48 0 0 0 7.78.04h-.02A6.49 6.49 0 0 0 2.05 5.6a6.31 6.31 0 0 0 2.39 5.75c.49.39.76.93.76 1.5v.24c0 1.07.89 1.9 1.92 1.9h2.75c1.04 0 1.92-.83 1.92-1.9v-.2c0-.6.26-1.15.7-1.48A6.32 6.32 0 0 0 15 6.37ZM4.03 5.85A4.49 4.49 0 0 1 8 2.02a4.48 4.48 0 0 1 5 4.36 4.3 4.3 0 0 1-1.72 3.44c-.98.74-1.5 1.9-1.5 3.08v.1H7.2v-.14c0-1.23-.6-2.34-1.53-3.07a4.32 4.32 0 0 1-1.64-3.94ZM10 18a1 1 0 0 0 0-2H7a1 1 0 1 0 0 2h3Z&quot;&gt;&lt;/path&gt;
     &lt;/svg&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 상태로는 이 질문은 우리의 Q&amp;amp;A 형식에 적합하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 답변이 사실, 참고 자료 또는 전문 지식에 의해 뒷받침되기를 기대하지만, 이 질문은 토론, 논쟁, 여론 조사 또는 연장된 토론을 요청할 가능성이 높습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 이 질문이 개선될 수 있고 다시 열릴 수 있다고 느낀다면,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;/help/reopen-questions&quot; papago-id=&quot;1-1&quot;&gt;안내&lt;/a&gt;를 위해 헬프 &lt;a href=&quot;/help/reopen-questions&quot; papago-id=&quot;1-1&quot;&gt;센터를 방문&lt;/a&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마감됨&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;2-1&quot; title=&quot;2012-05-22 12:23:37Z&quot; papago-attr-id=&quot;1&quot;&gt;11년 전&lt;/span&gt;에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다국어 데이터베이스를 만드는 가장 좋은 방법은 무엇입니까?&lt;/font&gt;&lt;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;예를 들어 첫 번째 테이블에는 언어 중립 데이터(기본 키 등)만 포함되어 있고 두 번째 테이블에는 언어당 하나의 레코드가 포함되어 있으며 현지화된 데이터와 언어의 ISO 코드가 포함되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경우에 따라 기본 언어 필드를 추가하여 지정된 언어에 대해 사용할 수 있는 현지화된 데이터가 없는 경우 해당 언어로 폴백할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Table &quot;Product&quot;:
----------------
ID                 : int
&amp;lt;any other language-neutral fields&amp;gt;


Table &quot;ProductTranslations&quot;
---------------------------
ID                 : int      (foreign key referencing the Product)
Language           : varchar  (e.g. &quot;en-US&quot;, &quot;de-CH&quot;)
IsDefault          : bit
ProductDescription : nvarchar
&amp;lt;any other localized data&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;hr&gt; 
&lt;p&gt;&lt;em papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트(2014-12-14): 다국어 데이터를 응용 프로그램에 로드하는 데 사용되는 구현에 대한 추가 정보를 보려면 이 &lt;a href=&quot;https://stackoverflow.com/a/27474681/19635&quot; papago-id=&quot;9-1&quot;&gt;답변을 참조&lt;/a&gt;하십시오.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마틴이 올린 답변을 추천합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 질문이 너무 복잡해지는 것을 걱정하는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&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;/blockquote&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 여러분은 이렇게 간단한 질문을 작성하는 대신 다음과 같이 생각할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT price, name, description FROM Products WHERE price &amp;lt; 100
&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;SELECT
  p.price, pt.name, pt.description
FROM
  Products p JOIN ProductTranslations pt
  ON (p.id = pt.id AND pt.lang = &quot;en&quot;)
WHERE
  price &amp;lt; 100
&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;그러나 수동으로 수행하는 대신 특수 현지화 마크업이 포함된 SQL을 미리 구문 분석하여 데이터베이스로 보내야 하는 실제 SQL로 변환하는 고유한 데이터베이스 액세스 클래스를 개발해야 합니다.&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;db.setLocale(&quot;en&quot;);
db.query(&quot;SELECT p.price, _(p.name), _(p.description)
          FROM _(Products p) WHERE price &amp;lt; 100&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 저는 당신이 그것을 훨씬 더 잘 할 수 있다고 확신합니다.&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;pre papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제품 상세 국가&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;=========   ==================   =========&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ProductId productDetailId CountryId&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;etc - ProductId 국가 이름&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;국가 ID 언어&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제품명 - 등 -&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제품 설명.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기타 -&lt;/font&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ProductDetail 테이블에는 모든 변환(제품 이름, 설명 등)이 저장됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 지원할 언어로 표시합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱의 요구 사항에 따라 국가 표를 세분화하여 지역 언어도 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 접근법을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;24&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;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제품 ID 주문 ID,...&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;26&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;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제품 ID 제목 이름 언어 ID&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;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;ID 이름 문화,...&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마틴의 솔루션은 저와 매우 유사하지만, 원하는 번역을 찾을 수 없을 때 기본 설명을 어떻게 처리하시겠습니까?&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;각 필드에 IFNULL()과 다른 SELECT 문이 필요합니까?&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;기본 변환은 동일한 테이블에 저장되며, 여기서 &quot;isDefault&quot;와 같은 플래그는 현재 언어에 대한 설명이 없는 경우 해당 설명이 기본 설명인지 여부를 사용하는지 여부를 나타냅니다.&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/929410/&lt;a href=&quot;https://stackoverflow.com/questions/929410/what-are-best-practices-for-multi-language-database-design&quot; target=&quot;_blank&quot; papago-id=&quot;33-1&quot;&gt;what-are-best-practices-for-multi-language-database-design&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/641</guid>
      <comments>https://yoursource.tistory.com/641#entry641comment</comments>
      <pubDate>Wed, 26 Jul 2023 22:44:26 +0900</pubDate>
    </item>
    <item>
      <title>표에 날짜 열이 없는 경우 MariaDB에서 최근 30일 레코드 양식 표를 찾는 방법</title>
      <link>https://yoursource.tistory.com/640</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표에 날짜 열이 없는 경우 MariaDB에서 최근 30일 레코드 양식 표를 찾는 방법&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;테이블에 날짜 열이 없고 지난 30일 동안 생성된 레코드를 가져오려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블 속성과 이력을 찾으려 했지만 찾을 수 없었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/74548622/&lt;a href=&quot;https://stackoverflow.com/questions/74548622/how-to-find-last-30-days-records-form-table-in-mariadb-if-dont-have-any-date-co&quot; target=&quot;_blank&quot; papago-id=&quot;3-1&quot;&gt;how-to-find-last-30-days-records-form-table-in-mariadb-if-dont-have-any-date-co&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/640</guid>
      <comments>https://yoursource.tistory.com/640#entry640comment</comments>
      <pubDate>Wed, 26 Jul 2023 22:43:18 +0900</pubDate>
    </item>
    <item>
      <title>node.js와 Python의 결합</title>
      <link>https://yoursource.tistory.com/639</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;node.js와 Python의 결합&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Node.js는 우리의 웹 프로젝트와 완벽하게 일치하지만 Python을 선호하는 계산 작업은 거의 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 그들을 위한 파이썬 코드도 이미 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;속도에 대해 매우 우려하고 있습니다. 비동기식 논블로킹 방식으로 node.js에서 파이썬을 &quot;worker&quot;라고 부르는 가장 우아한 방법은 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 0MQ가 적합한 시나리오처럼 들립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;TCP나 유닉스 소켓을 사용하는 것과 유사한 메시징 프레임워크이지만 훨씬 &lt;a href=&quot;http://zguide.zeromq.org/py:all&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-1&quot;&gt;강력합니다(&lt;/a&gt;http://zguide.zeromq.org/py:all) .&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;제로MQ를 사용하여 꽤 잘 작동하는 RPC 프레임워크를 제공하는 라이브러리가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제로RPC&lt;a href=&quot;http://www.zerorpc.io/&quot; papago-id=&quot;3-1&quot; rel=&quot;noreferrer&quot;&gt;(&lt;/a&gt;http://www.&lt;a href=&quot;http://www.zerorpc.io/&quot; papago-id=&quot;3-1&quot; rel=&quot;noreferrer&quot;&gt;zerorpc&lt;/a&gt;.io/) )라고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;안녕하세요 세상입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python &quot;Hello x&quot; 서버:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import zerorpc

class HelloRPC(object):
    '''pass the method a name, it replies &quot;Hello name!&quot;'''
    def hello(self, name):
        return &quot;Hello, {0}!&quot;.format(name)

def main():
    s = zerorpc.Server(HelloRPC())
    s.bind(&quot;tcp://*:4242&quot;)
    s.run()

if __name__ == &quot;__main__&quot; : main()
&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;node.js 클라이언트:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var zerorpc = require(&quot;zerorpc&quot;);

var client = new zerorpc.Client();
client.connect(&quot;tcp://127.0.0.1:4242&quot;);
//calls the method on the python object
client.invoke(&quot;hello&quot;, &quot;World&quot;, function(error, reply, streaming) {
    if(error){
        console.log(&quot;ERROR: &quot;, error);
    }
    console.log(reply);
});
&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;또는 그 반대의 node.js 서버:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var zerorpc = require(&quot;zerorpc&quot;);

var server = new zerorpc.Server({
    hello: function(name, reply) {
        reply(null, &quot;Hello, &quot; + name, false);
    }
});

server.bind(&quot;tcp://0.0.0.0:4242&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;import zerorpc, sys

c = zerorpc.Client()
c.connect(&quot;tcp://127.0.0.1:4242&quot;)
name = sys.argv[1] if len(sys.argv) &amp;gt; 1 else &quot;dude&quot;
print c.hello(name)
&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;node.js와 Python 서버 간의 통신을 위해 두 프로세스가 동일한 서버에서 실행되는 경우 Unix 소켓을 사용하고 그렇지 않은 경우 TCP/IP 소켓을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마샬링 프로토콜의 경우 JSON 또는 &lt;a href=&quot;https://developers.google.com/protocol-buffers/docs/pythontutorial&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-1&quot;&gt;프로토콜&lt;/a&gt; 버퍼를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스레드된 Python이 병목 현상으로 나타나는 경우 do node.js와 동일한 이벤트 기반 동시성을 &lt;a href=&quot;http://twistedmatrix.com/trac/&quot; papago-id=&quot;8-3&quot; rel=&quot;noreferrer&quot;&gt;제공&lt;/a&gt;하는 Twisted Python을 &lt;a href=&quot;http://twistedmatrix.com/trac/&quot; papago-id=&quot;8-3&quot; rel=&quot;noreferrer&quot;&gt;사용&lt;/a&gt;하는 것을 고려하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모험심이 강하다면 &lt;a href=&quot;http://clojure.org/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;클로저&lt;/a&gt;(&lt;a href=&quot;https://github.com/clojure/clojurescript&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-3&quot;&gt;클로저스크립트&lt;/a&gt;, &lt;a href=&quot;https://github.com/halgari/clojure-py&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-5&quot;&gt;클로저-파이&lt;/a&gt;)를 배우면 Java, JavaScript(node.js 포함), CLR 및 Python에서 기존 코드와 실행되고 상호 운용되는 동일한 언어를 얻을 수 있습니다.&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;Python 작업자를 별도의 프로세스(장기 실행 중인 서버 유형 프로세스 또는 요청 시 생성된 하위 프로세스)에 배치하면 node.js 측에서 Python 작업자와의 통신이 비동기화됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;UNIX/TCP 소켓 및 stdin/out/err 통신은 본질적으로 비동기 노드입니다.&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;a href=&quot;https://github.com/andyet/thoonk.py&quot; papago-id=&quot;11-3&quot; rel=&quot;noreferrer&quot;&gt;think&lt;/a&gt;&lt;a href=&quot;https://github.com/andyet/thoonk.js&quot; papago-id=&quot;11-1&quot; rel=&quot;noreferrer&quot;&gt;.js&lt;/a&gt;를&lt;a href=&quot;https://github.com/andyet/thoonk.py&quot; papago-id=&quot;11-3&quot; rel=&quot;noreferrer&quot;&gt; &lt;/a&gt;thoonk.py 과 함께 &lt;a href=&quot;https://github.com/andyet/thoonk.js&quot; papago-id=&quot;11-1&quot; rel=&quot;noreferrer&quot;&gt;사용&lt;/a&gt;하여 많은 성공을 거두었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Thunk는 Redis(메모리 내 키 값 저장소)를 활용하여 커뮤니케이션을 위한 피드(게시/구독), 대기열 및 작업 패턴을 제공합니다.&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;유닉스 소켓이나 직접 tcp 소켓보다 더 나은 이유는 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;전체적인 성능은 다소 저하될 수 있지만 Thoonk는 소켓을 수동으로 처리하는 것을 단순화하는 매우 간단한 API를 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Thunk는 또한 Python 작업자의 새 인스턴스를 스핀업하여 동일한 redis 서버에 연결하기 때문에 성능을 향상시키기 위해 Python 작업자를 확장할 수 있는 분산 컴퓨팅 모델을 구현하는 것을 매우 단순하게 만듭니다.&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;Apache Respret&lt;a href=&quot;http://thrift.apache.org/&quot; papago-id=&quot;13-1&quot; rel=&quot;noreferrer&quot;&gt; &lt;/a&gt;http://thrift.&lt;a href=&quot;http://thrift.apache.org/&quot; papago-id=&quot;13-1&quot; rel=&quot;noreferrer&quot;&gt;apache&lt;/a&gt;.org/ 도 고려해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 프로그래밍 언어를 연결할 수 있으며, 효율성이 높고 비동기 또는 동기 호출을 지원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://thrift.apache.org/docs/features/&quot; papago-id=&quot;14-1&quot; rel=&quot;noreferrer&quot;&gt;여기&lt;/a&gt;에서 전체 기능 보기&lt;a href=&quot;http://thrift.apache.org/docs/features/&quot; papago-id=&quot;14-1&quot; rel=&quot;noreferrer&quot;&gt; &lt;/a&gt;http://thrift.apache.org/docs/features/&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다중 언어는 향후 계획에 유용할 수 있습니다. 예를 들어 나중에 C++에서 계산 작업의 일부를 수행하려면 Surgeft를 사용하여 혼합에 추가하는 것이 매우 쉽습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 백그라운드 작업을 발송하고 처리된 후 비동기식으로 결과를 얻을 수 있는 훌륭한 방법을 제공하는 &lt;a href=&quot;http://gearman.org/&quot; rel=&quot;nofollow&quot; papago-id=&quot;16-1&quot;&gt;우수&lt;/a&gt;한 기어맨을 사용하여 작업 대기열을 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Digg(다른 많은 제품 중에서도)에서 많이 사용되는 이점은 모든 언어의 근로자가 모든 언어의 고객과 대화할 수 있는 강력하고 확장 가능하며 강력한 방법을 제공한다는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2019년 업데이트&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 달성하기 위한 몇 가지 방법이 있으며, 복잡성이 증가하는 순서대로 나열하면 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파이썬 셸, 당신은 파이썬 콘솔에 스트림을 쓰고 그것은 당신에게 답장을 쓸 것입니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Redis Pub Sub, 노드 js 게시자가 데이터를 푸시하는 동안 Python에서 채널 수신을 할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;노드가 클라이언트 역할을 하고 Python이 서버 역할을 하는 웹 소켓 연결 또는 그 반대의 경우&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Express/Flask/Tornado 등과의 API 연결은 상대방이 쿼리할 수 있도록 노출된 API 끝점과 별도로 작동합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;접근법 1 Python Shell 가장 간단한 접근법&lt;/font&gt;&lt;/strong&gt; &lt;/p&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;source.js 파일&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const ps = require('python-shell')
// very important to add -u option since our python script runs infinitely
var options = {
    pythonPath: '/Users/zup/.local/share/virtualenvs/python_shell_test-TJN5lQez/bin/python',
    pythonOptions: ['-u'], // get print results in real-time
    // make sure you use an absolute path for scriptPath
    scriptPath: &quot;./subscriber/&quot;,
    // args: ['value1', 'value2', 'value3'],
    mode: 'json'
};

const shell = new ps.PythonShell(&quot;destination.py&quot;, options);

function generateArray() {
    const list = []
    for (let i = 0; i &amp;lt; 1000; i++) {
        list.push(Math.random() * 1000)
    }
    return list
}

setInterval(() =&amp;gt; {
    shell.send(generateArray())
}, 1000);

shell.on(&quot;message&quot;, message =&amp;gt; {
    console.log(message);
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;destination.py 파일&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import datetime
import sys
import time
import numpy
import talib
import timeit
import json
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

size = 1000
p = 100
o = numpy.random.random(size)
h = numpy.random.random(size)
l = numpy.random.random(size)
c = numpy.random.random(size)
v = numpy.random.random(size)

def get_indicators(values):
    # Return the RSI of the values sent from node.js
    numpy_values = numpy.array(values, dtype=numpy.double) 
    return talib.func.RSI(numpy_values, 14)

for line in sys.stdin:
    l = json.loads(line)
    print(get_indicators(l))
    # Without this step the output may not be immediately available in node
    sys.stdout.flush()
&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;strong papago-id=&quot;27-0&quot;&gt;참고&lt;/strong&gt;: source.js 파일과 동일한 수준의 subscriber라는 폴더를 만들고 그 안에 destination.py 을 넣습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가상 환경을 변경하는 것을 잊지 마십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2023년 업데이트&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;python을 nodejs와 함께 사용할 수 있는 라이브러리를 만듭니다.&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;Javascript 라이브러리: https://github.com/7HR4IZ3/&lt;a href=&quot;https://github.com/7HR4IZ3/js_bridge&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;30-1&quot;&gt;js_bridge&lt;/a&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;파이썬 라이브러리: https://github.com/7HR4IZ3/&lt;a href=&quot;https://github.com/7HR4IZ3/py_bridge&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;31-1&quot;&gt;py_bridge&lt;/a&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;Javascript에서 예제&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const { python } = require(&quot;js_bridge&quot;);
const py = python();

async function myPythonFunction() {
   let math = await py.import(&quot;math&quot;);
    let result = await math.sqrt(16);
    console.log(result);
}

myPythonFunction();
&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;Python의 예&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from py_bridge import nodejs

node1 = nodejs(port=7000)
node2 = nodejs(port-7001)

node1.setup(name=&quot;my_node&quot;)
node2.setup(name=&quot;nodejs2&quot;) # name parameter is for imports

node1.console.log(&quot;Hello from node1&quot;)
node2.console.log(&quot;Hello from node2&quot;)

fs = node1.require(&quot;fs&quot;) # also supports 'from my_node import fs'
print(fs.readSync(&quot;./mytext.txt&quot;))
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/10775351/&lt;a href=&quot;https://stackoverflow.com/questions/10775351/combining-node-js-and-python&quot; target=&quot;_blank&quot; papago-id=&quot;34-1&quot;&gt;combining-node-js-and-python&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/639</guid>
      <comments>https://yoursource.tistory.com/639#entry639comment</comments>
      <pubDate>Wed, 26 Jul 2023 22:42:45 +0900</pubDate>
    </item>
    <item>
      <title>중요 종속성: require 함수는 종속성을 정적으로 추출할 수 없는 방식으로 사용됩니다.</title>
      <link>https://yoursource.tistory.com/638</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중요 종속성: require 함수는 종속성을 정적으로 추출할 수 없는 방식으로 사용됩니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;ng serve&quot;에서 아래 경고에 직면한 사람이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WARNING in ./node_dll/@dll/src/dll.js 10:24-31 중요 종속성: require 함수는 종속성을 정적으로 추출할 수 없는 방식으로 사용됩니다 ℹ &quot;wdm&quot;: 경고와 함께 컴파일됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각도 버전 지정:&lt;/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;Angular CLI: 6.0.8 노드: 8.11.3 OS: darwin x64 Angular: 6.0.9 ... 애니메이션, 공통, 컴파일러, 컴파일러-cli, 코어, 폼...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;http, language-service, platform-syslog... platform-syslog-dynamic, 라우터, 업그레이드&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;CLI와 Angular를 업데이트하려고 했지만 실패했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;util.js 내부의 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;function (factory) {
    if (typeof module === &quot;object&quot; &amp;amp;&amp;amp; typeof module.exports === &quot;object&quot;) {
        var v = factory(require, exports);
        if (v !== undefined) module.exports = v;
    }
    else if (typeof define === &quot;function&quot; &amp;amp;&amp;amp; define.amd) {
        define(&quot;@angular/compiler/src/util&quot;, [&quot;require&quot;, &quot;exports&quot;], factory);
    }
}&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 오류를 발견했고 이것을 발견했습니다: https://fluin.io/blog/&lt;a href=&quot;https://fluin.io/blog/critical-dependency-cannot-be-statically-extracted&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;0-1&quot;&gt;critical-dependency-cannot-be-statically-extracted&lt;/a&gt;, 에서 저자는 동일한 경고를 받고 있음을 보여줍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 Angular Elements를 사용하지는 않았지만 같은 문제와 관련이 있을 수 있다는 생각이 들어 사용 여부를 확인했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@angular/compiler/src/core&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;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 저는 정말 그렇게 하고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;수정은 수입선을 제거하는 것처럼 간단했습니다. 제 경우는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import { ViewEncapsulation } from '@angular/compiler/src/core';
&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;import { Component, OnInit, ViewEncapsulation } from '@angular/core';
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실수로 가져왔는데 같은 오류가 발생했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;EventEmitter&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;protractor&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;@angular/core&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&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;import { EventEmitter } from 'protractor';&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;import { EventEmitter } from '@angular/core';&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;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;from '@angular/compiler/foo'&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;src 경로에서 가져오는 경우 이 주의가 발생함&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음에서 구성 요소 가져오기 문 변경&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import { ChangeDetectionStrategy, ViewEncapsulation } from '@angular/compiler/src/core';
&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;import {  ViewEncapsulation, ChangeDetectionStrategy} from '@angular/core';


&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;blockquote&gt; 
 &lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;./node_modules/@angular/compiler/src/util.js:10:24-31 - 경고: 중요 종속성: require 함수는 종속성을 정적으로 추출할 수 없는 방식으로 사용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;25-3&quot;&gt;JSON.stringify&lt;/strong&gt; 대신 &lt;strong papago-id=&quot;25-1&quot;&gt;stringify&lt;/strong&gt;를 사용하고 이 자동 가져오기(vs 코드 사용)를 다음과 같이 사용한 것을 기억했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import { stringify } from '@angular/compiler/src/util';
&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;이 자동 가져오기를 제거하고 코드를 JSON.stringify로 수정했습니다.&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;여기에 덧붙이자면, 매우 비슷하지만 Angular에서 몇 가지를 수입하는 것처럼 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 한 일은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import {error} from '@angular/compiler/src/util';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실수로 입력했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;throw error()&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;throw Error()&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 papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타사 라이브러리를 구현하려고 했기 때문에 이 오류(제목에 표시됨)와 여러 가지 오류가 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단히 말해서, 이러한 오류가 발생하면 타사 라이브러리를 살펴 보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우에는 Scanbot.io 의 바코드 스캔 라이브러리였습니다.&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;import { Message } from '@angular/compiler/src/i18n/i18n_ast';
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/51319209/&lt;a href=&quot;https://stackoverflow.com/questions/51319209/critical-dependency-require-function-is-used-in-a-way-in-which-dependencies-can&quot; target=&quot;_blank&quot; papago-id=&quot;35-1&quot;&gt;critical-dependency-require-function-is-used-in-a-way-in-which-dependencies-can&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/638</guid>
      <comments>https://yoursource.tistory.com/638#entry638comment</comments>
      <pubDate>Wed, 26 Jul 2023 22:42:05 +0900</pubDate>
    </item>
    <item>
      <title>jQuery에서 입력[type=text]의 값 변경 감지</title>
      <link>https://yoursource.tistory.com/637</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery에서 입력[type=text]의 값 변경 감지&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;em papago-id=&quot;0-1&quot;&gt;거의&lt;/em&gt; 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$('input').keyup(function)&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;$input.change(function)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력이 흐릴 때만 트리거되는데, 텍스트 상자의 값이 변경될 때마다 어떻게 즉시 알 수 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;h1 papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트 - 2021&lt;/font&gt;&lt;/h1&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;2021년 기준으로 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;input&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 값 변경 사항을 충족하는 모든 이벤트에 대한 이벤트.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#myTextBox&quot;).on(&quot;input&quot;, function() {
   alert($(this).val()); 
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원답&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'on'은 'on' 기능보다 권장되므로 항상 다음과 같은 이벤트 수신기를 사용하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#myTextBox&quot;).on(&quot;change paste keyup&quot;, function() {
   alert($(this).val()); 
});
&lt;/code&gt;&lt;/pre&gt;&lt;h3 papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;묘사&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery를 사용하여 이 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.bind()&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;a href=&quot;http://jsfiddle.net/fXnFF/2/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-1&quot;&gt;jsFiddle&lt;/a&gt;을 확인하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;샘플&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input id=&quot;myTextBox&quot; type=&quot;text&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#myTextBox&quot;).bind(&quot;change paste keyup&quot;, function() {
   alert($(this).val()); 
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가 정보&lt;/font&gt;&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://jsfiddle.net/fXnFF/2/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jsFiddle 시연&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://api.jquery.com/bind/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery.bind()&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 시도해보세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://&lt;a href=&quot;https://stackoverflow.com/users/1169519/teemu&quot; papago-id=&quot;18-1&quot;&gt;stackoverflow&lt;/a&gt;.com/users/1169519/teemu 에 대한 크레딧&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;여기 제 질문에 답해주셔서 감사합니다: https://stackoverflow.com/questions/24651811/&lt;del papago-id=&quot;19-1&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/24651811/jquery-keyup-doesnt-work-with-keycode-filtering?noredirect=1#comment38213480_24651811&quot; papago-id=&quot;19-1-0&quot;&gt;jquery-keyup-doesnt-work-with-keycode-filtering&lt;/a&gt;&lt;/del&gt;?noredirect=1#comment38213480_24651811&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 솔루션은 제가 프로젝트를 진행하는 데 도움이 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#your_textbox&quot;).on(&quot;input propertychange&quot;,function(){

   // Do your thing here.
});
&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;참고: IE의 하위 버전에 대한 속성 변경.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 상자 이벤트도 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input id=&quot;txt1&quot; type=&quot;text&quot; onchange=&quot;SetDefault($(this).val());&quot; onkeyup=&quot;this.onchange();&quot; onpaste=&quot;this.onchange();&quot; oninput=&quot;this.onchange();&quot;&amp;gt;

function SetDefault(Text){
  alert(Text);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/fXnFF/291/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용해 보십시오.&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;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;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input id = &quot;textbox&quot; type = &quot;text&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#textbox&quot;).keyup(function() { 
    alert($(this).val());  
}); 

$(&quot;#textbox&quot;).change(function() { 
alert($(this).val());  
}); 
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;$(&quot;#myTextBox&quot;).on(&quot;change paste keyup select&quot;, function() {
     alert($(this).val());
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저 제안을 위해 선택&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&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;cut&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;select&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;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;받아들여진 대답은 거의 완벽하지만, 그것은 그것을 잊어버립니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;cut&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;select&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&gt;&lt;code&gt;cut&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 텍스트를 자를 때 발생합니다(CTRL + X 또는 마우스 오른쪽 버튼 클릭).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;select&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 브라우저 선택 옵션을 선택할 때 실행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#myTextBox&quot;).on(&quot;change paste keyup cut select&quot;, function() {
   //Do your function 
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;input&quot;).bind({
            paste : function(){
                $('#eventresult').text('paste behaviour detected!');
            }
})
&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;사용 방법: https://github.com/gilamran/&lt;a href=&quot;https://github.com/gilamran/JQuery-Plugin-AnyChange&quot; rel=&quot;nofollow&quot; papago-id=&quot;39-1&quot;&gt;JQuery-Plugin-AnyChange&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내용 메뉴(마우스 사용)를 포함하여 입력을 변경하는 모든 방법을 처리합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 이벤트 조합은 저에게 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#myTextBox&quot;).on(&quot;input paste&quot;, function() {
   alert($(this).val()); 
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드를 사용하여 입력, 키 변경 및 키 누르기를 감지할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#myTextBox&quot;).on(&quot;input&quot;, &quot;keyup&quot;, &quot;keydown&quot;, &quot;keypress&quot; function() {
  alert($(this).val()); 
});
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/8747439/&lt;a href=&quot;https://stackoverflow.com/questions/8747439/detecting-value-change-of-inputtype-text-in-jquery&quot; target=&quot;_blank&quot; papago-id=&quot;43-1&quot;&gt;detecting-value-change-of-inputtype-text-in-jquery&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/637</guid>
      <comments>https://yoursource.tistory.com/637#entry637comment</comments>
      <pubDate>Wed, 26 Jul 2023 22:40:49 +0900</pubDate>
    </item>
    <item>
      <title>jQuery에서 지정된 클래스 없이 모든 요소를 선택하려면 어떻게 해야 합니까?</title>
      <link>https://yoursource.tistory.com/636</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery에서 지정된 클래스 없이 모든 요소를 선택하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 고려할 때:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ul id=&quot;list&quot;&amp;gt;
    &amp;lt;li&amp;gt;Item 1&amp;lt;/li&amp;gt;
    &amp;lt;li class=&quot;active&quot;&amp;gt;Item 2&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;Item 3&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;Item 4&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;Item 5&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;항목 2를 제외한 모든 항목을 어떻게 선택할 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;ul#list li!active&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;pre&gt;&lt;code&gt;$(&quot;ul#list li&quot;).not(&quot;.active&quot;) // not method
$(&quot;ul#list li:not(.active)&quot;)   // not selector
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(&quot;ul#list li:not(.active)&quot;)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://api.jquery.com/not-selector/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://api.jquery.com/not-selector/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스 없이 모든 요소를 선택하는 데 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('ul#list li:not([class])')
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery API 설명서(&lt;a href=&quot;http://api.jquery.com/not-selector/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;9-1&quot;&gt;not()&lt;/a&gt; selector 및 &lt;a href=&quot;http://api.jquery.com/attribute-not-equal-selector/&quot; papago-id=&quot;9-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;equal&lt;/a&gt; selector &lt;a href=&quot;http://api.jquery.com/attribute-not-equal-selector/&quot; papago-id=&quot;9-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;아님&lt;/a&gt;)를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;if (!$(row).hasClass(&quot;changed&quot;)) {
    // do your stuff
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2448051/&lt;a href=&quot;https://stackoverflow.com/questions/2448051/how-can-i-select-all-elements-without-a-given-class-in-jquery&quot; target=&quot;_blank&quot; papago-id=&quot;10-1&quot;&gt;how-can-i-select-all-elements-without-a-given-class-in-jquery&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/636</guid>
      <comments>https://yoursource.tistory.com/636#entry636comment</comments>
      <pubDate>Wed, 26 Jul 2023 22:40:11 +0900</pubDate>
    </item>
    <item>
      <title>Excel이 내 CSV의 URL을 하이퍼링크로 해석할 수 있습니까?</title>
      <link>https://yoursource.tistory.com/635</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Excel이 내 CSV의 URL을 하이퍼링크로 해석할 수 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Excel이 내 CSV의 URL을 하이퍼링크로 해석할 수 있습니까?&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;이렇게 하면 Excel에서 클릭 가능한 링크를 표시할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSV 파일에서 다음 형식을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=HYPERLINK(&quot;URL&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;따라서 CSV는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;1,23.4,=HYPERLINK(&quot;http://www.google.com&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 쉼표가 포함된 링크가 제대로 작동하도록 노력하고 있는데, 이 링크에서 탈출할 방법이 없는 것 같습니다. 그래도 Excel에서 링크를 클릭할 수 있도록 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법 아는 사람?&lt;/font&gt;&lt;/p&gt;&lt;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;아래는 오류와 실패한 메서드에 대한 문서를 보기 위한 링크를 나열하여 만든 CSV 파일의 예입니다. (약간 난해하지만 제가 작업하고 있는 것입니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;Details&quot;,&quot;Failing Method (click to view)&quot;
&quot;Method failed&quot;,&quot;=HYPERLINK(&quot;&quot;http://some_url_with_documentation&quot;&quot;,&quot;&quot;Method_name&quot;&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;저는 이 답변들과 다른 답변들을 모두 읽었지만, 여전히 Excel 2014에서 이 문제를 해결하는 데 시간이 좀 걸렸습니다.&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;CSV의 결과는 다음과 같아야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;=HYPERLINK(&quot;&quot;http://www.Google.com&quot;&quot;,&quot;&quot;Google&quot;&quot;)&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: MSSQL 서버에서 설정하려는 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;'&quot;=HYPERLINK(&quot;&quot;http://www.' + baseurl + '.com&quot;&quot;,&quot;&quot;' + baseurl + '&quot;&quot;)&quot;' AS url
&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;URL URL URL 내부에서 쉼표를 인코딩하여 URL이 여러 셀로 분할되지 않도록 할 수 있습니다.&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;쉼표를 %2c로 바꾸기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.xyz.com/file,comma.pdf&quot; papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.xyz.com/file,comma.pdf&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;된다&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;= (http://www.xyz.com/file%2ccomma.pdf &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;font class=&quot;papago-parent&quot;&gt;CSV 파일은 텍스트 파일일 뿐입니다. CSV 파일을 열고 읽어도 링크를 클릭할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&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;Excel이 CSV 파일을 처리하는 방식에 대해서는 쉼표 사이의 모든 내용이 이미 셀에 입력된 것처럼 해석됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 CSV 파일은 다음을 포함합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;=&quot;http://google.com&quot;,=A1&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;http://google.com,http://google.com&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;그러나 Excel의 하이퍼링크는 메타데이터이며 실제 셀(즉, Google에 대한 하이퍼링크된 셀)의 결과가 아닙니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;http://google.com&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;&amp;lt;a&amp;gt;http://google.com&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 그런 종류의 모든 것.)&lt;/font&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;그렇기 때문에 CSV로 변환할 때 모든 메타데이터가 손실되기 때문에 셀 값을 변경하는 것만으로는 하이퍼링크를 원하는 것을 Excel에 전달할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;보통 Excel은 'Enter'를 누르면 입력 내용을 해석하고 URL을 연결하지만 CSV 데이터가 입력되지 않고 이미 존재하기 때문에 이러한 현상이 발생하지 않습니다.&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;모든 셀을 구문 분석하고 URL 형식과 일치하는 경우 하이퍼링크를 연결하는 CSV를 열 때 실행할 추가 기능이나 매크로를 작성하는 것이 가장 좋습니다.&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;=HYPERLINK(&quot;&quot;&amp;lt;URL&amp;gt;&quot;&quot;;&quot;&quot;&amp;lt;LABEL&amp;gt;&quot;&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=HYPERLINK(&quot;&quot;http://stackoverflow.com&quot;&quot;;&quot;&quot;I love stackoverflow!&quot;&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추신: LibreOffice Calc에서도 동일한 형식이 작동합니다.&lt;/font&gt;&lt;/em&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;&quot;=MSV(\&quot;\&quot; &quot; + &quot;http://www.&lt;a href=&quot;http://www.mywebsite.com&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;26-1&quot;&gt;mywebsite&lt;/a&gt;.com &quot; + &quot;\&quot;\&quot;&quot;)&quot;는 CSV에 쓰기 전에 이 형식을 사용합니다.&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;&quot;=HYPERLINK(&quot;&quot;http://www.google.com&quot;&quot;, &quot;&quot;Google&quot;&quot;)&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 제게 효과가 있었던 겁니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 Excel 버전 2204 Click to Run에서는 선행 공백을 가질 수 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어,&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;FirstName, &quot;=HYPERLINK(&quot;&quot;http://www.google.com&quot;&quot;, &quot;&quot;Google&quot;&quot;)&quot;&lt;/code&gt; &lt;strong papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실패함&lt;/font&gt;&lt;/strong&gt; &lt;code&gt;FirstName,&quot;=HYPERLINK(&quot;&quot;http://www.google.com&quot;&quot;, &quot;&quot;Google&quot;&quot;)&quot;&lt;/code&gt; &lt;strong papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성공.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 제게 문제가 된 것은 A 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSV는 기본적으로 쉼표로 구분되며 텍스트 파일의 모든 쉼표는 구분자로 해석됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;탭 문자를 구분 기호로 사용하여 a로 저장하는 방식으로 작동했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;EXCEL에서 열었을 때 ','가 아닌 TAB 문자를 선택할 수 있도록 TXT 파일.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 파일에서 …&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&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;파일이 TAB로 구분된 항목 1 A 파일 이름 데이터인지 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;txt&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 2  2 =www..com  &quot;는 2 Col 2 = PXE(&quot;http:\www.ilexuk.com &quot;, ILEX&quot;)를 나타냅니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 &quot;ILEX&quot;가 셀에 표시되고 &quot;http:\www.ilexuk.com &quot;이 셀의 하이퍼링크입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/6563091/&lt;a href=&quot;https://stackoverflow.com/questions/6563091/can-excel-interpret-the-urls-in-my-csv-as-hyperlinks&quot; target=&quot;_blank&quot; papago-id=&quot;38-1&quot;&gt;can-excel-interpret-the-urls-in-my-csv-as-hyperlinks&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/635</guid>
      <comments>https://yoursource.tistory.com/635#entry635comment</comments>
      <pubDate>Sun, 7 May 2023 21:19:48 +0900</pubDate>
    </item>
    <item>
      <title>포스트 데이터로 리디렉션하는 방법(장고)</title>
      <link>https://yoursource.tistory.com/634</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;Django views.py 파일에서 POST 요청을 처리할 때 때때로 다른 URL로 리디렉션해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 리디렉션하는 이 URL은 동일한 Django views.py 파일의 다른 함수에서 처리됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업을 수행하고 원래 POST 데이터를 유지할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트: 이 작업을 수행해야 하는 이유에 대한 자세한 설명&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 사용자가 텍스트 필드에 입력한 데이터를 받아들이는 두 개의 웹 앱(A 앱과 B 앱이라고 부릅시다)을 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 제출을 클릭하면 데이터가 처리되고 세부 결과가 표시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;A 앱과 B 앱은 서로 다른 유형의 데이터를 기대합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;때때로 사용자가 실수로 A 앱에 B 앱 유형 데이터를 게시합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우, 저는 그들을 B 앱으로 리디렉션하여 B 앱 결과를 보여주거나 적어도 그들이 A 앱에 입력한 데이터로 채우고 싶습니다.&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;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고객은 하나로 결합하는 것이 아니라 두 개의 별도 앱을 원합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드는 고객의 것이기 때문에 보여줄 수 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트 2: 저는 KISS가 여기서 최고의 원칙이라고 결정했습니다.&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;설명된 것처럼 두 개의 앱을 유지한다면 세션이 이를 위한 방법이 될 것이라고 생각합니다. Matthew J Morrison이 제안해 주셔서 감사합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Dzida 덕분에 디자인과 단순화에 대해 생각하게 되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 문제에 직면한 경우 설계를 수정해야 할 가능성이 약간 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 POST 데이터가 리디렉션과 함께 사용할 수 없는 HTTP 제한 사항입니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 무엇을 성취하려고 하는지 설명해 주시겠습니까? 그러면 우리는 어떤 깔끔한 해결책에 대해 생각해 볼 수 있을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매튜가 제안한 대로 세션을 사용하지 않으려면 GET의 POST 매개 변수를 새 페이지로 전달할 수 있습니다(예: 보안 및 쿼리 문자열의 GET 매개 변수 최대 길이).&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;당신이 2개의 웹 앱을 가지고 있고 그 앱들이 하나의 views.py 을 사용한다는 것이 제게는 이상하게 들립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든 GET의 POST에서 적절한 보기로 데이터를 전달하는 것이 좋습니다(물론 데이터가 중요하지 않은 경우).&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 상황을 어떻게 처리해야 할지는 세션에서 게시물 데이터를 저장한 다음 더 이상 필요하지 않을 때 제거하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래야 리다이렉트 후 원래 게시물 데이터에 액세스할 수 있습니다. 해당 게시물이 사라졌더라도 말입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 당신이 하려는 일에 효과가 있을까요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 제가 제안하는 코드 샘플입니다. (이 코드는 테스트되지 않은 코드입니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def some_view(request):
    #do some stuff
    request.session['_old_post'] = request.POST
    return HttpResponseRedirect('next_view')

def next_view(request):
    old_post = request.session.get('_old_post')
    #do some stuff using old_post
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 가지 더 명심해야 할 것이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 이것을 하고 있고 또한 파일을 업로드하고 있다면, 나는 이런 식으로 하지 않을 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/307&quot; papago-id=&quot;16-1&quot; rel=&quot;noreferrer&quot;&gt;HTTP&lt;/a&gt; 1&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/307&quot; papago-id=&quot;16-1&quot; rel=&quot;noreferrer&quot;&gt;.1 임시&lt;/a&gt; 리디렉션(307)을 사용해야 합니다.&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;안타깝게도 장고와 (영구)는 301 또는 302만 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;직접 구현해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from django.http import HttpResponse, iri_to_uri
class HttpResponseTemporaryRedirect(HttpResponse):
    status_code = 307

    def __init__(self, redirect_to):
        HttpResponse.__init__(self)
        self['Location'] = iri_to_uri(redirect_to)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://code.djangoproject.com/browser/django/trunk/django/http/__init__.py&quot; papago-id=&quot;18-1&quot; rel=&quot;noreferrer&quot;&gt;장고도 &lt;/a&gt;참조하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://code.djangoproject.com/browser/django/trunk/django/http/__init__.py&quot; papago-id=&quot;18-1&quot; rel=&quot;noreferrer&quot;&gt;http&lt;/a&gt; 모듈.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;19&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;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최신 Django 버전에서 가져오기를 다음으로 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from django.utils.encoding import iri_to_uri
&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;requests&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 class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;pip install requests
&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;그런 다음 어떤 방법으로든 URL을 호출하고 데이터를 전송할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보기에서 가져오기 요청&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import requests
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터를 게시하려면 형식을 따릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;r = requests.post('http://yourdomain/path/', data = {'key':'value'})
&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;django 뷰에서 절대 URL을 가져오려면 사용&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;request.build_absolute_uri(reverse('view_name'))&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;따라서 장고 보기 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;r = requests.post(
            request.build_absolute_uri(reverse('view_name')), 
            data = {'key':'value'}
    )
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;r&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 응답 개체입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;status_code&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;content&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기여하다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;r.status_code&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;됨)와 상태 코드를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;r.content&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응답 본문을 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;json 방법이 있습니다(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;r.json()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://docs.python-requests.org/en/master/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요청한다&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://docs.python-requests.org/en/master/user/quickstart/#make-a-request&quot; rel=&quot;noreferrer&quot; 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;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 요청 개체를 사용하여 이전 보기에서 새 보기를 호출하기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 리디렉션이 발생하지는 않겠지만, 한 뷰에서 다른 뷰로 데이터를 '전송'하는 데만 신경을 쓴다면 제대로 작동해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 다음 스니펫을 테스트했고 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from django.views.generic import View

class MyOldView(View):
    def post(self, request):
        return MyNewView().post(request)

class MyNewView(View):
    def post(self, request):
        my_data = request.body
        print &quot;look Ma; my data made it over here:&quot;, my_data
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;렌더와 &lt;strong papago-id=&quot;39-3&quot;&gt;컨텍스트&lt;/strong&gt;를 함께 &lt;strong papago-id=&quot;39-1&quot;&gt;사용&lt;/strong&gt;할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Render(request,&quot;your template path&quot;,        {'vad name' : var value}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿에서 변수를 받을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{% If var name %}
 {{ var name }}
{% endif %}
&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;기본적으로 저는 양식 A를 가지고 있었는데, 제출하면 다른 양식 B가 나타나는데, 여기에는 일부 결과 + 양식이 포함되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;B를 제출할 때, 나는 사용자에게 몇 가지 경고를 표시하고 사용자를 B로만 유지하고 싶었습니다.&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;를 제가해방결다같표것입는다니하시이과음과를법결한은▁a▁ining로 표시하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;output&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필드, B.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;output name=&quot;xyz&quot; value=&quot;xyz&quot;&amp;gt;{{xyz}}&amp;lt;/output&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 저는 A-&amp;gt;B와 B-&amp;gt;B에 대해서도 같은 견해를 사용했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 저는 요청이 A에서 온 것인지 B에서 온 것인지 구별하고 그에 따라 렌더링해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def view1(request):
    if &quot;xyz&quot; in request.POST:
        # request from B
        # do some processing
        return render(request, 'page.html', {&quot;xyz&quot;:request.POST[&quot;xyz&quot;]})
    else:
        # request from A
        res = foo() # some random function
        return render(request, 'page.html', {&quot;xyz&quot;:res})
&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;그러나 이것은 양식 B가 작고 역동적이지 않은 경우에만 작동합니다.&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;POST를 처리한 후 리디렉션을 사용하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AppB&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;AppB&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;AppA&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;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def is_appa_request(request):
    ## do some magic.
    return False or True
is_appb_request = is_appa_request

def AppA(request):
    if is_appb_request(request):
       return AppB(request)
    ## Process AppA.
    return HttpResponseRedirect('/appa/thank_you/')

def AppB(request):
    if is_appa_request(request):
       return AppA(request)
    ## Process AppB.
    return HttpResponseRedirect('/appb/thank_you/')
&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;이는 최종 사용자에게 투명한 환경을 제공해야 하며, 귀사를 고용한 고객은 그 차이를 전혀 알지 못할 가능성이 높습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;POST 후 리다이렉트를 하지 않으면 사용자가 페이지를 새로 고치기 때문에 중복 데이터가 걱정되지 않습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요청을&lt;strong papago-id=&quot;54-3&quot;&gt; 사용&lt;/strong&gt;하여 &lt;strong papago-id=&quot;54-1&quot;&gt;세션&lt;/strong&gt;으로 리디렉션할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;session&lt;strong papago-id=&quot;54-3&quot;&gt;[&quot;키&quot;]&lt;/strong&gt;는 아래와 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;# &quot;views.py&quot;

from django.shortcuts import redirect

def my_view(request): 
            # Here
    request.session[&quot;message&quot;] = &quot;success&quot;
    return redirect(&quot;https://example.com&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;# &quot;index.html&quot;

{{ request.session.message }} {# success #}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3024168/&lt;a href=&quot;https://stackoverflow.com/questions/3024168/how-to-redirect-with-post-data-django&quot; target=&quot;_blank&quot; papago-id=&quot;55-1&quot;&gt;how-to-redirect-with-post-data-django&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/634</guid>
      <comments>https://yoursource.tistory.com/634#entry634comment</comments>
      <pubDate>Sun, 7 May 2023 21:17:54 +0900</pubDate>
    </item>
    <item>
      <title>Xcode UI 테스트의 경우 지연/대기</title>
      <link>https://yoursource.tistory.com/633</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode UI 테스트의 경우 지연/대기&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 Xcode 7 베타 2에서 사용할 수 있는 새로운 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;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가 단계로 진행하기 전에 XCT 테스트 케이스에서 지연 또는 대기 메커니즘을 발생시킬 수 있는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 수 있는 적절한 문서가 없고 수업의 헤더 파일을 검토했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것과 관련된 어떤 것도 찾을 수 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이디어/제안이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 잠만 자도 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sleep(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;UIT 테스트는 다른 프로세스에서 실행되므로 이 작업이 가능합니다.&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;비동기 UI 테스트는 Xcode 7 베타 4에서 도입되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;Hello, World!&quot; 텍스트가 있는 레이블이 나타날 때까지 기다리려면 다음 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let app = XCUIApplication()
app.launch()

let label = app.staticTexts[&quot;Hello, world!&quot;]
let exists = NSPredicate(format: &quot;exists == 1&quot;)

expectationForPredicate(exists, evaluatedWithObject: label, handler: nil)
waitForExpectationsWithTimeout(5, handler: nil)
&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;a href=&quot;http://masilotti.com/ui-testing-xcode-7/&quot; papago-id=&quot;8-1&quot;&gt;UI&lt;/a&gt; 테스트에 &lt;a href=&quot;http://masilotti.com/ui-testing-xcode-7/&quot; papago-id=&quot;8-1&quot;&gt;대한 자세한 내용&lt;/a&gt;은 블로그에서 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS 11 / Xcode 9&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-swift prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;#yourElement#&amp;gt;.waitForExistence(timeout: 5)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 사이트의 모든 사용자 지정 구현을 대체할 수 있는 훌륭한 솔루션입니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 제 대답을 꼭 보세요: https://&lt;a href=&quot;https://stackoverflow.com/a/48937714/971329&quot; papago-id=&quot;11-1&quot;&gt;stackoverflow&lt;/a&gt;.com/a/48937714/971329 .&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에서는 테스트 실행 시간을 크게 단축할 수 있는 요청을 기다리는 것에 대한 대안을 설명합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;12-0&quot;&gt;Xcode&lt;/strong&gt; 9는 &lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2017/409/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12-2&quot;&gt;XCTWaiter&lt;/a&gt;로 새로운 트릭을 도입했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 사례가 명시적으로 대기합니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;wait(for: [documentExpectation], timeout: 10)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;14&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;XCTWaiter(delegate: self).wait(for: [documentExpectation], timeout: 10)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;15&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;let result = XCTWaiter.wait(for: [documentExpectation], timeout: 10)
switch(result) {
case .completed:
    //all expectations were fulfilled before timeout!
case .timedOut:
    //timed out before all of its expectations were fulfilled
case .incorrectOrder:
    //expectations were not fulfilled in the required order
case .invertedFulfillment:
    //an inverted expectation was fulfilled
case .interrupted:
    //waiter was interrupted before completed or timedOut
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&gt;&lt;a href=&quot;http://shashikantjagtap.net/asynchronous-ios-testing-swift-xcwaiter/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;견본 용법&lt;/font&gt;&lt;/a&gt;&lt;/h1&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;Xcode 9 이전&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목표 C&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- (void)waitForElementToAppear:(XCUIElement *)element withTimeout:(NSTimeInterval)timeout
{
    NSUInteger line = __LINE__;
    NSString *file = [NSString stringWithUTF8String:__FILE__];
    NSPredicate *existsPredicate = [NSPredicate predicateWithFormat:@&quot;exists == true&quot;];

    [self expectationForPredicate:existsPredicate evaluatedWithObject:element handler:nil];

    [self waitForExpectationsWithTimeout:timeout handler:^(NSError * _Nullable error) {
        if (error != nil) {
            NSString *message = [NSString stringWithFormat:@&quot;Failed to find %@ after %f seconds&quot;,element,timeout];
            [self recordFailureWithDescription:message inFile:file atLine:line expected:YES];
        }
    }];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용.&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;XCUIElement *element = app.staticTexts[&quot;Name of your element&quot;];
[self waitForElementToAppear:element withTimeout:5];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;func waitForElementToAppear(element: XCUIElement, timeout: NSTimeInterval = 5,  file: String = #file, line: UInt = #line) {
        let existsPredicate = NSPredicate(format: &quot;exists == true&quot;)

        expectationForPredicate(existsPredicate,
                evaluatedWithObject: element, handler: nil)

        waitForExpectationsWithTimeout(timeout) { (error) -&amp;gt; Void in
            if (error != nil) {
                let message = &quot;Failed to find \(element) after \(timeout) seconds.&quot;
                self.recordFailureWithDescription(message, inFile: file, atLine: line, expected: true)
            }
        }
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용.&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let element = app.staticTexts[&quot;Name of your element&quot;]
self.waitForElementToAppear(element)
&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;let element = app.staticTexts[&quot;Name of your element&quot;]
self.waitForElementToAppear(element, timeout: 10)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://masilotti.com/xctest-helpers/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원천&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode 8.3 기준으로, 우리는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XCTWaiter&lt;/code&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;a href=&quot;http://masilotti.com/xctest-waiting/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://masilotti.com/xctest-waiting/&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;func waitForElementToAppear(_ element: XCUIElement) -&amp;gt; Bool {
    let predicate = NSPredicate(format: &quot;exists == true&quot;)
    let expectation = expectation(for: predicate, evaluatedWith: element, 
                                  handler: nil)

    let result = XCTWaiter().wait(for: [expectation], timeout: 5)
    return result == .completed
}
&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;wait&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능, 나에게 그것을 보여준 존 선델에게 공이 갑니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;extension XCTestCase {

  func wait(for duration: TimeInterval) {
    let waitExpectation = expectation(description: &quot;Waiting&quot;)

    let when = DispatchTime.now() + duration
    DispatchQueue.main.asyncAfter(deadline: when) {
      waitExpectation.fulfill()
    }

    // We use a buffer here to avoid flakiness with Timer on CI
    waitForExpectations(timeout: duration + 0.5)
  }
}
&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;func testOpenLink() {
  let delegate = UIApplication.shared.delegate as! AppDelegate
  let route = RouteMock()
  UIApplication.shared.open(linkUrl, options: [:], completionHandler: nil)

  wait(for: 1)

  XCTAssertNotNil(route.location)
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 스레드를 절전 모드로 전환하거나 시간 초과 시 오류를 발생시키지 않고 지연이 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let delayExpectation = XCTestExpectation()
delayExpectation.isInverted = true
wait(for: [delayExpectation], timeout: 5)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예상이 뒤집혀 있기 때문에 조용히 시간이 초과될 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/33855219&quot; papago-id=&quot;31-1&quot;&gt;@Ted의 답변&lt;/a&gt;을 바탕으로 다음 확장명을 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;extension XCTestCase {

    // Based on https://stackoverflow.com/a/33855219
    func waitFor&amp;lt;T&amp;gt;(object: T, timeout: TimeInterval = 5, file: String = #file, line: UInt = #line, expectationPredicate: @escaping (T) -&amp;gt; Bool) {
        let predicate = NSPredicate { obj, _ in
            expectationPredicate(obj as! T)
        }
        expectation(for: predicate, evaluatedWith: object, handler: nil)

        waitForExpectations(timeout: timeout) { error in
            if (error != nil) {
                let message = &quot;Failed to fulful expectation block for \(object) after \(timeout) seconds.&quot;
                let location = XCTSourceCodeLocation(filePath: file, lineNumber: line)
                let issue = XCTIssue(type: .assertionFailure, compactDescription: message, detailedDescription: nil, sourceCodeContext: .init(location: location), associatedError: nil, attachments: [])
                self.record(issue)
            }
        }
    }

}
&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;let element = app.staticTexts[&quot;Name of your element&quot;]
waitFor(object: element) { $0.exists }
&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;waitFor(object: element) { !$0.exists } // Wait for it to disappear
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode 테스트 대기&lt;/font&gt;&lt;/strong&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;sleep&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;wait&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let _ = XCTWaiter.wait(for: [XCTestExpectation(description: &quot;Hello World!&quot;)], timeout: 2.0)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;37&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;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실 방금 Xcode 7b4에서 UI 테스트가 이제&lt;/font&gt;&lt;/font&gt;&lt;code&gt;expectationForPredicate:evaluatedWithObject:handler:&lt;/code&gt; &lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;39&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;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 방법은 설정된 시간 동안 실행 루프를 회전하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대기 시간(추정)을 알고 있는 경우에만 유용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;Obj-C:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow: &amp;lt;&amp;lt;time to wait in seconds&amp;gt;&amp;gt;]]&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate(timeIntervalSinceNow: &amp;lt;&amp;lt;time to wait in seconds&amp;gt;&amp;gt;))&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트를 계속하기 위해 일부 조건을 테스트해야 하는 경우에는 이 방법이 그다지 유용하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조건부 검사를 실행하려면 다음을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;while&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;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 회사에서는 XCUIelement 표현식 기대치를 생성하여 다양한 방법으로 대기하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유지관리가 가능한지 확인하기 위해 다음과 같은 방법으로 작업을 수행합니다(기대되는 다양성이 많으므로 이를 위해 많은 메소드/특정 술어를 생성하고 싶지 않습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트 5&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기저법&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표현식은 동적 술어 값을 형성하는 데 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 만들 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XCTNSPredicateExpectation&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;XCTWaiter&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명시적으로 기다리는 것.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 결과가 다른 것이었다면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;completed&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택적인 메시지로 실패합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@discardableResult
func wait(
    until expression: @escaping (XCUIElement) -&amp;gt; Bool,
    timeout: TimeInterval = 15,
    message: @autoclosure () -&amp;gt; String = &quot;&quot;,
    file: StaticString = #file,
    line: UInt = #line
) -&amp;gt; Self {
    if expression(self) {
        return self
    }

    let predicate = NSPredicate { _, _ in
        expression(self)
    }

    let expectation = XCTNSPredicateExpectation(predicate: predicate, object: nil)

    let result = XCTWaiter().wait(for: [expectation], timeout: timeout)

    if result != .completed {
        XCTFail(
            message().isEmpty ? &quot;expectation not matched after waiting&quot; : message(),
            file: file,
            line: line
        )
    }

    return self
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.buttons[&quot;my_button&quot;].wait(until: { $0.exists })
app.buttons[&quot;my_button&quot;].wait(until: { $0.isHittable })
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;53&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;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 다음  및 keyPath가 keyPath인 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;match&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;식의 값입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@discardableResult
func wait&amp;lt;Value: Equatable&amp;gt;(
    until keyPath: KeyPath&amp;lt;XCUIElement, Value&amp;gt;,
    matches match: Value,
    timeout: TimeInterval = 15,
    message: @autoclosure () -&amp;gt; String = &quot;&quot;,
    file: StaticString = #file,
    line: UInt = #line
) -&amp;gt; Self {
    wait(
        until: { $0[keyPath: keyPath] == match },
        timeout: timeout,
        message: message,
        file: file,
        line: line
    )
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.buttons[&quot;my_button&quot;].wait(until: \.exists, matches: true)
app.buttons[&quot;my_button&quot;].wait(until: \.isHittable, matches: false)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 당신은 그 방법을 포장할 수 있습니다, 어디에서.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;match&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;true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 일반적인 사용 사례입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.buttons[&quot;my_button&quot;].wait(until: \.exists)
app.buttons[&quot;my_button&quot;].wait(until: \.isHittable)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그것에 대해 게시물을 썼고, 거기서도 전체 확장 파일을 얻습니다: https://sourcediving.com/&lt;a href=&quot;https://sourcediving.com/clean-waiting-in-xcuitest-43bab495230f&quot; rel=&quot;noreferrer&quot; papago-id=&quot;61-1&quot;&gt;clean-waiting-in-xcuitest-43bab495230f&lt;/a&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;다음 코드는 목표 C에서만 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- (void)wait:(NSUInteger)interval {

    XCTestExpectation *expectation = [self expectationWithDescription:@&quot;wait&quot;];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(interval * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [expectation fulfill];
    });
    [self waitForExpectationsWithTimeout:interval handler:nil];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래와 같이 이 기능으로 전화를 걸면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[self wait: 10];
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잠은 실을 막을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;스레드가 차단된 동안에는 실행 루프 처리가 발생하지 않습니다.&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;waitForExist를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let app = XCUIApplication()
app.launch()

if let label = app.staticTexts[&quot;Hello, world!&quot;] {
label.waitForExistence(timeout: 5)
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;   let app = XCUIApplication()
    app.launch()

     //Find the button in the UI 
    let SettingsButton =
        app.navigationBars[&quot;HomeView&quot;].buttons[&quot;Settings&quot;]
    XCTAssertTrue(settingButton.waitForExistence(timeout: 10))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; XCUIelement 에 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.exists&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리가 존재하는지 여부를 확인하는 데 사용할 수 있으므로 다음 구문이 경우에 따라 유용할 수 있습니다!&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let app = XCUIApplication()
app.launch()

let label = app.staticTexts[&quot;Hello, world!&quot;]
while !label.exists {
    sleep(1)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최종적으로 기대가 충족될 것으로 확신하는 경우 이를 실행해 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하는 것이 더  수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;waitForExpectationsWithTimeout(_,handler:_)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Joe Masilotti의 게시물에서 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/31182637/&lt;a href=&quot;https://stackoverflow.com/questions/31182637/delay-wait-in-a-test-case-of-xcode-ui-testing&quot; target=&quot;_blank&quot; papago-id=&quot;71-1&quot;&gt;delay-wait-in-a-test-case-of-xcode-ui-testing&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/633</guid>
      <comments>https://yoursource.tistory.com/633#entry633comment</comments>
      <pubDate>Sun, 7 May 2023 21:17:17 +0900</pubDate>
    </item>
    <item>
      <title>VB.NET: 데이터 그리드 보기 지우기</title>
      <link>https://yoursource.tistory.com/632</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;VB.NET: 데이터 그리드 보기 지우기&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;DataGridView1.DataSource=Nothing
&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;DataGridView1.DataSource=Nothing
DataGridView1.Refresh()
&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;DataGridView1.RefreshEdit()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아무 것도 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 시 DataGridView의 DataSource를 설정하는 방법을 작성했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 실행할 때마다 새로운 값으로 데이터를 복제하고 DGV의 이전 내용에 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내용을 지우고 값을 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 가능한가요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스에 DataGridView를 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DataSource&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;Nothing&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DataGridView가 데이터 소스에 바인딩되지 않은 경우 이 코드는 다음과 같은 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DataGridView.Rows.Clear()
&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;DataGridView.Rows.Clear()
&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;DataGridView.Columns.Clear()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;..모든 열과 행이 제거됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DGV 바인딩 해제를 사용하는 경우 다음에 사용할 때 열이 변경되면 행을 지우는 것이 적절하지 않을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;라이브러리 코드의 경우 열을 추가하기 전에 모든 열을 지웁니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;난 아마 이걸...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DataGridView1.Rows.Clear()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;행을 지우고 다시 바인딩합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 쉬운 길을 따라 가세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라고 가정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ta&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DataTable&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ta.clear()
DataGridView1.DataSource = ta
DataGridView1.DataSource = Nothing
&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;데이터 그리드 보기를 null 대신 빈 컬렉션에 바인딩할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 효과가 있나요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 결과를 검색할 때 데이터 그리드 보기에서 이전 레코드를 제거하려면 button_click event를 사용하여 다음 코드를 작성합니다.&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;me.데이터 그리드 보기1.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DataSource.clear()&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;데이터 소스를 null로 설정하면 열이 제거됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 제게 맞는 일입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;c#:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;((DataTable)myDataGrid.DataSource).Rows.Clear();
&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;VB:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Call CType(myDataGrid.DataSource, DataTable).Rows.Clear()
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 및 My DataGridView에도 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;myDataGridView.Columns.Clear()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잘 작동했지만,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;myDataGridView.Rows.Clear()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지 않았다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도한 사람들을 위한 참고 자료일 뿐입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.Rows&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;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;DataGridView&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 소스를 삭제합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 클어어요해봤을 클리어하려고 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;myDataset.clear()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법, 그리고 그것은 효과가 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드가 윈도우 형태로 작동하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Public Class Form1

    Private dataStuff As List(Of String)


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        DataGridView1.DataSource = Nothing

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        dataStuff = New List(Of String)

        dataStuff.Add(&quot;qwerty&quot;)
        dataStuff.Add(&quot;another&quot;)
        dataStuff.Add(&quot;...and another&quot;)

        DataGridView1.DataSource = dataStuff
    End Sub
End Class
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 그리드가 일부 데이터 테이블에 바인딩된 경우 데이터 세트에서 테이블을 제거해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리드 보기가 자동으로 삭제됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 방법은 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[YourDatasetName].Tables.Clear()
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리드뷰 콘텐츠 삭제에서도 동일한 문제가 발생했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 사용한 데이터 소스는 열이 없는 데이터 테이블이었고, 데이터 테이블에 열과 행을 프로그래밍 방식으로 추가했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 데이터 그리드 보기에 바인딩합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 관련된 와 같은 코드를 사용해 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gridView.Rows.Clear()&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;gridView.DataSource = Nothing&lt;/code&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;  dtStore.Rows.Clear()
  dtStore.Columns.Clear()
  gridView.DataSource = dtStore
&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;DataGridView에서 복제 없이 정상적으로 작동합니다.&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;create 버튼을 클릭합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내부에 다음 코드 데이터 그리드 뷰어를 삽입합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DataSource=없음&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;검색 버튼에서 다음 문장으로 코드를 시작합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 그리드 뷰어&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 원본 = DataSet.table&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Nb: 테이블 대신 테이블의 실제 이름(예: 데이터 그리드 뷰어)을 입력합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 원본 = DataSet.client&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;SQL 쿼리에서 데이터 그리드 보기로 정보를 제공할 때 데이터 그리드 보기를 다시 로드하기 전에 먼저 지울 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;dbDataSet을 새 DataTable로 정의한 위치에서 확인할 수 있습니다. dbDataSet은 공용 클래스 양식 내에서 양식의 시작 부분에 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Dim dbDataset AS New DataTable
&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;당신의 비밀번호 안에, Sub 일병, 위치.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dbDataSet.Clear()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 바인딩을 유지하고 일시적으로 데이터 그리드 보기를 지우려는 사용자 시나리오가 있을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 사용자가 지도에서 기능을 클릭하여 편집할 속성을 표시하도록 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;처음 클릭하거나 이미 클릭하여 편집했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 &quot;Select Facility&quot; 버튼을 클릭하면 이전 Facility의 데이터에 대한 DataGrid View(데이터 그리드 보기)를 지우려고 합니다(첫 번째 선택인 경우에는 오류를 발생시키지 않습니다).&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;    Try
        Me.Fh_maintTableAdapter.FillByHydrantNumber(Me.Fh2010DataSet.fh_maint, hydrantNum)
    Catch ex As System.Exception
        System.Windows.Forms.MessageBox.Show(ex.Message)
    End Try
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 소화전 번호를 기준으로 데이터 그리드 뷰를 채우고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드를 DataGridView를 지우려는 지점에 복사하고 데이터를 검색하지 않을 것으로 알고 있는 &quot;hydrantNum&quot; 값으로 대체합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리드가 제거될 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 사용자가 실제로 시설(이 경우 소화전)을 선택하면 DataGridView를 적절하게 채울 수 있는 바인딩이 마련됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DataGridView가 데이터 소스에 바인딩된 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DataGridView1.DataSource = Nothing
DataGridView1.DataBind()
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;Dim DS As New DataSet
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;DS.Clear()&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;DataGridView.Rows.Clear()&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;pre&gt;&lt;code&gt;Public Sub doQuery(sql As String)
   Try
        DS.Clear()  '&amp;lt;-- here
        '   - CONNECT -
        DBCon.Open()
        '   Cmd gets SQL Query
        Cmd = New OleDbCommand(sql, DBCon)
        DA = New OleDbDataAdapter(Cmd)
        DA.Fill(DS)
        '   - DISCONNECT -
        DBCon.Close()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 약에만.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GridView&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;gvArchive&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;DataSource&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 수행하면 삭제됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;gvArchive.DataSource = Nothing

gvArchive.DataBind()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 이것을 쓰세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DataGridView1.DataSource = &quot;&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;GridView1을 하나의 SQL 테이블 [사전] 또는 다른 [메니]에 프로그래밍 방식으로 바인딩하고 있었지만 RadioButtonList1에서 두 번째 테이블을 선택했을 때 오류(시스템)가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Web.HttpException:&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;GridView1.Columns.Clear()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블 열을 추가하기 전에 입력합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 전체 코드입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Dim connectionString As String = &quot;your-string-details&quot;
Dim connection As New SqlConnection(connectionString)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 첫 번째 서브가 나옵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Private Sub BindOrders()
    connection.Open()

    Dim sqlCommand As String = &quot;SELECT * FROM [dictionary]&quot; 
    Dim dataAdapter As New SqlDataAdapter(sqlCommand, connection)
    Dim dt As New DataTable() 
    dataAdapter.Fill(dt)

    GridView1.Columns.Clear() ' clear columns before adding new ones

    If GridView1.Columns.Count &amp;lt;= 0 Then
        Dim Field As New BoundField()
        Field.DataField = &quot;id&quot;
        Field.HeaderText = &quot;id&quot;
        GridView1.Columns.Add(Field)

        Field = New BoundField()
        Field.DataField = &quot;strArHundreds&quot;
        Field.HeaderText = &quot;strArHundreds&quot;
        GridView1.Columns.Add(Field)

        Field = New BoundField()
        Field.DataField = &quot;strArTens&quot;
        Field.HeaderText = &quot;strArTens&quot;
        GridView1.Columns.Add(Field)

        Field = New BoundField()
        Field.DataField = &quot;strArSingles&quot;
        Field.HeaderText = &quot;strArSingles&quot;
        GridView1.Columns.Add(Field)
    End If

    GridView1.DataSource = dt
    GridView1.DataBind()

    connection.Close()
End Sub
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 두 번째 서브가 나옵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Private Sub BindDocuments()
    connection.Open()

    Dim sqlCommand As String = &quot;SELECT * FROM [meny]&quot;
    Dim dataAdapter As New SqlDataAdapter(sqlCommand, connection)
    Dim dt As New DataTable()

    dataAdapter.Fill(dt)

    GridView1.Columns.Clear() ' clear columns before adding new ones

    If GridView1.Columns.Count &amp;lt;= 0 Then
        Dim Field As New BoundField
        Field = New BoundField
        Field.DataField = &quot;id&quot;
        Field.HeaderText = &quot;id&quot;
        GridView1.Columns.Add(Field)

        Field = New BoundField
        Field.DataField = &quot;nazev&quot;
        Field.HeaderText = &quot;nazev&quot;
        GridView1.Columns.Add(Field)
    End If

    GridView1.DataSource = dt
    GridView1.DataBind()

    connection.Close()
End Sub
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 라디오 버튼이 제공됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Protected Sub RadioButtonList1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles RadioButtonList1.SelectedIndexChanged
    Dim index As Integer
    index = RadioButtonList1.SelectedIndex
    Select Case index
        Case 0
            BindOrders()
            Exit Select
        Case 1
            BindDocuments()
            Exit Select
    End Select
End Sub
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 연결된 asx.file의 GridView1 및 RadioButtonList1에 대한 코드입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;asp:RadioButtonList ID=&quot;RadioButtonList1&quot;
    runat=&quot;server&quot;
    AutoPostBack=&quot;True&quot;
    OnSelectedIndexChanged=&quot;RadioButtonList1_SelectedIndexChanged&quot;&amp;gt;
    &amp;lt;asp:ListItem&amp;gt;Obraty&amp;lt;/asp:ListItem&amp;gt;
    &amp;lt;asp:ListItem&amp;gt;Dokumenty&amp;lt;/asp:ListItem&amp;gt;
&amp;lt;/asp:RadioButtonList&amp;gt;

&amp;lt;asp:GridView ID=&quot;GridView1&quot; runat=&quot;server&quot; AutoGenerateColumns=&quot;False&quot;&amp;gt;
&amp;lt;/asp:GridView&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제는 이 모든 것이 잘 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터를 저장하기 위해 데이터 집합 개체를 사용하는 것처럼 보이는 실수를 범했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드를 사용하여 데이터 집합에 데이터를 넣을 때마다 데이터 집합에 이미 있는 데이터에 데이터를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;myDataAdapter.Fill(myDataSet)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드로 데이터 집합의 테이블을 프로그램의 DataGridView 개체에 할당하면 데이터 집합과 데이터 집합 테이블에 이미 있는 데이터를 지우지 않았기 때문에 중복된 결과가 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;myDataGridView.DataSource = myDataSet.Tables(0)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 복제를 방지하려면 데이터 집합 개체에 대해 clear 메서드를 호출해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;myDataSet.clear()
&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;그런 다음 데이터 집합의 테이블을 DataGridView 개체에 할당합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드는 이렇습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;myDataSet.clear()
myDataAdapter.Fill(myDataSet)
myDataGridView.DataSource = myDataSet.Tables(0)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;' clear previous data
DataGridView2.DataSource = Nothing
DataGridView2.DataMember = Nothing
DataGridView2.Refresh()
Try
    connection.Open()
    adapter1 = New SqlDataAdapter(sql, connection)
    ' clear data already in the dataset
    ds1.Clear()
    adapter1.Fill(ds1)
    DataGridView2.DataSource = ds1.Tables(0)
    connection.Close()
Catch ex As Exception
    MsgBox(ex.ToString)
End Try
&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;clear datgridview 명령을 구현하려는 모든 곳에서 이 코드 사용&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;datagridview1.datasource= nothing
datagridview1.datasource= ds
dt.clear()               'Dt as new DATATABLE
ds.clear()              'Ds as new Dataset
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드는 데이터 그리드 보기를 지우고 데이터베이스에서 데이터를 채울 때 데이터 복제를 중지합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 방법으로 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DataGridView1.Enable = false
DataGridView1.DataSource = Nothing
DataGridView1.Enable = true
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리드 보기 데이터를 지우려면 데이터 집합 또는 데이터 테이블을 지워야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드를 사용합니다. 다시 제출하더라도 그리드 보기 데이터를 지웁니다. 새 OleDb 연결 Dimcmd 새 OleDb 명령 Dimda 새 OleDb 데이터 어댑터 Dimda 새 OleDb 데이터 판독기 Dimda 새 데이터 테이블(con)로 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;상태 &amp;lt;&amp;gt; 1) 그렇다면 con.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;열기() 종료 Ifdt.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;삭제() '데이터를 매번 삭제하고 데이터 cmd를 새로 작성합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;연결 = concmd.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;CommandText = &quot;사용자에서 * 선택&quot; da.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령 = cmdda를 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 그리드 보기1을 채웁니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 원본 = dt DataGridView1.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;표시 = 참&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    cmd.Dispose()
    con.Close()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업은 다음 두 줄로만 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DataGridView1.DataSource=Nothing
DataGridView1.DataBind()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DataGridView의 모든 데이터를 지우려는 경우에도 이 코드를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DataGridView1.DataSource.Clear()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 셀에 대해 이 작업을(를) 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Datagrid.Rows(RowIndex).Cells(ColIndex).Value = DBNull.Value
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DgRemolques는 WPF의 데이터 그리드 이름입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;dgRemolques.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ItemsSource = DataTabledRemolques도 정리해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지우기()&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2217175/&lt;a href=&quot;https://stackoverflow.com/questions/2217175/vb-net-clear-datagridview&quot; target=&quot;_blank&quot; papago-id=&quot;77-1&quot;&gt;vb-net-clear-datagridview&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/632</guid>
      <comments>https://yoursource.tistory.com/632#entry632comment</comments>
      <pubDate>Sun, 7 May 2023 21:15:14 +0900</pubDate>
    </item>
    <item>
      <title>단일 SELECT 문에 공통 테이블 식을 여러 개 사용하려면 어떻게 해야 합니까?</title>
      <link>https://yoursource.tistory.com/631</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단일 SELECT 문에 공통 테이블 식을 여러 개 사용하려면 어떻게 해야 합니까?&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;복잡한 select 문을 단순화하는 중이라 일반적인 표 표현을 사용하려고 합니다.&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;단일 ct를 선언하는 것은 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;WITH cte1 AS (
    SELECT * from cdr.Location
    )

select * from cte1 
&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;동일한 SELECT에서 둘 이상의 ct를 선언하고 사용할 수 있습니까?&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;이 SQL은 오류를 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;WITH cte1 as (
    SELECT * from cdr.Location
)

WITH cte2 as (
    SELECT * from cdr.Location
)

select * from cte1    
union     
select * from cte2
&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;Msg 156, Level 15, State 1, Line 7
Incorrect syntax near the keyword 'WITH'.
Msg 319, Level 15, State 1, Line 7
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.
&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;NB. 세미콜론을 넣으려고 시도했지만 이 오류가 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ';'.
Msg 102, Level 15, State 1, Line 9
Incorrect syntax near ';'.
&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;관련이 없을 수도 있지만 SQL 2008에 대한 내용입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 다음과 같은 것이어야 한다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;WITH 
    cte1 as (SELECT * from cdr.Location),
    cte2 as (SELECT * from cdr.Location)
select * from cte1 union select * from cte2
&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;WITH&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;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;WITH 
    cte1 as (SELECT * from cdr.Location),
    cte2 as (SELECT * from cdr.Location)
select * from cte1 union select * from cte2
&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;또한 cte2의 cte1에서 쿼리할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;WITH 
    cte1 as (SELECT * from cdr.Location),
    cte2 as (SELECT * from cte1 where val1 = val2)

select * from cte1 union select * from cte2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;val1,val2&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;이 블로그가 또한 도움이 되기를 바랍니다: http://iamfixed.blogspot.de/2017/11/&lt;a href=&quot;http://iamfixed.blogspot.de/2017/11/common-table-expression-in-sql-with.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;14-1&quot;&gt;common-table-expression-in-sql-with&lt;/a&gt;.html&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/584284/&lt;a href=&quot;https://stackoverflow.com/questions/584284/how-can-i-have-multiple-common-table-expressions-in-a-single-select-statement&quot; target=&quot;_blank&quot; papago-id=&quot;15-1&quot;&gt;how-can-i-have-multiple-common-table-expressions-in-a-single-select-statement&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <author>yoursource</author>
      <guid isPermaLink="true">https://yoursource.tistory.com/631</guid>
      <comments>https://yoursource.tistory.com/631#entry631comment</comments>
      <pubDate>Sun, 7 May 2023 21:14:32 +0900</pubDate>
    </item>
  </channel>
</rss>