<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>꿈꾸는 개발자</title>
    <link>https://mjune.tistory.com/</link>
    <description>Better today than yesterday</description>
    <language>ko</language>
    <pubDate>Mon, 15 Jun 2026 02:55:19 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>mjune.kim</managingEditor>
    <image>
      <title>꿈꾸는 개발자</title>
      <url>https://t1.daumcdn.net/cfile/tistory/996CA13F5C428E7714</url>
      <link>https://mjune.tistory.com</link>
    </image>
    <item>
      <title>[slack_bolt] app.event 또는 app.action에서 reply 하기</title>
      <link>https://mjune.tistory.com/389</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Reply 로 메세지를 생성하기 위해서는 아래와 같이 thread_ts 를 say로 전달해 주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;app.event&lt;/p&gt;
&lt;pre id=&quot;code_1713155282845&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@app.event(&quot;message&quot;)
def handle_message_events(body, event, say):
	say({
       &quot;channel&quot;: body[&quot;event&quot;][&quot;channel&quot;],
       &quot;text&quot;: &quot;This is a threaded reply!&quot;,
       &quot;thread_ts&quot;: body.get(&quot;thread_ts&quot;, body[&quot;event&quot;][&quot;ts&quot;]),  # Use thread_ts if available, otherwise use ts
  	})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;app.action&lt;/p&gt;
&lt;pre id=&quot;code_1713155212603&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@app.action(&quot;action_id&quot;)
def button_click(ack, body, say):
    # Acknowledge the action
    ack()
    say({
        &quot;channel&quot;: body['channel']['id'],
		&quot;text&quot;: &quot;This is a threaded reply!&quot;,
		&quot;thread_ts&quot;: body.get(&quot;thread_ts&quot;, body[&quot;message&quot;][&quot;ts&quot;]),  # Use thread_ts if available, otherwise use ts
  	})&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Programing/Python</category>
      <category>reply</category>
      <category>say</category>
      <category>slack_bot</category>
      <author>mjune.kim</author>
      <guid isPermaLink="true">https://mjune.tistory.com/389</guid>
      <comments>https://mjune.tistory.com/389#entry389comment</comments>
      <pubDate>Mon, 15 Apr 2024 13:29:13 +0900</pubDate>
    </item>
    <item>
      <title>[React Native] Issue - Progress bar 에서 Progress 가 채워지지 않는 문제</title>
      <link>https://mjune.tistory.com/388</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;react-native-progress 를 이용해 상태 바를 표시하게 되는 경우 아래 그림과 같이 바의 일부분만 채워지는 문제가 발생한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1712193527618&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Progress.Bar
    animated={false}
    color='pupple'
    unfilledColor='white'
    progress={progress}
    height={10}
    width={width*0.6}/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;202&quot; data-origin-height=&quot;20&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0iQdW/btsGlR9a0oM/zz2bxGY3JniJsFKGQD3bnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0iQdW/btsGlR9a0oM/zz2bxGY3JniJsFKGQD3bnK/img.png&quot; data-alt=&quot;문제 상황&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0iQdW/btsGlR9a0oM/zz2bxGY3JniJsFKGQD3bnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0iQdW%2FbtsGlR9a0oM%2Fzz2bxGY3JniJsFKGQD3bnK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;202&quot; height=&quot;20&quot; data-origin-width=&quot;202&quot; data-origin-height=&quot;20&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;문제 상황&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 아래와 같이 View Component 로 Progress.Bar Component 를 감싸주면서 간단하게 해결이 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1712193554781&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;View&amp;gt;
    &amp;lt;Progress.Bar
        animated={false}
        color='pupple'
        unfilledColor='white'
        progress={progress}
        height={10}
        width={width*0.6}/&amp;gt;
&amp;lt;/View&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;204&quot; data-origin-height=&quot;19&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/71M28/btsGlXIjzOn/tH7x0QP18FwcpFtXUGknpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/71M28/btsGlXIjzOn/tH7x0QP18FwcpFtXUGknpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/71M28/btsGlXIjzOn/tH7x0QP18FwcpFtXUGknpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F71M28%2FbtsGlXIjzOn%2FtH7x0QP18FwcpFtXUGknpk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;204&quot; height=&quot;19&quot; data-origin-width=&quot;204&quot; data-origin-height=&quot;19&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Programing/React</category>
      <category>react-native-progress</category>
      <author>mjune.kim</author>
      <guid isPermaLink="true">https://mjune.tistory.com/388</guid>
      <comments>https://mjune.tistory.com/388#entry388comment</comments>
      <pubDate>Thu, 4 Apr 2024 10:20:37 +0900</pubDate>
    </item>
    <item>
      <title>[JIRA] git commit 과 연동하기</title>
      <link>https://mjune.tistory.com/387</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Jira Ticket에 깃허브 또는 비트버킷의 커밋 을 연동하기 위해서는 커밋시 Jira 의 티켓 번호를 코멘트 처음에 기입하면 된다. 예를 들어 티켓 아이디가 JIRA-31 이라면 커밋시 &quot;JIRA-31 Fix the issue ...&quot; 라고 메세지를 입력하면 된다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;Commits&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Include the issue key in the commit message to link the commit to your Jira issue.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;For example: &lt;span&gt;git commit -m &quot;JRA-123 &amp;lt;commit message&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;This works by default in connected Bitbucket, GitLab, GitHub, GitHub Enterprise, and Fisheye tools&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;a href=&quot;https://support.atlassian.com/jira-software-cloud/docs/reference-issues-in-your-development-work/&quot;&gt;https://support.atlassian.com/jira-software-cloud/docs/reference-issues-in-your-development-work/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programing/Tips</category>
      <category>commit</category>
      <category>GIT</category>
      <category>id</category>
      <category>JIRA</category>
      <author>mjune.kim</author>
      <guid isPermaLink="true">https://mjune.tistory.com/387</guid>
      <comments>https://mjune.tistory.com/387#entry387comment</comments>
      <pubDate>Thu, 21 Mar 2024 07:18:22 +0900</pubDate>
    </item>
    <item>
      <title>[React] Debugging Tip</title>
      <link>https://mjune.tistory.com/386</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;애뮬레이터에서 어플리케이션 동작 및 기능을 검증하는 과정에서 자주 경고 문구나 에러 메세지를 마주하게 된다. 디버깅 기능을 통해 콜스택을 확인할 수 있고 문제가 되는 코드가 내가 작성한 라인이면 바로 수정이 가능하겠지만 때로는 콜스택이 리액트 라이브러리 내부에서 발생하는 경우에는 디버깅이 어려워 질수 있다. 다행히 리액트에서는 아래 화면과 같이 예외 경우가 발생할 경우 동작을 일시 정지하여 문제되는 코드를 바로 확인할 수 있다. 이는 'Pause on uncaught exceptions' 과 'Pause on caught exception'을 활성화 시킨 후 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1796&quot; data-origin-height=&quot;816&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q3L5C/btsFLTUfaiv/y2jdChylk1d4VHWhikkzt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q3L5C/btsFLTUfaiv/y2jdChylk1d4VHWhikkzt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q3L5C/btsFLTUfaiv/y2jdChylk1d4VHWhikkzt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq3L5C%2FbtsFLTUfaiv%2Fy2jdChylk1d4VHWhikkzt0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1796&quot; height=&quot;816&quot; data-origin-width=&quot;1796&quot; data-origin-height=&quot;816&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Programing/React</category>
      <category>Debuging</category>
      <category>exception</category>
      <category>React</category>
      <author>mjune.kim</author>
      <guid isPermaLink="true">https://mjune.tistory.com/386</guid>
      <comments>https://mjune.tistory.com/386#entry386comment</comments>
      <pubDate>Thu, 14 Mar 2024 10:00:24 +0900</pubDate>
    </item>
    <item>
      <title>[React] Combined Directory</title>
      <link>https://mjune.tistory.com/385</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;서로 다른 두개의 디렉토리 변수를 하나로 결합 한 경우&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;a = {&quot;1&quot;: &quot;a&quot;, &quot;2&quot;: &quot;b&quot;};&lt;br /&gt;b = {&quot;3&quot;: &quot;c&quot;, &quot;4&quot;:&quot;d&quot;};&lt;br /&gt;c = {...a, ...b} // c = {&quot;1&quot;: &quot;a&quot;, &quot;2&quot;: &quot;b&quot;,&quot;3&quot;: &quot;c&quot;, &quot;4&quot;:&quot;d&quot;}&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>Programing/React</category>
      <category>combine</category>
      <category>dictionary</category>
      <author>mjune.kim</author>
      <guid isPermaLink="true">https://mjune.tistory.com/385</guid>
      <comments>https://mjune.tistory.com/385#entry385comment</comments>
      <pubDate>Mon, 19 Feb 2024 11:44:34 +0900</pubDate>
    </item>
    <item>
      <title>[React Native] Enable/Disable debugging mode in android emulator</title>
      <link>https://mjune.tistory.com/384</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안드로이드 에뮬레이터에서 개발을 하다보면 특정 컴포넌트 동작이 느린 경우가 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 경우엔 react-native-modal 을 import 해 실행해보니 화면에 보여지기까지 대략 2~3초의 시간이 걸리는 문제가 발생하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Debugging Mode로 실행하는 경우 뷰 전환시 딜레이가 발생하는 경우가 있으니 아래와 같이 디버깅 모드를 해제후 다시 시간을 확인해 보길 권장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디버깅 모드를 해제하려면 윈도우: Ctrl+m, 맥: CMD+m 으로 설정변경이 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;286&quot; data-origin-height=&quot;421&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOQo92/btsENS9UrrI/JSpaPj7pmhBMSZr5huz25k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOQo92/btsENS9UrrI/JSpaPj7pmhBMSZr5huz25k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOQo92/btsENS9UrrI/JSpaPj7pmhBMSZr5huz25k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOQo92%2FbtsENS9UrrI%2FJSpaPj7pmhBMSZr5huz25k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;286&quot; height=&quot;421&quot; data-origin-width=&quot;286&quot; data-origin-height=&quot;421&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Programing/React</category>
      <category>Debugging</category>
      <category>delay</category>
      <category>disable</category>
      <category>ReactNative</category>
      <author>mjune.kim</author>
      <guid isPermaLink="true">https://mjune.tistory.com/384</guid>
      <comments>https://mjune.tistory.com/384#entry384comment</comments>
      <pubDate>Wed, 14 Feb 2024 12:33:04 +0900</pubDate>
    </item>
    <item>
      <title>[React Native] Lifecycle of Class Component</title>
      <link>https://mjune.tistory.com/383</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;getDerivedStateFromProps(props, state) : 상태 또는 파라미터 변경 후 기존에 생성되었던 컴포넌트 오브젝트의  render() 를 호출시 해당 변경된 값들을 반경시킬때 사용할 수 있다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;static getDerivedStateFromProps(props, state) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (state.key != props.route.params.key) {&lt;br /&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return new_state; // { key: new_value, ... }&lt;br /&gt;&amp;nbsp; &amp;nbsp; } else {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;span&gt;&lt;span&gt;}&lt;br /&gt;&lt;br /&gt;Prop object:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7Byl9/btsEGKRVpQJ/JXX56ZMvnuKOGkSuS1MJu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7Byl9/btsEGKRVpQJ/JXX56ZMvnuKOGkSuS1MJu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7Byl9/btsEGKRVpQJ/JXX56ZMvnuKOGkSuS1MJu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7Byl9%2FbtsEGKRVpQJ%2FJXX56ZMvnuKOGkSuS1MJu0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1018&quot; height=&quot;332&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span&gt;&lt;br /&gt;&lt;br /&gt;State: Class component 의 state object (e.g., this.state = {key: value})&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>Programing/React</category>
      <category>getDerivedStateFromProps</category>
      <author>mjune.kim</author>
      <guid isPermaLink="true">https://mjune.tistory.com/383</guid>
      <comments>https://mjune.tistory.com/383#entry383comment</comments>
      <pubDate>Tue, 13 Feb 2024 13:06:52 +0900</pubDate>
    </item>
    <item>
      <title>[troubleshooting] Icon was not shown when using react-native-vector-icons</title>
      <link>https://mjune.tistory.com/382</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;React native 에서 제공하는 아이콘을 사용하기 위해 react-native-vector-icons 패키지 설치후 관련 설정을 반!드!시! 추가로 해줘야만 한다. 그렇지 않고 패키지 만을 설치하고 아이콘을 호출하면 네모 모양의 이상한 아이콘만 계속 표시될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안드로이드 앱을 개발하는 경우 번들에서 앱이 참조할 수 있도록 추가로 설정을 해줘야만 한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;apply&amp;nbsp;from:&amp;nbsp;file(&quot;../../node_modules/react-native-vector-icons/fonts.gradle&quot;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/oblador/react-native-vector-icons&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/oblador/react-native-vector-icons&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1698737357824&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - oblador/react-native-vector-icons: Customizable Icons for React Native with support for image source and full styling.&quot; data-og-description=&quot;Customizable Icons for React Native with support for image source and full styling. - GitHub - oblador/react-native-vector-icons: Customizable Icons for React Native with support for image source a...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/oblador/react-native-vector-icons&quot; data-og-url=&quot;https://github.com/oblador/react-native-vector-icons&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cE5fdO/hyUnUKhev2/5shTfwwcPGSUYjPenVUiGk/img.png?width=1200&amp;amp;height=600&amp;amp;face=969_133_1059_232&quot;&gt;&lt;a href=&quot;https://github.com/oblador/react-native-vector-icons&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/oblador/react-native-vector-icons&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cE5fdO/hyUnUKhev2/5shTfwwcPGSUYjPenVUiGk/img.png?width=1200&amp;amp;height=600&amp;amp;face=969_133_1059_232');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - oblador/react-native-vector-icons: Customizable Icons for React Native with support for image source and full styling.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Customizable Icons for React Native with support for image source and full styling. - GitHub - oblador/react-native-vector-icons: Customizable Icons for React Native with support for image source a...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programing/React</category>
      <category>Android</category>
      <category>bundle</category>
      <category>error</category>
      <category>Icons</category>
      <category>react-native-vector-icons</category>
      <author>mjune.kim</author>
      <guid isPermaLink="true">https://mjune.tistory.com/382</guid>
      <comments>https://mjune.tistory.com/382#entry382comment</comments>
      <pubDate>Tue, 31 Oct 2023 16:33:30 +0900</pubDate>
    </item>
    <item>
      <title>OpenVPN Client App For MAC</title>
      <link>https://mjune.tistory.com/381</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;맥북에서 사용할 OpenVPN 클라이언트 앱을 찾고 있다면 TunnelBlick 을 추천한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 무료이고 단순한 UI 로 사용하기가 쉽다. 단점이라면 아무래도 필요한 기능만 있다보니 사용자 편의성 측면에서는 부족한 기능일 듯 싶다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xjmRw/btsshli9eI0/PnaFgTCPVHTB1PUMfcLzz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xjmRw/btsshli9eI0/PnaFgTCPVHTB1PUMfcLzz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xjmRw/btsshli9eI0/PnaFgTCPVHTB1PUMfcLzz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxjmRw%2Fbtsshli9eI0%2FPnaFgTCPVHTB1PUMfcLzz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;298&quot; height=&quot;258&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;258&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://tunnelblick.net/downloads.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://tunnelblick.net/downloads.html&lt;/a&gt;&lt;/p&gt;</description>
      <category>Programing/Tips</category>
      <category>openvpn</category>
      <category>tunnelblick</category>
      <author>mjune.kim</author>
      <guid isPermaLink="true">https://mjune.tistory.com/381</guid>
      <comments>https://mjune.tistory.com/381#entry381comment</comments>
      <pubDate>Tue, 29 Aug 2023 09:22:52 +0900</pubDate>
    </item>
    <item>
      <title>[React] 컴포넌트의 생명 주기</title>
      <link>https://mjune.tistory.com/380</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;리액트 컴포넌트의 생명주기(Life Cycle)는 컴포넌트가 생성되고, 업데이트되거나, 제거될 때 특정한 이벤트들을 호출하는 것을 의미한다. 리액트 컴포넌트는 다음과 같은 생명주기를 가지고 있다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;constructor():&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;컴포넌트가 처음 생성될 때 호출.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;getDerivedStateFromProps():&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;컴포넌트가 처음 생성되거나 props가 변경될 때 호출된다. 이 메서드에서 state를 업데이트할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;render():&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;컴포넌트가 렌더링될 때 호출된다. 이 메서드에서 컴포넌트의 HTML을 생성한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;componentDidMount():&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;컴포넌트가 DOM에 마운트된 후 호출된다. 이 메서드에서 컴포넌트가 DOM과 상호작용하기 위한 작업을 수행할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;componentDidUpdate():&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;컴포넌트가 업데이트된 후 호출된다. 이 메서드에서 컴포넌트의 상태가 변경된 후 수행할 작업을 구현할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;componentWillUnmount():&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;컴포넌트가 DOM에서 언마운트되기 전에 호출된. 이 메서드에서 컴포넌트가 DOM과 상호작용하는 작업을 중지할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 외에도 리액트 컴포넌트에는 다음과 같은 생명주기 메서드가 있습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;static getDerivedStateFromProps():&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;constructor() 메서드와 비슷하지만, static으로 선언해야 한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;shouldComponentUpdate():&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;컴포넌트가 업데이트되어야 하는지 여부를 결정하는 메서드이다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;getSnapshotBeforeUpdate():&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;render() 메서드가 호출되기 전에 DOM의 상태를 가져오는 메서드이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;리액트 컴포넌트의 생명주기 메서드는 컴포넌트의 특정 단계에서 특정 작업을 수행하기 위해 사용된다. 예를 들어, componentDidMount() 메서드는 컴포넌트가 DOM에 마운트된 후 통신을 시작하기 위해 사용될 수 있다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;리액트 컴포넌트의 생명주기 메서드는 선택적으로 구현할 수 있다. 하지만 특정 작업을 수행하기 위해 생명주기 메서드를 사용해야 하는 경우에는 반드시 구현해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RhRQW/btspsGvWdNs/CuP8llPktZ7FydfEg9k2i0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RhRQW/btspsGvWdNs/CuP8llPktZ7FydfEg9k2i0/img.png&quot; data-alt=&quot;lifecycle&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RhRQW/btspsGvWdNs/CuP8llPktZ7FydfEg9k2i0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRhRQW%2FbtspsGvWdNs%2FCuP8llPktZ7FydfEg9k2i0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;915&quot; height=&quot;386&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;386&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;lifecycle&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.w3schools.com/react/react_lifecycle.asp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.w3schools.com/react/react_lifecycle.asp&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1690773346396&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;React Lifecycle&quot; data-og-description=&quot;W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.&quot; data-og-host=&quot;www.w3schools.com&quot; data-og-source-url=&quot;https://www.w3schools.com/react/react_lifecycle.asp&quot; data-og-url=&quot;https://www.w3schools.com/react/react_lifecycle.asp&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bcqBdy/hyTvfat9rr/2JAmt2DdGqFngdCm7AKah0/img.png?width=436&amp;amp;height=228&amp;amp;face=0_0_436_228,https://scrap.kakaocdn.net/dn/bKNOK4/hyTvc5TPbq/L9gOH0oiTLWF7Cw9Skyat0/img.png?width=300&amp;amp;height=599&amp;amp;face=129_253_279_508,https://scrap.kakaocdn.net/dn/dJ9LRQ/hyTva1ks8d/bINk3kLW0m9AaACYZbvDL0/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300&quot;&gt;&lt;a href=&quot;https://www.w3schools.com/react/react_lifecycle.asp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.w3schools.com/react/react_lifecycle.asp&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bcqBdy/hyTvfat9rr/2JAmt2DdGqFngdCm7AKah0/img.png?width=436&amp;amp;height=228&amp;amp;face=0_0_436_228,https://scrap.kakaocdn.net/dn/bKNOK4/hyTvc5TPbq/L9gOH0oiTLWF7Cw9Skyat0/img.png?width=300&amp;amp;height=599&amp;amp;face=129_253_279_508,https://scrap.kakaocdn.net/dn/dJ9LRQ/hyTva1ks8d/bINk3kLW0m9AaACYZbvDL0/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;React Lifecycle&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.w3schools.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programing/React</category>
      <category>component</category>
      <category>LifeCycle</category>
      <category>React</category>
      <author>mjune.kim</author>
      <guid isPermaLink="true">https://mjune.tistory.com/380</guid>
      <comments>https://mjune.tistory.com/380#entry380comment</comments>
      <pubDate>Mon, 31 Jul 2023 12:21:04 +0900</pubDate>
    </item>
  </channel>
</rss>